学生成绩管理系统C语言课程设计成绩管理系统毕业设计.docx
- 文档编号:25317009
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:26
- 大小:227.99KB
学生成绩管理系统C语言课程设计成绩管理系统毕业设计.docx
《学生成绩管理系统C语言课程设计成绩管理系统毕业设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言课程设计成绩管理系统毕业设计.docx(26页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统C语言课程设计成绩管理系统毕业设计
课程设计任务书
主要内容和基本要求:
强化C语言中数组及外部文件的内容,独立设计学生成绩管理系统,并编程实现以下功能:
1、整个系统均用C语言实现;
2、利用二维数组来实现学生成绩管理系统的数据结构设计;
3、系统具有输入、显示、查询、删除、排序、保存、读取等基本功能;
4、系统的各个功能模块都用函数的形式来实现;
5、要求能将学生成绩信息保存在文件中。
6、要求能将学生成绩信息从文件中读取出来并进行相关处理。
工作计划:
1. 布置设计题目,讲解要求和说明 2011.6.27
2. 确定设计任务,确定具体的功能,熟悉相关知识2011.6.27
3. 按功能需求确定程序的主要模块 2011.6.27
4. 编程实现程序的功能 2011.6.27–2011.6.28
5. 调试并完善程序 2011.6.28–2011.6.29
6. 撰写课程设计报告 2011.6.28-2011.6.30
7.提交课程设计报告并验收软件 2011.7.1
参考资料:
1.谭浩强,《C程序设计(第3版)》,清华大学出版社,2005.2
3.甘勇,《C语言程序设计》,中国水利水电出版社,2011.2
2.谭明金,俞海英,《C语言程序设计实例精粹》,电子工业出版社,2007.1
完成期限:
2011年7月1日星期五
指导教师签名:
课程负责人签名:
年月日
目录
目录............................................
一、分析系统功能,绘制系统功能结构框架图4
1.1分析系统功能4
1.2结构框架图2
二、程序代码以及界面形式.......................2
2.1程序代码如下13
2.2界面形式...................................7
三、使用说明..................................7
四、日志.......................................
五、心得体会...................................19
六、参考文献...................................20
七、流程图.................................
八、鸣谢.................................
一、分析系统功能,绘制系统功能结构框架图
1.1、分析系统功能
(1)用户进入主菜单后,就会在看到,菜单选项中添加有系统的各项功能,进入的
应的选项就可进行相应的操作.其主要功能有:
1、输入学生成绩
2、成绩排序
3、查询学生成绩
4、添加学生成绩
5、显示当前成绩
6、保存当前成绩
7、退出此系统
(2)用户选择所需操作的选项,进入相应的操作界面,在这里用户就可开始进行操作。
1.2、结构框架图
二、程序代码以及界面形式
#include
#include
#include
#defineLENsizeof(Student)
typedefstructstudent
{
intnum;
charname[20];
intscore[4];
intsum;
structstudent*next;
}Student;
intn;
Student*cin(void);
Student*sort_1(Student*head,int);
voidsort_2(Student*head);
voidprint(Student*head);
Student*sort_all(Student*head);
voidfind(Student*head);
voidsave(Student*head);
Student*add_new(Student*head);
Student*cin()
{
intflag;
Student*head,*p1,*p2;
n=0;
head=(Student*)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:
",n+1);
scanf("%d",&flag);
while(getchar()!
='\n');
for(;flag;)
{
n++;
p1=(Student*)malloc(LEN);
p1->num=flag;
printf("请输入第%d名学生的姓名:
",n);
scanf("%s",p1->name);
printf("请输入第%d名学生的语文成绩:
",n);
scanf("%d",&p1->score[0]);
printf("请输入第%d名学生的数学成绩:
",n);
scanf("%d",&p1->score[1]);
printf("请输入第%d名学生的英语成绩:
",n);
scanf("%d",&p1->score[2]);
printf("请输入第%d名学生的计算机成绩:
",n);
scanf("%d",&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p2->next=p1;
p2=p1;
printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:
",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
returnhead;
}
Student*sort_all(Student*head)
{
intchoose;
for(;;)
{
printf("|******欢迎使用成绩管理系统******|\n");
printf("|请输入选项编号(0-3):
|\n");
printf("|********************************|\n");
printf("|1--按学生学号排序|\n");
printf("|2--按学生总分排序|\n");
printf("|3--显示当前学生成绩|\n");
printf("|0--退出排序系统|\n");
printf("|**********Thankyou!
***********|\n");
printf("请输入你要执行的操作:
");
scanf("%d",&choose);
while(getchar()!
='\n');
switch(choose)
{
case1:
case2:
head=sort_1(head,choose);break;
case3:
print(head);break;
case0:
returnhead;
default:
printf("\n\n请输入0-3之间的数:
\n\n");break;
}
}
}
Student*sort_1(Student*head,intchoose)
{
Student*p1,*p2=head->next,*pm,*px;
Studentmid;
if(!
p2)returnhead;
for(p1=p2;p1->next!
=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!
=NULL;p2=p2->next)
switch(choose)
{
case1:
if(pm->num>p2->num)pm=p2;break;
case2:
if(pm->sum
}
if(pm!
=p1)
{
mid=*pm;
*pm=*p1;
*p1=mid;
px=pm->next;
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序后的成绩表为:
\n");
print(head);
returnhead;
}
voidfind(Student*head)
{
Student*p;
intchoose,fnum;
chartem[20];
if(n==0){printf("\n当前系统没有任何学生数据!
\n");return;}
for(;;)
{
printf("1按学号查询;0我不查询了。
\n\n");
printf("请选择:
");
scanf("%d",&choose);
while(getchar()!
='\n');
if(choose==1)
{
printf("\n请输入你要查询的学生的学号,输入0退出学号查询:
");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!
=NULL&&p->num!
=fnum;p=p->next);
if(!
p)
{
printf("\n\n找不到你要查询的学号,请重新输入,输入0表示结束:
");
scanf("%d",&fnum);
}
elseif(p->num==fnum)
{
printf("\n学号为%d学生的数据为:
\n",p->num);
printf("学号\t姓名\t语文成绩数学成绩英语成绩计算机成绩总分\n");
printf("%d\t%s\t%d%d%d%d%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum);
printf("\n\n请输入你还要查询的学生的学号,输入0返回上层");
scanf("%d",&fnum);
}
}
}
else{printf("输入1或者0进行查询\n");break;}
}
}
Student*add_new(Student*head)
{
Student*p;
intflag;
printf("\n\n请输入你要新加入学生的学号,学号为0表示结束输入:
");
scanf("%d",&flag);
while(getchar()!
='\n');
for(;flag;)
{
p=(Student*)malloc(LEN);
p->num=flag;
printf("请输入新加入学生的姓名:
",n);
scanf("%s",p->name);
printf("请输入新加入学生的语文成绩:
",n);
scanf("%d",&p->score[0]);
printf("请输入新加入学生的数学成绩:
",n);
scanf("%d",&p->score[1]);
printf("请输入新加入学生的英语成绩:
",n);
scanf("%d",&p->score[2]);
printf("请输入第%d名学生的计算机成绩:
",n);
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->next=head->next;
head->next=p;
n++;
printf("\n请输入还要加入学生的学号,没有此学生则输入0表示结束:
");
scanf("%d",&flag);
}
head=sort_1(head,1);
printf("加入后的成绩表为:
\n");
print(head);
returnhead;
}
voidprint(Student*head)
{
Student*p=head->next;
if(!
p){printf("\n\n此系统目前没有任何学生数据!
\n\n\n");return;}
printf("此系统目前共计学生%d名:
\n",n);
printf("********************学生成绩统计一览***************************\n");
printf("学号\t姓名\t语文成绩数学成绩英语成绩计算机成绩总分\n");
for(;p;p=p->next)
printf("%d\t%s\t%d%d%d%d%d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);
printf("************************Thankyou!
****************************\n");
}
voidsave(Student*head)
{
FILE*fp;
Student*p=head->next;
charoutfile[10];
printf("请输入保存文件的文件名,例如c:
\\f1\\te.txt:
\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("不能打开文件\n");
exit
(1);
}
printf("\n正在保存......\n");
while(p!
=NULL)
{
fwrite(p,sizeof(Student),1,fp);
p=p->next;
}
fclose(fp);
printf("------保存成功!
!
!
------\n");
}
intmain()
{
Student*head;
intchoose,i;
head=(Student*)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("|******欢迎使用学籍管理系统******|\n");
printf("|请输入选项编号(0-5):
|\n");
printf("|********************************|\n");
printf("|1--输入学生成绩|\n");
printf("|2--成绩排序|\n");
printf("|3--查询学生成绩|\n");
printf("|4--添加学生成绩|\n");
printf("|5--显示当前成绩|\n");
printf("|6--保存当前成绩|\n");
printf("|0--退出此系统|\n");
printf("|******电子商务10-3*石兴威!
******|\n");
printf("|**********Thankyou!
***********|\n");
printf("\n请输入你要执行的操作:
");
scanf("%d",&choose);
while(getchar()!
='\n');
switch(choose)
{
case1:
printf("确定输入数据请按1\n\n");
scanf("%d",&i);
if(i==1){head=cin();print(head);break;}
else{
printf("\n你做出别的选择,当作放弃建立!
\n");
break;
}
case2:
head=sort_all(head);break;
case3:
find(head);break;
case4:
head=add_new(head);
case5:
print(head);break;
case6:
save(head);break;
case0:
system("pause");return0;
default:
printf("\n\n您的输入有误!
请重新输入:
\n\n");break;
}
}
}
2.1程序代码如下
2.2、界面形式
三、使用说明
学生学籍管理系统是针对学生信息的管理,主要功能是添加学生成绩、输入学生成绩、查询学生成绩、学生成绩排序、修改学生成绩、保存成绩。
(1)进入主菜单,列出各项功能用户打开程序
(2)输入1进入录入界面,用户即可录入信息,
(2)在主菜单中,输入2,则会进入排序界面,
(3)、在主菜单中,输入3,则会进入查询界面,输入要查的学生的学号即可查询到信息。
(4)输入4,会进入添加学生成绩界面。
(5)、在主菜单中,输入5,进入显示学生成绩界面
(6)、在主菜单中,输入6,则会进入保存当前成绩,自动进行保存。
四、日志
6月27星期一
从今天起,正式开始做课程设计了。
但坐到电脑前想开始做时,却不懂如何开始写起,都感到有点陌生了。
因为前一阵一直在忙于各科的考试,好久没碰C语言了,都开始有生疏感了。
但还是试着在电脑上编了下,光要写个主函数还很吃力,更头痛的吃力的结果还换来了很多错误,本想编译下,试试的,结果错误警告一大堆。
鉴于此,我还是决定先把书再好好看下,“工欲善其事,必先利其器”嘛!
6月28期二
昨天看了一天的书,又加上今天看的,可却连一半还没看完。
我是按部就班的顺序往下看的,但因为书的前半部分大多是基础知识,因此在晚上上课时依旧不知如何编写。
折腾了一晚上,想编写要调用的函数的,试着编了好多,但都是些到处是错误的程序,根本没法用。
而且编的时候还是发现自己好多东西都忘记了,因此觉得还是得接着去看书,没辙,还是先把书吃透,把基本程理论再实践吧!
6月29星期三
今天又是啃了一天的书,本还想去机房试试的呢,结果都没来得及去,刚够把书看完。
今天重点把数组、函数和文件部分看了下。
晚上上机的时候在机器上试了下,并为我的主函数编了个结构体数组,用来存录入的信息。
同时今晚在调试主函数时发现我的主函数没有清屏的功能,所有工作都在同一屏幕上。
问了同学,为里面加了个清屏的语句,但要加这语句得另加个头文件,问为什么要加这头文件,他也不懂,只知道就是这样规定的,并且这些规定都是得记住的。
还是学得不够多,得慢慢充实自己!
6月30星期四
下午C语言考试,复习了一上午,丁点课程设计也没碰。
等下午考完试直奔机房,编写了两小时,只给我的程序加了个添加了个“录入学生信息”的函数。
在做时候碰到了不少的问题。
主要是我的程序一次只能录入一个学生信息,好不容易加了个可以继续录入的语句,可又碰到了新的问题。
当我录入学生信息的前三项后,就直接进入“是否继续录入”。
我怀疑是有肯能在定义数组长度时定义太大了,当我把它缩小后再编译、连接、运行时居然成功了,可我现在还没确定到底时什么原因。
又碰到新问题了。
我把其他要调用的函数也加进去了,但是在用的时候发现加进去的那些函数都不能用,就一添加函数在运行时是正常的,而其他的进入是可以,但在执行的时候,它就会出来警告,说不能被读。
自己找,也请同学帮忙找了,但都没找出毛病。
碰这问题实在是难办,因为不能执行,我也就不知道这些函数在这里运行是否会正常,也就不知道是否需要改动。
关于“警告”的问题到现在还没解决,有点心烦意乱了,改了下程序,可问题又多了。
在“查找”项里也出现了问题,在查找时候即使是查找一个人,它却也会每次都会把所查找的人给找出后,接着又会把其他人的信息以“查无此人”显示出来。
反复检查下发现好像是算法的问题。
是在循环里的时候出了错,它自己不停了,非得把所有的运行一遍在停。
在我加了停止条件后问题总算是得到解决了。
可“警告的问题今天还是没解决。
警告”的问题困扰好久了,真是头痛,都快被它给崩溃了。
今天上课时,我又检查和调试了下,可还是没找到问题在哪儿。
自己是搞不定了,只能是请教老师了。
虽然向老师去请教的人很多,但还是被我逮到机会了,让老师帮我看了下,检查发现原来是在调用函数和主函数中所定义的类型产生了差异。
将被掉函数里的改过来后问题久解决。
五、心得体会
两周的课程过起来其实也是很快的。
这是我第一次做课程设计,起初还没做的时候觉得很快自己就将得编一个较大的程序,将会很有意思。
带着最初的好奇心,新鲜感就这样开始了第一天的编程,结果是大失所望。
做课程设计并不是自己想象中的那样有意思,而是很枯燥,很乏味的。
也没想象中的那样简单,并不是像我们平时上C语言课时,每次编的那些小程序,没那么简单。
我们现在要做的就是将我们平时学的,做的那些小程序都合理的凑到一块儿来。
而把这些小程序都加到一块儿来,并不是随意的将它们放到一个程序中就完事的,而是必须得合理,且得顾及到各个方面。
正是由于编程的纷繁复杂,且结构的严谨,因此编程的过程中到处是困难和问题。
它考验的不仅是我们的平时用功程度,以及我们对所学知识的熟练掌握程度、应用的灵活程度,它还考验我们的毅力。
在刚开始的几天时,由于前一阵忙于各科的考试,C语言已经好久没碰了,所学的知识都有点遗忘了,在编写时处处碰壁,一直会停顿翻书,编得自己都开始心烦意乱了,实在是编不下去了,于是索性就停了三天去看书,先把书给吃透。
并在后期的程序调试中也碰到不少的问题,好多问题自己反复检查了几遍都没查出,但在老师的帮助下还是一下就查出了。
并不是这些问题多难,而是不够心细。
因此做课程设计、编程时,它还考验并锻炼我们的心细程度。
经过这次的课程设计的实践,我受益颇多,不仅是对我掌握知识、灵活运用知识的一次考验和锻炼,也是对我生活态度的一次锻炼,让我学会心细和拥有毅力,更具信心和恒心,碰到困难不再退缩,而是坚强面对。
六、参考文献
[1]谭浩强.编著.C程序设计.北京:
清华大学出版社,1991
[2]谭浩强.编著.C程序设计题解与上机指导.北京:
清华大学出版社,1992
[3]潭浩.田淑清编著.PASCAL语言程序设计〔第二版〕.北京:
高等教育出版社,1998
[4]HerbertSchildt.著戴健鹏译.C语言大全〔第二版〕.北京:
电子工业出版社
八致谢
在此我向在此次课程设计时对我进行指导的老师,还有帮助我的同学们。
这个软件的实现固然需要自身的努力,当然也离不开同学们的帮助与讲解。
缺少这些也许我的程序就无法调试完成。
谢谢老师和同学们的帮助与讲解。
签名:
日期:
2011年7月1日
cin
sortall
sort-1
find
addnew
save
main本文来自网络,版权归
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生成绩管理系统 C语言课程设计成绩管理系统毕业设计 学生 成绩管理系统 语言 课程设计 毕业设计