设计要求:
题目:学生成绩管理系统。
内容:通过输入学生的信息,建立单向链表,每个结点包含一个学生信息,通过对节点的操作实现对信息的显示,查找,修改,删除,求和排序,奖学金判定,管理后信息写入外存等功能。在主函数建立简单的菜单选择,来实现这些功能。
开发环境:c++的集成开发工具软件vc++6.0系统功能。
一、系统功能划分:
信息读入内存通过两种方式将信息读入,键盘输入和文件读入。键盘输入操作较为繁琐,但灵活性强;文件读入操作简单,但灵活性较差;
信息的操作通过对结点的操作实现对信息的显示,查找,修改,删除,求和排序,奖学金判定,管理后信息写入外存等功能;其中查找,修改,删除,三个功能需要利用学号进行操作,所以学号不可重复。
信息写入外存通过文件输出流将管理后的信息写入设定好格式的文档。
二、系统具体功能分析:
1:学生信息(用键盘)输入。
根据提示判断循环来实现对学生信息的读入内存,一个结点存放一个学生信息,创建新链表。
2:学生信息(读文件)输入。
选择此功能前写好相应的文本文件,然后通过文件输入流读入内存,一个结点存放一个学生信息,创建新链表。
3:显示所有学生信息。
对已经读入链表中的信息通过遍历链表,输出链表中对应每一个结点的信息。4:显示所有学生成绩求和后的信息。
先遍历链表对每个学生的成绩数据求和,将求和数据存放到结点中,然后再次遍历链表输出带有求和数据的每一个结点的信息。
5:排序(按总分)并显示带有名次的成绩单。
利用选择排序法,对求和数据进行排序,交换求和数据对应的该节点的其它信息同时对已经排好序的信息定名次,再将名次存放到结点中,从而实现对信息的排序。再次遍历链表,输出带求和数据和名次的每一个结点的信息。
6:删除学生信息(按学号)
遍历链表查找对应学号的结点,然后利用删除算法删除该节点,实现删除学生信息的功能。7:学生信息修改(按学号)
遍历链表查找对应学号的结点,然后根据提示输入该同学的新信息,新信息去覆盖该节点的原来信息,实现学生信息修改的功能。
8:查找学生信息(按学号)
遍历链表查找对应学号的结点,然后输出对应的信息。9:插入新学生信息。
根据提示输入学生信息,默认插入到链表末尾。10:清空链表。
遍历链表,对每一个结点删除算法删除,实现对链表的清空。从而重新对信息进行操作。11:学生人数。
遍历链表,通过对结点计数实现统计学生人数。12:形成管理后成绩文件。
在对信息进行管理之后,选择该功能根据提示输入相应的形成文件的名字及格式,通过文件输出流遍历链表实现信息读入外存。
13:显示符合条件的奖学金信息并形成奖学金文件。
遍历链表,对符合设定条件的结点信息进行显示输出,并利用这些结点创建新的链表,然后根据提示输入相应的形成文件的名字及格式,通过文件输出流遍历新链表实现信息读入外存。
三、系统的功能的具体实现:
1利用创建工程的方法将函数声明和函数实现相分离。
在工程中添加了一个头文件写程序的自定义结构类型,类的创建,成员函数的声明和部分简单成员函数的实现;一个源文件写类的成员函数实现,实现函数声明和函数实现相分离;一个源文件用与写main函数,创建程序的入口。
头文件名:cjhead两个源文件名:1caozuo2将结点划分为信息区和链接区。
2cjmain
信息区是一个包含各种数据类型数据的自定义结构类型,链接区是一个指向结点类型(自定义)的指针。具体创建如下:
structinf;
typedefstructnode*nodeptr;structnode;
3先将所有对结点的操作写成函数,实现结点的操作和信息的操作物理上的分离,而信息操作时调用结点操作的函数。
对结点操作的函数声明:
boollistisempty()boolcurisempty()voidtofirst()boolatfirst()voidtoend();
boolatend()voidadvance();voidnodeerror();
nodeptrmakenode(infinf);infgetinf();
/1判断链表是否为空//2判断当前结点是否为空//3使当前结点为头结点//4判断当前结点是否为头结点//5使当前结点到达尾//6判断当前结点是否在尾结点//7当前结点向后移。
/8当前结点为空,输出错误并退出程序//9创建结点。
/10获得当前结点信息。
/指针。/指向结点的指针类型//定义结点。
/总分//名次。
voidinsertafter(infinf);voidinsert(infinf);voidremove();voidremove_all();intlength();
/11当前结点后插入结点。
/12当前结点与前一结点插入结点//13删除当前结点//14清空链表//15链表长度。
4对信息操作的重要函数声明、功能和具体实现1、nodeptrfind(intnum);
/利用(学号)查找学生所在结点。
算法①当前结点到头结点②利用循环判定条件(cur->>next)循环③当cur->返回cur;当未找到时返回null;2、voidremove1(intnum);
/删除结点(即某个学生信息)
用1函数find(num)查找到结点②利用对节点的操作函数remove删除3、voidcreat();
/利用键盘输入学生信息。
判断是否输入②符合条件提示输入③利用pd_num(intnum)判断判断输入学号是否已存在,存在提示不能插入,不存在利用insertafter(infinf)插入④判断是否输入⑤循环上述操作。
4、voiddisplay_title();5、voiddisplay_all();
/显示标题//显示链表所有内容。
当前结点到头结点利用循环判定条件(cur!=null)即(!curisempty())循环输出链表信息。
6、voidchangeinf(intnum);
/修改学生信息。
用1函数find(num)查找到结点②提示输入③输入信息覆盖原信息7、voidcj_sum();
每一个结点成绩数据求和存放到结点中8、voiddisplay_title1();9、voiddisplay_all1();10、voidsort();
/显示带有总分的标题。
/显示链表数据求和后的所有内容//按照总分排序//数据求和。
利用选择排序法,简单说来就是先找到数据的最大值放到第一位置,然后找剩下数据的最大值放到第二位置,依次如此循环,直到最后。此函数按求和数据进行排序,排序后的结点编号存入结点,同时交换结点对应的其它信息,达到排序的目的。
11、voiddisplay_title2();12、voiddisplay_all2();13、voidread_creat();
/显示带有名次的标题。
/显示链表数据按总分排序后的所有内容//读文件方式输入。
创建文件输入流对象②利用循环读入信息③利用pd_num(intnum)判断判断输入学号是否已存在,存在提示不能插入,不存在利用insertafter(infinf)插入链表。
14、voidwrite_file(char*file);
/形成文件。
创建文件输出流对象②利用循环条件(cur!=null)即(!curisempty())将信息写入外存15、boolpd_num(intnum);
/判断输入学号是否已存在。
当前结点到头结点②利用循环判定条件(cur->循环③当cur->返回true;当未找到时返回false16、voidinsert1(cj&j,infinf);对象j调用函数insert(inf)17、voidjxj_form(cj&j);
/形成奖学金链表//将节点插入新链表。
设定获奖学金的条件②利用循环条件(!curisempty())循环,同时对每个结点的相关信息进行判断③当符合条件调用insert1(cj&j,infinf);将当前结点信息插入新链表中。
在开发过程中所遇到的问题以及解决的办法。
cin的问题。
问题出在键盘读入的函数中,程序中有cin,运行时程序时,会停下来让操作者输入数据,但我运行的时候却不行,反复的查也没有找到问题出在什么地方。最后终于查到时前面一个cin少写一个数据,而在运行时却写上了!
重复学号的问题。
因为程序中的很多操作都需要学号的唯一性,所以必须确保输入信息中的学号的唯一性。而且在输入相同时要怎样进行操作,来实现信息提示和信息不插入链表。办法:写一个判断学。
号是否已存在的返回值为布尔类型的boolpd_num(intnum)函数,然后用if,also语句实现不同情况执行不同的操作。
不存在数据时,选择操作怎么办。
因为未输入数据前,诸如查找,删除,修改等功能是不可也用的,若选择这些功能功能怎么办。措施:在main函数里写if,also语句实现不同情况执行不同的操作。
链表为空择提示先输入数据,再进行操作!
死循环的问题。
编程序时经常出现的问题,出现此问题的原因多半是因为程序逻辑不严密!在经过认真细致的检查后都能发现问题,但浪费了大量时间。
系统存在问题。
虽然对信息管理的功能都能很好的实现,但是因为只是简单的菜单选择,没有一个运行的图行界面,操作起来感觉很机械,不灵活!
小结:本次c++课程设计,实现的是对数据结构的操作,用链表或数组对大量数据进行简单的基本操作。在认识到这一点后本次课程设计,我选择自己不是很熟悉的链表对数据进行操作!
通过认真的研究理解链表作为一种数据结构的存在,我开始构思对什么数据进行操作,实现怎样的功能,我选择最经常用的成绩管理系统来实现这些功能。在这几天实习过程中,遇到问题时,我独立进行思考、分析,找到解决的办法,我不仅基本上掌握了对链表的一系列操作,同时锻炼和提高了自己的编程能力和逻辑思维能力,更进一步的理解了c++的面向对象的编程思想。在实习结束后,我认真的写实验报告,对程序进一步分析总结,如此我的编程能力再次得到提高。
C课程设计报告参考
课程设计报告参考模板。一 需求分析。二 本系统的主要功能 功能图,详细功能描述 例如,图1 1是学生信息管理系统的功能图。三 详细设计。1.数据库的设计。可以有 1 e r图 2 数据库关系模型 二维表如下图所示 登陆权限表 login 2.类的设计。提示 系统可以按不同的功能设计类,每个类都实现不...
C语言课程设计报告参考
c语言程序设计 课程设计报告。题目 学生成绩管理系统 设计者 专业班级。学号。指导教师。所属系部。2010年11月 28 日。目录 图书信息管理及借阅系统。方便图书管理员管理图书,以及学生借阅图书。1 建立图书信息库,包括 书号,图书名称,出版社,出版时间和当前借阅状态 2 程序分为两大模块 图书管...
C 课程设计
自动走迷宫小游戏。根据课堂讲授内容,做相应的自主练习,消化课堂所讲解的内容 通过调试典型例题或习题积累调试c 程序的经验 通过完成辅导教材中的编程题,逐渐培养学生的编程能力 用计算机解决实际问题的能力。同时在设计的过程中发现自己的不足之处,对以前所学过的知识理解的更加深刻,掌握得更加牢固。迷宫生成。...