欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

链表数据库(模拟)

时间:2023-04-29

综合实验二 学生成绩管理系统

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;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。