学生成绩信息管理系统C语言呕心沥血整理版.docx
《学生成绩信息管理系统C语言呕心沥血整理版.docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统C语言呕心沥血整理版.docx(41页珍藏版)》请在冰豆网上搜索。
学生成绩信息管理系统C语言呕心沥血整理版
1.题目
《学生成绩管理系统》的设计与实现
2。
功能
(1)每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
(2)输入功能:
可以一次完成无数条记录的输入.
(3)显示功能:
完成全部学生记录的显示。
(4)查找功能:
完成按姓名查找学生记录,并显示.
(5)排序功能:
按学生平均成绩进行排序。
(6)插入功能:
按平均成绩高低插入一条学生记录。
(7)保存功能:
将学生记录保存在任何自定义的文件中,如保存在:
c:
\score.
(8)读取功能:
将保存在文件中的学生记录读取出来.
(9)有一个清晰美观界面来调用各个功能
3。
要求
(1)整个系统均用C语言实现;
(2)利用指针、链表来实现学生成绩的数据结构设计;
(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;
(4)系统的各个功能模块都用函数的形式来实现;
(5)可以将学生成绩信息保存在文件中。
(6)可以将学生信息从文件中读取出来。
4。
源程序
#includeh〉#include〈stdio。h〉#includeh〉#defineLENsizeof(structscorenode)#defineDEBUG#include〈string.h>structscorenode{intnumber;/*学号*/charname[10];/*姓名*/floatyuwen;/*语文成绩*/floatyingyu;/*英语成绩*/floatshuxue;/*数学成绩*/structscorenode*next;};typedefstructscorenodescore;intn,k;/*n,k为全局变量,本程序中的函数均可以使用它*//*==============================================================================================*/score*creat2311(void)/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/{score*head;score*p1,*p2,*p3,*max;inti,j;floatfen;chart[10];n=0;p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/printf(”请输入学生资料,输0退出!\n");repeat1:printf("请输入学生学号(学号应大于0):”);/*输入学号,学号应大于0*/scanf("%d",&p1—〉number);while(p1->number〈0){getchar();printf(”输入错误,请重新输入学生学号:”);scanf(”%d",&p1->number);}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1-〉number==0)gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n〉0){for(i=0;i〈n;i++){if(p1—>number!=p3-〉number)p3=p3—〉next;else{printf("学号重复,请重输!\n”);gotorepeat1;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf(”请输入学生姓名:");scanf(”%s”,&p1—〉name);/*输入学生姓名*/printf("请输入语文成绩(0~100):");/*输入语文成绩,成绩应在0-100*/scanf(”%f”,&p1->yuwen);while(p1-〉yuwen〈0||p1—〉yuwen〉100){getchar();printf(”输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/scanf(”%f”,&p1—〉yuwen);}printf(”请输入英语成绩(0~100):”);/*输入英语成绩,成绩应在0—100*/scanf(”%f”,&p1—〉yingyu);while(p1—〉yingyu〈0||p1—〉yingyu〉100){getchar();printf("输入错误,请重新输入英语成绩”);/*输入错误,重新输入英语成绩直到正确为止*/scanf("%f",&p1—〉yingyu);}printf(”请输入数学成绩(0~100):”);/*输入数学成绩,成绩应在0-100*/scanf("%f”,&p1-〉shuxue);while(p1—〉shuxue<0||p1—〉shuxue〉100){getchar();printf("输入错误,请重新输入数学成绩”);scanf(”%f”,&p1—>shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/head=NULL;while(p1-〉number!=0){n=n+1;if(n==1)head=p1;elsep2-〉next=p1;p2=p1;p1=(score*)malloc(LEN);printf(”请输入学生资料,输0退出!\n”);repeat2:printf(”请输入学生学号(学号应大于0):”);scanf("%d”,&p1—>number);/*输入学号,学号应大于0*/while(p1->number〈0){getchar();printf("输入错误,请重新输入学生学号:”);scanf("%d”,&p1—>number);}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1—〉number==0)gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n>0){for(i=0;i〈n;i++){if(p1—〉number!=p3—〉number)p3=p3—〉next;else{printf(”学号重复,请重输!\n”);gotorepeat2;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf(”请输入学生姓名:”);scanf("%s",&p1—>name);/*输入学生姓名*/printf("请输入语文成绩(0~100):”);scanf(”%f",&p1—〉yuwen);/*输入语文成绩,成绩应在0-100*/while(p1—>yuwen〈0||p1->yuwen>100){getchar();printf(”输入错误,请重新输入语文成绩”);scanf("%f",&p1—〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/printf("请输入英语成绩(0~100):”);scanf(”%f”,&p1-〉yingyu);/*输入英语成绩,成绩应在0-100*/while(p1->yingyu<0||p1—〉yingyu〉100){getchar();printf("输入错误,请重新输入英语成绩”);scanf(”%f”,&p1—>yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/printf("请输入数学成绩(0~100):");scanf("%f”,&p1-〉shuxue);/*输入数学成绩,成绩应在0—100*/while(p1—〉shuxue<0||p1->shuxue〉100){getchar();printf("输入错误,请重新输入数学成绩”);scanf(”%f",&p1—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/}end:p1=head;p3=p1;for(i=1;i{for(j=i+1;j〈=n;j++){max=p1;p1=p1—>next;if(max—〉number〉p1—>number){k=max—〉number;max->number=p1—〉number;p1—>number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max—〉name);strcpy(max->name,p1—>name);strcpy(p1—>name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max—>yuwen;max->yuwen=p1—>yuwen;p1—>yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max-〉yingyu;max->yingyu=p1—〉yingyu;p1-〉yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max—〉shuxue;max-〉shuxue=p1—〉shuxue;p1->shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}p2—>next=NULL;/*链表结尾*/printf("输入的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*load2311(score*head)/*函数load2311,功能:从文件读入学生记录*/{score*p1,*p2;intm=0;charfilepn[10];FILE*fp;printf(”请输入文件路径及文件名:”);scanf("%s",filepn);/*输入文件路径及名称*/if((fp=fopen(filepn,"r+"))==NULL){printf("不能打开文件!\n”);return0;}m=m+1;if(m==1){p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,”%d%s%f%f%f”,&p1->number,p1—〉name,&p1—>yuwen,&p1—〉yingyu,&p1->shuxue);printf(”|%d\t|%s\t|%。1f\t|%.1f\t|%。1f\t|\n”,p1-〉number,p1—>name,p1—〉yuwen,p1—>yingyu,p1—〉shuxue);/*文件读入与显示*/head=NULL;do{n=n+1;if(n==1)head=p1;elsep2—>next=p1;p2=p1;p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f\n”,&p1—〉number,p1—〉name,&p1-〉yuwen,&p1—>yingyu,&p1-〉shuxue);printf(”|%d\t|%s\t|%.1f\t|%。1f\t|%。1f\t|\n”,p1—>number,p1—〉name,p1—〉yuwen,p1—〉yingyu,p1->shuxue);/*文件读入与显示*/}while(!feof(fp));p2—〉next=p1;p1—〉next=NULL;n=n+1;}printf("—--———-———-——-—————-———————————-———-—————\n");/*表格下线*/fclose(fp);/*结束读入,关闭文件*/return(head);}/*==============================================================================================*//*==============================================================================================*/score*add2311(score*head,score*stu)/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/{score*p0,*p1,*p2,*p3,*max;inti,j;floatfen;chart[10];p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/printf(”\n输入要增加的学生的资料!”);repeat4:printf(”请输入学生学号(学号应大于0):”);scanf(”%d”,&stu—〉number);/*输入学号,学号应大于0*/while(stu->number〈0){getchar();printf(”输入错误,请重新输入学生学号:");scanf("%d”,&stu—〉number);}/*输入错误,重新输入学号*//******************************************************/if(stu—〉number==0)gotoend2;/*当输入的学号为0时,转到末尾,结束追加*/else{p3=head;if(n>0){for(i=0;i〈n;i++){if(stu—>number!=p3->number)p3=p3—〉next;else{printf(”学号重复,请重输!\n");gotorepeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}/******************************************************/printf(”输入学生姓名:”);scanf("%s",stu-〉name);/*输入学生姓名*/printf("请输入语文成绩(0~100):”);scanf("%f”,&stu—〉yuwen);/*输入语文成绩,成绩应在0-100*/while(stu—>yuwen〈0||stu—>yuwen>100){getchar();printf(”输入错误,请重新输入语文成绩”);scanf(”%f”,&stu-〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/printf(”请输入英语成绩(0~100):”);scanf(”%f”,&stu-〉yingyu);/*输入英语成绩,成绩应在0—100*/while(stu—〉yingyu<0||stu-〉yingyu〉100){getchar();printf(”输入错误,请重新输入英语成绩");scanf("%f”,&stu—〉yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/printf("请输入数学成绩(0~100):”);scanf("%f”,&stu—>shuxue);/*输入数学成绩,成绩应在0—100*/while(stu-〉shuxue〈0||stu—〉shuxue〉100){getchar();printf(”输入错误,请重新输入数学成绩”);scanf("%f",&stu—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/p1=head;p0=stu;if(head==NULL){head=p0;p0—〉next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/{if(p1->next==NULL)/*找到原来链表的末尾*/{p1-〉next=p0;p0—>next=NULL;/*将它与新开单元相连接*/}else{while(p1->next!=NULL)/*还没找到末尾,继续找*/{p2=p1;p1=p1—〉next;}p1->next=p0;p0—〉next=NULL;}}n=n+1;p1=head;p0=stu;for(i=1;i〈n;i++){for(j=i+1;j〈=n;j++){max=p1;p1=p1—〉next;if(max—〉number〉p1—>number){k=max—〉number;max—〉number=p1->number;p1-〉number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max-〉name);strcpy(max—〉name,p1—>name);strcpy(p1-〉name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max-〉yuwen;max-〉yuwen=p1—>yuwen;p1—>yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max—>yingyu;max-〉yingyu=p1—>yingyu;p1—〉yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max->shuxue;max—>shuxue=p1—>shuxue;p1—〉shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}end2:printf("现在的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*search2311(score*head)/*函数search2311,功能:查询学生成绩*/{intnumber;score*p1,*p2;printf("输入要查询的学生的学号,”);scanf(”%d”,&number);while(number!=0){if(head==NULL){printf(”\n没有任何学生资料!\n”);return(head);}printf("————-——-————---—————--—-—-——-——-———-—----\n”);printf(”|学号\t|姓名\t|语文\t|英语\t|数学\t|\n”);printf(”————-——--—----—-—-————--——--——---————————\n");/*打印表格域*/p1=head;while(number!=p1—〉number&&p1—>next!=NULL){p2=p1;p1=p1->next;}if(number==p1—>number){printf("|%d\t|%s\t|%。1f\t|%.1f\t|%。1f\t|\n”,p1->number,p1—〉name,p1—〉yuwen,p1-〉yingyu,p1-〉shuxue);printf("—--————-—--————--————-—-———-—-———-——————-\n");}/*打印表格域*/elseprintf(”%d不存在此学生!\n”,number);printf(”输入要查询的学生的学号,”);scanf("%d”,&number);}printf(”已经退出了!\n”);return(head);}/*==============================================================================================*//*==============================================================================================*/score*del2311(score*head)/*函数del2311,功能:删除学生资料*/{score*p1,*p2;intnumber;printf(”输入要删除的学生的学号(输入0时退出):");scanf("%d",&number);getchar();while(number!=0)/*输入学号为0时退出*/{if(head==NULL){printf(”\n没有任何学生资料!\n”);return(head);}p1=head;while(number!=p1—〉number&&p1->next!=NULL)/*p1指向的不是所要找的首结点,并且后面还有结点*/{p2=p1;p1=p1—〉next;}/*p1后移一个结点*/if(number==p1—〉number)/*找到了*/{if(p1==head)head=p1—>next;/*若p1指向的是首结点,把地二个结点地址赋予head*/elsep2-〉next=p1—〉next;/*否则将下一个结点地址赋给前一
h〉
#include〈stdio。
#includeh〉#defineLENsizeof(structscorenode)#defineDEBUG#include〈string.h>structscorenode{intnumber;/*学号*/charname[10];/*姓名*/floatyuwen;/*语文成绩*/floatyingyu;/*英语成绩*/floatshuxue;/*数学成绩*/structscorenode*next;};typedefstructscorenodescore;intn,k;/*n,k为全局变量,本程序中的函数均可以使用它*//*==============================================================================================*/score*creat2311(void)/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/{score*head;score*p1,*p2,*p3,*max;inti,j;floatfen;chart[10];n=0;p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/printf(”请输入学生资料,输0退出!\n");repeat1:printf("请输入学生学号(学号应大于0):”);/*输入学号,学号应大于0*/scanf("%d",&p1—〉number);while(p1->number〈0){getchar();printf(”输入错误,请重新输入学生学号:”);scanf(”%d",&p1->number);}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1-〉number==0)gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n〉0){for(i=0;i〈n;i++){if(p1—>number!=p3-〉number)p3=p3—〉next;else{printf("学号重复,请重输!\n”);gotorepeat1;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf(”请输入学生姓名:");scanf(”%s”,&p1—〉name);/*输入学生姓名*/printf("请输入语文成绩(0~100):");/*输入语文成绩,成绩应在0-100*/scanf(”%f”,&p1->yuwen);while(p1-〉yuwen〈0||p1—〉yuwen〉100){getchar();printf(”输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/scanf(”%f”,&p1—〉yuwen);}printf(”请输入英语成绩(0~100):”);/*输入英语成绩,成绩应在0—100*/scanf(”%f”,&p1—〉yingyu);while(p1—〉yingyu〈0||p1—〉yingyu〉100){getchar();printf("输入错误,请重新输入英语成绩”);/*输入错误,重新输入英语成绩直到正确为止*/scanf("%f",&p1—〉yingyu);}printf(”请输入数学成绩(0~100):”);/*输入数学成绩,成绩应在0-100*/scanf("%f”,&p1-〉shuxue);while(p1—〉shuxue<0||p1—〉shuxue〉100){getchar();printf("输入错误,请重新输入数学成绩”);scanf(”%f”,&p1—>shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/head=NULL;while(p1-〉number!=0){n=n+1;if(n==1)head=p1;elsep2-〉next=p1;p2=p1;p1=(score*)malloc(LEN);printf(”请输入学生资料,输0退出!\n”);repeat2:printf(”请输入学生学号(学号应大于0):”);scanf("%d”,&p1—>number);/*输入学号,学号应大于0*/while(p1->number〈0){getchar();printf("输入错误,请重新输入学生学号:”);scanf("%d”,&p1—>number);}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1—〉number==0)gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n>0){for(i=0;i〈n;i++){if(p1—〉number!=p3—〉number)p3=p3—〉next;else{printf(”学号重复,请重输!\n”);gotorepeat2;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf(”请输入学生姓名:”);scanf("%s",&p1—>name);/*输入学生姓名*/printf("请输入语文成绩(0~100):”);scanf(”%f",&p1—〉yuwen);/*输入语文成绩,成绩应在0-100*/while(p1—>yuwen〈0||p1->yuwen>100){getchar();printf(”输入错误,请重新输入语文成绩”);scanf("%f",&p1—〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/printf("请输入英语成绩(0~100):”);scanf(”%f”,&p1-〉yingyu);/*输入英语成绩,成绩应在0-100*/while(p1->yingyu<0||p1—〉yingyu〉100){getchar();printf("输入错误,请重新输入英语成绩”);scanf(”%f”,&p1—>yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/printf("请输入数学成绩(0~100):");scanf("%f”,&p1-〉shuxue);/*输入数学成绩,成绩应在0—100*/while(p1—〉shuxue<0||p1->shuxue〉100){getchar();printf("输入错误,请重新输入数学成绩”);scanf(”%f",&p1—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/}end:p1=head;p3=p1;for(i=1;i{for(j=i+1;j〈=n;j++){max=p1;p1=p1—>next;if(max—〉number〉p1—>number){k=max—〉number;max->number=p1—〉number;p1—>number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max—〉name);strcpy(max->name,p1—>name);strcpy(p1—>name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max—>yuwen;max->yuwen=p1—>yuwen;p1—>yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max-〉yingyu;max->yingyu=p1—〉yingyu;p1-〉yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max—〉shuxue;max-〉shuxue=p1—〉shuxue;p1->shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}p2—>next=NULL;/*链表结尾*/printf("输入的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*load2311(score*head)/*函数load2311,功能:从文件读入学生记录*/{score*p1,*p2;intm=0;charfilepn[10];FILE*fp;printf(”请输入文件路径及文件名:”);scanf("%s",filepn);/*输入文件路径及名称*/if((fp=fopen(filepn,"r+"))==NULL){printf("不能打开文件!\n”);return0;}m=m+1;if(m==1){p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,”%d%s%f%f%f”,&p1->number,p1—〉name,&p1—>yuwen,&p1—〉yingyu,&p1->shuxue);printf(”|%d\t|%s\t|%。1f\t|%.1f\t|%。1f\t|\n”,p1-〉number,p1—>name,p1—〉yuwen,p1—>yingyu,p1—〉shuxue);/*文件读入与显示*/head=NULL;do{n=n+1;if(n==1)head=p1;elsep2—>next=p1;p2=p1;p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f\n”,&p1—〉number,p1—〉name,&p1-〉yuwen,&p1—>yingyu,&p1-〉shuxue);printf(”|%d\t|%s\t|%.1f\t|%。1f\t|%。1f\t|\n”,p1—>number,p1—〉name,p1—〉yuwen,p1—〉yingyu,p1->shuxue);/*文件读入与显示*/}while(!feof(fp));p2—〉next=p1;p1—〉next=NULL;n=n+1;}printf("—--———-———-——-—————-———————————-———-—————\n");/*表格下线*/fclose(fp);/*结束读入,关闭文件*/return(head);}/*==============================================================================================*//*==============================================================================================*/score*add2311(score*head,score*stu)/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/{score*p0,*p1,*p2,*p3,*max;inti,j;floatfen;chart[10];p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/printf(”\n输入要增加的学生的资料!”);repeat4:printf(”请输入学生学号(学号应大于0):”);scanf(”%d”,&stu—〉number);/*输入学号,学号应大于0*/while(stu->number〈0){getchar();printf(”输入错误,请重新输入学生学号:");scanf("%d”,&stu—〉number);}/*输入错误,重新输入学号*//******************************************************/if(stu—〉number==0)gotoend2;/*当输入的学号为0时,转到末尾,结束追加*/else{p3=head;if(n>0){for(i=0;i〈n;i++){if(stu—>number!=p3->number)p3=p3—〉next;else{printf(”学号重复,请重输!\n");gotorepeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}/******************************************************/printf(”输入学生姓名:”);scanf("%s",stu-〉name);/*输入学生姓名*/printf("请输入语文成绩(0~100):”);scanf("%f”,&stu—〉yuwen);/*输入语文成绩,成绩应在0-100*/while(stu—>yuwen〈0||stu—>yuwen>100){getchar();printf(”输入错误,请重新输入语文成绩”);scanf(”%f”,&stu-〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/printf(”请输入英语成绩(0~100):”);scanf(”%f”,&stu-〉yingyu);/*输入英语成绩,成绩应在0—100*/while(stu—〉yingyu<0||stu-〉yingyu〉100){getchar();printf(”输入错误,请重新输入英语成绩");scanf("%f”,&stu—〉yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/printf("请输入数学成绩(0~100):”);scanf("%f”,&stu—>shuxue);/*输入数学成绩,成绩应在0—100*/while(stu-〉shuxue〈0||stu—〉shuxue〉100){getchar();printf(”输入错误,请重新输入数学成绩”);scanf("%f",&stu—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/p1=head;p0=stu;if(head==NULL){head=p0;p0—〉next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/{if(p1->next==NULL)/*找到原来链表的末尾*/{p1-〉next=p0;p0—>next=NULL;/*将它与新开单元相连接*/}else{while(p1->next!=NULL)/*还没找到末尾,继续找*/{p2=p1;p1=p1—〉next;}p1->next=p0;p0—〉next=NULL;}}n=n+1;p1=head;p0=stu;for(i=1;i〈n;i++){for(j=i+1;j〈=n;j++){max=p1;p1=p1—〉next;if(max—〉number〉p1—>number){k=max—〉number;max—〉number=p1->number;p1-〉number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max-〉name);strcpy(max—〉name,p1—>name);strcpy(p1-〉name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max-〉yuwen;max-〉yuwen=p1—>yuwen;p1—>yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max—>yingyu;max-〉yingyu=p1—>yingyu;p1—〉yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max->shuxue;max—>shuxue=p1—>shuxue;p1—〉shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}end2:printf("现在的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*search2311(score*head)/*函数search2311,功能:查询学生成绩*/{intnumber;score*p1,*p2;printf("输入要查询的学生的学号,”);scanf(”%d”,&number);while(number!=0){if(head==NULL){printf(”\n没有任何学生资料!\n”);return(head);}printf("————-——-————---—————--—-—-——-——-———-—----\n”);printf(”|学号\t|姓名\t|语文\t|英语\t|数学\t|\n”);printf(”————-——--—----—-—-————--——--——---————————\n");/*打印表格域*/p1=head;while(number!=p1—〉number&&p1—>next!=NULL){p2=p1;p1=p1->next;}if(number==p1—>number){printf("|%d\t|%s\t|%。1f\t|%.1f\t|%。1f\t|\n”,p1->number,p1—〉name,p1—〉yuwen,p1-〉yingyu,p1-〉shuxue);printf("—--————-—--————--————-—-———-—-———-——————-\n");}/*打印表格域*/elseprintf(”%d不存在此学生!\n”,number);printf(”输入要查询的学生的学号,”);scanf("%d”,&number);}printf(”已经退出了!\n”);return(head);}/*==============================================================================================*//*==============================================================================================*/score*del2311(score*head)/*函数del2311,功能:删除学生资料*/{score*p1,*p2;intnumber;printf(”输入要删除的学生的学号(输入0时退出):");scanf("%d",&number);getchar();while(number!=0)/*输入学号为0时退出*/{if(head==NULL){printf(”\n没有任何学生资料!\n”);return(head);}p1=head;while(number!=p1—〉number&&p1->next!=NULL)/*p1指向的不是所要找的首结点,并且后面还有结点*/{p2=p1;p1=p1—〉next;}/*p1后移一个结点*/if(number==p1—〉number)/*找到了*/{if(p1==head)head=p1—>next;/*若p1指向的是首结点,把地二个结点地址赋予head*/elsep2-〉next=p1—〉next;/*否则将下一个结点地址赋给前一
#defineLENsizeof(structscorenode)
#defineDEBUG
#include〈string.h>
structscorenode
{intnumber;/*学号*/
charname[10];/*姓名*/
floatyuwen;/*语文成绩*/
floatyingyu;/*英语成绩*/
floatshuxue;/*数学成绩*/
structscorenode*next;
};
typedefstructscorenodescore;
intn,k;/*n,k为全局变量,本程序中的函数均可以使用它*/
/*==============================================================================================*/
score*creat2311(void)
/*函数creat2311,功能:
创建链表,此函数带回一个指向链表头的指针*/
{
score*head;
score*p1,*p2,*p3,*max;
inti,j;
floatfen;
chart[10];
n=0;
p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/
printf(”请输入学生资料,输0退出!
\n");
repeat1:
printf("请输入学生学号(学号应大于0):
”);/*输入学号,学号应大于0*/
scanf("%d",&p1—〉number);
while(p1->number〈0)
{getchar();
printf(”输入错误,请重新输入学生学号:
”);
scanf(”%d",&p1->number);}
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
if(p1-〉number==0)
gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/
else
{
p3=head;
if(n〉0)
{for(i=0;i〈n;i++)
{if(p1—>number!
=p3-〉number)
p3=p3—〉next;
{printf("学号重复,请重输!
\n”);
gotorepeat1;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
}
}
printf(”请输入学生姓名:
");
scanf(”%s”,&p1—〉name);/*输入学生姓名*/
printf("请输入语文成绩(0~100):
");/*输入语文成绩,成绩应在0-100*/
scanf(”%f”,&p1->yuwen);
while(p1-〉yuwen〈0||p1—〉yuwen〉100)
{getchar();
printf(”输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/
scanf(”%f”,&p1—〉yuwen);}
printf(”请输入英语成绩(0~100):
”);/*输入英语成绩,成绩应在0—100*/
scanf(”%f”,&p1—〉yingyu);
while(p1—〉yingyu〈0||p1—〉yingyu〉100)
{getchar();
printf("输入错误,请重新输入英语成绩”);/*输入错误,重新输入英语成绩直到正确为止*/
scanf("%f",&p1—〉yingyu);}
printf(”请输入数学成绩(0~100):
”);/*输入数学成绩,成绩应在0-100*/
scanf("%f”,&p1-〉shuxue);
while(p1—〉shuxue<0||p1—〉shuxue〉100)
{getchar();
printf("输入错误,请重新输入数学成绩”);
scanf(”%f”,&p1—>shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
head=NULL;
while(p1-〉number!
=0)
n=n+1;
if(n==1)
head=p1;
p2-〉next=p1;
p2=p1;
p1=(score*)malloc(LEN);
\n”);
repeat2:
printf(”请输入学生学号(学号应大于0):
”);
scanf("%d”,&p1—>number);/*输入学号,学号应大于0*/
printf("输入错误,请重新输入学生学号:
scanf("%d”,&p1—>number);}
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
if(p1—〉number==0)
gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/
p3=head;
if(n>0)
{for(i=0;i〈n;i++)
{if(p1—〉number!
=p3—〉number)
p3=p3—〉next;
{printf(”学号重复,请重输!
gotorepeat2;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
scanf("%s",&p1—>name);/*输入学生姓名*/
printf("请输入语文成绩(0~100):
scanf(”%f",&p1—〉yuwen);/*输入语文成绩,成绩应在0-100*/
while(p1—>yuwen〈0||p1->yuwen>100)
printf(”输入错误,请重新输入语文成绩”);
scanf("%f",&p1—〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/
printf("请输入英语成绩(0~100):
scanf(”%f”,&p1-〉yingyu);/*输入英语成绩,成绩应在0-100*/
while(p1->yingyu<0||p1—〉yingyu〉100)
printf("输入错误,请重新输入英语成绩”);
scanf(”%f”,&p1—>yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/
printf("请输入数学成绩(0~100):
scanf("%f”,&p1-〉shuxue);/*输入数学成绩,成绩应在0—100*/
while(p1—〉shuxue<0||p1->shuxue〉100)
printf("输入错误,请重新输入数学成绩”);
scanf(”%f",&p1—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
end:
p1=head;
p3=p1;
for(i=1;i{for(j=i+1;j〈=n;j++){max=p1;p1=p1—>next;if(max—〉number〉p1—>number){k=max—〉number;max->number=p1—〉number;p1—>number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max—〉name);strcpy(max->name,p1—>name);strcpy(p1—>name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max—>yuwen;max->yuwen=p1—>yuwen;p1—>yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max-〉yingyu;max->yingyu=p1—〉yingyu;p1-〉yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max—〉shuxue;max-〉shuxue=p1—〉shuxue;p1->shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}p2—>next=NULL;/*链表结尾*/printf("输入的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*load2311(score*head)/*函数load2311,功能:从文件读入学生记录*/{score*p1,*p2;intm=0;charfilepn[10];FILE*fp;printf(”请输入文件路径及文件名:”);scanf("%s",filepn);/*输入文件路径及名称*/if((fp=fopen(filepn,"r+"))==NULL){printf("不能打开文件!\n”);return0;}m=m+1;if(m==1){p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,”%d%s%f%f%f”,&p1->number,p1—〉name,&p1—>yuwen,&p1—〉yingyu,&p1->shuxue);printf(”|%d\t|%s\t|%。1f\t|%.1f\t|%。1f\t|\n”,p1-〉number,p1—>name,p1—〉yuwen,p1—>yingyu,p1—〉shuxue);/*文件读入与显示*/head=NULL;do{n=n+1;if(n==1)head=p1;elsep2—>next=p1;p2=p1;p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f\n”,&p1—〉number,p1—〉name,&p1-〉yuwen,&p1—>yingyu,&p1-〉shuxue);printf(”|%d\t|%s\t|%.1f\t|%。1f\t|%。1f\t|\n”,p1—>number,p1—〉name,p1—〉yuwen,p1—〉yingyu,p1->shuxue);/*文件读入与显示*/}while(!feof(fp));p2—〉next=p1;p1—〉next=NULL;n=n+1;}printf("—--———-———-——-—————-———————————-———-—————\n");/*表格下线*/fclose(fp);/*结束读入,关闭文件*/return(head);}/*==============================================================================================*//*==============================================================================================*/score*add2311(score*head,score*stu)/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/{score*p0,*p1,*p2,*p3,*max;inti,j;floatfen;chart[10];p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/printf(”\n输入要增加的学生的资料!”);repeat4:printf(”请输入学生学号(学号应大于0):”);scanf(”%d”,&stu—〉number);/*输入学号,学号应大于0*/while(stu->number〈0){getchar();printf(”输入错误,请重新输入学生学号:");scanf("%d”,&stu—〉number);}/*输入错误,重新输入学号*//******************************************************/if(stu—〉number==0)gotoend2;/*当输入的学号为0时,转到末尾,结束追加*/else{p3=head;if(n>0){for(i=0;i〈n;i++){if(stu—>number!=p3->number)p3=p3—〉next;else{printf(”学号重复,请重输!\n");gotorepeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}/******************************************************/printf(”输入学生姓名:”);scanf("%s",stu-〉name);/*输入学生姓名*/printf("请输入语文成绩(0~100):”);scanf("%f”,&stu—〉yuwen);/*输入语文成绩,成绩应在0-100*/while(stu—>yuwen〈0||stu—>yuwen>100){getchar();printf(”输入错误,请重新输入语文成绩”);scanf(”%f”,&stu-〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/printf(”请输入英语成绩(0~100):”);scanf(”%f”,&stu-〉yingyu);/*输入英语成绩,成绩应在0—100*/while(stu—〉yingyu<0||stu-〉yingyu〉100){getchar();printf(”输入错误,请重新输入英语成绩");scanf("%f”,&stu—〉yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/printf("请输入数学成绩(0~100):”);scanf("%f”,&stu—>shuxue);/*输入数学成绩,成绩应在0—100*/while(stu-〉shuxue〈0||stu—〉shuxue〉100){getchar();printf(”输入错误,请重新输入数学成绩”);scanf("%f",&stu—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/p1=head;p0=stu;if(head==NULL){head=p0;p0—〉next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/{if(p1->next==NULL)/*找到原来链表的末尾*/{p1-〉next=p0;p0—>next=NULL;/*将它与新开单元相连接*/}else{while(p1->next!=NULL)/*还没找到末尾,继续找*/{p2=p1;p1=p1—〉next;}p1->next=p0;p0—〉next=NULL;}}n=n+1;p1=head;p0=stu;for(i=1;i〈n;i++){for(j=i+1;j〈=n;j++){max=p1;p1=p1—〉next;if(max—〉number〉p1—>number){k=max—〉number;max—〉number=p1->number;p1-〉number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max-〉name);strcpy(max—〉name,p1—>name);strcpy(p1-〉name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max-〉yuwen;max-〉yuwen=p1—>yuwen;p1—>yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max—>yingyu;max-〉yingyu=p1—>yingyu;p1—〉yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max->shuxue;max—>shuxue=p1—>shuxue;p1—〉shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}end2:printf("现在的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*search2311(score*head)/*函数search2311,功能:查询学生成绩*/{intnumber;score*p1,*p2;printf("输入要查询的学生的学号,”);scanf(”%d”,&number);while(number!=0){if(head==NULL){printf(”\n没有任何学生资料!\n”);return(head);}printf("————-——-————---—————--—-—-——-——-———-—----\n”);printf(”|学号\t|姓名\t|语文\t|英语\t|数学\t|\n”);printf(”————-——--—----—-—-————--——--——---————————\n");/*打印表格域*/p1=head;while(number!=p1—〉number&&p1—>next!=NULL){p2=p1;p1=p1->next;}if(number==p1—>number){printf("|%d\t|%s\t|%。1f\t|%.1f\t|%。1f\t|\n”,p1->number,p1—〉name,p1—〉yuwen,p1-〉yingyu,p1-〉shuxue);printf("—--————-—--————--————-—-———-—-———-——————-\n");}/*打印表格域*/elseprintf(”%d不存在此学生!\n”,number);printf(”输入要查询的学生的学号,”);scanf("%d”,&number);}printf(”已经退出了!\n”);return(head);}/*==============================================================================================*//*==============================================================================================*/score*del2311(score*head)/*函数del2311,功能:删除学生资料*/{score*p1,*p2;intnumber;printf(”输入要删除的学生的学号(输入0时退出):");scanf("%d",&number);getchar();while(number!=0)/*输入学号为0时退出*/{if(head==NULL){printf(”\n没有任何学生资料!\n”);return(head);}p1=head;while(number!=p1—〉number&&p1->next!=NULL)/*p1指向的不是所要找的首结点,并且后面还有结点*/{p2=p1;p1=p1—〉next;}/*p1后移一个结点*/if(number==p1—〉number)/*找到了*/{if(p1==head)head=p1—>next;/*若p1指向的是首结点,把地二个结点地址赋予head*/elsep2-〉next=p1—〉next;/*否则将下一个结点地址赋给前一
for(j=i+1;j〈=n;j++)
max=p1;
p1=p1—>next;
if(max—〉number〉p1—>number)
k=max—〉number;
max->number=p1—〉number;
p1—>number=k;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(t,max—〉name);
strcpy(max->name,p1—>name);
strcpy(p1—>name,t);
/*交换前后结点中的姓名,使之与学号相匹配*/
fen=max—>yuwen;
max->yuwen=p1—>yuwen;
p1—>yuwen=fen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
fen=max-〉yingyu;
max->yingyu=p1—〉yingyu;
p1-〉yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
fen=max—〉shuxue;
max-〉shuxue=p1—〉shuxue;
p1->shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
max=head;p1=head;/*重新使max,p指向链表头*/
p2—>next=NULL;/*链表结尾*/
printf("输入的学生数为:
%d个!
\n",n);
return(head);
/*==============================================================================================*/
/*==============================================================================================*/
score*load2311(score*head)
/*函数load2311,功能:
从文件读入学生记录*/
{score*p1,*p2;
intm=0;
charfilepn[10];
FILE*fp;
printf(”请输入文件路径及文件名:
scanf("%s",filepn);/*输入文件路径及名称*/
if((fp=fopen(filepn,"r+"))==NULL)
printf("不能打开文件!
return0;
m=m+1;
if(m==1)
p1=(score*)malloc(LEN);/*开辟一个新单元*/
fscanf(fp,”%d%s%f%f%f”,&p1->number,p1—〉name,&p1—>yuwen,&p1—〉yingyu,&p1->shuxue);
printf(”|%d\t|%s\t|%。
1f\t|%.1f\t|%。
1f\t|\n”,p1-〉number,p1—>name,p1—〉yuwen,p1—>yingyu,p1—〉shuxue);
/*文件读入与显示*/
do
n=n+1;
if(n==1)head=p1;
elsep2—>next=p1;
p2=p1;
p1=(score*)malloc(LEN);/*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f\n”,&p1—〉number,p1—〉name,&p1-〉yuwen,&p1—>yingyu,&p1-〉shuxue);
printf(”|%d\t|%s\t|%.1f\t|%。
1f\t|%。
1f\t|\n”,p1—>number,p1—〉name,p1—〉yuwen,p1—〉yingyu,p1->shuxue);
/*文件读入与显示*/
}while(!
feof(fp));
p2—〉next=p1;
p1—〉next=NULL;
}printf("—--———-———-——-—————-———————————-———-—————\n");/*表格下线*/
fclose(fp);/*结束读入,关闭文件*/
return(head);
score*add2311(score*head,score*stu)
/*函数add2311,功能:
追加学生资料,并且将所有学生资料按学号排序*/
score*p0,*p1,*p2,*p3,*max;
inti,j;
p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/
printf(”\n输入要增加的学生的资料!
repeat4:
scanf(”%d”,&stu—〉number);
/*输入学号,学号应大于0*/
while(stu->number〈0)
printf(”输入错误,请重新输入学生学号:
scanf("%d”,&stu—〉number);}/*输入错误,重新输入学号*/
/******************************************************/
if(stu—〉number==0)
gotoend2;/*当输入的学号为0时,转到末尾,结束追加*/
{for(i=0;i〈n;i++)
{if(stu—>number!
=p3->number)
{printf(”学号重复,请重输!
gotorepeat4;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
/******************************************************/
printf(”输入学生姓名:
scanf("%s",stu-〉name);/*输入学生姓名*/
scanf("%f”,&stu—〉yuwen);/*输入语文成绩,成绩应在0-100*/
while(stu—>yuwen〈0||stu—>yuwen>100)
scanf(”%f”,&stu-〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/
printf(”请输入英语成绩(0~100):
scanf(”%f”,&stu-〉yingyu);/*输入英语成绩,成绩应在0—100*/
while(stu—〉yingyu<0||stu-〉yingyu〉100)
printf(”输入错误,请重新输入英语成绩");
scanf("%f”,&stu—〉yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/
printf("请输入数学成绩(0~100):
scanf("%f”,&stu—>shuxue);/*输入数学成绩,成绩应在0—100*/
while(stu-〉shuxue〈0||stu—〉shuxue〉100)
printf(”输入错误,请重新输入数学成绩”);
scanf("%f",&stu—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
p0=stu;
if(head==NULL)
{head=p0;p0—〉next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/
else/*原来链表不为空*/
if(p1->next==NULL)/*找到原来链表的末尾*/
p1-〉next=p0;
p0—>next=NULL;/*将它与新开单元相连接*/
while(p1->next!
=NULL)/*还没找到末尾,继续找*/
p2=p1;p1=p1—〉next;
p1->next=p0;
p0—〉next=NULL;
for(i=1;i〈n;i++)
p1=p1—〉next;
max—〉number=p1->number;
p1-〉number=k;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(t,max-〉name);
strcpy(max—〉name,p1—>name);
strcpy(p1-〉name,t);
fen=max-〉yuwen;
max-〉yuwen=p1—>yuwen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
fen=max—>yingyu;
max-〉yingyu=p1—>yingyu;
p1—〉yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
fen=max->shuxue;
max—>shuxue=p1—>shuxue;
p1—〉shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
max=head;p1=head;/*重新使max,p指向链表头*/
}end2:
printf("现在的学生数为:
%d个!
/*==============================================================================================*/
score*search2311(score*head)
/*函数search2311,功能:
查询学生成绩*/
{intnumber;
score*p1,*p2;
printf("输入要查询的学生的学号,”);
scanf(”%d”,&number);
while(number!
{printf(”\n没有任何学生资料!
\n”);return(head);}
printf("————-——-————---—————--—-—-——-——-———-—----\n”);
printf(”|学号\t|姓名\t|语文\t|英语\t|数学\t|\n”);
printf(”————-——--—----—-—-————--——--——---————————\n");/*打印表格域*/
p1=head;
=p1—〉number&&p1—>next!
=NULL)
{p2=p1;p1=p1->next;}
if(number==p1—>number)
{printf("|%d\t|%s\t|%。
1f\t|%.1f\t|%。
1f\t|\n”,p1->number,p1—〉name,p1—〉yuwen,p1-〉yingyu,p1-〉shuxue);
printf("—--————-—--————--————-—-———-—-———-——————-\n");}/*打印表格域*/
printf(”%d不存在此学生!
\n”,number);
printf(”输入要查询的学生的学号,”);
scanf("%d”,&number);
printf(”已经退出了!
return(head);}
score*del2311(score*head)/*函数del2311,功能:
删除学生资料*/
score*p1,*p2;
intnumber;
printf(”输入要删除的学生的学号(输入0时退出):
");
scanf("%d",&number);
getchar();
while(number!
=0)/*输入学号为0时退出*/
printf(”\n没有任何学生资料!
=p1—〉number&&p1->next!
/*p1指向的不是所要找的首结点,并且后面还有结点*/
}/*p1后移一个结点*/
if(number==p1—〉number)
/*找到了*/
if(p1==head)
head=p1—>next;
/*若p1指向的是首结点,把地二个结点地址赋予head*/
p2-〉next=p1—〉next;
/*否则将下一个结点地址赋给前一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1