数据结构课程设计之宿舍管理系统.docx
- 文档编号:2769036
- 上传时间:2022-11-14
- 格式:DOCX
- 页数:52
- 大小:1.05MB
数据结构课程设计之宿舍管理系统.docx
《数据结构课程设计之宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之宿舍管理系统.docx(52页珍藏版)》请在冰豆网上搜索。
数据结构课程设计之宿舍管理系统
##大学
数据结构课程设计报告
题目:
宿舍管理查询软件
院(系):
学生姓名:
班级:
学号:
起迄日期:
指导教师:
指导教师评语:
成绩:
签名:
年月日
2010—2011年度第2学期
一、需求分析
1.问题描述:
程序设计要求:
为宿舍管理人员编写一个宿舍管理查询软件
(1)采用交互工作方式
(2)建立数据文件,数据文件按关键字(姓名、学号、放号)进行排序(冒泡、选择、插入排序等任选一种)
(3)查询菜单:
(用二分查找实现以下操作)
①按姓名查询
②按学号查询
③按放号查询
(4)打印任一查询结果(可以连续操作)
程序分析:
(1)程序采用交互工作方式,也就是说要有一个人性化的操作界面。
将每一种操作赋给一个数字,通过输入不同的数字来实现不同的操作。
这样使人一看就能明白如何实现不同的操作。
全部使用提示选择方式,只需要输入你要使用方式的代号即可。
(2)本系统无数据信息,在使用的时候首先创建一个数据文件,开发一个录入数据的功能,使得所需要的数据存储到软件中,并暂时存在内存中,以便使用。
(3)录入和修改函数:
建立相应的函数,在主函数中得到调用,以便于对学生信息的增加和修改。
(4)查询:
以不同的关键字分别使用二分查找实现。
(5)为了使用方便和安全,增加了密码登录、密码锁定、退出、删除、全部删除、修改、存储为文本文档信息等功能。
2.基本功能
(1)录入学生信息
(2)显示学生信息(分别按学号、宿舍号、姓名进行排序后显示并在磁盘上以“.txt”格式保存显示的信息)
(3)查询学生信息(分别按学号、宿舍号、姓名进行查询并显示)
(4)修改学生信息(可进行单个删除、全部删除和修改学生信息)
(5)存储学生信息(存储到磁盘上,保存为“.txt”格式)
(6)锁定管理系统(进入密码登录界面,以确保安全)
(7)退出管理系统
3.输入输出
各种功能之间的选择采用了数字提示方式,只需要根据提示进行选择相应的数字,在录入学生信息功能中姓名为长度30以内的任意字符,学生学号和宿舍号控制住15个数字以内。
二、概要设计
1.设计思路:
所有的程序从主函数voidmain()开始,首先调用了load()函数进行密码登录,然后调用Menu()主菜单函数。
然后在Menu()函数中又依次增加了各种功能,然后通过switch语句分别选择录入、显示、查询、修改、存储、锁定、退出功能。
①选择录入功能时调用Add()录入信息函数;②选择显示功能时,首先调用showhead()表头显示函数,然后分别调用Sort_S_number(StudentS[M]),Sort_D_number(StudentS[M]),Sort_S_name(StudentS[M])函数根据学生学号、学生宿舍号、学生姓名关键字进行冒泡或者直接插入排序方法排序,然后显示;③选择查询功能时,首先调用searchheader(),表头显示函数,然后分别调用searh_S_number(StudentS[M]);searh_D_number(StudentS[M]);searh_S_name(StudentS[M]);以学生学号、学生宿舍号、学生姓名为关键字进行查找,然后调用Display_All(StudentS[M]);显示函数;④选择修改功能,在通过switch语句进行选择删除、全部删除、修改功能;⑤存储功能进行磁盘文本文档信息存储;⑥锁定功能调用load()登录函数进行锁定;⑦退出功能。
大体框架设计以后,然后依次对每个功能进行详细的设计。
2.数据结构设计:
逻辑结构:
线性
存储结构:
链式
//----------线性表的静态单链表表示存储结构------------
//定义一个存储学生相关信息的结构体
#defineM100//链表的最大长度
typedefstruct
{
charS_name[31];//学生姓名
charS_number[16];//学生学号
charS_sex[15];//学生性别
charD_number[15];//学生所在寝室的宿舍号
intTotal;//学生总数
}Student,St[M];
这种描述方法避免了“指针”类型的使用,在上述描述的链表中,数组的一个分量表示一个结点,同时用游标(总数Total)代替指针指示结点在数组中的相对位置。
数组的第零分量可以看成头结点,其指针域指示链表的第一个结点。
定义程序中用到的抽象数据类型:
ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,3……,n,n≥0}
数据关系:
R1={
基本操作:
Add(Student*S)
初始条件:
链表不存在。
操作结果:
录入信息进行创建新的链表
Display_All(S)
初始条件:
链表S已存在
操作结果:
打印所有S的数据
searh_S_name(Student*S)
初始条件:
链表S已存在。
操作结果:
按照名字查找指定的某元素。
searh_S_number(Student*S)
初始条件:
链表S已存在。
操作结果:
按照学生学号查找指定的某元素。
searh_D_number(Student*S)
初始条件:
链表S已存在。
操作结果:
按照学生宿舍号查找指定的某元素。
Sort_D_number(Student*S)
初始条件:
链表S已存在。
操作结果:
对链表S按照宿舍号的大小进行排序。
Sort_S_name(Student*S)
初始条件:
链表S已存在。
操作结果:
对链表S按照学生姓名的先后进行排序。
Sort_S_number(Student*S)
初始条件:
链表S已存在。
操作结果:
对链表S按照学生学号的大小进行排序。
}
3.软件结构设计:
(1)模块划分
①录入学生信息voidAdd(Student*S)
②显示学生信息voidDisplay_All(Student*S)
③查询学生信息voidsearch(Student*S)
④修改学生信息voidExchange(Student*S)
⑤存储学生信息
⑥锁定管理系统voidload()
⑦退出管理系统
(2)函数原型
Voidmain();//主函数
voidAdd(StudentS[M]);//声明录入学生信息函数
voidDisplay_All(StudentS[M]);//声明显示函数
voidExchangehead();//声明修改学生信息表头函数(删除和修改)
voidClear();//声明清屏函数
voidload();//声明登录函数(密码登录和密码锁定)
voidMenu();//声明主菜单函数
voidsearchheader();//声明查询表头函数
voidshowhead();//声明显示方式表头函数
voidSort_S_number(StudentS[M]);//声明学生学号按从小到大的排序函数(冒泡法/直接插入法)
voidSort_D_number(StudentS[M]);//声明排序函数按照宿舍号从小到大排序(冒泡法/直接插入法)
voidSort_S_name(StudentS[M]);//按姓名排序(冒泡法/直接插入法)
voidsearh_S_number(StudentS[M]);//声明查询函数以学号为关键字进行查询(折半查找)
voidsearh_D_number(StudentS[M]);//声明查询函数以宿舍号为关键字进行查询(折半查找)
voidsearh_S_name(StudentS[M]);//查询函数以姓名为关键字进行查询(折半查找)
(3)关系图
(见详细设计)
三、详细设计
1.所有用到的数据结构的基本操作实现
(1)录入学生信息
voidAdd(Student*S)//定义录入函数
{
do
{cout<<"请输入第"<
cin>>S[S[0].Total+1].S_number;//输入学生学号
cin>>S[S[0].Total+1].S_name;//输入学生姓名
cin>>S[S[0].Total+1].S_sex;//输入学生性别
cin>>S[S[0].Total+1].D_number;//输入学生宿舍号
S[0].Total++;//每增加一个学生信息,总数++
cout<<"按数字“0”退出,任意键继续录入"< cin>>ch; }while(strcmp(ch,ch1)! =0); } (2)显示所学生信息 voidDisplay_All(Student*S)//定义显示函数 {if(S[0].Total>0){ for(i=1;i<=S[0].Total;i++) cout< else Cout<<"无任何学生信息"< } (3)按姓名查找(折半查找) voidsearh_S_name(Student*S)//查询函数以姓名为关键字进行查询(折半查找) { cout<<"请输入你要查找学生的姓名: "; cin>>name; Sort_S_name(S);//调用学生姓名按从小到大的冒泡排序函数 while(low<=high) {mid=(low+high)/2; if(strcmp(name,S[mid].S_name)==0)//如果中间值和要查找的值匹配 {inti=mid;j=1; for(i=mid+1;i<=high;i++) //因为姓名有可能是相同的,所以继续在mid—high区间进行顺序查找 {if(strcmp(name,S[i].S_name)==0) { cout< cout< } for(i=mid-1;i>=low;i--) //因为姓名有可能是相同的,所以继续在low-mid区间进行顺序查找 {if(strcmp(name,S[i].S_name)==0) {cout< cout< } break; } else if(strcmp(name,S[mid].S_name)>0) low=mid+1; else high=mid-1; } if(j! =1)//判断是否查到学生信息 } (4)按学号为关键字进行查询(折半查找) voidsearh_S_numb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 宿舍 管理 系统