C语言实验报告之成绩管理.docx
《C语言实验报告之成绩管理.docx》由会员分享,可在线阅读,更多相关《C语言实验报告之成绩管理.docx(11页珍藏版)》请在冰豆网上搜索。
C语言实验报告之成绩管理
实验报告———成绩管理
一、实验内容:
实验名称:
成绩管理
实验目的:
设计一个学生成绩管理程序,有插入、删除、显示和统计等功能。
实验要求:
(1)设计友好的中文交互界面。
(2)输入一个班的学生多门成绩,存储在文件中。
(3)添加或删除一个学生的成绩。
(4)统计学生的最高成绩,最低成绩,平均分和其它统计信息,并将统计结果写入文件。
二、算法说明:
S1:
宏定义参数N的大小取决于想要储存资料的学生人数,可由编程者修改,此次程序暂定为50.
S2:
定义一个包含学号、姓名、3门成绩和平均成绩的结构体
S3:
定义主菜单函数
S4:
定义实现显示学生信息功能的子函数
S5:
定义实现冒泡排序功能的子函数
S6:
定义实现插入学生功能的子函数
S7:
定义实现删除学生功能的子函数
S8:
定义实现按学号查询功能的子函数
S9:
开始主函数,设计一个友好的中文界面
S10:
调用各个先前定义的子函数来实现各功能
三、程序清单;
#include
#include
#include
#defineN50
structstudent
{
intnum;//学号
charname[15];//姓名
doublescore[3];//3门成绩
doubleave;//平均成绩
};
voidmenu();//显示主菜单
structstudentinput();//输入函数
voiddisplay(structstudents[],inttotal);//显示学生信息
voidsort(structstudents[],inttotal);//冒泡排序
voidinsert(structstudents[],inttotal);//插入学生(自动排序)
intdel(structstudents[],inttotal);//删除学生
voidsearchNum(structstudents[],inttotal);//按学号查询
voidmain()
{
structstudentstu[N];
charch;
inttotal=0,select;//total为学生总数,select为选择
do{
system("cls");
menu();
printf("请输入你的选择:
");
fflush(stdin);
scanf("%d",&select);
system("cls");
switch(select)
{
case1:
do
{
system("cls");
stu[total]=input();
total++;//人数+1
printf("是否继续(Y/N):
");
fflush(stdin);
ch=getchar();
}while(ch=='Y'||ch=='y');
printf("\n");
break;
case2:
display(stu,total);//显示
printf("\n");
break;
case3:
sort(stu,total);//排序
display(stu,total);//显示
break;
case4:
searchNum(stu,total);
break;
case5:
do
{
system("cls");
display(stu,total);//显示
insert(stu,total);//插入
total++;//人数+1
system("cls");
display(stu,total);//显示
printf("是否继续插入学员(Y/N):
");
fflush(stdin);
ch=getchar();
printf("\n");
}while(ch=='Y'||ch=='y');
break;
case6:
do
{
system("cls");
display(stu,total);//显示
if(del(stu,total))//删除
{
total--;//人数-1
system("cls");
display(stu,total);//显示
}
else
{
printf("该学号不存在\n");
system("pause");
system("cls");
display(stu,total);
}
printf("是否继续删除学员(Y/N):
");
fflush(stdin);
ch=getchar();
printf("\n");
}while(ch=='Y'||ch=='y');
break;
case7:
printf("此操作将删除所有记录,是否继续(Y/N):
");
fflush(stdin);
ch=getchar();
if(ch=='Y'||ch=='y')
{
total=0;
}
break;
default:
printf("真的要退出吗(Y/N):
");
fflush(stdin);
ch=getchar();
printf("\n\n\t\t");
if(ch=='y'||ch=='Y')
{
exit(0);
}
break;
}
system("pause");
}while
(1);
}
structstudentinput()//输入函数
{
inti;
doublesum=0;
structstudenttemp;
printf("\n请输入学号:
");
scanf("%d",&temp.num);
printf("\n请输入姓名:
");
fflush(stdin);
gets(temp.name);
printf("\n请输入数学成绩:
");
scanf("%lf",&temp.score[0]);
printf("\n请输入语文成绩:
");
scanf("%lf",&temp.score[1]);
printf("\n请输入英语成绩:
");
scanf("%lf",&temp.score[2]);
for(i=0;i<3;i++)
{
sum+=temp.score[i];
}
temp.ave=sum/3;
returntemp;
}
voiddisplay(structstudents[],inttotal)//输出函数
{
inti;
printf("学号姓名语文数学英语平均\n\n");
for(i=0;i{
printf("%d%s%.2f%.2f%.2f%.2f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].ave);
}
}
voidsort(structstudents[],inttotal)//排序
{
inti,j;
structstudenttemp;
for(i=0;i{
for(j=0;j{
if(s[j].ave
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
}
voidinsert(structstudents[],inttotal)//插入
{
structstudenttemp;
inti,k;
temp=input();
for(i=0;i{
if(temp.ave>s[i].ave)
break;
}
k=i;
for(i=total;i>k;i--)
{
s[i]=s[i-1];
}
s[k]=temp;
}
intdel(structstudents[],inttotal)//删除
{
inttemp,i,j;
printf("请输入要删除的学号:
");
scanf("%d",&temp);
for(i=0;i{
if(temp==s[i].num)
break;
}
if(i{
for(j=i;j{
s[j]=s[j+1];
}
return1;
}
else
{
return0;
}
}
voidmenu()
{
printf("学生管理系统\n");
printf("1.输入学生信息\n");
printf("2.显示学生信息\n");
printf("3.排序学生信息\n");
printf("4.查询学生信息\n");
printf("5.插入学生信息\n");
printf("6.删除学生信息\n");
printf("7.清除记录\n");
printf("8.退出\n");
}
voidsearchNum(structstudents[],inttotal)//查询
{
intnum,i;
printf("请输入要查询的学号:
\n");
scanf("%d",&num);
printf("\n");
for(i=0;i{
if(num==s[i].num)
break;
}
if(i{
printf("学号姓名语文数学英语平均\n\n");
printf("%d%s%.2f%.2f%.2f%.2f\n\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].ave);
}
else
printf("\t该学号不存在\n");
}
四、运行结果:
原始界面:
学生管理系统
1.输入学生信息
2.显示学生信息
3排序学生信息
4.查询学生信息
5.插入学生信息
6.删除学生信息
7.清除记录
8.退出
请输入你的选择:
输入:
1回车,输出请输入学号:
请输入姓名:
请输入数学成绩:
请输入语文成绩:
请输入英语成绩:
是否继续(Y/N):
若输入Y,则进行下一个学生的记录,输入N,按任意键返回主菜单
2回车,输出学号姓名语文数学英语平均
(下面分别是输入的学生的学生信息的显示)
按任意键返回主菜单
3回车,输出学号姓名语文数学英语平均
(下面分别是输入的学生的学生信息的排序)
按任意键返回主菜单
4回车,输出请输入要查询的学号:
输入正确学号显示该学生信息,若输入的学号不在第一步输入的学生信息中,则显示“该学号不存在”
按任意键返回主菜单
5回车,输出学号姓名语文数学英语平均
请输入学号:
请输入姓名:
请输入数学成绩:
请输入语文成绩:
请输入英语成绩:
学号姓名语文数学英语平均
(下面是插入的学生的学生信息的显示)
是否继续插入学员(Y/N):
若输入Y,则进行下一个学生信息的插入,输入N,按任意键返回主菜单
6回车,输出学号姓名语文数学英语平均
(下面是所有输入的学生的学生信息的显示)
请输入要删除的学号:
学号姓名语文数学英语平均
(输入要删除的学号后,该学号的学生信息将不在此列表显示)
是否继续删除学员(Y/N):
若输入Y,则进行下一个学生信息的删除,输入N,按任意键返回主菜单
7回车,输出此操作将删除所有记录,是否继续(Y/N):
若输入Y,则删除所有学生信息的记录,并按任意键返回主菜单,输入N,按任意键返回主菜单
8回车,输出真的要退出吗(Y/N):
若输入Y,按任意键退出主菜单,输入N,按任意键返回主菜单
五、分析与思考:
这个程序的设计参考了大量的网上资料并结合自己所学的知识修改完善,多次调试后基本上完成了题目所要求的功能,因自己有关文件方面知识的不足,故学生信息的储存选择为逐项输入。
希望下次可以在这方面得到提高。