C语言课程设计报告之学生成绩信息管理系统.docx
- 文档编号:11976560
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:20
- 大小:109.92KB
C语言课程设计报告之学生成绩信息管理系统.docx
《C语言课程设计报告之学生成绩信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告之学生成绩信息管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告之学生成绩信息管理系统
华中科技大学计算机科学与技术学院
C语言程序设计课程设计
实验报告
题目:
学生成绩信息管理系统
专业:
计算机应用与技术
班级:
01班
学号:
姓名:
成绩:
指导老师:
完成日期:
2012年3月15日
目录
一、概述2
1、课程设计目的2
2、课程设计要求...................................................................................................2
3、实验环境…................................................................................................2
二、设计方案................................................................2
1、功能描述……..…................................................................................2
2、数据结构设计.........................................................................................3
3、各功能模块的详细描述...........................................................................3
4、程序结构................................................................................................5
三、实验结果.............................................................6
四、课程设计总结......................................................6
五、参考文献...............................................................8
附录:
源程序代码...........................................................................................8
一、概述
1、课程设计目的:
利用学生成绩信息管理系统实现对本班同学的C语言、计算机基础、高等数学、英语四门课的成绩信息进行管理,其中包括实现增加、插入、修改、删除、统计平均成绩功能。
2、课程设计要求:
1)只能使用C语言编程。
2)要用十字交叉链表(可选)。
3)要求实现数据文件的I/O操作,用文件保存数据。
4)至少输出一份报表(屏幕显示即可)。
5)课程设计报告要按要求格式撰写。
3、实验环境:
机房
二、设计方案
学生基本信息表:
中文字段名
类型及长度
举例
学号
char[12]
201141388
姓名
char[20]
Zhangming
性别
Char
m,f
出生日期
char[12]
1993/01/01
班级
char[10]
Is0601,cs03
C语言成绩
Flaot
计算机基础
Flaot
高等数学
Flaot
英语
Flaot
1、功能描述:
学生成绩信息管理系统由五大模块组成,即文件、数据维护、数据查询、数据统计和帮助。
具体结构图如图所示:
2、数据结构设计:
采用“自顶而下、逐步求精”的设计方法,即由全局到局部,由整体到细节,由抽象到具体,将复杂的大规模问题分解成相对简单的小规模问题,不断分解细化,直到每一个子问题都可以用明确具体的方法和步骤来解决为止的方法。
3、各功能模块的详细描述
文件:
包括一系列与系统启动运行和系统结束运行相关的环境维护和数据保障操作,该模块又分为界面初始化、数据加载、数据保存以及退出系统几个部分。
其中,界面初始化模块用于设置控制台窗口显示模式,设置窗口标题栏,清屏并显示系统菜单栏和系统状态栏;数据加载模块用于将分别存放在多个数据文件中的代码数据和基础数据读入内存,构造数据链表,同时输出数据加载相关信息;数据保存模块将内存中代码表数据和链表数据按缺省路径分别保存到各个数据文件;退出系统模块释放程序运行过程中申请的动态存储区,关闭控制台标准输入和输出设备句柄,将标题栏设为“运行结束”,清除屏幕窗口信息,结束系统运行。
数据维护:
该模块完成对学生基本信息的录入、修改和删除功能,保证数据的准确性、完整性和有效性。
该模块又分为增加成绩、修改成绩、删除成绩三部分。
数据查询:
该模块提供对系统中学生的几种数据信息按多种条件查询的功能。
该模块又分为按学号学生名次查询、按课程和学号查询成绩、课程总体信息查询以及学生基本信息查询四部分。
其中,学生基本信息查询模块用于提供两种方式查询学生基本信息,一种方式是按学号进行精确查询,另一种方式是以学生姓名和学生类别等组合条件进行查询,并具有模糊查询功能。
数据统计:
该模块提供对几种基础数据进行多方面统计的功能。
该模块又分为统计学生的平均成绩、各科成绩两部分。
按学生成绩的高低顺序排序后输出学生的姓名、学号以及各科成绩。
帮助:
该模块为用户使用系统提供帮助信息,同时还提供系统版本信息,分帮助主题子模块和系统版本版权说明子模块。
其中,帮助主题模块用于按关键词为用户提供帮助信息;系统版本版权说明模块用于显示系统的版本信息和系统版权信息。
4、程序结构:
1)主控函数:
#include
#include
#include
/*Student*AppendNode(Student*head);
voidDisLink(Student*head);
voidDeleteMemory(Student*head);
voidsearch_StuNo(void);
Student*InsertNode(Student*head);
Student*DelNode(Student*head);
Student*Start(Student*head);
Student*Com(Student*head);*/
typedefstructstudent
{
charxuehao[12];
charname[20];
floatc1;
floatc2;
floatc3;
floatc4;
floatc5;
structstudent*next;
}Student;
2)核心模块结构:
说明:
十字交叉链表由学生基本信息构成一个单向链表,链表中的每个结点描述一个同学的基本信息;同时每个结点都有一个头指针,它指向该生的学习成绩链。
十字交叉链表的结构如图所示:
三、实验结果
四、课程设计总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
我的题目是文章处理系统的设计,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?
怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?
怎样让自己的业余更靠近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
机会是老师,学校,以及无数代教育工作者给的,而能力是自己的,耐性是需要的。
经过自己的琢磨,听取了师姐,师兄们的建议,还查阅了很多书籍,才做到了心中有数,才了解了C语言课程设计的真正用意——培养自学能力,养成程序编辑的好习惯。
我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在郭老师的辛勤指导下,终于游逆而解。
同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。
在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。
老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?
在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。
没有了柳暗花明的一天,那么我怎么能说经受住了考验?
谢谢老师的那句话,她说:
人力有所不能及,然而,人的精神是不会败倒的。
我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。
不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。
谢谢给我指点迷津的老师。
五、参考文献
1、《C语言实验课程设计》,科学出版社。
2、曹老师编著的《C语言程序设计》,科学出版社。
源程序代码:
#include
#include
structStudent*AppendNode(structStudent*head);
voidDisLink(structStudent*head);
voidDeleteMemory(structStudent*head);
structStudent*InsertNode(structStudent*head);
structStudent*DelNode(structStudent*head);
structStudent*Start(structStudent*head);
structStudent*Com(structStudent*head);
structStudent
{
charxuehao[12];
charname[20];
floatc1;
floatc2;
floatc3;
floatc4;
floatc5;
structStudent*next;
};
main()
{
inta;
structStudent*head=NULL;
intk=1;
head=Start(head);
DisLink(head);
while(k)
{
printf("1增加数据\n2插入数据\n3删除数据\n4显示数据\n5退出\n选择:
");
scanf("%d",&a);
switch(a)
{
case1:
head=AppendNode(head);
DisLink(head);
break;
case2:
head=InsertNode(head);
DisLink(head);
break;
case3:
head=DelNode(head);
DisLink(head);
break;
case4:
DisLink(head);
break;
case5:
k=0;
break;
default:
printf("请输入有效选择!
\n");
}
}
};
structStudent*Start(structStudent*head)
{
structStudent*p=NULL;
structStudent*pr=head;
p=(structStudent*)malloc(sizeof(structStudent));
head=p;
pr=p;
strcpy(pr->xuehao,"201141340");
strcpy(pr->name,"盼盼");
pr->c1=93.1;
pr->c2=89.5;
pr->c3=92.7;
pr->c4=78.9;
pr->c5=(p->c1+p->c2+p->c3+p->c4)/4;
p=(structStudent*)malloc(sizeof(structStudent));
pr->next=p;
pr=pr->next;
strcpy(pr->xuehao,"201141341");
strcpy(pr->name,"阳阳");
pr->c1=87.2;
pr->c2=85.4;
pr->c3=90.9;
pr->c4=67.8;
pr->c5=(p->c1+p->c2+p->c3+p->c4)/4;
p=(structStudent*)malloc(sizeof(structStudent));
pr->next=p;
pr=pr->next;
strcpy(pr->xuehao,"201141342");
strcpy(pr->name,"珊珊");
pr->c1=74.7;
pr->c2=69.8;
pr->c3=75.9;
pr->c4=78.5;
pr->c5=(p->c1+p->c2+p->c3+p->c4)/4;
p=(structStudent*)malloc(sizeof(structStudent));
pr->next=p;
pr=pr->next;
strcpy(pr->xuehao,"201141343");
strcpy(pr->name,"雯雯");
pr->c1=95.1;
pr->c2=81.3;
pr->c3=78.5;
pr->c4=87.5;
pr->c5=(p->c1+p->c2+p->c3+p->c4)/4;
p=(structStudent*)malloc(sizeof(structStudent));
pr->next=p;
pr=pr->next;
strcpy(pr->xuehao,"201141344");
strcpy(pr->name,"乐乐");
pr->c1=79.5;
pr->c2=85.8;
pr->c3=88.1;
pr->c4=96.1;
pr->c5=(p->c1+p->c2+p->c3+p->c4)/4;
pr->next=NULL;
returnhead;
}
voidDisLink(structStudent*head)
{
structStudent*p=head;
intj=1;
printf("序号学号姓名C语言计算机基础高等数学英语平均分\n");
while(p!
=NULL)
{
printf("%3d%10s%10s%8.2f%8.2f%8.2f%8.2f%8.2f%8.2f\n",j,p->xuehao,p->name,p->c1,p->c2,p->c3,p->c4,p->c5);
p->c5=(p->c1+p->c2+p->c3+p->c4)/4;
p=p->next;
j++;
}
}
structStudent*AppendNode(structStudent*head)
{
structStudent*p=NULL;
structStudent*pr=head;
charxuehao[9];
charname[20];
floatc1;
floatc2;
floatc3;
floatc4;
p=(structStudent*)malloc(sizeof(structStudent));
if(p==NULL)
{
printf("Noenoughmemorytoalloc");
exit(0);
}
if(head==NULL)
{
head=p;
}
else
{
while(pr->next!
=NULL)
{
pr=pr->next;
}
pr->next=p;
}
pr=p;
printf("请输入学号:
");
scanf("%s",&xuehao);
printf("请输入姓名:
");
scanf("%s",&name);
printf("请依次输入C语言,计算机基础,高等数学英语成绩:
");
scanf("%f%f%f%f",&c1,&c2,&c3,&c4);
strcpy(pr->xuehao,xuehao);
strcpy(pr->name,name);
pr->c1=c1;
pr->c2=c2;
pr->c3=c3;
pr->c4=c4;
pr->next=NULL;
returnhead;
}
voidDeleteMemory(structStudent*head)
{
structStudent*p=head,*pr=NULL;
while(p!
=NULL)
{
pr=p;
p=p->next;
free(pr);
}
}
structStudent*DelNode(structStudent*head)
{
structStudent*p=head,*pr=head;
inti,j;
printf("删除第几个数据?
");
scanf("%d",&i);
for(j=1;j
{
pr=p;
p=p->next;
}
if(p==head)
{
head=p->next;
}
else
{
pr->next=p->next;
}
free(p);
returnhead;
}
structStudent*InsertNode(structStudent*head)
{
structStudent*pr=head,*p=head,*temp=NULL;
inti,j,n;
charxuehao[9];
charname[20];
floatc1;
floatc2;
floatc3;
floatc4;
p=(structStudent*)malloc(sizeof(structStudent));
printf("请输入学号:
");
scanf("%s",&xuehao);
printf("请输入姓名:
");
scanf("%s",&name);
printf("请依次输入C语言,计算机基础,高等数学英语成绩:
");
scanf("%f%f%f%f",&c1,&c2,&c3,&c4);
4;
p->next=NULL;
strcpy(p->xuehao,xuehao);
strcpy(p->name,name);
p->c1=c1;
p->c2=c2;
p->c3=c3;
p->c4=c4;
printf("插入到第几个?
");
scanf("%d",&i);
for(j=1;j
{
temp=pr;
pr=pr->next;
}
if(pr==head)
{
p->next=head;
head=p;
}
else
{
pr=temp;
p->next=pr->next;
pr->next=p;
}
returnhead;
}
structStudent*Com(structStudent*head)
{
structStudent*pr=head,*p=head,temp1;
inti=1,j,k;
/*charxuehao[9];
charname[20];
floatc1;
floatc2;
floatc3;
floatc4;*/
while(p->next!
=NULL)
{
p=p->next;
i++;
}
p=head;
for(j=1;j
{
p=p->next;
for(k=0;k<(i-j);k++)
{
if((pr->c1+pr->c2+pr->c3+pr->c4)/4.0<(p->c1+p->c2+p->c3+pr->c4)/4.0)
{
/*strcpy(xuehao,p->xuehao);
strcpy(name,p->name);
c1=p->c1;
c2=p->c2;
c3=p->c3;
c4=p->c4;
strcpy(p->xuehao,pr->xuehao);
strcpy(p->name,pr->name);
p->c1=pr->c1;
p->c2=pr->c2;
p->c3=pr->c3;
p->c4=pr->c4;
strcpy(pr->xuehao,xuehao);
strcpy(pr->name,name);
pr->c1=c1;
pr->c2=c2;
pr->c3=c3;
pr->c4=c4;*/
temp1=*pr;
temp1.next=p->next;
*pr=*p;
*p=temp1;
pr->next=p;
}
p=p->next;
pr=pr->next;
}
p=head;
pr=head;
}
returnhead;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 学生 成绩 信息管理 系统