#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
int i =0;//全局变量,记录人数
struct Student
{
int num;
char name[20];
int c_score;
int ps_score;
}s[N];
void mainMenu()//主菜单
{
printf("***********学生成绩管理系统************\n");
printf("1--------------增加记录\n");
printf("2--------------查询人数\n");
printf("3--------------排序\n");
printf("4--------------显示\n");
printf("5--------------删除\n");
printf("6--------------查询\n");
printf("7--------------更新\n");
printf("7--------------统计\n");
printf("0--------------退出\n");
printf("*****************************************\n");
}
void addStudent(struct Student *s)
{
printf("请输入序号");
scanf("%d",&s[i].num);
printf("请输入姓名(20个字符,一个汉字占两个字符)");
scanf("%s",&s[i].name);
printf("请输入ps的成绩");
scanf("%d",&s[i].ps_score);
printf("请输入c语言成绩");
scanf("%d",&s[i].c_score) ;
printf("添加完成!\n");
i++;
}
void getNumOfStudents()
{
printf("总人数为:%d",i);
}
void show(struct Student *s)
{
if(i != 0)
{
printf("学号\t姓名\tPS\tc语言\t\n");
for(int n = 0;n<i;n++)
{
printf("%d\t",s[n].num);
printf("%s\t",s[n].name);
printf("%d\t",s[n].c_score);
printf("%d\t",s[n].ps_score);
printf("\n");
}
}
else
printf("系统中没有学生,请添加学生");
}
int searchId(struct Student *s,int id)
{
for(int n =0 ; n< i; n++)
{
if( s[n].num == s[id].num)
{
printf("!!!!");
return n;
}
}
return -1;
}
int searchName(struct Student *s,char name[])
{
for(int n = 0 ;n<i ;n++)
{
if(strcmp(s[n].name,name) == 0)
{
return n;
}
}
return -1;
}
int searchPs(struct Student *s,int ps)
{
for(int n =0 ;n< i;n++)
{
if( s[n].ps_score == ps)
{
return n;
}
}
return -1;
}
int searchcC(struct Student *s,int c)
{
for(int n =0 ;n< i;n++)
{
if( s[n].c_score == c)
{
return n;
}
}
return -1;
}
void searchMenu(struct Student *s)
{
char ch;
int num;
char name[20];
while(1)
{
printf("\n********查找子系统******\n");
printf("1-------按C语言成绩查找\n");
printf("2-------按数学成绩查找\n");
printf("3-------按姓名查找\n");
printf("4-------按学号查找") ;
printf("0-------退出\n");
printf("************************\n");
switch(ch)
{
case '1':
printf("请输入所要查找学生的C语言成绩:");
scanf("%d",&num);
printf("学号\t姓名\tPS\tc语言\t\n");
printf("%d\t",s[searchcC(s,num)].num);
printf("%s\t",s[searchcC(s,num)].name);
printf("%d\t",s[searchcC(s,num)].c_score);
printf("%d\t",s[searchcC(s,num)].ps_score);
break;
case '2':
printf("请输入所要查找学生的高数成绩:");
scanf("%d",&num);
printf("学号\t姓名\tPS\tc语言\t\n");
printf("%d\t",s[searchPs(s,num)].num);
printf("%s\t",s[searchPs(s,num)].name);
printf("%d\t",s[searchPs(s,num)].c_score);
printf("%d\t",s[searchPs(s,num)].ps_score);
break;
case '3':
printf("请输入所要查找学生的姓名:");
scanf("%s",name);
printf("学号\t姓名\tPS\tc语言\t\n");
printf("%d\t",s[searchName(s,name)].num);
printf("%s\t",s[searchName(s,name)].name);
printf("%d\t",s[searchName(s,name)].c_score);
printf("%d\t",s[searchName(s,name)].ps_score);
break;
case '4':
printf("请输入所要查找学生的序号:");
scanf("%d",&num);
printf("学号\t姓名\tPS\tc语言\t\n");
printf("%d\t",s[searchPs(s,num)].num);
printf("%s\t",s[searchPs(s,num)].name);
printf("%d\t",s[searchPs(s,num)].c_score);
printf("%d\t",s[searchPs(s,num)].ps_score);
break;
case '0':
return;
break;
}
printf("\n");
}
}
int avg(struct Student *s,int n)
{
float avg=0;
avg=(s[n].ps_score+s[n].c_score)/2;
return avg;
}
void avgStatistic(struct Student *s)
{
int a = 0,b = 0,c = 0,d = 0,e=0;
for(int k =0;k<i;k++)
{
if(avg(s,k)>=0&&avg(s,k)<=59)
a++;
else if(avg(s,k)<=69)
b++;
else if(avg(s,k)<=79)
c++;
else if(avg(s,k)<=89)
d++;
else if(avg(s,k)<=100)
e++;
}
printf("90~100分人数:%d\n",e);
printf("80~89分人数:%d\n",d);
printf("70~79分人数:%d\n",c);
printf("60~69分人数:%d\n",b);
printf("0~59分人数:%d\n",a);
}
void psStatistic(struct Student *s)
{
int a = 0,b = 0,c = 0,d = 0,e=0;
for(int k =0;k<i;k++)
{
if(s[k].ps_score>=0&&s[k].ps_score<=59)
a++;
else if(s[k].ps_score<=69)
b++;
else if(s[k].ps_score<=79)
c++;
else if(s[k].ps_score<=89)
d++;
else if(s[k].ps_score<=100)
e++;
}
printf("90~100分人数:%d\n",e);
printf("80~89分人数:%d\n",d);
printf("70~79分人数:%d\n",c);
printf("60~69分人数:%d\n",b);
printf("0~59分人数:%d\n",a);
}
void cStatistic(struct Student *s)
{
int a = 0,b = 0,c = 0,d = 0,e=0;
for(int k =0;k<i;k++)
{
if(s[k].c_score>=0&&s[k].c_score<=59)
a++;
else if(s[k].c_score<=69)
b++;
else if(s[k].c_score<=79)
c++;
else if(s[k].c_score<=89)
d++;
else if(s[k].c_score<=100)
e++;
}
printf("90~100分人数:%d\n",e);
printf("80~89分人数:%d\n",d);
printf("70~79分人数:%d\n",c);
printf("60~69分人数:%d\n",b);
printf("0~59分人数:%d\n",a);
}
void statisticsMenu(struct Student *s)
{
char ch;
// int num;
while(1)
{
printf("\n********统计子系统******\n");
printf("1-------按平均分统计\n");
printf("2-------按数学成绩统计\n");
printf("3-------按C语言成绩统计\n");
printf("0-------退出\n");
printf("************************\n");
printf("请输入选项(0~3):");
scanf(" %c",&ch);
switch(ch)
{
case '1':avgStatistic(s);break;
case '2':psStatistic(s);break;
case '3':cStatistic(s);break;
case '0':return;break;
default:printf("输入错误,请重新输入!");break;
}
printf("\n");
}
}
int Sum(struct Student *s,int n)
{
int sum=0;
sum = s[n].c_score+s[n].ps_score;
return sum;
}
void sumSort(struct Student *s)
{
for(int j = 0;j<i-1;j++)
{
int min =j;
for(int k = j+1; k < i ; k++ )
{
if(Sum(s,k)<Sum(s,min))
min=k;
}
if(min!=j)
{
int t = s[min].num ;
s[min].num =s[j].num;
s[j].num = t;
t = s[min].c_score ;
s[min].c_score =s[j].c_score;
s[j].c_score = t;
t = s[min].ps_score ;
s[min].ps_score =s[j].ps_score;
s[j].ps_score = t;
char name[20];
strcpy(name,s[min].name);
strcpy(s[min].name,s[j].name);
strcpy(s[j].name , name);
}
}
printf("排序完成\n");
}
void psSort(struct Student *s)
{
for(int j = 0 ;j<i-1;j++)
{
for(int k = 0;k<i-1-j;k++)
{
if(s[k].ps_score>s[k+1].ps_score)
{
int t = s[k].num ;
s[k].num =s[k+1].num;
s[k+1].num = t;
t = s[k].c_score ;
s[k].c_score =s[k+1].c_score;
s[k+1].c_score = t;
t = s[k].ps_score ;
s[k].ps_score =s[k+1].ps_score;
s[k+1].ps_score = t;
char name[20];
strcpy(name,s[k].name);
strcpy(s[k].name,s[k+1].name);
strcpy(s[k+1].name , name);
}
}
}
printf("排序完成\n");
}
void nameSort(struct Student *s)
{
for(int j = 0;j<i-1;j++)
{
int min =j;
for(int k = j+1 ; k < i ;k++ )
{
if(strcmp(s[k].name,s[min].name < 0))
min=k;
}
if(min!=j)
{
int t = s[min].num;
s[min].num =s[j].num;
s[min].num = t;
t = s[min].c_score;
s[min].c_score =s[j].c_score;
s[min].c_score = t;
t = s[min].ps_score;
s[min].ps_score =s[j].ps_score;
s[min].ps_score = t;
char name[20];
strcpy(name,s[min].name);
strcpy(s[min].name,s[j].name);
strcpy(s[j].name , name);
}
}
printf("排序完成\n");
}
void sortMenu(struct Student *s)
{
char ch;
while(1)
{
printf("\n********排序子系统******\n");
printf("1-------按总成绩选择排序\n");
printf("2-------按PS成绩冒泡排序\n");
printf("3-------按姓名选择排序\n");
printf("0-------退出\n");
printf("************************\n");
printf("请输入选项(0~3):");
scanf(" %c",&ch);
switch(ch)
{
case '1':sumSort(s);break;
case '2':psSort(s);break;
case '3':nameSort(s);break;
case '0':return ;break;
default:printf("输入错误,请重新输入!\n");
}
}
}
void idDelete(struct Student *s,int n)//n表示所要查找id的数组序号
{
for(int k=n-1;k<i-1;k++)
{
s[k].num = s[k+1].num;
s[k].c_score = s[k+1].c_score;
s[k].ps_score = s[k+1].ps_score;
strcpy(s[k].name,s[k+1].name);
}
i--;
}
void nameDelete(struct Student *s,int n)
{
for(int k=n;k<i-1;k++)
{
s[k].num = s[k+1].num;
s[k].c_score = s[k+1].c_score;
s[k].ps_score = s[k+1].ps_score;
strcpy(s[k].name,s[k+1].name);
}
i--;
}
void DeleteMenu(struct Student *s)
{
char ch;
int id;
char name[20];
while(1)
{
printf("\n********删除子系统******\n");
printf("1-------按Id删除\n");
printf("2-------按姓名删除\n");
printf("0-------退出\n");
printf("************************\n");
printf("请输入选项(0~2):");
scanf(" %c",&ch);
switch(ch)
{
case '1':
printf("请输入你要删除信息学生的学号:");
scanf("%d",&id);
if(searchId(s,id) != -1)
{
idDelete(s,searchId(s,id));
printf("删除完成!\n");
}
else
printf("当前系统中没有学生,请选择添加学生\n");
break;
case '2':
printf("请输入你要删除信息学生的名字:");
scanf("%s",name);
if(searchName(s,name) != -1)
{
nameDelete(s,searchName(s,name));
printf("删除完成!\n");
}
else
printf("当前系统中没有学生,请选择添加学生\n");
break;
case '0':return;break;
default:printf("输入错误,请重新输入!");
printf("删除完成!\n");
break;
}
printf("\n");
}
}
void nameUpdate(struct Student *s,int id)
{
for(int k = 0;k<i;k++)
{
if(id == s[k].num)
{
printf("更新前\n");
printf("学号\t姓名\tPS\tC语言\t\n");
printf("%d\t",s[k].num);
printf("%s\t",s[k].name);
printf("%d\t",s[k].ps_score);
printf("%d\t",s[k].c_score);
printf("\n请输入更新后的姓名:");
scanf("%s",&s[k].name);
printf("更新后\n");
printf("学号\t姓名\tPS\tC语言\t\n");
printf("%d\t",s[k].num);
printf("%s\t",s[k].name);
printf("%d\t",s[k].ps_score);
printf("%d\t",s[k].c_score);
}
break; }
}
void psUpdate(struct Student *s,int id)
{
for(int k = 0;k<i;k++)
{
if(id == s[k].num)
{
printf("更新前\n");
printf("学号\t姓名\tPS\tC语言\t\n");
printf("%d\t",s[k].num);
printf("%s\t",s[k].name);
printf("%d\t",s[k].ps_score);
printf("%d\t",s[k].c_score);
printf("\n请输入更新后的Ps的成绩:");
scanf(" %d",&s[k].ps_score);
printf("更新后\n");
printf("学号\t姓名\tPS\tC语言\t\n");
printf("%d\t",s[k].num);
printf("%s\t",s[k].name);
printf("%d\t",s[k].ps_score);
printf("%d\t",s[k].c_score);
}
break;
}
}
void cUpdate(struct Student *s,int id)
{
for(int k = 0;k<i;k++)
{
if(id == s[k].num)
{
printf("更新前\n");
printf("学号\t姓名\tPS\tC语言\t\n");
printf("%d\t",s[k].num);
printf("%s\t",s[k].name);
printf("%d\t",s[k].ps_score);
printf("%d\t",s[k].c_score);
printf("\n请输入更新后的c语言成绩是:");
scanf(" %d",s[k].c_score);
printf("更新后\n");
printf("学号\t姓名\tPS\tC语言\t\n");
printf("%d\t",s[k].num);
printf("%s\t",s[k].name);
printf("%d\t",s[k].ps_score);
printf("%d\t",s[k].c_score);
}
break;
}
}
void updateMenu(struct Student *s)
{
char ch;
int id;
while(1)
{
printf("\n********更新子系统******\n");
printf("1-------更新姓名\n");
printf("2-------更新PS成绩\n");
printf("3-------更新C语言成绩\n");
printf("0-------退出\n");
printf("************************\n");
printf("请输入选项(0~3):");
scanf(" %c",&ch);
if(ch !='0')
{
printf("请输入待更新学生的学号:");
scanf("%d",&id);
}
switch(ch)
{
case '1': nameUpdate(s,id);break;
case '2': psUpdate(s,id);break;
case '3': cUpdate(s,id);break;
case '0':return ;break;
default:printf("输入错误,请重新输入!");break;
}
printf("\n");
}
}
void store()
{
printf("")
}
void read()
{
}
int main()
{
char select;
while(1)
{
mainMenu();
printf("请输入(0~5):");
scanf(" %c",&select);//这里加空格,表示可以省略一切空字符
switch(select)
{
case '1':addStudent(s);break;
case '2':getNumOfStudents();break;
case '3':sortMenu(s);break;
case '4':show(s);break;
case '5':DeleteMenu(s);break;
case '6':searchMenu(s);break;
case '7':updateMenu(s);break;
case '8':statisticsMenu(s);break;
case 's':store();break;
case 'r':read();break;
case '0':exit(0);break;
default:printf("输入错误!");break;
}
printf("\n");
}
}