C语言学生成绩管理系统设计.docx
《C语言学生成绩管理系统设计.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统设计.docx(21页珍藏版)》请在冰豆网上搜索。
![C语言学生成绩管理系统设计.docx](https://file1.bdocx.com/fileroot1/2023-2/22/37eda0b0-4b73-4374-af34-56bd63b8950d/37eda0b0-4b73-4374-af34-56bd63b8950d1.gif)
C语言学生成绩管理系统设计
说明
1、设计的目的
1)复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握;
2)利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力;
3)培养学生在项目开发中团队合作精神、创新意识及实战能力。
2、设计的任务
根据学生的实际情况,进行分组选题。
主要的课程设计题目如下(学生也可自主选题):
1、图书管理系统2、学生信息管理系统
3、学生成绩管理系统4、学生通讯录管理系统
5、职工信息管理系统6、设计简单的计算器
课程设计采用学生自主设计和指导老师辅导相结合的方式。
3、设计要求与设计报告
设计要求:
1、任选上述题目之一,或自选题目。
2、模块化的程序设计
3、锯齿形的程序书写格式。
4、必须通过编译连接运行
设计报告:
1、设计目的和任务
2、总体设计:
包括程序设计组成框图、流程图。
3、详细设计:
包括模块功能说明:
函数功能、入口及出口参数说明,函数调用关系描述等。
4、调试与测试:
包括调试方法,测试结果分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
5、源程序清单和执行结果:
清单中应有足够的注释。
设计目的和任务
(主要介绍设计的任务,为什么要设计,设计要达到什么样的目的。
)
设计目的:
(1)基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
程序功能:
(1).学生基本信息及成绩所选科目成绩的录入。
(2).基本信息的查询(分系、班级;分科目)与修改。
(3).对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
(4).对所开课程的成绩分析(求其平均成绩,最高分和最低分);
(5).对学生考试成绩进行排名;
目录
一、总体设计1
二、详细设计1
三、调试与测试1
四、源程序清单和执行结果1
五、建议和体会1
六、参考文献1
一:
总体设计
设计流程图如下:
二、详细设计
1、输入初始的学生信息:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu*p1)来实现此操作。
2、查询模块:
可用stu*lookdata(stu*p1)来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3、插入模块:
可用insert()函数来实现。
其中通过学号的大小来比较的,并且以此来排序。
4、输出学生的信息以及成绩:
通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
三、调试与测试
四、源程序设计和测试结果
五、建议和体会
六、参考文献
指导教师的评语及评分
考核小组意见及评分
综合评分
三:
调试与测试
问题一、学生初始信息模块:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu*p1)来实现此操作。
当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。
解决办法及步骤:
1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。
2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错
3、输出用于循环检查语句中的学生信息,发现乱码
4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。
问题二、查询模块:
可用stu*lookdata(stu*p1)来实现。
找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
解决办法及步骤:
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;
voidmodify(structstudentstu[])
{
intt;longnum;charz;
t=search(stu)-400;
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);
printf("Next?
y/n?
?
?
");
scanf("%s",&z);
if(z=='y')
modify(stu);
}
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.anyingyuchengchejipaixu\n2.anyuwenchengjipaixu\n3.anshuxuechengjipaixu\n4.anpingjuechengjipaixu\n5.anzongfenpaixu\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;
}
}
intsearch(structstudentstu[])
{
longt,i,z,K='y';charname[20];
printf("1.anxuehaochazhao\n2.anxingmingchazhao\n");
scanf("%d",&z);
switch(z)
{
case1:
printf("qingshuruxuehao:
\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("qingshuruxingming:
");
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;
}
}
voidinsert(structstudentstu[])
{
inti;charz='y';
for(i=M;i<=N&&z=='y';i++)
{
printf("inputnum:
");
scanf("%ld",&stu[i].num);
printf("inputname:
");
scanf("%s",stu[i].name);
printf("inputname:
");
scanf("%s",stu[i].sex);
printf("inputscoreofChinese:
");
scanf("%d",&stu[i].Chinese);
printf("inputscoreofMath:
");
scanf("%d",&stu[i].Math);
printf("inputscoreofEnglish:
");
scanf("%d",&stu[i].English);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;
printf("Next?
y/n?
?
?
");
z=getche();
if(z!
='y')
{
M=i+1;
sort(stu);
output(stu);
}
}
}
voiddelete(structstudentstu[])
{
longt,i,z;charl,name[20];
printf("1.anxuehaoshanchu/n2.anxingmingchanchu");
scanf("%d",&z);
switch(z)
{
case1:
printf("qingshuruxuehao:
");
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("qingshuruxingming:
");
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;
}
}
main()
{
intchoice,i;
clrscr();
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------xueshengchengjiguanlixitong------\n");
printf("1.modifyxueshengjilu\n");
printf("2.outputxueshengjilu\n");
printf("3.sortxueshengjilu\n");
printf("4.searchxueshengjilu\n");
printf("5.insertxueshengjilu\n");
printf("6.deletexueshengjilu\n");
printf("7.exit\n");
printf("plleaseinput(1-7):
\n");
scanf("%d",&choice);
switch(choice)
{
case1:
modify(stu);
break;
case2:
output(stu);
break;
case3:
sort(stu);
break;
case4:
search(stu);
break;
case5:
insert(stu);
break;
case6:
delete(stu);
break;
case7:
exit();break;
}
}
getch();
}
五:
建议和体会
本学期我们的C语言程序设计课程的考试题目是让学生自主设计。
全班共分了6个小组,我们3组需要完成的题目是设计学生成绩管理系统。
C语言的实质就是以一定的语法规范为准,通过对数据量的复杂结构运算,完成一定功能的程序,是一门计算机基础语言,我们通过这一学期的学习,对于其特点和算法有了一定程度的了解。
这两周的课程设计正是让我们巩固以前的知识并在此基础上能够有所突破。
在大家的共同努力下,忙碌了两个星期,我们顺利完成了对此程序的编译及试运行。
在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。
另外平时学习c语言的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。
为了解决此类问题,最好就是多向同学,老师请教,查找资料。
设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:
首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。
感谢这次的课程设计,它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。
当然团队合作也是非常重要的一个环节,这会使你在学习过程中倍感轻松,所以在此次课程设计过程中,通过我们小组全体成员共同努力,终于完成了这个学生管理系统的设计。
总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:
C语言功能高、表达能力强、使用灵活