视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据结构源代码
2025-10-02 19:15:19 责编:小OO
文档
附录(源程序以及调试结果分析中的界面)

#include”stdafx.h”

#include

#include

#include

#define N 40

#define PR printf(“\\n\\r%s  %s  %s   %s  %s  %s  %s   %s   %s  %s “,

stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].ave)

struct student

{char num[11];

 char name[20];

 int score[8];

 float ave;

}stu[N];

typedef struct node {unsigned long int key;

                     struct node * link;}HNode;

typedef struct{int key;  

               float data; }RecNode;

/*保存函数*/

save(int n)                      

{FILE *fp;

 int i;

 if((fp=fopen("sc.txt","wb"))==NULL)   

  {printf("\\n不能打开文件\\n");

   getch();return NULL;}

 for(i=0;i   if(stu[i].ave!=0)            

if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

       printf("文件输入错误\\n");

 fclose(fp);}

/*加载记录或可以计算记录个数的函数*/

load()                       

{FILE *fp;

 int i;

 if((fp=fopen("sc.txt","rb"))==NULL)    

  {printf("\\n不能打开文件\\n");

   getch();return NULL;}

 for(i=0;!feof(fp);i++)

  fread(&stu[i],sizeof(struct student),1,fp);

 fclose(fp);

 return(i-1);}

/*一个任务结束时的选择浏览还是返回的函数*/

void printf_back()             

 printf("\\n\\n\^-^★成功★ ^-^\\n\\n");

 printf("请选择:\\n\\n\1).现在浏览全部\2).返回:  [ ]\\b\\b");

 scanf("%d",&w);

 if(w==1) browse();

 else teacher();}

/*显示数据结构项目函数*/

void printf_face()           

{printf("\\n\学号 姓名\英语 数学 C语言 管理学 信检 体育 近代史 线数 平均分\\\n");}

average(int i)                    

{int j,sum;

 for(sum=0,j=0;j<8;j++)

   sum+=stu[i].score[j];

 stu[i].ave=sum/8.0;}

/*学号输入函数*/

no_input(int i,int n)                 

{int j,k,w1;

  do

  {w1=0;

   printf("学号:");

   scanf("%s",stu[i].num);

   for(j=0;stu[i].num[j]!='\\0';j++)               if(stu[i].num[j]<'0'||stu[i].num[j]>'9')    

       {puts("Input error! Only be made up of (0-9).Please reinput!\\n");

        w1=1;break;

       }

   if(w1!=1)

for(k=0;k       {puts("该记录已存在. 请重新输入!\\n");

        w1=1;break;}

  }

  while(w1==1);}

/*对分数输入*/

score_input(int i)

{int j;printf(" 1.英语  2.数学  3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数\\n"); 

 for(j=0;j<8;j++)

  {printf("score %d:",j+1);

   scanf("%d",&stu[i].score[j]);}}

/*输入一个记录函数*/

input(int i)                           

{ no_input(i,i);                     

 printf("姓名:");

 scanf("%s",stu[i].name);

 score_input(i);          

average(i); }

/*显示一个记录的函数*/

printf_one(int i)                              

{int j;

 printf("%11s  %-10s",stu[i].num,stu[i].name);

 for(j=0;j<8;j++)

   printf("%-6d",stu[i].score[j]);

 printf("%-7.2f\\n",stu[i].ave);

}

void puts___()     {puts("\\n--------------------------------------------------------------------");

}

/*修改记录函数*/

modify_data(int i,int n)          

{int c,w1;

  do                                

 {puts("\\nmodify by =>\\n\\n 1).学号  2.姓名  3).数据结构  4).数学\\n  5).数据库 6).数学建模 7).信息管理 8).体育 9).毛概\\n 10).线性代数  11).all score  12).all data  13).cancel and back");

    printf("请选择: [ ]\\b\\b");

    scanf("%d",&c);

    if(c>13||c<1)

            {puts("\\n选择错误! 重新选择!");   

             getchar();    }}

   while(c>13||c<1);

  do

   {switch(c)                     

    {case 1:no_input(i,n);break;    

     case 2:printf("姓名:");scanf("%s",stu[i].name);break;

     case 3:printf("英语:");scanf("%d",&stu[i].score[0]);break;

     case 4:printf("数学:");scanf("%d",&stu[i].score[1]);break;

     case 5:printf("C语言:");scanf("%d",&stu[i].score[2]);break;

     case 6:printf("管理学:");scanf("%d",&stu[i].score[3]);break;

     case 7:printf(":信检");scanf("%d",&stu[i].score[4]);break;

     case 8:printf("体育:");scanf("%d",&stu[i].score[5]);break;

     case 9:printf("近代史:");scanf("%d",&stu[i].score[6]);break;

     case 10:printf("线性代数:");scanf("%d",&stu[i].score[7]);break;

     case 11:score_input(i);break;

     case 12:input(i);break;   

     case 13:teacher();   }

    if(c>2&&c<10)

      average(i);                  

    puts("\\nNow:\\n");

printf_face();                         

printf_one(i);                 

    printf("\\n是否确定?\\n\\n\1).确定 2).重新修改   3).不保存返回   [ ]\\b\\b");  

    scanf("%d",&w1);   }

   while(w1==2);

  return(w1); }

/****************输入模块****************/

enter()                           

{int i,n;

 printf("输入学生总数(0-%d)?:",N);

 scanf("%d",&n);                  

printf("\\n现在输入数据\\n\\n");

 for(i=0;i   {printf("\\nInput %dth student record.\\n",i+1);

input(i); }

 if(i!=0) save(n);                            

printf_back();}

/****************追加模块****************/

add()                            

 {int i,n,m,k;

 FILE *fp;

 n=load();

 printf("增加的学生总数(0-%d)?:",N-n);

 scanf("%d",&m);              

k=m+n;

 for(i=n;i   {printf("\\nInput %dth student record.\\n",i-n+1);

input(i); }

 if((fp=fopen("sc.txt","ab"))==NULL)  

  {printf("不能打开文件\\n");

   return;}

 for(i=n;i   if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

     printf("文件输入错误\\n");

 fclose(fp);

 printf_back();}

 /****************修改模块****************/

modify()                        

{struct student s;

 FILE *fp;

 int i,n,k,w0=1,w1,w2=0;

 n=load();

 do

 {system("cls");

  k=-1;

   puts___();            

  printf_face();                

  for(i=0;i{if((i!=0)&&(i%10==0))     

       {printf("\\n\\nRemember NO.which needed modify. pass any key to contiune  . . .");

        getch();

        puts("\\n\\n");}

     printf_one(i); }

  puts___();

  do{printf("\\n\\n输入修改学号!    NO.:");

scanf("%s",s.num);                

for(i=0;i     if(strcmp(s.num,stu[i].num)==0)

       {k=i;                      

        s=stu[i]; }

    if(k==-1) printf("\\n\\n不存在! 重新输入");}

   while(k==-1);           

  printf_face();              

  printf_one(k);                  

  w1=modify_data(k,n);          

  if(w1==1)       

    {printf("\\n ^-^ ★成功★ ^-^.\\n\\n是否修改其他?\\n\\n\1).是  2).保存返回\[ ]\\b\\b");

     scanf("%d",&w0);

     w2=1; }

  else

    {w0=0;

     if(w2==1)

       stu[k]=s;}      

  if(w0!=1&&w2==1)    

        save(n); }

  while(w0==1);

 teacher();}

/****************删除模块****************/

del()                             

{struct student s;

 FILE *fp;

 int i,j,n,k,c,w0=1;

 n=load();

 do

 {system("cls");

  k=-1;

 /*给用户看全部记录以便确认要删除的记录*/

  puts___();

  printf_face();                

  for(i=0;i    if(stu[i].ave!=0)

     {if((i!=0)&&(i%10==0))    

       {printf("\\n\\nRemember NO. which needed del. pass any key to contiune  . . .");

        getch();

        puts("\\n\\n");}

      printf_one(i); }

  puts___();

  do

   {printf("\\n\\n输入删除学号!    NO.:");

scanf("%s",s.num);                

for(i=0;i     if(strcmp(s.num,stu[i].num)==0)

       {k=i;                      

        s=stu[i];}

    if(k==-1) printf("\\n\\n不存在! 重新输入");   }

   while(k==-1);

  puts("\\n");

  printf_face();                

  printf_one(k);                   

  printf("\\n是否确定?\\n\1).是   2).否且删除其他   3).保存全部返回  [ ]\\b\\b");

  scanf("%d",&c);

  if(c==1)

{stu[k].ave=0;        

     printf("\\n\\n ^-^ ★成功★ ^-^.\\n\\n是否重输?\\n\1).是  2).返回菜单\[ ]\\b\\b");   

     scanf("%d",&w0);

    }

  if(c==3) w0=0;           

  if(w0!=1&&c!=3)           

     save(n);}

  while(w0==1);

 teacher(); }

/****************浏览(全部)模块****************/

browse()                          

{int i,j,n;

 n=load();         

system("cls");

 puts___();

 printf_face();                  

for(i=0;i   {if((i!=0)&&(i%10==0))               

     {printf("\\n\\nPass any key to contiune  . . .");

      getch();

      puts("\\n\\n");}

    printf_one(i);}

 puts___();

 printf("\There are  %d record.\\n",n);

 printf("\\nPass any key to back  . . .");

 getch();                          

 teacher();}

 /****************查找模块****************/

int h(char k)

{return(k%5);}

int linkinsert(HNode *t[],char k)

{int i;

HNode *p;

i=h(k);

if(t[i]==NULL)

{p=(HNode*)malloc(sizeof(HNode));

p->key=k;p->link=NULL;

t[i]=p;printf("\\n inserted %lu\\n ",k);

return(1);}

else

{p=t[i];

while(p!=NULL)

if(p->key==k)

{printf("\\n retrieval %lu\\n ",k);return(0);}

else if(p->link!=NULL) p=p->link;

else{p->link=(HNode*)malloc(sizeof(HNode));

p=p->link;p->key=k;p->link=NULL;

printf("\\n inserted %lu\\n ",k);return(1);

getch();}}}

HNode *linksearch(HNode *t[],char k)

{HNode *p;

int i;

i=h(k);

if(t[i]==NULL)return(NULL);

p=t[i];

while(p!=NULL)

if(p->key==k)

{printf("%lu\\n",p->key);

return(p);}

else p=p->link;

return(NULL);}

search()                          

{int i,n,k,w1=1,w2,w3,w4;

 struct student s;

 n=load();

 do

  {do

    {k=-1;

     printf("\\n\\n输入查找学号!    NO.:");

     scanf("%s",s.num);                

     printf_face();                 

     for(i=0;i if(strcmp(s.num,stu[i].num)==0)

         {k=i;                     

          printf_one(k);break;}

     if(k==-1)

       {printf("\\n\\n不存在! 请重新输入");

        printf("\\n\\n是否确定?\\n\1).是   2).否且返回  [ ]\\b\\b");

        scanf("%d",&w1);}}

    while(k==-1&&w1==1);              

   w4=0;w3=0;

   if(k!=-1)                           

       {printf("\\n\\n请选择:\\n\1).查找另一个数据   2).修改   3).删除   4).返回目录   [ ]\\b\\b");

        scanf("%d",&w2);

        switch(w2)

          {case 2:w3=modify_data(k,n);break; 

           case 3:{printf("\\n是否确定?\\n\1).是   2).否且返回   [ ]\\b\\b");

                   scanf("%d",&w4);

                   if(w4==1)

                     stu[k].ave=0;     

                   break;

                  }

          }

        if(w3==1||w4==1)

           {save(n);

            printf("\\n\\n ^-^ ★成功★ ^-^.");

            printf("\\n\\n请选择:\\n\1).查找另一个数据   2).返回   [ ]\\b\\b");

            scanf("%d",&w2);}

       }

   }

   while(w2==1);

 teacher();

}

/****************插入模块****************/

insert()                          

{int i,j,n,c;

 struct student s;

 n=load();

 puts("\\n输入一个数据.\\n");

 do

  {input(n);       

   printf_face();

   printf_one(n);

   printf("\\n\\n是否确定?\\n\\n\1).是\2).取消重输\3).不保存返回  [ ]\\b\\b");

   scanf("%d",&c);

   if(c==1)

     {for(j=0;j        for(i=n;i>j;i--)

          if(stu[i].ave>stu[i-1].ave)

            {s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;}

      save(n+1);

      printf_back();

     }

   else if(c!=2) teacher();

  }

  while(c==2);

}

/****************排序模块(按平均成绩)****************/

void sift(RecNode r[],int t,int w)    

{int i,j;

RecNode x;

i=t;

x=r[i];

j=2*i+1;

while(j<=w)

{if((jr[j+1].key))

j++;

if(x.key>r[j].key)

{r[i]=r[j];i=j;j=2*j+1;}

else break;}

r[i]=x;}

void heapsort(RecNode r[],int n)   

{int i;

RecNode x;

for(i=n/2-1;i>=0;i--)

sift(r,i,n-1);

for(i=n-1;i>0;i--)

{x=r[0];r[0]=r[i];

r[i]=x;

sift(r,0,i-1);}

}

/****************排序模块(按平均成绩)****************/

order()                          

{int i,j,k,n;

 struct student s;

 n=load();

 for(i=0;i   {k=i;

    for(j=i+1;j      if(stu[j].ave    s=stu[i];stu[i]=stu[k];stu[k]=s;

   }

 save(n);

 puts("\\n\\n");

 printf_back();}

/*****************统计模块*******************/

void fenduantongji()

{int k,u,n,i,j,w1=1,w2;

int a,b,c,d,e;

a=0;b=0;c=0;d=0;e=0;

printf(" 1.英语  2.数学  3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数 9.平均分\\n"); 

printf("请输入要统计的科目:");

scanf("%d",&u);

if(u<=8)

{n=u;

 for(i=0;i{k=stu[i].score[n-1];

{if(k>=90)

a=a+1;

else if(k<90&&k>=80)

b=b+1;

else if(k<80&&k>=70)

c=c+1;

else if(k<70&&k>=60)

d=d+1;

else if(k<60)

e=e+1;

}}}

else {n=u;

 for(i=0;i{k=stu[i].ave;

{if(k>=90)

a=a+1;

else if(k<90&&k>=80)

b=b+1;

else if(k<80&&k>=70)

c=c+1;

else if(k<70&&k>=60)

d=d+1;

else if(k<60)

e=e+1;}}}

printf("学生成绩在 90~100 间有:\\n  %d\\n",a);

printf("学生成绩在 80~  间有 :\\n  %d\\n",b);

printf("学生成绩在 70~79  间有  :\\n  %d\\n",c);

printf("学生成绩在 60~69  间有  :\\n  %d\\n",d);

printf("低于60的有:\\n  %d\\n",e);

 printf("\\n是否继续?\\n\\n\1).是 2).否     [ ]\\b\\b"); 

 scanf("%d",&w1);

if(w1==1)  fenduantongji(w1); 

else

teacher();}

/****************教师界面****************/

teacher()                            

{int n,w1;

 do

  {system("cls");                     puts("\\*********************MENU*********************\\n\\n");

   puts("\\\\1.输入新数据");

   puts("\\\\2.添加数据");

   puts("\\\\3.修改数据");

   puts("\\\\4.删除数据");

   puts("\\\\5.浏览全部");

   puts("\\\\6.学号查询");

   puts("\\\\7.插入数据");

   puts("\\\\8.按平均分排序");

   puts("\\\\9.分段统计");

   puts("\\\\10.退出");

   puts("\\\\11.返回主界面");

   puts("\\n\\n\\**********************************************\\n");

   printf("请选择序号:(1-11): [ ]\\b\\b");

   scanf("%d",&n);

   if(n<1||n>11)                                      {w1=1;getchar();}

   else  w1=0; }

  while(w1==1); 

 /*选择功能*/

 switch(n)

  {case 1:enter();break;      /*输入模块*/

   case 2:add();break;        /*追加模块*/

   case 3:modify();break;     /*修改模块*/

   case 4:del();break;        /*删除模块*/

   case 5:browse();break;     /*浏览模块*/

   case 6:search();break;     /*查找模块*/

   case 7:insert();break;     /*插入模块*/

   case 8:order();break;      /*排序模块*/

   case 9:fenduantongji();break;/*统计模块*/  

   case 10:exit(0);            /*退出*/

   case 11:menu();            /*返回主界面*/

   getch();}

}

 /****************密码函数****************/

distin()                            

{int f;

char mima[]={"gdut09"};

char mi[6];

printf("输入密码:");

scanf("%s",mi);

   if(strcmp(mima,mi)==0)

   {teacher();}

   else 

   {printf("密码错误!\\n");

   printf("\\n\\n请选择:\\n\1).目录   2).退出   [ ]\\b\\b");

   scanf("%d",&f);

   switch(f)

   {case 1:

   menu();

   break;

   case 2:

   exit(0);

   break;}

   }

}

/****************学生界面****************/

st()                                 

{int i,n,k,w1=1,w2,w3,w4;

 struct student s;

 n=load();

 do

  {system("cls");

     do

    {k=-1;

     printf("\\n\\n请输入学号   NO.:");

     scanf("%s",s.num);

     printf_face();

     for(i=0;i       if(strcmp(s.num,stu[i].num)==0)

         {k=i;

          printf_one(k);break;

     if(k==-1)

       {printf("\\n\\n不存在! 重输入");

        printf("\\n\\n是否重新输入?\\n\1).是 [ ]\\b\\b");

        scanf("%d",&w1); }

    }

    while(k==-1&&w1==1);

   w4=0;w3=0;

   if(k!=-1)

       {printf("\\n\\n请选择:\\n\1).返回目录   [ ]\\b\\b");

        scanf("%d",&w2);

        switch(w2)

          {case 1:menu();break;

           case 3:{printf("\\n是否确定?\\n\1).否且返回   [ ]\\b\\b");

                   scanf("%d",&w4);

                   if(w4==1)

                     stu[k].ave=0;

                   break;}

          }

        if(w3==1||w4==1)

           {save(n); 

            printf("\\n\\n ^-^ ★成功★ ^-^.");

            printf("\\n\\n请选择:\\n\1).返回   [ ]\\b\\b");

            scanf("%d",&w2);}

       }

   }

   while(w2==1);

 menu();}

/****************主界面****************/

menu()                          

int c;

 {system("cls");                  

  printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n     ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆    ");

printf("\\n      ●      ●  ■■■■■  ▲        ▲        ■■■■■     ");

printf("\\n      〓      〓  ■          〓        〓        ■      ■");

printf("\\n      ■      ■  ■          ■        ■        ■      ■     ");

printf("\\n      ■■■■■  ■■■■    ■        ■        ■      ■     ");

printf("\\n      ■      ■  ■          ■        ■        ■      ■     ");

printf("\\n      ■      ■  ■          ■        ■        ■      ■     ");

printf("\\n      ■      ■  ■■■■■  ■■■■  ■■■■  ■■■■■     ");

printf("\\n     ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆    ");

getch();

system("cls");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n");

printf("\\n\\\        欢迎使用学生成绩管理系统\\n\\n");

   puts("\\★★★★★★★★★★★目录★★★★★★★★★★★\\n\\n");

   printf("\\                 1.教师登陆\\n");

   printf("\\                 2.学生登录\\n");

   printf("\\                 3.退出");

   puts("\\n\\n\\★★★★★★★★★★★★★★★★★★★★★★★★\\n");

 scanf("%d",&c);

 switch(c)

 { case 1:

 distin();

 break;

 case 2:

 st();

 break;

 case 3:

 exit(0);

 break;}

 }

}

/*****************主函数****************/

main()

{menu();

 getch();

}

运行该程序界面:

3.教师界面下载本文

显示全文
专题