湖南XX学院C语言课程设计学生成绩管理系统.doc

上传人:牧羊曲112 文档编号:4178308 上传时间:2023-04-08 格式:DOC 页数:27 大小:1,009KB
返回 下载 相关 举报
湖南XX学院C语言课程设计学生成绩管理系统.doc_第1页
第1页 / 共27页
湖南XX学院C语言课程设计学生成绩管理系统.doc_第2页
第2页 / 共27页
湖南XX学院C语言课程设计学生成绩管理系统.doc_第3页
第3页 / 共27页
湖南XX学院C语言课程设计学生成绩管理系统.doc_第4页
第4页 / 共27页
湖南XX学院C语言课程设计学生成绩管理系统.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《湖南XX学院C语言课程设计学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《湖南XX学院C语言课程设计学生成绩管理系统.doc(27页珍藏版)》请在三一办公上搜索。

1、课 程 设 计 报 告课程名称 C语言课程设计 课题名称 学生成绩管理系统 专 业 汽车服务工程 班 级 1 2 0 2 班 学 号 201202180213 姓 名 刘 波 指导教师 王宁 肖伟平 郭芳 2014年 1月 3 日湖南工程学院课 程 设 计 任 务 书课程名称 C课程设计 课 题 学生成绩管理系统 专业班级 汽车服务工程 学生姓名 刘 波 学 号 201202180213 指导老师 王宁 肖伟平 郭芳 审 批 任务书下达日期 2013 年 12 月 27日任务完成日期 2014年 1 月 3 日 目录封面1任务书2目录3设计内容与设计要求4进度安排4课题的主要功能5课题的功能模

2、块的划分5主要功能的实现5程序调试8程序界面9总结心得15源程序(附件)16评分表27一、设计内容与设计要求1设计内容:设计与开发一个学生成绩管理系统,对学生的学号、姓名、课程成绩、总分、平均成绩等信息进行管理、主要功能以下基本功能模块图1-1所示。主程序初始化输入显示删除查找添加计算排序退出图1-1 基本功能模块2设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。5)实际操作过程中遇到的问题及解决方法:设计总结及心得体会.6)上机演示。二、进度安排第十七周 周五 上午 8:001

3、2:00(查阅相关资料并 开始编写源程序)第十七周 周五 晚上 18:3022:30 (完成源程序编写调试运行 课程设计报告)第十七周 周六 下午 13:3017:30(完成课程设计报告以及答辩)学生成绩管理系统一、课题的主要功能:学生信息是存放在文件中的,所以应该提供文件的输入,输出,插入,删除等操作,在程序中需要浏览学生的信息,应提供显示,查找,排序等操作,另外还应提供键盘式选择菜单提供选择功能。二、课题的功能模块的划分:根据上面的需求分析,可以将这个系统大致划分为以下模块。 学生成绩管理初始化建立学生成绩表格删除记录显示单链表中所有记录按姓名查找记录保存到文件、从文件加载 计算所有学生成

4、绩的总分和均分插入记录到表中将所有学生成绩排序追加记录到文件模块退出三、主要功能的实现:1.进入主菜单,初始化模块,如图 3-1 所示:进行清零输入0 N返回主模块 Y 清零成功 Y任意键返回主模块 3-1初始化模块 2.建立学生表格模块,如图3-2所示:进行编辑输入1 N返回主模块 Y 信息录入 N 返回主模块 Y继续输入 Y任意键返回主模块 3-2建立学生表格模块3.从表中删除原有纪录模块,如图3-3所示: 进行删除输入2 N返回主模块 Y 信息录入 N 返回主模块 Y删除成功 Y任意键返回主模块 3-3删除原有纪录模块4.显示单链表中所有记录模块,如图3-4所示: 进行输入输入3 N返回

5、主模块 Y 信息输出 N 返回主模块 Y显示信息 Y任意键返回主模块 3-4显示纪录模块5.按照姓名查找纪录模块,如图3-5所示: 学生姓名输入4 N返回主模块 Y 信息录入 N 返回主模块 Y查找成功 Y任意键返回主模块 3-5查找模块6.保存到文件模块,如图3-6所示:保存文件输入5 N返回主模块 Y 保存成功 Y任意键返回主模块 3-6查找模块7.从文件加载模块,如图3-7所示:加载文件输入6 N返回主模块 Y 加载成功 Y任意键返回主模块 3-7查找模块8.计算所有学生的总分和均分模块,如图3-8所示: 进行计算输入7 N返回主模块 Y 输出结果 Y任意键返回主模块 3-8计算模块9.

6、插入纪录到表中模块,如图3-9所示: 学号输入8 N返回主模块 Y 信息录入 N 返回主模块 Y成功插入 Y任意键返回主模块 3-9插入纪录模块10.将所有学生成绩排序模块,如图3-10所示: 进行排序输入9 N返回主模块 Y 排序成功 Y任意键返回主模块 3-10排序模块11.追加记录到文件模块,如图3-11所示: 追加到文件输入10 N返回主模块 Y 追加成功 Y任意键返回主模块 3-11分类合计模块12.退出模块。四、程序调试:在设计该程序的时候我采用了结构化程序方法编辑,并在源代码的基础上添加了中文注释。但是在该系统的编写过程中仍然有许多错误,主要的有:注释文字的排版,定义错误,句式的

7、语法错误。在完善程序时,我将源代码先打印下来反复的捉摸和研究,力图在上机运行时先改正一些低级错误.如缺少”;”之类.在仔细检查之后,将源代码上机调试进行编译,在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正直到顺利显示我预期的。1、首先,在本次调试过程中我碰到了在上机前根本没有想到的错误:在注释的时候,注释文字应写在一起中间不能有中断,不能再其中包含c语言的语句。否则会引起错误,例如格式不正确或是多了字符等。2、缺少变量定义或是定义位置不正确;由于该程序相对来讲稍有些长,前后有些变量很难联系起来,但是在错误信息的提示下一般还是很是可以找到。不过需要注意的是在定

8、义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。3、句式的语法错误;大多的语法错误在通过书本参考下能够修改。主要是平时看书不仔细、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。这些语法错误有信息框的提示一般是能够排除的。编译、连接的成功并不意味着程序的最终成功。以上是调试的全过

9、程。程序界面:首先进入界面时,根据屏幕上的提示press any key enter menu即是按任意键均可进入主菜单,考虑到学生成绩大多由老师输入和调用,所以这里对使用者没有要求也就没有添加密码的必要。 在进入主菜单时可以看到这样的画面,如图4-1所示:4-1主菜单从0到10共有11个功能键。此时应该根据提示”Enter your choice (0-10):”选择自己需要用的功能,例如:在提示后按1再回车(Enter键)的话就会进入编辑。在主菜单上的11个功能分别是:0. init list将表格初始化:使用0后,系统会将原有的一切记录全部删去,所有的恢复到位使用时。一切在主菜单上完成。

10、1. Enter list建立学生成绩表格:使用1后,在界面上会要求你输入学号no,姓名name 和成绩score1、2、3。如果已经输入完毕只要在下一个no后输入再按回车键即可,此时就会回到主菜单,如图4-2所示:4-2输入界面2. Delete a record from list从表中删除原有纪录:使用2 后,会进入子界面,提示语会告诉你输入你要删除的信息的学生的学号,然后会出现“ list no * student”这就表示删除成功,如果没有这个学生的信息则会跳过步执行但是还是会输出上述的句子,如图4-3所示:4-3显示删除界面3. print list显示单链表中所有记录:如果是在执

11、行完5以后,那么总分和均分一栏就不会空白,而是会输出计算后的数据,如图4-4所示:4-4打印输出界面4. Search record from list按照姓名查找纪录:根据提示”please enter studentsname for search”输入学生的拼音拼写的姓名,如图4-5所示:4-5查找界面5. Save the file,根据提示保存到文件,如图4-6所示:4-6保存界面6. Load the file,根据提示从文件加载,如图4-7所示:4-7加载界面7. compute the score计算所有学生的总分和均分:按7后,系统会自动计算然后输出结果,如图4-8所示:4-

12、8计算界面8. insert record to list插入纪录到表中:使用8时,要输入你想插到哪一个学生前,只需输入他的学号。然后,在提示语的提醒下输入要插入学生的学号,姓名和成绩。如图4-9所示:4-9插入后界面9. sort to make new file将所有学生成绩排序:在完成后,会出现”sort success!”如果想看结果的话,可以在执行完这一步后在执行3,这样就可以看到排序后的结果。如图4-10所示: 4-10分类合计界面10. append record to file追加记录到文件模板,如图4-11所示:4-11追加记录界面10. Quit退出模块,在主菜单上实行。五

13、、总结通过这次C语言课程设计,让我对C语言更加的了解,C语言不单单是仅一种简单的程序设计,C语言是一种兴趣的培养,是一种对程序编程的热爱。虽然只有几天的课程设计,但是让我体会到了所掌握的知识的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。对我而言,C语言是一门很有趣的课程,通过简简单单的几句程序语句,简简单单的组合在一起,就可以组成一个能够帮助人的管理系统,方便而快捷。当然,我对C语言的认知还远远不够,需要我不断地去探索,去发现。这是一个学习的过程,难免会遇到拦路虎,

14、这就需要我有勇气去征服,不放弃,不抛弃。我相信,我一定会在接下来的日子里学的更好的。感谢在课程设计过程中王老师给予的讲解和帮助以及和我讨论给我很大帮助的同学们,谢谢你们的帮助和支持!六、附件(源程序) /*xuesheng.c*/*头文件(.h)*/#include stdio.h /*I/O函数*/#include stdlib.h /*其它说明*/#include string.h /*字符串函数*/#include conio.h /*屏幕操作函数*/#include mem.h /*内存操作函数*/#include ctype.h /*字符操作函数*/#include alloc.h

15、/*动态地址分配函数*/#define N 3 /*定义常数*/typedef struct z1 /*定义数据结构*/ char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next; STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *h); /*删除记录*/void print(STUDENT *h); /* 显示所有记录*/void

16、search(STUDENT *h); /*查找*/void save(STUDENT *h); /*保存*/STUDENT *load(); /*读入记录*/void computer(STUDENT *h); /*计算总分和均分*/STUDENT *insert(STUDENT *h); /*插入记录*/void append(); /*追加记录*/STUDENT *sort(STUDENT *h); /*排序*/int menu_select(); /*菜单函数*/*主函数开始*/main() int i; STUDENT *head; /*链表定义头指针*/ head=init();

17、/*初始化链表*/ clrscr(); /*清屏*/ for(;) /*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ /*值不同,执行的函数不同,break 不能省略*/ case 0:head=init();break; /*执行初始化*/ case 1:head=create();break; /*创建链表*/ case 2:head=delete(head);break; /*删除记录*/ case 3:print(head);break; /*显示全部记录*/ case 4:search(head);break; /*查找记

18、录*/ case 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*读文件*/ case 7:computer(head);break; /*计算总分和均分*/ case 8:head=insert(head); break; /*插入记录*/ case 9:head=sort(head);break; /*排序*/ case 10:append();break; /*追加记录*/ case 11:exit(0); /*如菜单返回值为14程序结束*/ /*菜单函数,返回值为整数*/menu_select() char *menu

19、=*MENU*, /*定义菜单字符串数组*/ 0. init list, /*初始化*/ 1. Enter list, /*输入记录*/ 2. Delete a record from list, /*从表中删除记录*/ 3. print list , /*显示单链表中所有记录*/ 4. Search record on name, /*按照姓名查找记录*/ 5. Save the file, /*将单链表中记录保存到文件中*/ 6. Load the file, /*从文件中读入记录*/ 7. compute the score, /*计算所有学生的总分和均分*/ 8. insert rec

20、ord to list , /*插入记录到表中*/ 9. sort to make new file, /*排序*/ 10. append record to file, /*追加记录到文件中*/ 11. Quit; /*退出*/ char s3; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ gotoxy(1,25); /*移动光标*/ printf(press any key enter menu.n); /*压任一键进入主菜单*/ getch(); /*输入任一键*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移动光标*/ textcolo

21、r(YELLOW); /*设置文本显示颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为蓝色*/ gotoxy(10,2); /*移动光标*/ putch(0xc9); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xcd); /*输出上边框水平线*/ putch(0xbb); /*输出右上角边框 */ for(i=3;i20;i+) gotoxy(10,i);putch(0xba); /*输出左垂直线*/ gotoxy(54,i);putch(0xba); /*输出右垂直线*/ gotoxy(10,20);putch(0xc8); /*输出

22、左上角边框*/ for(i=1;i44;i+) putch(0xcd); /*输出下边框水平线*/ putch(0xbc); /*输出右下角边框*/ window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i13;i+) /*输出主菜单数组*/ gotoxy(10,i+1); cprintf(%s,menui); textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ gotoxy(10,21); /*移动光标*/ do prin

23、tf(n Enter you choice(014):); /*在菜单窗口外显示提示信息*/ scanf(%s,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整形数*/ while(c11); /*选择项不在014之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/STUDENT *init() return NULL;/*创建链表*/STUDENT *create() int i; int s; STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/ for(;) info=(STUDENT *)mal

24、loc(sizeof(STUDENT); /*申请空间*/ if(!info) /*如果指针info为空*/ printf(nout of memory); /*输出内存溢出*/ return NULL; /*返回空指针*/ inputs(enter no:,info-no,11); /*输入学号并校验*/ if(info-no0=) break; /*如果学号首字符为则结束输入*/ inputs(enter name:,info-name,15); /*输入姓名,并进行校验*/ printf(please input %d score n,N); /*提示开始输入成绩*/ s=0; /*计算

25、每个学生的总分,初值为0*/*N门课程循环N次*/*将总分保存*/*求出平均值*/for(i=0;iscorei); /*输入成绩*/ if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; /*累加各门课程成绩*/ info-sum=s; /*将总分保存*/ info-average=(float)s/N; /*求出平均值*/ info-order=0; /*未排序前此值为0*/ info-next=h; /*将头结点做为新输入结点的后继结点*/ h=info; /*新输入结点为新的头结点*/ return(h); /*返回头指针*

26、/*输入字符串,并进行长度验证*/inputs(char *prompt, char *s, int count) char p255; do printf(prompt); /*显示提示信息*/ scanf(%s,p); /*输入字符串*/ if(strlen(p)count)printf(n too long! n); /*进行长度校验,超过count值重输入*/ while(strlen(p)count); strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/*输出链表中结点信息*/void print(STUDENT *h) int i=0; /* 统计记录条数*/ STU

27、DENT *p; /*移动指针*/ clrscr(); /*清屏*/ p=h; /*初值为头指针*/ printf(nnn*STUDENT*n); printf(|rec|nO | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|-|n); while(p!=NULL) i+; printf(|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, i, p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-avera

28、ge,p-order); p=p-next; printf(*end*n);/*删除记录*/STUDENT *delete(STUDENT *h) STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/ char s11; /*存放学号*/ clrscr(); /*清屏*/ printf(please deleted non); /*显示提示信息*/ scanf(%s,s); /*输入要删除记录的学号*/ q=p=h; /*给q和p赋初值头指针*/*当记录的学号不是要找的,或指针不为空时*/ q=p; /*将p指针值赋给q作为p的前驱指针*/ p=p-next; /*

29、将p指针指向下一条记录*/ if(p=NULL) /*如果p为空,说明链表中没有该结点*/ printf(nlist no %s studentn,s); else /*p不为空,显示找到的记录信息*/ printf(*have found*n); printf(|no | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, p-no, p-name,p-score0,p-score1,p-s

30、core2,p-sum, p-average,p-order); printf(*end*n); getch(); /*压任一键后,开始删除*/ if(p=h) /*如果p=h,说明被删结点是头结点*/ h=p-next; /*修改头指针指向下一条记录*/ else q-next=p-next; /*不是头指针,将p的后继结点作为q的后继结点*/ free(p); /*释放p所指结点空间*/ printf(n have deleted No %s studentn,s); printf(Dont forget saven);/*提示删除后不要忘记保存文件*/ return(h); /*返回头指

31、针*/*查找记录*/void search(STUDENT *h) STUDENT *p; /* 移动指针*/ char s15; /*存放姓名的字符数组*/ clrscr(); /*清屏幕*/ printf(please enter name for searchn); scanf(%s,s); /*输入姓名*/ p=h; /*将头指针赋给p*/ while(strcmp(p-name,s)&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/ p=p-next; /*移动指针,指向下一结点*/ if(p=NULL) /*如果指针为空*/ printf(nlist no %s studentn,s); /*显示没有该学生*/ else /*显示找到的记录信息*/ printf(nn*havefound*n); printf(|nO | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号