综合实验二 学生成绩管理系统
1、实验说明
设某班有n位同学,每位同学的数据包括以下内容:学号(长整型或字符串)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。
2、实验要求
(一)程序运行时,首先显示主菜单如下:
1.新建数据
2.添加数据
3.删除数据
4.排序
5.查询
6.退出
屏幕提示:请输入序号选择相应操作。
要求当用户输入任一序号后,程序都能进行相应操作。
(二)在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:
1.数学成绩排序
2.程序设计成绩排序
3.总分排序。
4.返回主菜单
请按序号选择相应操作。
选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。
(三)在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:
1.学号查询
2.姓名查询
3.数学成绩查询
4.程序设计成绩查询
5.总分查询
6.返回主菜单
请按序号选择相应操作。
在子菜单中选择序号后,程序按以下方式工作:
1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)
2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)
3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;
4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。
#include#include#include#define len sizeof(struct stu)int total=0;struct stu{ long num; char name[10]; int score1,score2; int sum; struct stu* next;};struct stu *head1;void px(){ int n; struct stu *p1,*p2,*p,t; while(1) { printf("1.数学成绩排序n2.程序设计成绩排序n3.总分排序n4.返回主菜单n请输入序号n选择相应操作n"); scanf("%d",&n); if(n==1) { p1=head1; for(int i=0;inext; p=p1; for(int j=i+1;jscore1>p2->score1) p=p2; p2=p2->next; } if(p!=p1){t=*p1;*p1=*p;*p=t;p2=p1->next;p1->next=p->next;p->next=p2;} p1=p1->next; } } else if(n==2) { p1=head1; for(int i=0;inext; p=p1; for(int j=i+1;jscore2>p2->score2) p=p2; p2=p2->next; } if(p!=p1){t=*p1;*p1=*p;*p=t;p2=p1->next;p1->next=p->next;p->next=p2;} p1=p1->next; } } else if(n==3) { p1=head1; for(int i=0;inext; p=p1; for(int j=i+1;jsum>p2->sum) p=p2; p2=p2->next; } if(p!=p1){t=*p1;*p1=*p;*p=t;p2=p1->next;p1->next=p->next;p->next=p2;} p1=p1->next; } } else break; p=head1; while(p!=NULL){printf("%ld %s %d %d %dn",p->num,p->name,p->score1,p->score2,p->sum);p=p->next;} }}void cx(){ int n; while(1) { printf("1.学号查询n2.姓名查询n3.数学成绩查询n4.程序设计成绩查询n5.总分查询n6.返回主菜单n请输入序号选择相应操作n"); scanf("%d",&n); if(n==1) { struct stu *p; int tag; printf("请输入:"); scanf("%d",&tag); p=head1; while(p!=NULL) { if(p->num==tag) {printf("%ld %s %d %d %dn",p->num,p->name,p->score1,p->score2,p->sum);break;} else p=p->next; } if(p==NULL)printf("NO Founedn"); } else if(n==2) { struct stu *p; char nam[10]; printf("请输入:"); scanf("%s",nam); p=head1; while(p!=NULL) { if(strcmp(p->name,nam)==0) {printf("%ld %s %d %d %dn",p->num,p->name,p->score1,p->score2,p->sum);break;} else p=p->next; } if(p==NULL)printf("NO Founedn"); } else if(n==3) { struct stu *p; int tag,l;l=0; printf("请输入:"); scanf("%d",&tag); p=head1; while(p!=NULL) { if(p->score1>=tag) {printf("%ld %s %d %d %dn",p->num,p->name,p->score1,p->score2,p->sum);l++;} p=p->next; } printf("%dn",l); } else if(n==4) { struct stu *p; int tag,l;l=0; printf("请输入:"); scanf("%d",&tag); p=head1; while(p!=NULL) { if(p->score2>=tag) {printf("%ld %s %d %d %dn",p->num,p->name,p->score1,p->score2,p->sum);l++;} p=p->next; } printf("%dn",l); } else if(n==5) { struct stu *p; int tag,l;l=0; printf("请输入:"); scanf("%d",&tag); p=head1; while(p!=NULL) { if(p->sum>=tag) {printf("%ld %s %d %d %dn",p->num,p->name,p->score1,p->score2,p->sum);l++;} p=p->next; } printf("%dn",l); } else break; }}//----------------------------------------struct stu * add1(struct stu *head){ struct stu *p1,*p; p1=(struct stu *)malloc(len); scanf("%ld%s%d%d",&p1->num,&p1->name,&p1->score1,&p1->score2); p1->sum=p1->score1+p1->score2; if(head==NULL) {head=p1;p1->next=NULL;} else{ p=head; while(p->next!=NULL) {p=p->next;} p->next=p1; p1->next=NULL; } total++; return head;}void creat(int n){ for(int i=1;i<=n;i++) { printf("input:n"); head1=add1(head1); }}//----------------------------------------------struct stu* del(struct stu *head,long id){ struct stu *p1,*p2; p1=head; while(p1!=NULL&&p1->num!=id) { p2=p1; p1=p1->next; } if(p1!=NULL) { total--; if(p1==head) {p1=p1->next;free(head); return p1;} else {p2->next=p1->next;free(p1);} } else printf("NO Founed"); return head;}struct stu *DELL(struct stu *head){ struct stu *p1,*p2; p1=head; while(p1!=NULL) { p2=p1; p1=p1->next; free(p2); } return NULL;}int main(){ int n,k; long id; head1=NULL; struct stu *p; while(1) { printf("1.新建数据n2.添加数据n3.删除数据n4.排序n5.查询n6.退出n请输入序号选择相应操作n"); scanf("%d",&k); if(k==6) {break;} if(k==1) {head1=DELL(head1);printf("已新建n");} else if(k==2) {creat(1);} else if(k==3) {printf("请输入删除的学号:");scanf("%ld",&id);head1=del(head1,id);} else if(k==4) {px();} else if(k==5) {cx();} printf("----------------------n"); } return 0;}