C语言学生成绩管理系统设计Word文档下载推荐.docx
《C语言学生成绩管理系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统设计Word文档下载推荐.docx(28页珍藏版)》请在冰点文库上搜索。
![C语言学生成绩管理系统设计Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/208a97fc-e7db-4c5b-b056-fe7af439fa12/208a97fc-e7db-4c5b-b056-fe7af439fa121.gif)
显示全部学生的具体信息。
修改模块:
修改某个学生的成绩信息。
删除模块:
删除某个学生的全部信息。
查询模块:
查询某个学生的具体信息。
统计模块:
通过功能选择,统计并显示某一科目的平均分或某分数段学生的具体信息。
图1.1功能模块图
第2章详细设计
2.1主模块
控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。
Y
NN
Y
图2.1主模块流程图
注释:
1.显示主菜单;
2.选择不同序号执行不同功能;
2.2输入模块
输入所有学生信息并保存,流程如图2.2所示。
图2.2输入模块流程图
1.循环输入每个学生的信息;
2.保存所有信息
2.3显示模块
显示所有学生的具体信息,流程图如2.3所示。
图2.3显示模块流程图
1.选择号好功能;
2.显示全部学生的具体信息。
2.4修改模块
修改某个学生各个科目的成绩,流程图如2.4所示。
N
图2.4修改模块流程图
1.输入要修改学生的学号;
2.输入要修改的科目信息;
3.修改成功,是否要继续修改。
是,继续;
否,回到主菜单。
2.5删除模块
按学号删除某学生的全部信息,流程图如图2.5所示。
N
N
图2.5删除模块流程图
1.输入要删除的学生的学号;
2.显示该生信息,是否删除。
是,删除;
否,是否继续操作。
3.是否继续删除。
是,重复上述操作;
否,退出回到主菜单。
2.6查询模块
输入要查询学生的学号,显示该生具体信息,流程图如图2.6所示。
N图2.6查询模块流程图
1.输入要查询的学生的学号;
2.显示该生的具体信息;
3.是否继续查询。
是,继续查询下一位;
2.7统计模块
通过选择不同功能,显示某个科目的平均分或某分数段学生的具体信息,流程图如图2.7所示。
case‘a’:
case‘b’:
图2.7统计模块流程图
1.通过菜单选择科目;
2.通过菜单选择a或b功能,分别显示该科目平均分或某分数段学生信息;
3.是否继续查询?
第3章调试分析
在这次课程设计中,程序编写的过程中遇到了很多问题,主要是函数实现方面问题较多。
问题1:
查询函数chaxun()中,会造成数据混乱,原因是for循环中某行代码运用错误,如下:
for(i=0;
i<
n;
i++)
{
if(stu[i].num==x)
k=i;
/*找到要查询的同学学号,并用k记下其下标*/
}
OutputOneStudent(k);
将OutputOneStudent(k);
拿出后,查询功能正常实现。
正确编写如下:
OutputOneStudent(k);
问题2:
统计函数tongji(),功能实现完后不能回到主菜单。
解决方法是,把功能函数gongneng()其中的while循环删掉。
第4章使用说明
运行截图如下:
1.输入成绩
2.信息显示
3.修改信息
4.删除信息
5.查询信息
6.1统计信息----科目平均分
6.2统计信息----科目某分数段学生信息
7.退出系统
参考文献
1.王敬华,《C语言程序设计教程(第二版)》,清华大学出版社,2009年8月
2.谭浩强,《C语言程序设计教程(第二版)》,清华大学出版社,1999年12月
3.谭浩强,《C语言程序设计题解与上机指导》,清华大学出版社,2000年11月
4.田淑清,《C语言程序设计辅导与习题集》,中国铁道出版社,2000年1月
5.张荣梅、梁晓林,《VisualC++实用教程》,冶金工业出版社,2004年
附录(程序清单)
程序代码:
#include<
stdio.h>
string.h>
stdlib.h>
#defineN3
structstudent
{
intnum;
//学号
charname[20];
//姓名
floatscore[3];
//三门课成绩
floatsum;
//总分
floataver;
//平均分
}stu[N];
voidmenu();
//主菜单功能
voidinput();
//输入信息到结构体中
voidsave(intx);
//保存stud.dat文件函数
voidprint();
//输出显示所有学生信息
voidSaveAllStudent(intn);
//保存全部学生信息
voidxiugai(intn);
//按学号修改成绩
intshanchu(intn);
//按学号删除
voidOutputOneStudent(inti);
//查询一个学生的信息
voidchaxun(intn);
//按学号查询成绩
voidtongji();
//统计科目信息
voidgongneng(intx);
//a或b功能分别显示科目平均分或分数段学生信息
intmain()
printf("
***********************************************************\n"
);
**\n"
*Hwadee&
学生成绩管理系统&
Hwadee*\n"
******************************************************\n\n\n"
****************●●欢迎使用●●*******************\n"
while
(1)
menu();
return0;
}
/*主菜单***********************************************************/
voidmenu()
intchoice;
intn=N;
\n请选择功能:
\n"
\n1:
输入成绩\n2:
显示信息\n3:
修改成绩\n4:
删除信息\n5:
查询成绩\n6:
成绩统计\n0:
退出系统\n\n"
\n请选择序号:
scanf("
%d"
&
choice);
switch(choice)
case1:
input();
save(N);
break;
case2:
print();
case3:
xiugai(n);
case4:
shanchu(n);
case5:
chaxun(n);
case6:
tongji();
case0:
printf("
\n谢谢使用,再见!
\n\n"
exit(-1);
default:
printf("
输入错误!
/*写入函数****************************************************/
voidinput()
inti,j;
\n输入信息\n"
N;
输入学号:
"
scanf("
stu[i].num);
输入姓名:
%s"
stu[i].name);
for(j=0;
j<
j++)
{
printf("
第%d门成绩的分数:
j+1);
scanf("
%f"
stu[i].score[j]);
}
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver=stu[i].sum/3;
/*写入文件***********************************************************/
voidsave(intx)
FILE*fp;
/*定义文件指针用于向文件读入数据*/
inti;
if((fp=fopen("
student.dat"
"
rb+"
))==NULL)/*以二进制读,写方式打开文件*/
cannotopenfile\n"
exit
(1);
if(fwrite(&
stu[i],sizeof(structstudent),1,fp)!
=1)
filewriteerror\n"
fclose(fp);
\n\n信息保存成功!
恭喜!
!
/*显示全部学生信息**************************************************/
voidprint()
学号姓名语文数学英语总分平均分\n"
%d%s%.2f%.2f%.2f%.2f%.2f\n"
stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].aver);
/*保存全部学生信息******************************************8*/
voidSaveAllStudent(intn)
wb"
))==NULL)
文件打开失败!
fwrite(stu,sizeof(structstudent),n,fp);
/*修改学生信息************************************************/
voidxiugai(intn)
structstudenttemp;
intk=-1,x,i;
charc1='
y'
;
while(c1=='
)
\n请输入要修改的同学的学号:
x);
if(x==stu[i].num)
/*找到要修改的同学学号,并用k记下其下标*/
break;
if(k<
0)
\n输入学号有误,请重新输入!
else
\n请输入要修改学生修改后的的信息\n"
语文(空格)数学(空格)英语\t\n"
%f%f%f"
temp.score[0],&
temp.score[1],&
temp.score[2]);
temp.sum=(temp.score[0]+temp.score[1]+temp.score[2]);
temp.aver=(temp.score[0]+temp.score[1]+temp.score[2])/3;
stu[k].score[0]=temp.score[0];
/*修改该学生信息*/
stu[k].score[1]=temp.score[1];
stu[k].score[2]=temp.score[2];
stu[k].sum=temp.sum;
stu[k].aver=temp.aver;
\n修改成功!
SaveAllStudent(k);
\n继续修改操作吗?
\n继续修改请按y;
不进行修改请按n\n"
getchar();
c1=getchar();
\n按任意键继续!
getchar();
/*删除学生信息*************************************************/
intshanchu(intn)
inti,k=-1,x;
c2;
c2='
n'
\n请输入要删除的同学的学号:
/*找到要删除的同学学号,并用k记下其下标*/
\n该同学信息如下:
\n\n确定删除?
确定进行删除请按y;
不进行删除请按n\n"
getchar();
c2=getchar();
if(c2=='
for(i=k;
{
stu[i]=stu[i+1];
}
n--;
/*学生人数减1*/
\n删除成功!
\n取消删除!
\n继续删除操作吗?
\n继续删除请按y;
c1=getchar();
save(n);
return(n);
/*查询一个学生信息********************************************/
voidOutputOneStudent(inti)
学号:
%d姓名:
%s\n"
stu[i].num,stu[i].name);
语文:
%.1f数学:
%.1f英语:
%.1f总分:
%.1f平均分:
%.2f\n"
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].aver);
/*按学号查询学生信息**************************************/
voidchaxun(intn)
inti,j,k,x;
charc='
while(c=='
k=-1;
\n请输入学生学号:
if(x>
3||x<
1)
stu[x-1].num=1;
//该生排名
for(j=0;
3;
if(stu[j].sum>
stu[x-1].sum)
stu[x-1].num++;
\n该生排名为第%d名。
stu[x-1].num);
\n\n继续查询其他学生信息吗?
\n继续查询请按y;
不进行查询请按n\n"
c=getchar();
/*学生信息统计操作**********************************************/
voidtongji()
intx;
\n输入一个科目:
\n\n1:
语文\n2:
数学\n3:
英语\n0:
退出"
\n\n请选择序号:
if(x>
0&
&
x<
6)
switch(x)
case1:
gongneng(x);
break;
case2:
case3:
gongneng(x);
case0:
exit(-1);
break;
default:
printf("
\n\n继续查询其他科目信息吗?
/*选择a或b来分别显示该科平均分或统计分数段学生****************/
voidgongneng(intx)
\n\n请选择功能:
\na:
显示该科目平均分\nb:
统计分数段学生\n"
\n请选择a或b:
charc;
c);
switch(c)
case'
a'
:
floatave;
ave=(stu[0].score[x-1]+stu[1].score[x-1]+stu[2].score[x-1])/3;
\n\n该科目的平均成绩为:
ave);
case'
b'
floatm,n;
intz;
floatfenshu;
\n请输入分数段:
__空格__\n"
%f%f"
m,&
n);
z=0;
{
fenshu=stu[i].score[x-1];
if(fenshu>
m&
fenshu<
=n)
{
\n\n学生信息为:
OutputOneStudent(i);
z++;
}
else
continue;
}
\n\n学生总数为:
%d\n"
z);
课程设计总结:
经过几天的课程设计,我学到了很多东西:
①巩固和加深了对编程的理解,提高了综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。
培养了独立思考,深入研究,分析问题、解决问题的能力。
③经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
课程设计是我们把所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并未走向社会打下了一个良好的基础。
在这次课程设计中我遇到了很所问题和麻烦,得到了老师和同学们的帮助和指导,才能够使得这次课程设计顺利的进行下去。
在此对老师和同学们表示万分感谢!
指导教师评语:
指导教师(签字):
年月日
课程设计成绩