数据结构课程设计之宿舍管理系统.docx

上传人:b****5 文档编号:2769036 上传时间:2022-11-14 格式:DOCX 页数:52 大小:1.05MB
下载 相关 举报
数据结构课程设计之宿舍管理系统.docx_第1页
第1页 / 共52页
数据结构课程设计之宿舍管理系统.docx_第2页
第2页 / 共52页
数据结构课程设计之宿舍管理系统.docx_第3页
第3页 / 共52页
数据结构课程设计之宿舍管理系统.docx_第4页
第4页 / 共52页
数据结构课程设计之宿舍管理系统.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

数据结构课程设计之宿舍管理系统.docx

《数据结构课程设计之宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之宿舍管理系统.docx(52页珍藏版)》请在冰豆网上搜索。

数据结构课程设计之宿舍管理系统.docx

数据结构课程设计之宿舍管理系统

##大学

数据结构课程设计报告

题目:

宿舍管理查询软件

院(系):

学生姓名:

班级:

学号:

起迄日期:

指导教师:

指导教师评语:

成绩:

 

签名:

年月日

 

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={|ai-1,ai∈D,i=1,2,3,……,n}

基本操作:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1