#include#include #include #define LEN sizeof(struct Student) typedef struct Student { int num; char name[10]; float math; float en; float c; float sum; float aver; struct Student *next; }STU; STU *input(STU* head) { int n=0; STU *p1,*p2,*pt; if(head==NULL) { p1=p2=(STU*)malloc(LEN); printf("第1个同学n"); printf("输入学号:"); scanf("%d",&p1->num ); printf("输入姓名:"); scanf("%s",&p1->name ); printf("输入数学成绩:"); scanf("%f",&p1->math ); printf("输入英语成绩:"); scanf("%f",&p1->en ); printf("输入C语言成绩:"); scanf("%f",&p1->c ); p1->sum =p1->math +p1->en +p1->c ; p1->aver =p1->sum /3; printf("*************************n"); while(1) { n++; if(n==1) head=p1; else p2->next =p1; p2=p1; p1=(STU*)malloc(LEN); printf("第%d个同学n",n+1); printf("输入学号:"); scanf("%d",&p1->num ); if(p1->num ==0) break; printf("输入姓名:"); scanf("%s",&p1->name ); printf("输入数学成绩:"); scanf("%f",&p1->math ); printf("输入英语成绩:"); scanf("%f",&p1->en ); printf("输入C语言成绩:"); scanf("%f",&p1->c ); p1->sum =p1->math +p1->en +p1->c ; p1->aver =p1->sum /3; printf("*************************n"); } p2->next =NULL; } else { pt=head; p1=(STU*)malloc(LEN); printf("插入一个学生的成绩n"); printf("输入学号:"); scanf("%d",&p1->num ); if(p1->num ==0) { free(p1); return(head); } printf("输入姓名:"); scanf("%s",&p1->name ); printf("输入数学成绩:"); scanf("%f",&p1->math ); printf("输入英语成绩:"); scanf("%f",&p1->en ); printf("输入C语言成绩:"); scanf("%f",&p1->c ); p1->sum =p1->math +p1->en +p1->c ; p1->aver =p1->sum /3; printf("*************************n"); do { if(p1->num num ) { p1->next =pt; head=p1; break; } else if(pt->next ==NULL) { pt->next =p1; p1->next =NULL; break; } else if(p1->num >pt->num &&p1->num next->num ) { p1->next =pt->next ; pt->next =p1; break; } pt=pt->next ; }while (pt!=NULL); printf("输入完成n"); } return(head); } void output(STU *pt) { while(pt!=NULL) { printf("学号: "); printf(" %dn",pt->num ); printf("姓名: "); printf(" %sn",pt->name ); printf("数学成绩: "); printf(" %4.2fn",pt->math ); printf("英语成绩: "); printf(" %4.2fn",pt->en ); printf("C语言成绩: "); printf("%4.2fn",pt->c ); printf("总分: "); printf(" %4.2fn",pt->sum ); printf("平均分: "); printf(" %4.2fn",pt->aver ); printf("*************************n"); pt=pt->next ; } } STU *cancel(STU *head) { STU *p1,*p2; char name2[8]; p1=p2=head; if(p1==NULL) printf("n链表为空!!!!!!!!nn"); else { printf("输入要删除的名字n"); scanf("%s",&name2); while(1) { if(strcmp(p1->name ,name2)==0) { if(p2==head) { head=head->next ; free(p1); p1=p2=NULL; printf("删除成功nn"); } else { p2->next =p1->next ; free(p1); p1=p2=NULL; } break; } else if(p1->next ==NULL) { printf("n无该数据!!!!!!!!nn"); break; } p2=p1; p1=p1->next; } return(head); } } void search(STU *head) { STU *pt; int num1; char name1[8]; pt=head; if(pt==NULL) printf("n链表为空!!!!!!!!nn"); else { printf("输入要查询的学号或姓名n"); if(!scanf("%d",&num1)) { scanf("%s",&name1); } while(1) { if(strcmp(pt->name ,name1)==0) { printf("学号: "); printf(" %dn",pt->num ); printf("姓名: "); printf(" %sn",pt->name ); printf("数学成绩: "); printf(" %4.2fn",pt->math ); printf("英语成绩: "); printf(" %4.2fn",pt->en ); printf("C语言成绩: "); printf("%4.2fn",pt->c ); printf("总分: "); printf(" %4.2fn",pt->sum ); printf("平均分: "); printf(" %4.2fn",pt->aver ); printf("*************************n"); break; } else if(pt->num ==num1) { printf("学号: "); printf(" %dn",pt->num ); printf("姓名: "); printf(" %sn",pt->name ); printf("数学成绩: "); printf(" %4.2fn",pt->math ); printf("英语成绩: "); printf(" %4.2fn",pt->en ); printf("C语言成绩: "); printf("%4.2fn",pt->c ); printf("总分: "); printf(" %4.2fn",pt->sum ); printf("平均分: "); printf(" %4.2fn",pt->aver ); printf("*************************n"); break; } else if(pt->next ==NULL) { printf("n无该数据!!!!!!!!nn"); break; } pt=pt->next; } } } void sta(STU *pt) { int number; float cout=0,sums=0; while(pt!=NULL) { if(pt->aver >=60) { number++; } sums=pt->aver +sums; cout++; pt=pt->next ; } printf("n及格人数为:%dn班级平均分为:%4.2fn",number,sums/cout); } int main() { STU *head; head=NULL; int i=0; while(1) { printf("***学生成绩管理系统***n" "1-----输入n" "2-----显示n" "3-----删除n" "4-----查询n" "5-----统计n" "6-----退出n" ); printf("输入选项:"); scanf("%d",&i); getchar(); switch(i) { case 1:head=input(head);break; case 2:output(head);break; case 3:cancel(head);break; case 4:search(head);break; case 5:sta(head);break; case 6:return 0; default:printf("错误nn"); } } }



