C++课程设计 单链表——学生信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++课程设计单链表——学生信息管理系统
学生信息管理系统设计文档
一、设计任务描述
为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明
该系统所需要的功能有:1、链表的建立;
2、学生信息的插入;
3、学生信息的查询;
4、学生信息的输出;
5、学生信息的修改;
6、学生信息的删除;
7、良好的欢迎选择界面。
三、总体方案设计
一、实现任务的方法
1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令;
2、在从学生信息的建立直到删除,都是使用链表的相关知识;
3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义了一个achieve 结构体;
二、总体结构
三、模块划分
(1)链表的建立。
(2)对链表信息的插入。
(3)对链表信息的查找。
(4)对链表信息的输出。
(5)对链表信息的删除。
(6)对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中。
三、数据结构说明
一、自定义的数据结构:
1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。
2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
3、结点结构-Nodetype,定义了数据域inform和指针域next;
二、类
Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
四、各模块设计说明
一、建立:
首先:建立一个空链表:
Student::Student()
{head=new Nodetype;
head->next=NULL; 表明这是一个空链表
cout<<"请建立链表\n";
}
然后建立链表
:
二、添加:按照学号从小到大的顺序插入:
三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
四、查找:利用学号和姓名两种方式进行查找,查找时主要是遍历链表进行判断
while(p!=NULL&&(d==1&&strcmp(input,p->data.num)!=0)||(d==2&&strcmp(i nput,p->)!=0))
{p=p->next;
} //遍历链表查找符合要求的节点
五、删除:利用节点的删除操作,找到链表中第i-1个结点,修改其指向后继的指针:
q = p->next;
p->next = q->next;
delete(q);
六、更改:利用查找的操作,查到后在进行重新输入的操作;
五、测试情况说明
测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第
一个数据进行操作,如下图所示:
但是当要进行查找、删除、修改操作时,系统只能对第一个对象进行操作
查看程序时,发现查找函数、删除和修改函数都有个逻辑错误
全部修改后,程序的上述错误就没再出现了。
错误二:当提示是否输入课程成绩信息时,输入第一门课程名时,会出现无穷
循环
但当输入第一门课程后就会出现下图所示状况:
对于这种状况,我百思不得其解,后来请教其他同学,他告诉我错误在于声明课程成绩信息时出错了
应该为二维数组,修改之后,课程成绩输入输出便正常了
错误三:输入学生信息时不按照学号大小顺序,输出结果时也不按照从小到大的顺序输出。如下图所示
后来查看程序,发现插入函数(insert)中判断新插入的数据的位置时出现问
题
应该为strcmp(p->data.num,x.num)<0;之后输出正确了!
六、评价和改进意见
(1)不足:①程序可能存在冗杂之处。②软件功能有限。③界面为Dos界面,比较单调。
(2)特点:①运用链表的操作,可以方便地实现对学生信息的操作。
②基于Visual C++平台工程的建立。