学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(39页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
计算机软件技术
实验
实验题目:
学生成绩管理系统
学院:
信息工程学院
专业:
计算机科学与技术
班级:
计科1102班
组员:
安飞(2011013711)
洪飞(2011013722)
俞杰(2011013759)
指导老师:
刘正余、郁书好
目录
一、设计目的
二、设计内容
三、设计的要求与数据
四、总体设计
五、详细设计
六、调试与测试
七.、源程序清单和执行结果
八、实验测试结果
九、建议和体会
十、分工与合作
一.设计目的
进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。
二.设计内容
对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输出、录入、查询、删除、排序、退出.将学生的成绩信息进行记录,信息内容包含:
(1)学生的学号
(2)学生的姓名(3)学生的成绩。
假设,现收集到了一个班部分学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
三.设计的要求与数据
1、用C语言实现系统;
2、对学生信息(包括学号、姓名、语文、数学、英语、平均分,总分)进行管理,包括学生成绩的信息输出、录入,查询、删除、排序、退出.
3、学生信息包括:
其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:
(1)每一条记录包括一个学生的学号、姓名、3门课成绩
(2)、成绩信息录入功能:
(成绩信息用文件保存,可以一次完成若干条记录的输入。
)
(3)、成绩信息显示浏览功能:
完成全部学生记录的显示。
(4)、查询功能:
完成按姓名查找学生记录,并显示。
(5)、成绩信息的删除:
按学号进行删除某学生的成绩.
(6)、排序功能:
按学生平均成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
四.总体设计
设计流程图如下:
五.详细设计
1.输入初始的学生信息:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用结构体来实现此操作。
2.查询模块:
可用来voidsearch(structstudentstu[])实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3.插入模块:
可用voidinsert(structstudentstu[])函数来实现。
其中通过学号的大小来比较的,并且以此来排序。
4.输出学生的信息以及成绩:
通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过voidoutput(structstudentstu[])来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5.退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
1.定义结构体及宏定义
#include"stdio.h"
#include"math.h"
#defineN30
structstudent
{
longintnum;
charname[10];
charsex[3];
intChinese,Math,English,total,average;
}stu[N]={{4001,"lks","m",100,100,100},{4002,"lyt","w",99,63,89},{4003,"asd","w",60,70,80},{4004,"fgh","m",41,100,98},
{4005,"asd","m",74,74,87},{4006,"yt","m",85,58,78},{4007,"qwe","w",74,100,87},{4008,"dcs","w",74,85,96},
{4009,"qfg","m",74,78,36},{4010,"gft","m",45,85,98},{4011,"mn","m",60,77,17},{4012,"yer","w",78,78,100},{4013,"lsd","m",100,89,85}},s;
intM=13;//学生个数
2.主函数main()
利用无限次循环for(;;)和swithch()进行菜单选择来实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
main()
{
intchoice,i;
for(i=0;i{
stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3;;
stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese;
}
for(;;)
{
printf("\n------学生管理系统------\n");
printf("1.输出学生记录\n");
printf("2.排序\n");
printf("3.查找学生记录\n");
printf("4.添加一个学生记录\n");
printf("5.删除一个学生记录\n");
printf("6.退出程序\n");
printf("请输入选择(1-7):
\n");
scanf("%d",&choice);
switch(choice)
{
case1:
output(stu);
break;
case2:
sort(stu);
break;
case3:
search(stu);
break;
case4:
insert(stu);
break;
case5:
delete(stu);
break;
case6:
exit();break;
}
}
}
3输出信息函数
voidoutput(structstudentstu[])
{
inti;printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
for(i=0;i{
printf("\t%4ld\t",stu[i].num);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
}
}
4、排序并显示函数
voidsort(structstudentstu[])
{
inti,j,t;
printf("1.英语成绩排名\n2.语文成绩排名\n3.数学成绩排名\n4.平均分成绩排名\n5.总分成绩排名\n");
scanf("%d",&t);
switch(t)
{
case1:
for(i=0;ifor(j=0;j{
if(stu[j].English{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case2:
for(i=0;ifor(j=0;j{
if(stu[j].Chinese{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case3:
for(i=0;ifor(j=0;j{
if(stu[j].Math{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case4:
for(i=0;ifor(j=0;j{
if(stu[j].average{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case5:
for(i=0;ifor(j=0;j{
if(stu[j].total{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
}
}
5查找并显示一个记录
intsearch(structstudentstu[])
{
longt,i,z,K='y';
charname[20];
printf("1.通过学号查找\n2.通过姓名查找\n");
scanf("%d",&z);
switch(z)
{
case1:
printf("请输入学号:
\n");
scanf("%ld",&t);
for(i=0;i{
if(stu[i].num==t)
{
K='x';
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%6d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
return(stu[i].num);
getche();
break;
}
}
if(K='y')
{
printf("Nofind");
getchar();
}
break;
case2:
printf("请输入姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(stu[i].name,name)==0)
{
K='x';
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%6d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
getche();
break;
}
}
if(K='y')
{
printf("Nofind");
getchar();
}
break;
}
}
6.添加并显示一个记录
voidinsert(structstudentstu[])
{
intt;
longnum;
charz;
t=M;
printf("inputnum:
");
scanf("%ld",&stu[t].num);
printf("inputname:
");
scanf("%s",stu[t].name);
printf("inputsex:
");
scanf("%s",stu[t].sex);
printf("inputscoreofChinese:
");
scanf("%d",&stu[t].Chinese);
printf("inputscoreofMath:
");
scanf("%d",&stu[t].Math);
printf("inputscoreofEnglish:
");
scanf("%d",&stu[t].English);
stu[t].average=(stu[t].English+stu[t].Math+stu[t].Chinese)/3;
stu[t].total=stu[t].English+stu[t].Math+stu[t].Chinese;
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[t].num);
printf("%s\t",stu[t].name);
printf("%s\t",stu[t].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[t].Chinese,stu[t].Math,stu[t].English,stu[t].total,stu[t].average);
M++;
printf("Next?
y/n?
?
?
");
scanf("%s",&z);
if(z=='y')
insert(stu);
}
7.删除并显示一个记录
voiddelete(structstudentstu[])
{
longt,i,z;charl,name[20];
printf("1.通过学号删除\n2.通过姓名删除\n");
scanf("%d",&z);
switch(z)
{
case1:
printf("请输入学号:
");
scanf("%ld",&t);
for(i=0;i{
if(stu[i].num==t)
{
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
break;
}
}
printf("Goon?
y/n?
?
?
");
scanf("%s",&l);
if(l=='y')
{
for(;i{
stu[i]=stu[i+1];
}
stu[M-1].num=0;
output(stu);
}
else
break;
case2:
printf("请输入姓名:
");
scanf("%s",name);
for(i=0;i{
if(strcmp(stu[i].name,name)==0)
{
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
break;
}
}
printf("Goon?
y/n?
?
?
");
scanf("%s",&l);
if(l=='y')
{
for(;i{
stu[i]=stu[i+1];
}
stu[M-1].num=0;
output(stu);
}
else
break;
}
}
六.调试与测试
问题一.学生初始信息模块:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数voidinsert(structstudentstu[])来实现此操作。
当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。
解决办法及步骤:
1.一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。
2.既然有此学生,那么检查循环判断是否有此学生的语句发现没有错
3.输出用于循环检查语句中的学生信息,发现乱码
4.仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。
问题二.查询模块
可用voidsort(structstudentstu[])来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
解决办法及步骤:
1.检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
2.检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。
七.源程序清单和执行结果
#include"stdio.h"
#include"math.h"
#defineN30
structstudent
{
longintnum;
charname[10];
charsex[3];
intChinese,Math,English,total,average;
}stu[N]={{4001,"lks","m",100,100,100},{4002,"lyt","w",99,63,89},{4003,"asd","w",60,70,80},{4004,"fgh","m",41,100,98},
{4005,"asd","m",74,74,87},{4006,"yt","m",85,58,78},{4007,"qwe","w",74,100,87},{4008,"dcs","w",74,85,96},
{4009,"qfg","m",74,78,36},{4010,"gft","m",45,85,98},{4011,"mn","m",60,77,17},{4012,"yer","w",78,78,100},{4013,"lsd","m",100,89,85}},s;
intM=13;//学生个数
voidoutput(structstudentstu[])
{
inti;printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
for(i=0;i{
printf("\t%4ld\t",stu[i].num);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
}
}
voidsort(structstudentstu[])
{
inti,j,t;
printf("1.英语成绩排名\n2.语文成绩排名\n3.数学成绩排名\n4.平均分成绩排名\n5.总分成绩排名\n");
scanf("%d",&t);
switch(t)
{
case1:
for(i=0;i