学生管理系统 C语言.doc
《学生管理系统 C语言.doc》由会员分享,可在线阅读,更多相关《学生管理系统 C语言.doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计课程设计报告设计题目:学生成绩管理系统学 号 1 班 级12级电信信息三班姓 名 王自钊 完成方式:(单选)自我评分:(单选)独立完成 优秀参考他人工作的基础上完成 良好在他人的帮助下完成 中等完整拷贝他人成果 及格 不及格2013年5月18日设计任务:C语言课程设计任务书3题目:学生成绩管理系统功能:学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。系统要求实现以下功能:1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);2、信息查询:输入学号,查询学生各门课程的成绩,并显示。3、排序:按各门课程的成绩平均分进行排序,并显示。4、信息
2、删除与修改输入学号,删除该学生的成绩信息。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。要求:1、用C语言实现程序设计;2、利用结构体数组实现学生信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。一、 总体设计1. 程序总体设计1) 主操作界面与次级操作界面2) 学生信息成绩录入功能3) 学生信息成绩查询功能4) 学生信息成绩修改模块5) 学生信息成绩删除功能6) 输出系统
3、内全部信息功能7) 各科平均分排序功能2. 数据结构typedef float ElemType;typedef struct NodeType/*本程序使用的结构体,具体成员在下面注释*/unsigned long Num;/学号char name15;/学生姓名ElemType course3;/学生三门科目的成绩ElemType average;/学生三门科目成绩平均分char Sex3;/学生性别struct NodeType *next;/指向下一个结构体的指针NodeType,*LinkList;/结点和指针类型3. 函数原型声明的说明void MakeNode(LinkList
4、&q);/分配由L指向的元素为e,后继为空的结点void Initlist(List &L);/初始化链表void Insert(List &L,LinkList q,LinkList s); /在指针q所指元素后插入s指针所指向的元素void Clear(List &L);/清空链表(系统重置)void Append(List &L,LinkList s);/在线性链表尾部插入一个结点svoid Readin(List &L);/从文件中读入数据void SearchStu(List L);/按学号查找信息并显示void Printfall(List L);/输出所有学生的成绩信息到屏幕vo
5、id Insertstu(List &L);/插入一个学生的成绩信息void FwriteStu(List L);/保存学生数据信息void Change(List L,LinkList p);/修改学生信息void Changeclear(LinkList p);/修改操作中的清屏void Stucopy(LinkList p,LinkList q);/结点复制void Alter(List L);/按学号修改信息void Delete (List L);/按学号删除信息void rank(List L);/各科平均分排序void sysclear();/操作完成后清屏并返回主菜单void
6、table();/输出信息时的表头int Locate(List L,unsigned long e,LinkList &p);/按学号定位4. 流程图二、 详细设计输出p指向结点内所有信息到屏幕调用sysclear()清屏返回主菜单是否重新输入学号e?重新输入ep=p.nextp.num=e?p.next=NULL?从主菜单接受指令输入学号e,定义结点指针p,p=L.head1. 查找void SearchStu(List L) N N Y Y N 输出p指向结点内所有信息到屏幕调用sysclear()清屏并返回主菜单是否重新输入学号e?重新输入e“是否确认删除Y or N”从主菜单接受指令
7、输入学号e,定义结点指针p,q,q=L.head,p=q.nextq=q.nextp=q.nextp.num=e?p.next=NULL?p-next=q-next; L.len-;free(q); FwriteStu(L);调用sysclear()清屏返回主菜单2删除void Delete (List L); N N Y Y Y N N Y 从主菜单接受指令3.修改输入学号e,定义结点指针p,q,q=L.headq=q.nextp.next=NULL?p.num=e?重新输入e是否重新输入学号e?输出p指向结点内所有信息到屏幕“是否确认要修改Y or N”调用sysclear()清屏并返回主
8、菜单Stucopy(p,q);将p数据复制到q中调用Change( L, p) c=0Stucopy(q,p);free(q); FwriteStu(L);free(q); FwriteStu(L);保存修改?返回主菜单scanf(%d,&p-Num)scanf(%s,&p-name)scanf(%f,&p-course0)scanf(%s,&p-Sex)scanf(%f,&p-course1)scanf(%f,&p-course2)c=0?c=1?c=2?c=3?c=4?c=5?c=6?Input cint c/操作数char k/操作字符显示修改菜单 三、 测试及调试1. 测试中出现的部分
9、问题及解决方法1.1 计算各门科目平均分并排序输出时发生错误原语句如下:for(p=L.head;i0;i-,p=p-next)sum1=p-course0+sum1; sum2=p-course1+sum2; sum3=p-course2+sum3;测试方案:在计算和的同时将结点中各成绩数据输出到屏幕测试语句:for(p=L.head;i0;i-,p=p-next)printf(%.1f %.1f %.1fn, ,p-course0,p-course1,p-course2); sum1=p-course0+sum1; sum2=p-course1+sum2; sum3=p-course2+s
10、um3;经过排查,发现循环开始时p直接指向头结点,而头结点本身只作为链表地址指示,不储存学社成绩信息,其中数据为随机数,尤其引发逻辑错误。解决方案:直接将结点指针p指向头结点的下一个结点.修改后语句如下:for(p=L.head-next;i0;i-,p=p-next)sum1=p-course0+sum1; sum2=p-course1+sum2; sum3=p-course2+sum3;修改后输出正确结果: 1.2由语法错误引起在执行修改和删除功能时程序停止运作原错误语句:printf(n请输入相应的操作:);scanf(%d,c);虽然只是缺少了一个符号,但却引起了整个程序的奔溃。解决方
11、案:上网搜索相似错误案例,得知原因之一可能为变量赋值时出错而引起,随检查相关函数的变量赋值语句,成功发现错误,加上“&”后程序运作正常。 1.3修改后选择“不保存修改”,但此次运行中显示信息时为修改后信息错误原因:在最初设计函数时将“保存修改”的执行语句设计为FwriteStu(List L),即修改后学生数据信息读入文件中,而“不保存修改”的执行语句为空,即只是不将修改后的信息读入文件中,这样,在第二次运行程序时将读入没有修改的信息,但是,若在此次运行中输出这些信息到屏幕时,将输出已修改的信息。解决方案:在进入修改操作时在定义一个结点指针q,并为其开辟空间,用于储存被修改结点p的原信息。相关
12、源代码:LinkList q;/保存原信息的结点 q=(LinkList)malloc(sizeof(NodeType); Stucopy(p,q);/将p的数据拷贝到q中 在文件末尾改为:printf(n!你将要退出操作,是否确认修改?Y or N!n);getchar();scanf(%c,&k);if(k=Y)FwriteStu(L);/输出成绩信息到文件中elseStucopy(q,p); /将q的数据拷贝到p中,即恢复数据free(q);2. 主要程序运行结果1.开始运行(主菜单)2.学生信息录入3.学生信息查询输出信息界面4.修改查询确认界面修改界面当前信息显示与修改同步5.各科平
13、均分排序6.删除7.输出全部学生信息四、小结这是我第一次独自编写一个较复杂的程序,在刚开始时本想完全独立完成,但是由于目前能力有限和经验不足,进度缓慢,而且错漏百出,遂找来了一个例子作为参考,但主要核心代码都有自己编写,完成后程序与参考作品有较大差异,个人认为自己的程序在某些方面上优于参考作品,例如,参考作品没有清屏功能,每次操作的输出都堆加到屏幕上,有累赘感,而我的作品除了信息录入功能外每个操作的结果都会独立于主菜单之外显示,更加人性化,但与参考作品相比我的不足也不少,例如,没有保护设置,任何人都能进入系统中进行操作,缺乏安全性。本来此次作业我能做得更好,但是由于自己没有合理分配时间,导致由
14、于此次大作业的时间并不多,所以程序的功能只是在满足基本要求添加了另外一个功能,虽然本来设计了不少附加功能但都没有时间成功实现,例如,按学生名字查询(并修改或删除)成绩信息,考虑到姓名相同而导致无法全部输出的可能性此功能并非必需,学号虽然原则上不会重复但当学号输入错误时,例如由于输入字符导致学号为负值,无法通过学号进行修改和删除,只能通过系统重置来消除错误。在程序测试和调试中出现的错误也令我有不少收获,例如前面提到的“由语法错误引起在执行修改和删除功能时程序停止运作”,一个小小的“&”符号的缺失就能让一个五百多行的程序崩溃,让我认识到什么叫做“细节决定成败”,让我认识到“从小事做起”确实是很有道
15、理的,认识到从今往后要做事要脚踏实地。本次作业也让我认识到了对Office word办公软件的熟练运用的重要性,作业报告中要求我们画流程图,由于对word 2007中形状插入功能不熟悉,导致在此花费了不少时间,同时我也认识到word 2007的功能或许完善但操作起来却不够人性化,毕竟世界上没有完美的程序,这着驱使人们去创造更好的程序。看到自己付出汗水完成的程序正常的运行那种感觉非常不错,看到自己的付出有相应的回报,确实令人欣慰。附件:主要源程序代码头文件:#include #include #include colorConsole.h#include #include #include #i
16、nclude #include #define un nnnnnnnnnnnnnnnnnnn typedef float ElemType;typedef struct NodeTypeunsigned long Num;/学号char name15;/学生姓名ElemType course3;/学生成绩ElemType average;/学生各科平均分char Sex3;/学生性别struct NodeType *next;/指向下一个结构体的指针NodeType,*LinkList;/结点和指针类型typedef struct LinkList head,tail;/链表的头尾指针int
17、len;/记录学生是个数List;/链表类型-主函数-#include头文件啊喵.hvoid main()List L;Initlist(L);Readin(L);char c=a;int i;/操作数system(title 学生成绩管理系统);system(color 9a);HANDLE handle;handle=initiate();WORD wColors1;wColors0=FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_BLUE; textout(handle,16,2,wColors,1,学生成绩管理系统); textout(ha
18、ndle,20,5,wColors,1, 1.录入学生成绩信息 );textout(handle,20,7,wColors,1, 2.查寻学生成绩信息 );textout(handle,20,9,wColors,1, 3.修改学生成绩信息 );textout(handle,20,11,wColors,1, 4.各科成绩平均分排序 );textout(handle,20,13,wColors,1, 5.删除学生成绩信息 );textout(handle,20,15,wColors,1, 6.显示所有学生成绩 );textout(handle,20,17,wColors,1, 0.退出成绩管理系统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生管理系统 C语言 学生 管理 系统 语言
限制150内