您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页C++课程设计单链表——学生信息管理系统

C++课程设计单链表——学生信息管理系统

来源:华佗健康网
学生信息管理系统设计文档

一、 设计任务描述

为了实现学籍管理的简单化,我们基于 Visual C++集成开发环境编写了“学 生信息管理系统”软件,该软件适用于所有 win dows操作系统,面向广大用户, 界面简洁,操作简单。此软件主要是实现对学生学籍信息进行系统化的管理, 可 以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是 根据学生的学号及其姓名进行操作的。该软件可以更加方便管理者管理学生学籍 信息。

二、 功能需求说明

该系统所需要的功能有:1链表的建立;

2、 学生信息的插入; 3、 学生信息的查询; 4、 学生信息的输出; 5、 学生信息的修改; 6、 学生信息的删除; 7、 良好的欢迎选择界面。

三、 总体方案设计

一、实现任务的方法

1、 在欢迎选择界面中,使用Switch这一选择结构来连接程序的执行和用户的命 令;

2、 在从学生信息的建立直到删除,都是使用链表的相关知识; 3、 在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了 一个achieve结构体;

三、模块划分 (1) 链表的建立。 (2) 对链表信息的插入。 (3) 对链表信息的查找。 (4) 对链表信息的输出。 (5) 对链表信息的删除。 (6) 对链表信息的修改。

课程成绩信息作为附加信息,穿插于各个模块中

三、数据结构说明

一、自定义的数据结构:

1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、

STrucr acnieve

成绩、学 分、总分和平均分。

{ int nunber :

〃课程容(最參课稈数为nn

float xuefen [10]: float 0 : \"成绩 float average ; achieve C): \"学专 float count average (); \"总分

\"平均分

\"默认枸隆雷教

\"计算该学生课程的加权平均分(总咸绩/总学分)

float achieveiaent [13]:

char nane [10] [10];

\"谍稈数

2、inform (学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。

struct Inform {chai name[10]: char

num[20]: string sex: string: id; string bir; string adr : string tel, achieve ach; void achinput 0 : void achprint 0 ; };

\"元素类型

\"姓名 〃学号 〃性别

\"身份证号 //出生年月曰 〃家庭地址 \"电话号码 \"课程咸绩 \"谍程成绩输入 \"遥程成缢输出

3、结点结构-Nodetype,定义了数据域inform和指针域next;

struct Nodetype {inform data; Nodetvpe };

二、类

//结点结构

\"数据域

〃指针域

Student用于存放处理学生信息的各个功能函数,private成员是链表的头指针

class Student {public:

Student (); ^Student (); //构造函数 void creat (); void insert 〃析构函数 (); void del 0 ; void 〃建立链表 search(), void modifyO , //插入学生信息 void Display 0 ; private:

Xodetype ^head;

//删除学生信息 //查找 //修改

〃输出信息 //声明头指针

四、各模块设计说明

'、建立:

首先:建立一个空链表:

Stude nt::Stude nt() {head=new Nodetype; head-> next=NULL; coutvv'请建立链表\\n\"; }

然后建立链表

gutfC\"吉粧h寿庭堆址:匹”: cin>>3:・;=dr

ccut'K\"ffi入电诸号码當\"T .

表明这是一个空链表

1 el.

oaufc)C;

?-!

(c=/ | [ c=r)

[a azhiiiput [);

HodrtTii\"?

\"判斷是瓷桁入审晴

\"创益一今戲韦电三并将该韦电地址侔存在抱軒变誉b申 ■V牠丄湎换1T得至侶技作ZJb却歎掘加

b-^riesrt-nULL,

a_>nBKl-b; p 口 ; \\匚 CDUT«削建宁右? ClIl i>ES ;

使结点戲合终在链表的最后面

、添加:按照学号从小到大的顺序插入:

s=iiew Xodetvpe;

s->daTa=s; q=head.

p^q-'/nerXt;

irhile(pl =NUHAj6strcnp (p->data, num, x. nuuO <0) ■q=p

p=p->next;} 〃迪历琵表查找梵应插入的位匿亘到找的某书直的数据城比输入£学号

s~ ^next^p: ” _______ __

q->next=s;〉I 插入新结点 £

cout«*添:山成功'是否维续奪加(Y/?4)*«en£ll; cin>>cs■

}

三、 输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺 序输出。 四、 查找:利用学号和姓名两种方式进行查找,

查找时主要是遍历链表进行判断

while(p!=NULL&&(d==1 &&strcmp(i nput,p->data .n um)!=0)||(d==2&&strcmp(i np ut,p->data .n ame)!=0)) {p=p->n ext; }

〃遍历链表查找符合要求的节点

五、 删除:利用节点的删除操作,找到链表中第 针:

i-1个结点,修改其指向后继的 指

q = p->n ext; p->n ext = q->n ext; delete(q);

六、 更改:利用查找的操作,查到后在进行重新输入的操作;

五、测试情况说明

测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第一 个数据

进行操作,如下图所示:

两个对象 正常输出 E.cT]

地it;派匕 ^^3 = 657668?中的数据输岀如下; :朱方菠 '证号=3站£?6鲫强 日:19920924 庭芒止匕浙江幵此 话是■弓:百咋肚溯日 但是当要进行查找、删除、修改操作时,系统只能对第一个对象进行操作

查看程序时,发现查找函数、删除和修改函数都有个逻辑错误

Bviichld} luw It

COUt \"1三年1亍月「eudl. cin>: inpui

break,

cue 2:

CffUt \"•刖■■占•”加机:

cln> input. bre^k;

:

逻辑关丟弄错! 歹应该为

T

^cderype *p.

p=q; hii LrIf'v:肚口rri* h;.-iT |)- -1ATa. - iin'!^'

:r

12

■冷=\"缶:rfjpi 加 Tp-计「SUP'=0)1

p=p-

~

霓圧祥云誉疋存舎寻求曲节戸

2 f ((d=】iist j■眄J (i rput. p->dat 岳 iunZ=0) (data. mn«* \\n* «jr>daxa. m «h \\nJ X生日

if p- da?a. Eih. nunbcr^B)

p-/ca*E. achprint : }

: *«p->4at8i n?»« \"■ n' < < \"身曲证号;*«p->dai;s. i4C<* \\p* 机\"性和:* bLr^' \\a'«家庭地址:妝p->dita ■dr«, W 农\"电话号码;Wp~>dag hW 诃; 71 耳匚拄訐\"If: H ■; <

全部修改后,程序的上述错误就没再出现了。

错误二:当提示是否输入课程成绩信息时,输入第一门课程名时,会出现无穷

循环

但当输入第一门课程后就会出现下图所示状况:

(讣时諦人总團貓$咼毎和请输 对于这种状况,我百思不得其解,后来请教其他同学,他告诉我错误在于声明 课程成绩信息时出错了

struct achieve

{ __int numb雯i[:

^*7: hof

f iQat^acIneveinem [10].

float xuefen[lD]: float siunO ;

float average 0; achieve();

f lt>at count average1:';

\"课程数

\"踝程名(最多课程数为1(0

\"锻绩 \"学分 \"总分

//■平肉分

打默认构罐雨数

〃计算谏学主课程的加权平均分(总成绩/总学井)

应该为二维数组,修改之后,课程成绩输入输出便正常了

im Crt 扁 nd w序;邨花LI32XCHI<1exe 長中的魏捱布岀如下. 千':予方捏 付证耳;5弋创 列:fl SitWl :同汇 话耳码;J曲需“5

未按照学号大 寻地1「;河/ 话吕码:G5eP4EG 小输出! 错误三:输入 学生信息时不按照学号大小顺序,输出结果时也不按照从小到大的顺序输出。 如下图所示

,是否押续添加(Y/N) \\Sw帕是字符格式不能魁行这种比

后来查看程序,发

现插入函数

(insert)中判断新插入的数据的位置时出现问题 whi 1 e (p! =XULL&^p->data,

较!

num(q-P ; S'>nextp; q)next=s;

_

_

~7

p=p->next;) //矽於i表杏找x应插入的位置直到]

cout«*S55 加成 cin^^cs;

应该为 strcmp(p->data.num,x.num)<0;之后输出正确了!

六、评价和改进意见

(1) 不足:①程序可能存在冗杂之处。②软件功能有限。③界面为Dos界面, (2) 特点:①运用链表的操作,可以方便地实现对学生信息的操作。 ②基于Visual C++平台工程的建立。

比较单调。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务