C++课程设计单链表——学生信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生信息管理系统设计文档
一、设计任务描述
为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管
理系统”软件,该软件适用于所有win dows操作系统,面向广大用户,
界面简洁,操作简单。此软件主要是实现对学生学籍信息进行系统化的管理,可
以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明
该系统所需要的功能有:1链表的建立;
2、学生信息的插入;
3、学生信息的查询;
4、学生信息的输出;
5、学生信息的修改;
6、学生信息的删除;
7、良好的欢迎选择界面。
三、总体方案设计
一、实现任务的方法
1、在欢迎选择界面中,使用Switch这一选择结构来连接程序的执行和用户的命令;
2、在从学生信息的建立直到删除,都是使用链表的相关知识;
3、在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了一个achieve结构体;
ST rucr acnieve
{ int nunber :
char nane [10] [10];
float achieveiaent [13]:
float xuefen [10]: float 0 : float average ; achieve C): float count average (); 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 ; };
三、模块划分 (1) 链表的建立。 (2) 对链表信息的插入。 (3) 对链表信息的查找。 (4) 对链表信息的输出。 (5) 对链表信息的删除。 (6) 对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中
三、数据结构说明
一、自定义的数据结构:
1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、
成绩、学 分、总分和平均分。
"谍稈数
〃课程容(最參课稈数为nn
"成绩 "学专 "总分
"平均分
"默认枸隆雷教
"计算该学生课程的加权平均分(总咸绩/总学分)
"元素类型
"姓名 〃学号 〃性别
"身份证号 //出生年月曰 〃家庭地址 "电话号码 "课程咸绩 "谍程成绩输入 "遥程成缢输出
3、结点结构-Nodetype,定义了数据域inform 和指针域next;
2、inform (学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
//构造函数 〃析构函数 〃建立链表 //插入学生信息 //删除学生信息 //查找 //修改
〃输出信息 //声明头指针
HodrtTii"?
b-^riesrt-nULL,
a _>nBKl-b; p 口 ; \匚 CDUT«削建宁右? ClIl i >ES ;
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 1K >)C ; (c=/ | [ c=?-! r ) [a azhiiiput [); "创益一今戲韦电三并将该韦电地址侔存在抱軒变誉b 申 ■V 牠丄湎换1T 得至侶技作ZJb 却歎掘加 使结点戲合终在链表的最后面 E.两个对象正常输出 、添加:按照学号从小到大的顺序插入: s=iiew Xodetvpe; s->daTa=s; q=head. p^q-'/nerXt; irhi le(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); 六、更改:利用查找的操作,查到后在进行重新输入的操作; 五、测试情况说明 测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第一个数据进行操作,如下图所示: cT] 地it;派匕^^3 = 657668? 中的数据输岀如下; :朱方菠 '证号=3站£?6鲫强 日:19920924 庭芒止 匕浙江幵此话是■ 刁弓:百咋肚溯日