C语言程序设计学生成绩管理系统课程设计报告.docx
《C语言程序设计学生成绩管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计学生成绩管理系统课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
C语言程序设计学生成绩管理系统课程设计报告
重庆科技学院
《C语言程序设计》
课程设计报告
学院:
_电气与信息工程学院_专业班级:
自动化2013-03
学生姓名:
高跃跃学号:
设计地点(单位)_____计算机基础自主学习中心_______设计题目:
《学生成绩管理系统》的设计与实现
完成日期:
2014年09月25日
指导教师评语:
_______________________________________
____________________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
________________指导教师(签字):
________________
课程设计任务书
设计题目:
《学生成绩管理系统》的设计与实现
学生姓名
高跃跃
课程名称
C语言课程设计
专业班级
自动化2013
地点
计算机基础自主学习中心
起止时间
2014.9.9-2014.9.26
设计内容及要求
内容
强化C语言中有关结构体数组及外部文件的内容,独立设计学生成绩管理系统,并编程实现以下功能:
1、整个系统均用C语言实现;
2、利用结构体数组来实现学生成绩的数据结构设计;
3、系统具有输入、显示、查询、删除、排序、插入、保存、读取等基本功能;
4、系统的各个功能模块都用函数的形式来实现;
5、要求能将学生成绩信息保存在文件中;
6、要求能从文件中读取学生信息并进行相关处理。
设计参数
1、每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
2、输入功能:
进入后可以进行多条记录的输入并保存。
3、显示功能:
完成全部学生或满足指定条件记录的显示。
4、查找功能:
完成按学号或姓名查找学生记录,并显示。
5、排序功能:
按学生学号或平均成绩进行排序。
6、插入功能:
按学生学号或平均成绩高低插入一条学生记录。
7、保存功能:
将学生记录保存在自定义名称的文件中。
8、读取功能:
将保存在文件中的学生记录读取出来。
9、有一个文本菜单来调用各个功能。
进度要求
1.布置设计题目,讲解要求和说明2014.9.9
2.确定设计任务,确定具体的功能,熟悉相关知识2014.9.9
3.按功能需求确定程序的主要模块2014.9.10
4.编程实现程序的功能2014.9.11–2014.9.15
5.调试并完善程序2014.9.16–2014.9.22
6.撰写课程设计报告2014.9.23-2014.9.24
7.提交课程设计报告并答辩2014.9.25
其它
谭浩强,《C语言程序设计(第三版)》,清华大学出版社,2005.2
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共享的,在设计内容、参数、要求等方面应有所区别。
摘要
学生成绩管理系统是为了实现学校对学生成绩管理的系统化、规范化和自动化,从而提高学校管理效率而设计的。
它完全取代了原来一直用人工管理的工作方式,避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误,为及时、准确、高效的完成学生成绩管理提供了强有力的工具和管理手段。
学生成绩管理系统是一个中小型数据库管理系统,它界面美观、操作简单、安全性高,基本满足了学生成绩管理的要求。
本系统是在以MicrosoftVisualC++6.0作为后台来开发的。
学生成绩管理系统在运行阶段,效果好,数据准确性高,提高了工作效率,同时也实现了学生成绩管理计算机化。
关键词:
成绩管理系统C语言
1.软件需求说明1
1.1程序的界面要求1
1.2程序的功能1
2.程序的分析与设计1
2.1程序的数据结构分析4
2.2程序的算法设计6
3.程序的实现7
3.1主函数7
3.2定义数据结构8
4.程序试用说明10
4.1主页面11
4.2录入信息页面18
5.总结19
5.1致谢19
5.2参考文献19
1.软件需求说明
1.1程序的界面要求
①整个系统均用C语言实现;
②利用结构体数组来实现学生成绩的数据结构设计;
③系统具有输入、显示、查询、删除、排序、插入、保存、读取等基本功能;
④系统的各个功能模块都用函数的形式来实现;
⑤要求能将学生成绩信息保存在文件中;
⑥要求能从文件中读取学生信息并进行相关处理。
1.2程序的功能
①每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
②输入功能:
进入后可以进行多条记录的输入并保存。
③显示功能:
完成全部学生或满足指定条件记录的显示。
④查找功能:
完成按学号或姓名查找学生记录,并显示。
⑤排序功能:
按学生学号或平均成绩进行排序。
⑥插入功能:
按学生学号或平均成绩高低插入一条学生记录。
⑦保存功能:
将学生记录保存在自定义名称的文件中。
⑧读取功能:
将保存在文件中的学生记录读取出来。
⑨有一个文本菜单来调用各个功能。
1.系统分析与设计
2.1程序的数据(结构)分析
2.1.1定义结构体
本程序需要定义多个结构体,用于存放学生的相关信息
typedefstructCStudent
{
charName[32];/*学生姓名*/
intSno;/*学号*/
doubledDataStruct;/*数据结构成绩*/
doubledMath;/*数学成绩*/
doubledEnglish;/*英语成绩*/
doubleaver;/*平均成绩*/
}CStudent;
2.1.2main()主函数
主函数功能比较简单,用while循环语句和switch多重选择语句来显示主界面和调用函数。
在主函数的前面要写必须的头文件,预定义语句以及全局变量的结构体。
2.1.3del()删除函数
在C语言中无法做到删除和移动数据,所以删除记录要先将所有记录从文件中读出,删除后再将记录写回文件中。
每读出一条记录,按其在文件中的顺序做好指针链接关系,然后查处要删除的学生信息,将其在链表中删除,最后再将变动的记录重新写回文件中。
用指针,else/if结构来实现查找出要删除的学生。
2.1.4insert()插入函数
在插入函数中利用指针,while循环和else/if语句来实现输入的数据按照插入相
应的位置。
2.1.5读取函数
利用指针、链表打开已经储存的信息。
voidRead()/*从文档读取*/
{
charp[128]="file.txt";
FILE*fp;
if((fp=fopen("file.txt","r"))==NULL)
{
printf("Openfile%serror!
Strikeanykeytoexit!
",p);
system("pause");
exit(0);
}
SavePos=0;
while(!
feof(fp))
{
fscanf(fp,"Name:
%s\n",example[SavePos].Name);
fscanf(fp,"Sno:
%d\n",&example[SavePos].Sno);
fscanf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct);
fscanf(fp,"Score(M)%lf\n",&example[SavePos].dMath);
fscanf(fp,"Score(E)%lf\n",&example[SavePos].dEnglish);
fscanf(fp,"Score(Average)%lf\n",&example[SavePos].aver);
fscanf(fp,"*********************\n");
SavePos++;
}
fclose(fp);
Display();
}
2.1.6save()保存函数
主要利用指针来把信息保存在文件中。
voidSave()/*保存到文档*/
{
intj=0;
constcharfname[128]="file.txt";
FILE*fp;
//openfile
fp=fopen(fname,"w");
//writeinfile
for(j=0;j{//fprintf(fp,"Thisisthefile.\n")
fprintf(fp,"Name:
%s\n",example[j].Name);
fprintf(fp,"Sno:
%d\n",example[j].Sno);
fprintf(fp,"Score(DS)%f\n",example[j].dDataStruct);
fprintf(fp,"Score(M)%f\n",example[j].dMath);
fprintf(fp,"Score(E)%f\n",example[j].dEnglish);
fprintf(fp,"Score(Average)%f\n",example[j].dEnglish);
fprintf(fp,"*********************\n");
}
//closefile
fclose(fp);
printf("保存成功\n");
}
2.2程序的算法设计
学生成绩管理系统
输出信息
整理信息
输入信息
修改信息
查询信息
输出至文件
输出至屏幕
删除学生信息
学生信息排序
插入学生信息
按学号查询
按姓名查询
从键盘输入
从
文件读入
图2.2学生成绩管理系统功能模块图
开始
开始
按学号
输入name
输入
2
输入num
i=j
1
输出数据
输入数据
结束
按9按0
图2.2输入模块图2.2查询模块
开始
输入学号
该学号已存在
Y
输入信息
N
保存并结束
图2.2插入模块
2.程序的实现
3.1主函数
intmain()
{
intchoice1=1,choice2;
inti=1,s=1;
do
{
printf("欢迎使用学生成绩管理系统\n");
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");
scanf("%d",&choice1);
2.2定义数据结构
用一个类的嵌套定义structstudent*next;用整型数据定义学号和成绩,用char定义姓名。
typedefstructCStudent
{
charName[32];/*学生姓名*/
intSno;/*学号*/
doubledDataStruct;/*数据结构成绩*/
doubledMath;/*数学成绩*/
doubledEnglish;/*英语成绩*/
doubleaver;/*平均成绩*/
}CStudent;
CStudentexample[1024];
intSavePos=0;
3.3函数说明
链表定义头指针stu*s,switch函数中用了8个case。
case1:
Record(SavePos);break;//录入学生信息
case2:
Search_Name();Search_Sno();break;//查询学生信息
case3:
Insert_Score();break;//插入学生信息
case4:
Sort_Sno();Sort_Score();break;//学生信息排序
case5:
Save()student(s);break;//保存学生信息
case6:
Delete_Sno();Delete_Name();break;//删除学生信息
case7:
Read()student(s);break;//读取学生信息
case8:
exit(0);break;//退出系统
2.3文件录入功能
voidRecord(intj)/*录入*/
{
printf("信息录入\n");
printf("姓名:
");
scanf("%s",example[j].Name);
printf("学号:
");
scanf("%d",&example[j].Sno);
printf("数据结构:
");
scanf("%lf",&example[j].dDataStruct);
printf("数学:
");
scanf("%lf",&example[j].dMath);
printf("英语:
");
scanf("%lf",&example[j].dEnglish);
printf("平均成绩:
");
scanf("%lf",&example[j].aver);
2.4文件读取功能
读取功能运用文件指针的方法,与While循环语句完成。
voidRead()/*从文档读取*/
{
charp[128]="file.txt";
FILE*fp;
if((fp=fopen("file.txt","r"))==NULL)
{
printf("Openfile%serror!
Strikeanykeytoexit!
",p);
system("pause");
exit(0);
}
SavePos=0;
while(!
feof(fp))
{
fscanf(fp,"Name:
%s\n",example[SavePos].Name);
fscanf(fp,"Sno:
%d\n",&example[SavePos].Sno);
fscanf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct);
fscanf(fp,"Score(M)%lf\n",&example[SavePos].dMath);
fscanf(fp,"Score(E)%lf\n",&example[SavePos].dEnglish);
fscanf(fp,"Score(Average)%lf\n",&example[SavePos].aver);
fscanf(fp,"*********************\n");
SavePos++;
}
fclose(fp);
Display();
}
2.5插入功能
首先建立循环,检测插入的学号是否已存在,若存在则停止插入;若不存在,则继续进行输入学生信息。
voidInsert_Score()
{
inti,j,m,flag;
i=SavePos;
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d位:
\n",i+1);
printf("请输入学号检验该生是否已经存在\n");
scanf("%d",&example[i].Sno);
for(j=0;j
if(example[i].Sno==example[j].Sno)
{
printf("已存在该号,请检查重新录入!
\n");
flag=1;
break;/*重复立即退该层循环,提高判断速度*/
}
Record(i);
printf("录入完毕\n\n");
Sort_Score();
}while(0);
}
3.程序使用说明
4.1主页面
将写好的程序用MicrosoftVisualC++6.0打开并运行,首先出现的是主页面,如图4-1所示。
图4-1
3.2录入信息页面
输入数字1,按提示进行学生成绩的录入,并按数字5保存信息。
继续录入按数字9,结束录入按数字0。
如图4-2
图4-2
3.3信息查询页面
返回主页面,按数字2,进行学生信息查询,分为按学号查询和姓名查询。
如图4-3-1。
图4-3-1
按数字1与按数字2查询结果页面如图4-3-2所示。
图4-3-2
图4-3-2
3.4插入信息页面
返回主页面,按数字3,首先检验该学号是否存在,若存在则程序停止录入,否则继续进行录入。
如图4-4-1所示。
图4-4-1
3.5排序功能页面
返回主页面,按数字4进行学生信息的排序。
分为按学号排序和按平均成绩排序。
如图4-5-1所示。
图4-5-1
4.6信息删除页面
返回主页面,按数字6进行学生信息删除页面,分为按学号删除和按姓名删除,如图4-6-1所示。
图4-6-1
按学号删除页面如图4-6-2所示。
图4-6-2
4.7读取并显示页面
返回主页面,按数字7进入读取显示页面。
如图4-7所示。
图4-7
5.总结
5.1致谢
首先感谢我们C用语言课程设计的四位老师,是你们陪同我们度过了三周的的C语言学习生活,使我们从对C语言停留在纸上谈兵的状态变为对C语言学以致用,为以后的学习打下了坚实的基础。
再者是要感谢学校,感谢为我们设置这么一门很有实际意义的课程,让我们从中学到了很多,感悟了很多。
5.2参考文献
[1]李丽娟.C语言程序设计教程(第二版).北京:
人民邮电出版社,2009.
[2]张欣.C语言程序设计(VC++6.0环境)[M].北京:
中国水利水电出版社,2005.
[3]陈宝贤.C语言程序设计教程[M].北京:
人民邮电出版社,2005.
[4]刁成嘉.C语言程序设计论文[D].北京:
清华大学出版社,2004.
[5]郑阿奇主编.VisualC++实用教程.西安:
电子工业出版社,2000.
[6]杨文军,杨柳.C语言程序设计教程[M].北京:
清华大学出版社,2010.
[7]周启海.C语言程序设计报告[R].北京:
中国水利工程出版社,2005.
[8]徐士良.C语言程序设计教程[M].北京:
人民邮电出版社,2009.
[9]谭浩强.C程序设计(第三版)[M].北京:
清华大学出版社,200