数据结构课程设计宿舍管理.docx
- 文档编号:11469611
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:33
- 大小:99.25KB
数据结构课程设计宿舍管理.docx
《数据结构课程设计宿舍管理.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计宿舍管理.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计宿舍管理
东华理工大学
课程设计报告
课程设计题目:
宿舍管理查询软件
学生姓名:
班级:
专业:
信息与计算科学
指导教师:
年月日
摘要
数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。
设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。
宿舍管理是对每栋楼房所有宿舍的一个详细情况登记,每个宿舍在数据库里面的信息都是静态的只有里面的实住人数是动态增加的,用C++语言开发一个程序系统实现对入住学生的信息操作,方便宿舍管理人员进行管理。
关键词:
C++;宿舍管理;程序设计
一、题目的内容及要求
宿舍管理查询软件
1)任务:
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
A.采用交互工作方式
B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
2)查询菜单:
(用二分查找实现以下操作)
A.按姓名查询
B.按学号查询
C.按房号查询
3)打印任一查询结果(可以连续操作)
二、需求分析
为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少少不必要的人力,物力,和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门开发设计专用系统软件—宿舍管理软件来进行管理学生宿舍信息,使学生宿舍信息实现标准化的管理和规范化的制度是十分必要的。
该程序应该具有以下功能:
(1)学生的入住处理
(2)输出学生入住信息(分别按姓名,学号,寝室号有序)
(3)学生换宿舍处理
(4)按给定学号,姓名,寝室号查询
(5)插入新增的学生信息
该程序执行的全过程大致为:
(1)选择要实现的功能
(2)按照提示输入所需要的条件
(3)显示执行后的结果
三、概要设计
选择的数据结构为:
#include
#include
#include
#include
#include
数据结构采用链式存储,所有程序从主函数voidmain()开始,首先调用menu()主菜单函数,在menu()函数中依次增加各种功能,然后通过switch语句分别选择录入,显示,插入,查找,退出功能1,选择录入功能时调用shuru()函数录入信息;2选择显示功能时,首先用showheader()表头显示函数,然后分别调用sort_I(structstudentstu[N],int),sort_Q(structstudentstu[N],int),sort_X(structstudentstu[N],int),函数根据学生学号,学生宿舍号,学生姓名关键字进行冒泡排序,然后显示3选择查询功能时首先调用charu(stu,count)函数进行信息插入,然后调用showheader()表头显示函数,最后调用display(structstudentstu)函数显示信息并对其进行排序4选择查询功能时,首先调用menu5()显示查询的菜单,然后分别调用chazhao1(stu,count),chazhao2(stu,count),chazhao3(stu,count),以学生学号,姓名,宿舍号为关键字进行查找,最后调用display()显示函数5退出功能
四、详细设计
1.数据结构设计
数据结构:
线性
存储结构:
链式
//----------------------------线性表的静态单链表表示存储结构------------------------
//定义一个存储学生相关信息的结构体
#defineN20;//链表的最大长度
voidshowheader();//声明显示方式表头函数
intmenu();//主菜单
intmenu3();//插入界面菜单
intmenu5();//查找界面菜单
structstudent{
intID;//学生学号
charname[15];//学生姓名
charsex;//学生性别
introomnum;//学生所在寝室的宿舍号
floatscore[3];
char*getSex(){
if(sex=='g')
return"女";
else
return"男";}
}
这种方法避免了“指针”类型的使用,在上述的链表中,数组的一个分量表示一个结点,数组的第零分量可以看成头结点,其指针域指向链表的第一个结点。
定义程序中用到的抽象数据类型:
基本操作:
shuru()
初始条件:
链表不存在。
操作结果:
录入信息进行创建新的链表
display(structstudent)
初始条件:
链表已存在
操作结果:
打印所有的数据
chazhao1(structstudentstu[N],inti)
初始条件:
链表已存在
操作结果:
按照学号查找指定的某元素
Chazhao2(structstudentstu[N],inti)
初始条件:
链表已存在
操作结果:
按照姓名查找指定的某元素
Chazhao3(structstudentstu[N],inti)
初始条件:
链表已存在
操作结果:
按照宿舍号查找指定的某元素
sort_I(structstudentstu[N],int)
初始条件:
链表已存在
操作结果:
对链表按照学号先后进行排序
sort_X(structstudentstu[N],int)
初始条件:
链表已存在
操作结果:
对链表按照姓名先后进行排序
sort_Q(structstudentstu[N],int)
初始条件:
链表已存在
操作结果:
对链表按照宿舍号大小进行排序
charu(structstudentstu[N],int)
初始条件:
链表已存在
操作结果:
在链表中按一定的顺序插入信息
2.软件结构设计
2.1模块划分
//录入学生信息structstudentshuru();
//显示学生信息voiddisplay(structstudent);
//学生信息排序voidsort(structstudentstu[N],int);
//插入学生信息voidcharu(structstudentstu[N],int);
//查找学生信息voidchazhao(structstudentstu[N],inti);
//退出管理系统
2.2函数原型
voidmain();主函数
voidshowheader();//声明显示方式表头函数
intmenu();//声明主菜单
intmenu3();//声明插入界面菜单
intmenu5();//声明查找界面菜单
structstudentshuru();//声明录入学生信息
voiddisplay(structstudent);//声明显示学生信息
voidsort_I(structstudentstu[N],int);//声明学生学号由先到后排序(冒泡法)
voidsort_Q(structstudentstu[N],int);声明学生宿舍号从大到小排序(冒泡法)
voidsort_X(structstudentstu[N],int);声明学生姓名由先到后排序(冒泡法)
voidcharu(structstudentstu[N],int);//声明插入学生信息
voidchazhao1(structstudentstu[N],inti);//声明学生学号查找
voidchazhao2(structstudentstu[N],inti);//声明学生姓名查找
voidchazhao3(structstudentstu[N],inti);声明学生宿舍号查找
2.3操作实现
2.3.1录入学生信息
structstudentshuru()
{
structstudentstu;
cout<<"学号:
";cin>>stu.ID;//输入学号
cout<<"姓名:
";cin>>stu.name;//输入姓名
cout<<"性别(g/b):
";
fflush(stdin);
cin>>stu.sex;//输入性别
cout<<"宿舍号:
";
cin>>stu.roomnum;//输入宿舍号
cout<<"是否继续?
(Y/N)"< returnstu; } case1: {do { printf("***********学员信息录入********\n"); cout<<"请输入第"< stu[count]=shuru();//调用函数进行信息录入 //cout<<"是否继续(y/n)"; fflush(stdin); ch=getchar(); count++; }while(ch=='y');//用do—while循环实现信息连续录入 break;// } 2.3.2显示学生信息 voiddisplay(structstudentstu)//信息显示 { cout<<"\t"< cout< cout< cout< } case2: //信息显示功能 {cout<<"*******************学员信息显示************\n"; cout<<"\n排序后的信息如下: \n"; sort_I(stu,count);//按学号的排序 sort_Q(stu,count);//按宿舍号的排序 sort_X(stu,count);//按姓名排序 showheader(); for(j=0;j { display(stu[j]);//定义显示函数 } break; 2.3.3学生信息插入 case3: //插入功能 { while(choice3! =3) { choice3=menu3();//选择插入菜单界面 if(choice3==1) { do {cout<<"******************学员信息插入***************\n"; charu(stu,count);//插入学生信息 count++; cout<<"是否继续插入? (y/n)"; fflush(stdin); ch=getchar(); }while(ch=='y');//实现连续插入 } if(choice3==2) { cout<<"\n\n插入学生信息后如下: \n"; sort_I(stu,count);//插入后按学号先后排序 sort_Q(stu,count);//插入后按宿舍号大小排序 sort_X(stu,count);//插入后按姓名先后排序 showheader(); for(j=0;j { display(stu[j]); } } } break; } 2.3.4学生信息排序 voidsort_I(structstudentstu[N],inti)//按关键字学号进行从小到大的冒泡排序 { intj,k; structstudenttemp; for(j=0;j { for(k=0;k { if((stu[k].ID)>(stu[k+1].ID)) { temp=stu[k]; stu[k]=stu[k+1]; stu[k+1]=temp; } } } } voidsort_Q(structstudentstu[N],inti)//按关键字宿舍号号进行从小到大的冒泡排序 { intj,k; structstudenttemp; for(j=0;j { for(k=0;k { if((stu[k].roomnum)>(stu[k+1].roomnum)) { temp=stu[k]; stu[k]=stu[k+1]; stu[k+1]=temp; } } } } voidsort_X(structstudentstu[N],inti)//按关键字姓名进行由先到后的冒泡排序 { intj,k; structstudenttemp; for(j=0;j { for(k=0;k { if((stu[k].name)>(stu[k+1].name)) { temp=stu[k]; stu[k]=stu[k+1]; stu[k+1]=temp; } } } } case2: //信息排序功能 {cout<<"*******************学员信息显示************\n"; cout<<"\n排序后的信息如下: \n"; sort_I(stu,count);//按学号排序 sort_Q(stu,count);//按宿舍号排序 sort_X(stu,count);//按姓名排序 showheader(); for(j=0;j { display(stu[j]); } break; 2.3.5学生信息查找 voidchazhao1(structstudentstu[N],inti)//对学号进行折半查找 { intselect,low=0,high=i,mid; charch; cout<<"\t***********您选择的是按照学号查找: *********\n\n"; do { cout<<"\n\n请输入学号: "; cin>>select; while(low<=high) { mid=(low+high)/2; if(select==stu[mid].ID) break; elseif(select high=mid-1; elselow=mid+1; } if(low { showheader(); display(stu[low]); } else { cout<<"你查找的信息不存在\n"; } fflush(stdin); ch=getchar(); } while(ch=='y'); } voidchazhao2(structstudentstu[N],inti)//对姓名进行顺序查找 { intj; charname[15]; charch; cout<<"\t*********您选择的是按照姓名查找: ********\n\n"; do{cout<<"\n\n请输入姓名: "; cin>>name; for(j=0;j { if(strcmp(name,stu[j].name)==0) { break; } } if(j { showheader(); display(stu[j]); } else { cout<<"你查找的信息不存在\n"; } fflush(stdin); ch=getchar(); } while(ch=='y'); } voidchazhao3(structstudentstu[N],inti)//对宿舍号进行折半查找 { introom,low=0,high=i,mid; charch; cout<<"\t*******************您选择的是按照房间号查找: *******************\n\n"; do { cout<<"\n\n请输入房间号: "; cin>>room; while(low<=high) { mid=(low+high)/2; if(room==stu[mid].roomnum) break; elseif(room high=mid-1; elselow=mid+1; } if(low { showheader(); display(stu[low]); } else { cout<<"你查找的信息不存在\n"; } cout<<"是否继续查找? (y/n)"; fflush(stdin); ch=getchar(); }while(ch=='y'); } 2.3.6退出操作 case5: //退出 { cout<<"确认退出? (y/n)";//提示是否退出 fflush(stdin); ch=getchar(); break; } default: { cout<<"\a\a警告: 您输入错误,是否重输! (y/n)"; fflush(stdin); ch1=getchar(); break; } } }while(ch=='n'||ch1=='y'); { cout<<"\a\a警告: 您的用户名或密码输入有误! 是否重输? (y/n)"; } fflush(stdin); ch=getchar(); }while(ch=='y'); } 五、源代码 #include #include #include #include #include #defineN20 voidshowheader(); intmenu(); intmenu3(); intmenu5(); //intquanxian(); //voidSavePass(); structstudentshuru(); voiddisplay(structstudent); voidsort_I(structstudentstu[N],int); voidsort_Q(structstudentstu[N],int); voidcharu(structstudentstu[N],int); voidchazhao1(structstudentstu[N],inti); voidchazhao2(structstudentstu[N],inti); voidchazhao3(structstudentstu[N],inti); structstudent { intID; charname[15]; charsex; introomnum; floatscore[3]; char*getSex(){ if(sex=='g') return"女"; else return"男";} }; voidmain() { structstudentstu[N]; intcount=0,m=0,j; charch,ch1; intchoice,choice3,choice4; do { do {ch1='n'; choice=menu(); switch(choice) { case1: //信息录入功能 {do { cout<<"*******学生信息录入*******\n"; cout<<"请输入第"< stu[count]=shuru(); //cout<<"是否继续(y/n)"; fflush(stdin); ch=getchar(); count++; }while(ch=='y'); break; } case2: //信息显示功能 {cout<<"*******************学员信息显示************\n"; cout<<"\n排序后的信息如下: \n"; sort_I(stu,count); sort_Q(stu,count); showheader(); for(j=0;j { display(stu[j]); } break; } case3: //插入功能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 宿舍 管理