C语言课程设计.docx
- 文档编号:27958745
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:22
- 大小:86.76KB
C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
C语言课程设计
吉林工程技术师范学院
《C语言程序》课程设计
报告书
设计题目:
学生成绩管理查询系统
专业:
计算机科学与技术班级:
C-0942
学生姓名:
学号:
02
指导教师:
2010年7月
信息工程学院
摘要
C语言是世界上广泛流行的计算机高级编程语言。
它既可以作为系统描述语言、也可以编写系统软件,当然也可以用来编写应用程序。
用C语言写成的程序具有执行效率高、可移植性好、可直接操作硬件地址等特点。
这个工程就是用C语言写的一个程序,它实现了一个学生成绩管理的功能,包要求用户输入数据,并将数据写入一定的文件中、需用时还可以读出来共查看。
当然还有查找和排序的功能。
这一切旨在学历并练习c语言的开发实践。
随着手工作业转向信息化革命,引发了全球数字校园建设浪潮。
为了满足服务于用户这一基本功能,数字校园应定位于信息服务,以对学生成绩高效而准确的管理系统为出发点和最终目的,既要能够满足学生和老师的一般需求,又要能够针对用户的类型、需求特征等确定它的权限以便进行管理。
根据上诉要求给出的一个合理的解决方案。
关键字:
学生管理成绩查询函数模块
目录
摘要…………………………………………………1
第一章绪论………………………………………1
第二章系统分析…………………………………2
第三章总体设计与详细设计……………………5
第四章编码实现…………………………………8
第五章调试与测试………………………………9
第六章总结与心得………………………………12
附录:
1源代码……………………………………………13
2参考资料…………………………………………19
第一章绪论
学生成绩管理系统在国内外使用的相当广泛,但因地区差异,其程序也尽不相同,国内水平较国外相对较落后,大多数存在的问题是查询时易出差,不易模糊查询,制作比较粗糙。
其目的在于:
通过本教学环节的充分编程实践和实际应用,进一步熟悉和巩固C语言语法知识和程序设计的基本方法;利用适当形式的命题,了解结构化程序设计的方法,培养自顶而下、逐步细化的编程思维方式;通过一定的文档要求,培养学生良好的程序设计风格,包括程序结构形式,行文格式和程序正文格式等。
对以后程序的开发,理解有了更进一步的认识。
主要是对源函数和所需函数的变写,编译,链接,测试和调试。
运用C++的函数语句,达到所需目的。
使该程序在实际中得到广泛应用。
第二章系统分析
2.1问题分析
•功能需求:
1 .当前学生信息:
通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过input函数来进行给当前学生输入初始信息.
2.学生成绩查询:
输入一个学号, 在文件中查找此学生, 若找到则输出此学生的全部信息和成绩; 若找不到则输出查找失败的信息. 同时也可以全部把各科的平均成绩,最高和最低分输出。
3.新生插入 :
通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来。
4.输出全部学生信息和全部学生成绩。
5.退出系统.
6.附加说明:
系统将来完善的功能有:
可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。
2.2软件模块的划分
系统各模块(函数)的组成。
功能、参数说明、相互调用关系
1.主函数main()
利用swithch(),do{}while文化实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2.初始化函数struct*student()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。
比如:
没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
3.菜单选择函数start:
();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
4.输入记录函数voidinput()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。
5.显示记录函数voiddisplay()
这是一个不返回值的有参函数,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
6.查找记录函数voidfind()
这是一个不返回值的有参函数,实现按学生姓名对某个学生进行查找,并显示所查找到的记录。
7.删除记录函数voiddel()
这是一个有参函数,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可进行删除。
8.插入函数voidinsert()
这是一个有参函数,按照原来成绩进行插入并返回。
9.保存数据到文件函数voidsave()
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。
10.修改数据函数voidmodify()
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录修改并保存在电脑上由自己任意命名的二进制文件。
录入:
学生成绩信息管理系统包括:
学号,姓名,性别,成绩1,成绩2,成绩3,平均成绩,总成绩等。
以结构数组或数的形式存放学生成绩管理信息。
显示:
显示输入的学生信息包括:
学号,姓名,性别,成绩1,成绩2,成绩3,平均成绩,总成绩等。
排序:
对输入的学生的成绩进行一定次序的排序。
添加:
输入学生姓名,进行学号,姓名,性别,成绩1,成绩2,成绩3,平均成绩和总成绩等的添加。
删除:
输入学生姓名,查找所要删除的内容,包括:
学号,姓名,性别,成绩1,成绩2,成绩3,平均成绩和总成绩等。
修改:
输入学生姓名,修改所要选定的项目。
查询:
输入所要查询的学生的姓名。
读入:
输入要读入的文件路径,查询要找的相关选项。
删除:
输入要删除的文件路径,查询所要删除的文件。
保存:
输入要保存的文件路径,保存到相关文件中。
退出:
输入11,按任意键退出该程序。
第三章总体设计与详细设计
3.1总体设计:
1功能模块设计
–为实现系统功能,本程序主要分为以下几个模块。
–它们分别为:
输入一个学生姓名、删除一个学生姓名、查询一个学生姓名、插入一个学生姓名、列出所有的学生姓名、装入文件、保存文件、退出等。
这几个模块函数再通过主函数调用分别得以实现。
–主函数,首先提供了程序运行时的友好界面(菜单),列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
2、数据结构设计
对于学生成绩管理中各项详细信息的记录用了结构数组的形式
structstudent/*定义数据结构*/
{
intno;
charname[20];
charsex[4];
floatscore1;
floatscore2;
floatscore3;
floatsort;
floatave;
floatsum;
};
3函数功能设计
各个函数的功能分别如下:
voidinput()/*原始数据录入模块*/
voidsort()/*排序数据函数*/
voiddisplay()/*显示数据函数*/
voidinsert()/*插入数据函数*/
voiddel()/*删除数据函数*/
voidsave()/*保存数据函数*/
voidsave()/*保存数据函数*/
voidfind()/*查询函数*/
voidaverage()/*求平均数*/
voidmodify()/*修改数据函数*/
voidread()/*读取数据函数*/
voiddel_file()/*删除文件函数*/
3.2详细设计:
3-1系统模块图
3-2系统总体结构图
第四章编码实现
系统各模块(函数)的组成。
功能、参数说明、相互调用关系
#include
#include
#include
#include
#include
main()
主函数利用swithch(),do{}while文化实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
voidinput()
这是一个无参函数,用来执行第学生成绩记录的输入,输入的学生姓名,当学生姓名为0时停止输入,函数结束后,并记录其他的一些相关信息。
voiddisplay()
这是一个不返回值的有参函数,负责对全部学生成绩记录的输出,在屏幕上进行显示,然而不足之处就是不能对学生成绩进行分页显示。
voidinsert()
这是一个有参函数,按照原来成绩进行插入,先输入学生的姓名,然后进行把该学生的所有信息插入其中。
voiddel()
这是一个有参函数,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可进行删除学生的记录。
voidsave()
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件进行保存。
voidfind()
这是一个不返回值的有参函数,实现按学生姓名对某个学生进行查找,并显示所查找到的记录。
voidmodify()
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录修改并保存在电脑上由自己任意命名的二进制文件。
第五章测试与调试
5.1问题
(1)程序运行时的“warning”对整个程序的影响?
(2)如果程序出现执行错误,应如何修改?
(3)静态变量在该程序里的作用是什么?
没有静态变量会带来什么后果?
5.2测试中遇到的问题
(1)刚开始没有那个初始化函数,程序运行后,没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码!
(2)刚开始执行输入函数,按学号顺序输入十个学生的成绩,输完后执行显示功能,学生成绩记录是按学号的反顺序显示的,试着在其中增加一些语句,希望能把学号按正常顺序显示,但暂时没有成功。
(3)刚开始时,先把成绩按平均分排序,再插入一个学生的成绩,执行显示功能,虽然插入的学生的成绩能正常插入,但该学生的名次为0。
(4)在输入函数中设了一个无限循环,可以输入无数个学生的成绩信息,当学号为0的时候则停止输入。
(5)输入太多个学生的成绩时,屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。
(6)在没有输入任何信息的情况下,去执行排序功能,最后显示有一个记录,学号、姓名为空白,成绩都为0,名次为1。
(7)在输入选项时不能输入字母,否则会死循环,建议不要乱输字母
5.3调试:
启动界面,如图5-1所示。
5-1启动界面
2.选择菜单,输入记录,如下面所有图5-2,5-3所示。
5-2
5-3
第六章总结与心得
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
附录一:
源代码
#include
#include
#include
#include
#include
#defineMAX100
voidinput();
voiddisplay();
voidinsert();
voiddel();
voidfind();
voidsave();
voidmodify();
intnow_no=0;
structstudent
{
intno;
charname[20];
charsex[4];
floatscore;
};
structstudentstu[MAX],*p;
main()/*主函数*/
{
intas;
start:
printf("\n\t\t\t欢迎您使用学生成绩管理系统\n");
/*一下为功能选择模块*/
do
{
printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.添加学员信息\n\t\t\t\t4.删除学员信息\n\t\t\t\t5.修改学员信息\n\t\t\t\t6.查询学员信息\n\t\t\t\t7.保存学员信息\n\t\t\t\t8.退出\n");
printf("\t\t\t\t选择功能选项:
");
printf("\t\t\t\t选择功能选项:
");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
case1:
system("cls");input();break;
case2:
system("cls");display();break;
case3:
system("cls");insert();break;
case4:
system("cls");del();break;
case5:
system("cls");modify();break;
case6:
system("cls");find();break;
case7:
system("cls");save();break;
case8:
system("exit");exit(0);
default:
system("cls");gotostart;
}
}while
(1);
/*至此功能选择结束*/
}
voidinput()/*原始数据录入模块*/
{
inti=0;
charch;
do
{
printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1);
printf("\n输入学生编号:
");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n输入学员姓名:
");
fflush(stdin);
gets(stu[i].name);
printf("\n输入学员性别:
");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学员成绩:
");
fflush(stdin);
scanf("%f",&stu[i].score);
printf("\n\n");
i++;
i++;
now_no=i;
printf("是否继续输入?
(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!
='n'&&ch!
='N');
system("cls");
}
voiddisplay()/*显示数据函数*/
{
inti;
charas;
do
{
printf("\t\t\t班级学员信息列表\n");
printf("\t编号\t姓名\t性别\t成绩\n");
for(i=0;i printf("\t\t按任意键返回主菜单."); fflush(stdin); as=getch(); } while(! as); system("cls"); } voidinsert()/*插入数据函数*/ { charch; do { printf("\n\t\t输入新插入学员队信息\n"); printf("\n输入学生编号: "); scanf("%d",&stu[now_no].no); fflush(stdin); printf("\n输入学员姓名: "); fflush(stdin); gets(stu[now_no].name); printf("\n输入学员性别: "); fflush(stdin); gets(stu[now_no].sex); printf("\n输入学员成绩: "); fflush(stdin); scanf("%f",&stu[now_no].score); printf("\n\n"); now_no=now_no+1; printf("是否继续输入? (Y/N)"); fflush(stdin); ch=getch(); system("cls"); } while(ch! ='n'&&ch! ='N'); } voiddel()/*删除数据函数*/ { intinum,i;intstaticj; printf("输入要删除学员的编号: "); fflush(stdin); scanf("%d",&inum); for(i=0;i { if(stu[i].no==inum) { if(i==now_no)now_no-=1; else { stu[i]=stu[now_no-1]; now_no-=1; } break; } } system("cls"); } } voidsave()/*保存数据函数*/ { FILE*fp; inti; charfilepath[20]; printf("输入要保存的文件路径: "); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) { printf("\n保存失败! "); exit(0); } for(i=0;i { fprintf(fp,"\t%d\t%s\t%s\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score); } fclose(fp); printf("学生信息已保存在%s中! \n",filepath); system("pause"); system("cls"); } voidfind()/*查询函数*/ { inti; charstr[20],as; do { printf("输入要查询的学生姓名: "); fflush(stdin); gets(str); for(i=0;i if(! strcmp(stu[i].name,str)) { printf("\t编号\t姓名\t性别\t成绩\n"); printf("\t%d\t%s\t%s\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score); } printf("\t\t按任意键返回主菜单."); fflush(stdin); as=getch(); } while(! as); system("cls"); } voidmodify()/*修改数据函数*/ { inti; staticcharstr[20],as; printf("输入要修改的学生姓名: "); fflush(stdin); gets(str); for(i=0;i if(! strcmp(stu[i].name,str)) { system("cls"); printf("\n\t\t输入新插入学员队信息\n"); printf("\n输入学生编号: "); fflush(stdin); scanf("%d",&stu[i].no); printf("\n输入学员性别: "); fflush(stdin); gets(stu[i].sex); printf("\n输入学员成绩: "); fflush(stdin); scanf("%f",&stu[i].score); printf("\n\n"); break; } system("cls"); } 附录二: 参考文献 参考文献: TP311/459《精通visualC++6.0》北京电子工业出版社王晖等编著 TP312/283《C++语言程序设计》北京清华大学出版社郑莉等编著 TP312/452《以C语言程序设计》北京中国铁道出版社郑丽英等编著 TP312/297《C程序设计》清华大学出版社潭浩强编著 参考网址: http: //92.168.13.200/cgi-bin/2la.swebBib
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计