课设论文 2.docx
- 文档编号:4971780
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:36
- 大小:399.27KB
课设论文 2.docx
《课设论文 2.docx》由会员分享,可在线阅读,更多相关《课设论文 2.docx(36页珍藏版)》请在冰豆网上搜索。
课设论文2
课程设计(论文)说明书
题目:
学生成绩管理系统
院(系):
信息与通信学院
专业:
电子信息工程
学生姓名:
SUSHENGMIAN
学号:
1000220625
指导教师:
彭明
职称:
教授_
2012年12月8日
摘要
学生成绩是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。
目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。
因此,开发一套适和大众的、兼容性好的系统是很有必要的。
我们有必要开发学生成绩管理系统来对学生成绩档案进行数字化管理。
既可减轻学院教职员工工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,又可加快成绩查询速度、加强成绩管理,使各项管理更加规范化。
本系统主要完成对学生成绩的管理,包括添加、修改、删除,查询,统计信息以用户管理等六个方面。
系统可以完成对各类信息的浏览、查询、添加、删除、修改等功能
关键词:
c语言;学生成绩管理系统;增加;查询;修改;排序;统计;文件
Abstract
Studentgradesisanimportantpartoftalentcultivationofcollege。
StudentFilesmustremainwithintheStudentServices(orsimilarpurposearea)atalltimesandshouldnotberemovedfromtheseareasunlessrequiredforspecificpurposessuchastodealwithothercasessuchaslegal,disciplinary,grievancesetc,howeveroncethosecaseshavebeendealtwiththefilesmustbereturned,unalteredtotherespectiveStudentServicearea.Thissystemisastudentcurriculumandtheresultmanagementsystemmanagementsystem,itisinauniversitieseducationaladministrationmanagementsystemmanagementsystemsub-system.Themainuseristhestudent,theteacherandthemanager.Thesystemfacilitatedthestudenttochoosetheclassandtolookuptheminute.Hasfacilitatedteacher'steachingmanagementandthestudentresultinput.Thesystemhasmoremoreimportantlyfacilitatedtheschooleducationaadministrationmanagement
Keyword:
CLanguag;StudentScoreManagementSystem;aggrandize;inquire;amend;sort;statistics;document
目录
1.课设目的………………………………………………………1
2.课程论文题目…………………………………………………1
3.程序设计思路…………………………………………………1
3.1需求分析……………………………………………………1
3.2主函数分析…………………………………………………2
3.3功能模块设计………………………………………………2
3.3.1菜单模块…………………………………………………2
3.3.2增加模块…………………………………………………2
3.3.3查询模块…………………………………………………2
3.3.4修改模块…………………………………………………2
3.3.5排序模块…………………………………………………3
3.3.6统计模块…………………………………………………3
4.功能模块流程图………………………………………………4
4.1增加模块流程图……………………………………………4
4.2查询模块流程图……………………………………………5
4.3修改模块流程图……………………………………………5
4.4排序模块流程图……………………………………………6
4.5统计模块流程图……………………………………………6
5.数据结构设计………………………………………………6
6.算法设计……………………………………………………7
7.程序运行结果………………………………………………8
7.1菜单模块运行结果…………………………………………8
7.2增加模块运行结果…………………………………………8
7.3查询模块运行结果…………………………………………8
7.4修改模块运行结果…………………………………………9
7.5排序模块运行结果…………………………………………9
7.6统计模块运行结果…………………………………………10
7.7打开文件模块运行结果……………………………………10
7.8保存模块运行结果…………………………………………10
8.编程中遇到的困难与解决方法……………………………10
9.实验总结……………………………………………………10
致谢……………………………………………………………11
参考文献………………………………………………………12
附录……………………………………………………………13
1.课设目的
通过本课程设计巩固《C语言程序设计》课程教学成果,深入理解结构体、指针、链表、动态分配内存和文件操作等C程序设计中的中高级技术,熟练掌握C语言的调试方法,初步培养良好的编程习惯和编程风格,初步学习程序文档的撰写方法。
2.程序论文题目
创建一个学生管理系统。
学生包含以下信息项:
学号,姓名,性别,语文成绩,数学成绩,英语成绩,物理成绩,化学成绩,总分、平均分。
系统的主要功能包括:
(1).创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。
(2).增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:
增加后的学生信息仍按学号排序,并继续保存至原文件。
(3).删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
(4).修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。
(5).按不同条件对学生信息进行查询操作,输出满足条件的学生信息。
a按学号查询,输入一个学号,输出对应的学生信息。
b按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。
c按学院查询,输入学院名称,输出该学院的全部学生的信息。
(6).按不同条件对学生成绩进行统计工作。
a.按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。
b.分别找出3门课程成绩最高和最低的的学生,并输出他们的信息。
3.程序设计思路
3.1需求分析
可将系统的设计分为:
菜单模块,增加信息模块,修改信息模块,排序模块,统计模块,保存文件模块,打开文件模块,显示模块。
a.菜单模块为用户的选择进行提示。
b.增加信息模块用于增加学生的学号,姓名,语文成绩,数学成绩,语成绩,物理成绩,化学成绩,总成绩,平均分。
c.修改信息模块用于对学生的学号,姓名,语文成绩,数学成绩,英语成绩,物理成绩,化学成绩,总成绩,平均分等各种信息进行修改。
d.排序模块用于对学生的学号,姓名,总分进行排序,每种排序方法对于有升序排序和降序排序两种排列方式
e.统计模块用于对学生的各科成绩进行一个汇总分析。
可统计出每一科的最高分,最低分以及平均分。
3.2.主函数设计
主函数提供输入,处理,输出部分的函数的调用,其中各个功能模块用菜单方式选择,即在主函数里显示一系列功能选择,判断后,是否调用某个功能用了switch()选择功能
3.3.各功能模块设计
3.3.1.菜单模块:
定义了字符变量c,用户根据相应的提示进行选择,最后将字符变量返回main()函数,根据c的不同值,调用不同的函数
3.3.2.增加信息模块。
输入要增加的信息条数num。
如果原来学生的数量为0.那么学生的数量为num,将要输入的学生信息依次放在指针位置为0~(num-1)的位置,然后调用count函数,按总成绩对学生进行排名,并在屏幕上显示。
如果原来学生数量不为0,询问是否覆盖原来的数据,如果选择覆盖,那么学生的数量为num,将要输入的学生信息依次放在指针位置为0~(num-1)的位置,然后调用count函数,按总成绩对学生进行排名,并在屏幕上显示。
如果不选择覆盖,那么学生个数等于原个数加上新增数,将信息依次放在指针位置为numstus~umstus+num-1)的位置,然后调用count函数,按总成绩对学生进行排名,并在屏幕上显示。
最后返回主函数。
3.3.3.查询信息模块。
如果学生数量为0,没有信息可查询,返回主函数。
如果学生人数不为0,则询问用户要选择的查询方式,有3种查询方式供选择,分别为按学号查询,按姓名查询,按名次查询。
对于按学号查询,将输入的学号与各个学生的学号相比较调用格式为strcmp(str,stud[i].number)。
如果输入的学号与某个学生的学号相等,则输出该学生的全部信息。
对于按姓名查询,将输入的姓名与各个学生的姓名相比较,调用格式为strcmp(str,stud[i].name)。
如果输入的姓名与某个学生的姓名相等,则输出该学生的全部信息。
对于按名次查询,将输入的名次与各个学生的名次相比较。
如果输入的名次与某个学生的名次相等(num==stud[i].index),则输出该学生的全部信息。
3.3.4.修改模块。
如果学生数量为0,没有信息可查询,返回主函数。
如
果学生人数不为0,则调用查询函数findrecord(pointer),查询函数返回一个整型数据i,则修改函数对地i个学生的信息进行修改。
修改完毕后,重新对学生的总成绩进行排名,并在屏幕显示修改之后的信息。
如果要删除信息,则调用删除函数deleterecord(),修改完毕后,重新对学生的总成绩进行排名,并在屏幕显示修改之后的信息。
如果还要修改其他信息,则返回开始处继续执行。
最后返回主函数
3.3.5.排序模块。
。
如果学生数量为0,没有信息可排序,返回主函数。
如果学生人
数不为0,询问用户要选择的排序方法。
输入1,则按学号进行排序,可对学号进行升
序排序,降序排序。
如果进行降序排序,调用函数sortnum(p),如果进行升序排序,则
调用函数sortnum2(p);输入2,则按姓名进行排序,可对姓名进行升序排序,降序排
序。
如果进行降序排序,调用函数sortname(p),如果进行升序排序,则调用函数
sortname(p);输入3,则按名次进行排序,可对名次进行升序排序,降序排序。
如果进
行降序排序,调用函数sortcount(p),如果进行升序排序,则调用函数sortcount2(p);
排序完成之后,显示排序之后的结果。
如果还要进行其他的排序,则返回继续进行查询。
查询完毕之后,返回主函数。
。
在寻找的过程中用了字符串的比较strcmp(字符串1,
字符串2)
如果字符串1=字符串2则函数值为0。
如果字符串1>字符串2则函数值为一个正整数。
如果字符串1<字符串2则函数值为一个负整数。
3.3.6.统计模块。
询问用户想要统计的科目,一共有5科(语文,数学,英语,物理),输入数字1~5进行选择。
在运用swith()的选择功能,进行各个科目的统计。
运用比较法得到统计信息。
3.3.7.保存文件模块。
定义一个指向文件的指针的文件变量fp。
用到fopen(文
件名使用文件方式)fclose(文件指针)fprintf(文件指针格式字符串输出列表)。
保存文件模块将输入的信息保存在硬盘中。
打开文件模块将保存起来的文件再次调出来使用。
显示模块将用户选择的模块在屏幕上显示出来
3.3.8.打开文件模块。
定义一个指向文件的指针的文件变量fp。
用到fopen(filename,"rb+"))==NULL)rb+,其中为读写打开一个二进制文件fscanf(fp,"%d",&numstus);从磁盘文件中读取变量numstus,在屏幕上显示
4.功能模块图
4.1增加模块
4.2查询模块
4.3修改模块
4.4排序模块
4.5统计模块
5.数据结构设计
此程序中用到了
(1)基本类型1)常量的使用#defineH_STUDENT_HH502)整型int3)字符型char4)浮点型float
5)浮点型(双精度double)
(2)结构体类型
#defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/
#definenumsubs5/*学科数目*/
typedefstructmessage_student/*结构体定义*/
{
charnumber[6];
charname[20];
charsex[4];
floatsubject[numsubs];
floatscore;
floataverage;
intindex;
}student;
(3)指针类针:
FILE*fp,文件型指针变量,fp是一个指向FLIE类型结构的指针变量。
6.算法设计
7.程序运行结果
7.1主函数运行结果
7.2增加模块运行结果
7.3查询模块运行结果
a.按名次进行查询
b.按学号进行查询
c.按名次进行查询
7.4修改模块运行结果
7.5排序模块运行结果
a.按学号排序
b.按姓名排序
c.按名次排序
7.6统计模块运行结果
7.7打开文件模块运行结果
7.8保存模块运行结果
8.编程中遇到的困难及解决方法
由于自己时间过长的遗忘及知识的局限性使得在程序的编译中存在一些问题,对每个功能模块的理解,以及主函数的功能,都是在同学的帮助和老师的讲解下有了更深的了解。
编写主函数根据一些例题的模式以及自己的所要实现的功能来完成,每一个子模块,也是根据例题模块以及要实现的功能编写。
用到了文件,结构体类型,数组,类型的装换等等文件以及结构体类型,通过查看书本完成的。
在运行过程中每个模块运行后不能接着下一个模块。
9.实验总结
做这个项目让我明白了一些道理,再大的程序也是有不同的小程序组成的。
经过这几天的学习使我了解到C语言的重要性,之前接触到的C语言内容都是理论上的,但是没怎么用到实际操作当中。
这次课程设计给了我一次真正认识C语言的机会刚开始觉得C语言是一种很深奥的东西对于刚开始接触这门课程的我来说非常的不适应。
第一次真正认真的投入C语言当中,第一次用自己在课堂上学习的东西逐步的去解决实际问题这次是完成实验设备信息的管理。
经过这次课程设计,我知道自己的计算机知识还是相当有限的,在这次的程序编译过程中遇到了很多自己无法解决的问题,可是通过同学的帮助和老师的指导,上网查看资料等方法,最终问题都基本解决了。
致谢
在这次课程设计过程中,我巩固了C语言的基础知识,对c语言有了更深入的了解。
以前从来没有这样编过完整的程序,课设让我有这样的一个机会。
我觉得自己说学的东西不多,但是在学习的过程中也发现c语言没那么难。
感谢我的c语言老师,一个是带我走进C语言大门的覃匡宇老师,从他身上学到了很多知识和道理,并逐渐喜欢上c语言。
同时,在这次课设中,彭老师对我的帮助使我收获很多,包括论文的排版等问题,彭老师都指出错误和不足之处,使我少走出了许多误区,在此表示深深的感谢。
最后感谢所有曾在c语言上帮助我的人。
参考文献
[1]谭浩强.c语言程序设计.北京:
清华大学出版社,2008:
11~289
[2]陈朔鹰.《C语言程序设计习题集(第二版).北京:
人民邮电出版社,2003:
37~85
[3]陈朔鹰.《C语言趣味程序百例精解》.北京:
北京理工大学出版社,2007:
81~98
附录
程序代码:
#ifndefH_STUDENT_HH/**条件指示符#ifndef的最主要目的是防止头文件的重复包含和编译//*条件编译*/
#defineH_STUDENT_HH/*#为预编译命令*/
#include"stdio.h"
#include"string.h"
#include"malloc.h"
#defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/
#definenumsubs5/*学科数目*/
typedefstructmessage_student/*结构体定义*/
{
charnumber[6];
charname[20];
charsex[4];
floatsubject[numsubs];
floatscore;
floataverage;
intindex;
}student;
externintnumstus;/*学生数目*//*extern表示为全局变量*/
externstudent*pointer;/*指向结构体数组*/
externintlens;
intmenu_select();
intopenfile(studentstu[]);
intfindrecord(studentstud[]);
intwritetotext(studentstud[]);
voidwelcome();
voiddisplay1();
voidshowtable();
voidsort(studentstu[]);
voiddeleterecord(studentstu[],inti);
voidaddrecord(studentstud[]);
voiddisplay(studentstud[],intn1,intn2);
voidamendrecord(studentstud[]);
voidcount(studentstud[]);
voidsortnum(studentstud[]);
voidsortnum2(studentstud[]);
voidsortname(studentstud[]);
voidsortname2(studentstud[]);
voidsortcount(studentstud[]);
voidsortcount2(studentstud[]);
voidstatistic(studentstud[]);
#endif
intmenu_select()
{
charc;
printf("\n\n");
printf("|1.增加学生记录5.统计信息|\n");
printf("|2.查询学生记录6.打开文件|\n");
printf("|3.修改学生记录7.保存文件|\n");
printf("|4.学生纪录排序8.显示记录|\n");
printf("|0.退出系统|\n");
printf("\n\n");
printf("请选择(0-8):
");
c=getchar();
getchar();
return(c-'0');
}
intfindrecord(studentstud[])/*查找学生信息*/
{
charstr[2];
inti,num;
if(numstus==0)
{
printf("没有可被查找的记录\n");
return-1;
}
else
{
printf("以何种方式查找?
\n1.学号\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1')/*按学号查找*/
{
printf("请输入学号:
");
gets(str);
for(i=0;i<=numstus;i++)
{
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
elsecontinue;
}
}
elseif(str[0]=='2')/*按姓名查找*/
{
printf("请输入姓名:
");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
elsecontinue;
}
elseif(str[0]=='3')/*按名次查找*/
{
printf("请输入名次:
");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
elsecontinue;
}
if(i>numstus)
{
printf("没有查找所要的信息。
\n");
return-1;
}
returni;
}
}
//#include"head.h"
intopenfile(studentstu[])/*打开文件*/
{
inti=0,j;
FILE*fp;
charfilename[20],str[2];
if(numstus!
=0)
{
printf("已经有记录存在,是否保存?
(y/n)");
gets(str);
if(str[0]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课设论文 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)