综合实验二 学生成绩管理系统
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<stdio.h>
#include<stdlib.h>
#include<string.h>
#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;i<total-1;i++)
{
p2=p1->next;
p=p1;
for(int j=i+1;j<total;j++)
{
if(p->score1>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;i<total-1;i++)
{
p2=p1->next;
p=p1;
for(int j=i+1;j<total;j++)
{
if(p->score2>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;i<total-1;i++)
{
p2=p1->next;
p=p1;
for(int j=i+1;j<total;j++)
{
if(p->sum>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 %d\n",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 %d\n",p->num,p->name,p->score1,p->score2,p->sum);break;}
else p=p->next;
}
if(p==NULL)printf("NO Founed\n");
}
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 %d\n",p->num,p->name,p->score1,p->score2,p->sum);break;}
else p=p->next;
}
if(p==NULL)printf("NO Founed\n");
}
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 %d\n",p->num,p->name,p->score1,p->score2,p->sum);l++;}
p=p->next;
}
printf("%d\n",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 %d\n",p->num,p->name,p->score1,p->score2,p->sum);l++;}
p=p->next;
}
printf("%d\n",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 %d\n",p->num,p->name,p->score1,p->score2,p->sum);l++;}
p=p->next;
}
printf("%d\n",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;
}