C语言程序课程设计.docx
- 文档编号:17212005
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:28.87KB
C语言程序课程设计.docx
《C语言程序课程设计.docx》由会员分享,可在线阅读,更多相关《C语言程序课程设计.docx(12页珍藏版)》请在冰点文库上搜索。
C语言程序课程设计
C语言程序课程设计
题目:
院、系:
计算机科学与工程学院
学科专业:
网络工程
学生:
潘佳伟
学号:
090612110
指导教师:
梁晨
2009年12月
目录
1课程设计的题目----------------------3
2课程设计的目的(设计要解决的问题)-------3
3概要设计(函数划分、总体设计)---------4
4详细设计(流程图、程序)-----------------5
5调试结果--------------------------------11
6课程设计总结----------------------------11
7心得体会-------------------------------11
课程设计的题目课程设计的目的
要求:
每组4—5人,共同完成,交1份设计报告,成员按贡献大小给出顺序
题目名称:
学生成绩管理系统
设计内容:
设计一个学生成绩管理系统,对本学期的本班的学习成绩进行管理,可以用数组来设计这个程序,具有查询和检索功能,
1、设计内容
1)每一条记录包括一个学生的学号、姓名、性别、各门课成绩(本学期的科目)、平均成绩。
2)输入功能:
可以一次完成若干条记录的输入。
3)显示功能:
完成全部学生记录的显示。
4)查找功能:
完成按姓名或学号查找学生记录,并显示。
5)排序功能:
按学生平均成绩进行排序。
6)插入功能:
按平均成绩高低插入一条学生记录。
7)将学生记录存在文件student.dat中。
8)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
2、设计要求
已知有存储本班学生记录(包括学号、姓名、科目成绩、性别)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立)。
要求编程序实现查询、排序、插入、删除诸功能。
具体要求如下:
1)要求显示如下界面1-------------查询2--------------排序3--------------插入4--------------删除,通过选择1-4来确定要做哪一个操作。
2)若选1,则出现如下界面1.1----------按学号查询1.2----------按姓名查询1.3----------按成绩查询,通过选择1.1-1.3来确定要做哪一个操作,其中:
按姓名查询用顺序法实现;按成绩查询实现查询成绩小于60分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。
3)若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。
4)若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。
5)若选4,删除指定学生的记录,并把结果保存到文件student.dat中。
6)不同的模块都要有出错处理,并能给出出错提示。
如输入数据错误,文件操作错误等等
7)以上各个功能均编写成子函数,由主函数调用实现。
8)利用结构体数组实现学生成绩的数据结构设计;
9)完成设计任务并书写课程设计报告。
最终成绩=平时20%+答辩40%+论文40%
概要设计(函数划分、总体设计)
整个系统除了主函数外,另外还有10个函数,实现八大功能:
输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。
各个函数的详细设计说明分别如下:
1、主函数main()
利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、初始化函数STUDENT *init()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。
比如:
没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
3、菜单选择函数intmenu_select();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
4、输入记录函数STUDENT*create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。
算法:
先声明一个首节点head,并将head->next设为NULL。
每输入一个数据就声明一个新节点p,把p->next设为NULL,并且链接到之前列表的尾端。
5、显示记录函数voidprint(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:
先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。
然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重复执行此步聚直到p指针指向NULL为止。
6、查找记录函数voidsearch(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。
算法:
采用线性查找法往下一个节点查找。
输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s)&&p!
=NULL时,使p后移一个结点,如果p!
=NULL,输出p所指的结点。
7、删除记录函数STUDENT*delete(STUDENT*head)
这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“Y”进行删除。
算法:
从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。
如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。
8、排序函数STUDENT*sort(STUDENT*head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。
8、插入函数STUDENT*insert(STUDENT*head,STUDENT*new)
这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。
算法:
先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分的高低顺序插入。
先用指针变量p0指向待插入的结点,p1指向第一个结点。
如果p0->average
此时将p1后移,并使p2指向刚才p1所指的结点。
重复以上的步骤,直到p0->average>=p1->average为止。
这时将p0指向的结点插到p1所指结点之前。
但是如果p1所指的已是表尾结点,则p1就不应后移了。
如果p0->average比所有结点的average都小,则应将p0所指的结点插到链表末尾。
如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值赋给p2->,使p2->next指向待插入的结点,然后将p1的值赋给p0->next,使得p0->next指向p1指向的变量。
如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0->next。
如果要插到表尾之后,应将p0赋给p1->next,NULL赋给p0->next。
最后再调用排序的函数,将学生成绩重新排序.
10、保存数据到文件函数voidsave(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。
11、从文件读数据函数STUDENT*load()
这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。
详细设计(流程图、程序)
#include
#include
structstudent
{intnum;
charname[20];
charsex;
floatmath;
floatenglish;
floatc_program;
floataverage;
}stu[45]={
{090612110,"潘佳伟",'M',85,92.5,79,85.5},
{090612111,"秦山高",'M',90,59,88,79},
{090612112,"屈文亮",'M',95,89,56.5,80.17},
{090612113,"沈鹏飞",'M',58.5,46,80,61.5},
{090612114,"王健",'M',100,100,100,100}
}
voidsort()/*该函数用于排序学生成绩采用冒泡法*/
{
inti,j,m;
structstudenttemp;
for(i=0;i for(j=i+i;j if(stu[i].ave {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } for(i=0;i<45;i++) {if(stu[i]! =0) printf("NO: %9d\nNAME: %20s\nMATH: %f\nENGLISH: %f\nC_PROGRAME: %f\nAVERAGE: %f\n", stu[i].num,stu[i].name,stu[i].sex,stu[i].math, stu[i].english,stu[i].c_programe,stu[i].average); else{printf("pleaseinput0tocontinue\n"); scantf("%d",&m); if(m=0)gotoloop_1; elsegotoloop_2} } voiddelect()/*该函数用于删除学生成绩*/ { inti,t; longnum; printf("pleaseenternumberwhichyouwanttodelect: "); scanf("%ld",&num); printf("\n"); for(i=0;i<45;i++) { if(stu[i].num! =num) printf("Thenumberisnotexist! ! ! \n"); else(stu[i].num==num) t=i; } for(i=t;i<45;i++) stu[i]=stu[i+1]; printf("pleaseinput0tocontinue\n"); scantf("%d",&m); if(m=0)gotoloop_1; elsegotoloop_2; return() } voidinsert()/*该函数用于插入学生成绩*/ {inti,n,t; structstudents; printf("pleaseinputrecord\n"); printf("NO: NAME: MATH: ENGLISH: C_PROGRAME: AVERAGE: \n") for(i=t;i<45;i++) if(stu[i]=0) scanf("NO: %9d\nNAME: %20s\nMATH: %f\nENGLISH: %f\nC_PROGRAME: %f\nAVERAGE: %f\n", &stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].math, &stu[i].english,&stu[i].c_programe,&stu[i].average);break; printf("pleaseinput0tocontinue\n"); scantf("%d",&m); if(m=0)gotoloop_1; elsegotoloop_2; return() } structsearch(floatf,intnum,charname[20],inti,intm);\*对将用到的四个函数进行声明*\ voidsort() voiddelect() voidinsert() loop_1: voidmain() {printf("----------------------------学生成绩管理系统\n\n"); printf("1---------------------------查询\n 2-------------------------排序\n 3-------------------------插入\n 4------------------------删除\n"); scanf("%d",&n); if(n=1){structsearch(floatf,intnum,charname[20],inti,intm)}; elseif(n=2){sort()}; elseif(n=3){insert()}; elseif(n=4){delect()}; elseprintf("输入错误\n"); } #include #include loop_2: structsearch(floatf,intnum,charname[20],inti,intm)/*该函数用于查找学生成绩*/ {printf("1.1----------------按学号查询\n 1.2----------------按姓名查询\n 1.3----------------按成绩查询\n"); printf("请输入您需要的查询方式的代码(如: 1.1)\n"); scanf("%2.1f",&f); if(f=1.1) {printf("请输入您要查询的学生的学号(如: 1.1)\n"); scanf("%2.1f",&f); for(i=0;i<45;i++) if(num==stu[i].num) printf("NO: %9d\nNAME: %20s\nMATH: %f\nENGLISH: %f\nC_PROGRAME: %f\nAVERAGE: %f\n", stu[i].num,stu[i].name,stu[i].sex,stu[i].math, stu[i].english,stu[i].c_programe,stu[i].average); else{printf("您的输入有误\n\n按"0"键然后回车键返回上一级菜单\n"); scanf("%1d",&m); if(m==0)gotoloop_1; elsegotoloop_2}} elseif(f=1.2) {printf("请输入您要查询的学生的姓名(如: BaiXinrui)\n"); scanf("%2.1s",&name); for(i=0;i<45;i++) if(strcmp(name,stu[i].name)==0) printf("NO: %9d\nNAME: %20s\nMATH: %f\nENGLISH: %f\nC_PROGRAME: %f\nAVERAGE: %f\n", stu[i].num,stu[i].name,stu[i].sex,stu[i].math, stu[i].english,stu[i].c_programe,stu[i].average); else{printf("您的输入有误\n\n按"0"键然后回车键返回上一级菜单\n"); scanf("%1d",&m); if(m==0)gotoloop_1; elsegotoloop_2}} loop_3: elseif(f=1.3) {printf("平均成绩为60分以下的学生为: \n"); for(i=0;i<45;i++) if(stu[i].average<60) printf("NO: %9d\nNAME: %20s\nMATH: %f\nENGLISH: %f\nC_PROGRAME: %f\nAVERAGE: %f\n", stu[i].num,stu[i].name,stu[i].sex,stu[i].math, stu[i].english,stu[i].c_programe,stu[i].average); else{printf("您的输入有误\n\n按"0"键然后回车键返回主菜单\n"); scanf("%1d",&m); if(m==0)gotoloop_1; elsegotoloop_3} 调试结果课程设计总结 (1)刚开始没有那个初始化函数,程序运行后,没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码! 加入初始化函数后,这种现象也随之消失。 (2)刚开始执行输入函数,按学号顺序输入十个学生的成绩,输完后执行显示功能,学生成绩记录是按学号的反顺序显示的,试着在其中增加一些语句,希望能把学号按正常顺序显示,但暂时没有成功,所以在输入成绩时只能按学号反顺序输入,最后就按学号正常顺序输出了。 (3)刚开始时,先把成绩按平均分排序,再插入一个学生的成绩,执行显示功能,虽然插入的学生的成绩能正常插入,但该学生的名次为0。 后来,在插入成绩之后,调用排序函数,把所有成绩重新排序一次。 (4)在输入函数中设了一个无限循环,可以输入无数个学生的成绩信息,当学号为0的时候则停止输入。 (5)输入太多个学生的成绩时,屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。 (6)在没有输入任何信息的情况下,去执行排序功能,最后显示有一个记录,学号、姓名为空白,成绩都为0,名次为1。 (7)在输入选项时不能输入字母,否则会死循环,建议不要乱输字母。 心得体会 经过一个多星期的C语言课程设计,感觉自己收获不少! 首先是: 链表本来上课是没有上的,但这个课程设计里面主要都是用链表,因为要达到这样的功能,使用链表相当方便,但不容易理解,所以在这方面我很了很多的时间看课本和参考课外书,使C语言的知识强化了不少。 其次,在做课程设计的过程中,发现了平时很多没有注意到的问题,例如: 返回值函数和不返回值函数两者在主函数中的调用是不同的………… 更重要的是,这次课程设计虽然花了我不少时间,但正是这些时间,让我见识到了C语言的重要性。 这个学生成绩管理系统都是在自己知识范围内完成的,所以界面清晰简单,可能不是很好看,但绝对实用! 从这里我也得到一个体会,做一个程序,或者开发一个软件,应该着重从它的后台制作入手,不能做出一个中看不中用的程序或者软件。 相信这次的课程设计为我以后继续从事计算机工作打了一个小小的开头。 由于这是第一次进行设计,写文档,难免会写得不好!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 课程设计
文档标签
- C语言程序设计0008语言程序设计000821
- C语言程序的设计课程设计语言程序设计
- C语言程序设计教程语言程序设计教程课后
- C++语言程序设计《C++语言程序设计》课程设计推箱子C++
- 程序设计语言VC课程设计学生
- C语言程序设计语言程序设计授课教案
- 语言课程设计投票程序设计
- 语言程序设计课程作业
- 语言程序课程设计图书
- C++程序设计课程C++程序设计
- C++程序设计C++程序设计课程
- C语言程序设计语言程序设计讲稿
- C语言程序设计语言程序设计说课稿
- C语言程序设计A语言程序设计课程形成
- c语言程序设计语言程序设计
- C语言程序设计语言程序设计课程设计任务书
- C语言程序语言程序课程设计
- C++语言程序设计教程课后
- C语言程序设计教程语言程序设计教程课程
- C语言程序的设计语言程序设计
- C语言程序设计语言程序设计教案清华
- C语言程序设计学院语言程序设计
- C语言程序设计PAT语言程序设计题目
- 语言程序设计讲稿
- C语言程序的设计语言程序设计
- 语言源程序
- 语言程序
- Python语言程序设计3语言程序设计
- 程序设计