〔问题描述〕学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。本项目是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改学生数据;删除学生数据。
〔基本要求〕本项目的实质是完成对学生成绩信息的建立、查找、插入、修改、删除、排序等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。学生的考试成绩必须通过键盘输入,且需对输出进行格式控制。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 15
#define N 100
struct record
{
int code;
char name[LEN+1];
int age;
char sex[3];
float score[3];
}stu[N];
int n=0;
void insert();
void output();
void sort();
void seak();
void del();
void modify();
int main()
{int t=1;
while(t!=0){
printf(" 菜单栏 \n\n " );
printf("------------1:输入信息 ----------------------2:显示信息\n" );
printf("------------3:按学号从小到大进行排序--------4:查找\n" );
printf("------------5:删除学生信息-------------------6:修改学生信息\n");
printf("------------0:退出------------\n");
printf("请选择你要执行的操作");
scanf("%d",&t);
switch(t){
case 1:insert();break;
case 2:output();break;
case 3:sort();break;
case 4:seak();break;
case 5:del();break;
case 6:modify();break;
}
}}
void insert()
{
int m,i;
printf("要输入几个人的信息:");
scanf("%d",&m);
for(i=n;i<n+m;i++)
{
printf("请输入第%d位学生的学号:\n",i+1);
scanf("%d",&stu[i].code);fflush(stdin);
printf("请输入第%d位学生的姓名:\n",i+1);
scanf("%s",stu[i].name);fflush(stdin);
printf("请输入第%d位学生的年龄:\n",i+1);
scanf("%d",&stu[i].age);fflush(stdin);
printf("请输入第%d位学生的性别:\n",i+1);
scanf("%s",&stu[i].sex);fflush(stdin);
printf("请输入第%d位学生的C语言成绩:\n",i+1);
scanf("%f",&stu[i].score[0]);fflush(stdin);
printf("请输入第%d位学生的高数成绩:\n",i+1);
scanf("%f",&stu[i].score[1]);fflush(stdin);
printf("请输入第%d位学生的大学英语成绩 :\n",i+1);
scanf("%f",&stu[i].score[2]);}system("pause");
n=n+m;
}
void output()
{
int i=0;
printf("有 %d 个人\n",n);
for(i=0;i<n;i++){
printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%d %7s %6d %3s %10.1f %10.1f %10.1f\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}
system("pause");
}
void sort()
{ int i,j;char temp [7];
int a,b,c,d;
for(j=0;j<n-1;j++)
for(i=0;i<n-j-1;i++)
{
if(stu[i].code>stu[i+1].code){
a=stu[i+1].code;stu[i+1].code=stu[i].code;stu[i].code=a;
b=stu[i+1].score[0]; stu[i+1].score[0]=stu[i].score[0]; stu[i].score[0]=b;
c=stu[i+1].score[1]; stu[i+1].score[1]=stu[i].score[1]; stu[i].score[1]=c;
d=stu[i+1].score[2]; stu[i+1].score[2]=stu[i].score[2]; stu[i].score[2]=d;
a=stu[i+1].age;stu[i+1].age=stu[i].code;stu[i].age=a;
strcpy(temp,stu[i].name);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i+1].name,temp);
strcpy(temp,stu[i].sex);
strcpy(stu[i].sex,stu[i+1].sex);
strcpy(stu[i+1].sex,temp);}
}
}
void seak()
{
int i,k,t=0;
printf("请输入你要查找的学生的学号");
scanf("%d",&k);
for(i=0;i<n;i++)
if(stu[i].code==k){
printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%d %7s %6d %3s %10.1f %10.1f %10.1f\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);t=1;
}
if(t==0)
printf("该学生不存在\n");
system("pause");}
void del()
{
char a[10];int i,j;int t=0;
printf("请输入你要删除的学生的姓名:");
scanf("%s",a);
for(i=0;i<n;i++)
if( strcmp(stu[i].name,a)==0)
{ for(j=i;j<n-1;j++){
stu[j]=stu[j+1];
}
n--;t=1;}if(t==0)
printf("该学生不存在\n");
}
void modify()
{ int a,i,b;
int c,d,e,f,g;char s1[10],s2[10];
printf("请输入你要修改的学生的学号:\n");
scanf("%d",&a);
printf("请选择你要修改的内容\n");
printf("1:姓名\n 2:学号\n 3:性别 \n 4:年龄 \n5:C语言成绩 \n 6:高等数学 \n 7:大学英语成绩\n");
scanf("%d",&b);
for(i=0;i<n;i++)
if(a==stu[i].code){
switch(b)
{case 1:printf("请输入修改后的学生的姓名:\n");scanf("%s",s1);strcpy(stu[i].name,s1);break;
case 2:printf("请输入修改后学生的学号:\n");scanf("%d,&c");stu[i].code=c;break;
case 3:printf("请输入修改后的学生的姓别:\n");scanf("%s",s2);strcpy(stu[i].sex,s2);break;
case 4:printf("请输入修改后的学生的年龄:\n");scanf("%d,&d");stu[i].age=d;break;
case 5:printf("请输入修改后的学生的c语言成绩:\n"); scanf("%d,&e") ; stu[i].score[0]=e;break;
case 6:printf("请输入修改后的学生的高数成绩:\n");scanf("%d,&f"); stu[i].score[1]=f;break;
case 7:printf("请输入修改后的学生的大学英语成绩:\n");scanf("%d,&g") ; stu[i].score[2]=g;break;}}}