还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
洛阳理工学院实验报告系别计算机系班级B110503学号B11050311姓名欧阳斌课程名称数据结构实验日期
5.23实验名称宿舍管理查询系统成绩实验目的掌握数据结构的两种基本技术查找和排序,根据实际情况选择效率较高的算法解决应用问题实验条件计算机一台,visualC++
6.0实验内容问题描述及基本要求为宿舍管理人员设计一个宿舍管理查询系统程序采用交互工作方式,完成下列功能:建立合适的数据结构作为查找表并输入数据;数据分别按关键字姓名、学号、房号进行排序所学排序算法任选一种效率较高的算法设计查询菜单,按指定关键字姓名、学号、房号进行查询并输出结果,要求查询采用效率较高的算法实现;可以连续查询数据定义typedefstruct{charName
[30];//学生姓名charSex
[15];//性别charClass
[30];//班级charNumber
[15];//学号intRoomNum;//所在寝室的宿舍号intAge;//年龄intTotal;//总数}Student[M]St;算法思想:初始化结构体变量,根据提示信息进行操作,此程序主要包含添加学生信息、删除学生信息、修改学生信息、查询学生信息、排序、输出学生信息,完成了对学生信息的增删改查,输入输出,以及排序采用冒泡法对寝室,班级,学号排序,以遍历的方法按学生姓名查找,以折半法对学号,寝室号查询模块划分建立学生信息函数AddStudentS修改学生信息函数AlterStudentS删除学生信息函数DeleteStudentS查询函数按班级SerClassStudentS、按学号SerNumberStudentS、按姓名SerNameStudentS、按寝室SerRnumberStudentS排序函数按班级SortClassStudentS、按学号SortNumberStudentS按寝室SortRooNumStudentS菜单栏函数Menu显示学生信息函数PrintStudentS主函数main实验总结通过这次实验,我掌握数据结构的两种基本技术查找和排序,根据实际情况选择效率较高的算法解决应用问题源程序#includestdio.h#includestdlib.h#includestring.h#defineM100//定义一个存储学生相关信息的结构体typedefstruct{charName
[30];//学生姓名charSex
[15];//性别charClass
[30];//班级charNumber
[15];//学号intRoomNum;//所在寝室的宿舍号intAge;//年龄intTotal;//总数}Student[M]St;//判断学号是否与表中所存学号重复voidNumJudgeStudentSintt{inti;fori=1;i=S-Total-1;i++whilestrcmpS[i].NumberS[t].Number==0{printf学号输入失败该学号已存在请重新输入学号!\n;printf请输入学生的学号15个字符以内:;scanf%sS[t].Number;getchar;i=1;}}voidAddStudentS{printf请输入学生姓名30个字符以内:;scanf%sS[++S-Total].Name;getchar;//获取换行符printf请输入学生性别:;scanf%sS[S-Total].Sex;getchar;printf请输入学生年龄:;scanf%dS[S-Total].Age;getchar;printf请输入学生班级30个字符以内:;scanf%sS[S-Total].Class;getchar;printf请输入学生的学号15个字符以内:;scanf%sS[S-Total].Number;getchar;NumJudgeSS-Total;//判断输入的学号是否与表中所存在的学号重复printf请输入宿舍号码:;scanf%dS[S-Total].RoomNum;getchar;printf添加成功!\n\n;}//修改学生信息函数voidAlterStudentS{inti;intflag=0;//用来判断表中是否存在所要修改的学生的信息charname
[20];printf请输入你要修改学生的姓名:;scanf%sname;getchar;fori=1;i=S-Total;i++ifstrcmpS[i].Namename==0flag=i;if!flagprintf你所要修改的学生信息在表中不存在!\n;else{printf新信息如下:\n;printf请输入学生姓名30个字符以内:;scanf%sS[flag].Name;getchar;//获取换行符printf请输入学生性别:;scanf%sS[flag].Sex;getchar;printf请输入学生年龄:;scanf%dS[flag].Age;getchar;printf请输入学生班级30个字符以内:;scanf%sS[flag].Class;getchar;printf请输入学生的学号15个字符以内:;scanf%sS[flag].Number;getchar;NumJudgeSi;//判断输入的学号是否与表中所存在的学号重复printf请输入宿舍号码:;scanf%dS[flag].RoomNum;getchar;printf修改成功!\n;}putchar\n;}//按学号排序voidSortNumberStudentS{StT;intijn=S-Total;intchange=1;fori=1;i=n-1change;++i{change=0;forj=1;j=n-1;++jifstrcmpS[j].NumberS[j+1].Number0{T=S[j];S[j]=S[j+1];S[j+1]=T;change=1;}}}//按班级排序voidSortClassStudentS{StT;intijn=S-Total;intchange=1;fori=1;i=n-1change;++i{change=0;forj=1;j=n-1;++jifstrcmpS[j].ClassS[j+1].Class0{T=S[j];S[j]=S[j+1];S[j+1]=T;change=1;}}}//按寝室号排序voidSortRooNumStudentS{StT;intijn=S-Total;intchange=1;fori=1;i=n-1change;++i{change=0;forj=1;j=n-1;++jifS[j].RoomNumS[j+1].RoomNum{T=S[j];S[j]=S[j+1];S[j+1]=T;change=1;}}}//删除学生信息voidDeleteStudentS{intij;intflag=0;//用来判断表中是否存在所要删除的学生的信息charname
[20];printf请输入你要删除学生的姓名:;scanf%sname;getchar;fori=1;i=S-Total;i++ifstrcmpS[i].Namename==0flag=i;if!flagprintf你所要删除的学生在表中不存在!;else{fori=flag;iS-Total;i++{j=i+1;S[i]=S[j];//strcpyS[i].NameS[j].Name;//strcpyS[i].NumberS[j].Number;//S[i].RoomNum=S[j].RoomNum;}S-Total--;printf删除成功!;}printf\n\n;}//按学生姓名查找voidSerNameStudentS{intij=0;charname
[20];printf请输入要查找的学生姓名\n;scanf%sname;getchar;printf学生姓名学生班级学生学号宿舍号年龄性别\n;fori=1;i=S-Total;i++ifstrcmpnameS[i].Name==0{printf%-12s%-15s%-15s%-8d%-8d%-5s\nS[i].NameS[i].ClassS[i].NumberS[i].RoomNumS[i].AgeS[i].Sex;j=1;}if!jprintf查找失败,表中不存在该学生的信息\n;}//按学号查找学生信息voidSerNumberStudentS{intijtopbasemid;charnumber
[15];j=0;base=1;top=S-Total;printf请输入你要查找学生的学号:;scanf%snumber;getchar;SortNumberS;//将表中原数据按照学号从小到大排序printf所查找学生信息如下:\n;printf学生姓名学生班级学生学号宿舍号年龄性别\n;ifstrcmpnumberS
[1].Number=0strcmpnumberS[S-Total].Number=0{whilebase=top{mid=base+top/2;ifstrcmpnumberS[mid].Number==0{printf%-12s%-15s%-15s%-8d%-8d%-5s\nS[mid].NameS[mid].ClassS[mid].NumberS[mid].RoomNumS[mid].AgeS[mid].Sex;putchar\n;j=1;break;}elseifstrcmpnumberS[mid].Number0base=mid+1;elsetop=mid-1;}}if!jprintf\n查找失败表中不存在该学生的信息!\n\n;}//按寝室号查找折半查找voidSerRnumberStudentS{intijmnbasetopmid;j=0;base=1;top=S-Total;printf请输入你要查询的寝室号:;scanf%di;getchar;SortRooNumS;//将表中原数据按照寝室号从小到大排序printf所查找寝室信息如下:\n;printf学生姓名学生班级学生学号宿舍号年龄性别\n;ifi=S
[1].RoomNumi=S[S-Total].RoomNum{whilebase=top{mid=base+top/2;ifi==S[mid].RoomNum{m=mid;n=mid-1;whileS[m].RoomNum==i{printf%-12s%-15s%-15s%-8d%-8d%-5s\nS[m].NameS[m].ClassS[m].NumberS[m].RoomNumS[m].AgeS[m].Sex;m++;ifmS-Totalbreak;}ifn0{whileS[n].RoomNum==i{printf%-12s%-15s%-15s%-8d%-8d%-5s\nS[n].NameS[n].ClassS[n].NumberS[n].RoomNumS[n].AgeS[n].Sex;n--;ifn1break;}}j=1;putchar\n;break;}elseifiS[mid].RoomNumbase=mid+1;elsetop=mid-1;}}if!jprintf\n查找失败表中不存在该寝室的信息!\n\n;}//以班级查询voidSerClassStudentS{intij=0;charClass
[31];printf请输入你要查找的班级号30个字符以内:;scanf%sClass;getchar;printf所查找学生信息如下:\n;printf学生姓名学生班级学生学号宿舍号年龄性别\n;fori=1;i=S-Total;i++ifstrcmpClassS[i].Class==0{printf%-12s%-15s%-15s%-8d%-8d%-5s\nS[i].NameS[i].ClassS[i].NumberS[i].RoomNumS[i].AgeS[i].Sex;j=1;}if!jprintf\n查找失败表中不存在该学生的信息!\n\n;}//显示所有学生信息函数voidPrintStudentS{inti;printf全体学生信息如下:\n;printf学生姓名学生班级学生学号宿舍号年龄性别\n;fori=1;i=S-Total;i++printf%-12s%-15s%-15s%-8d%-8d%-5s\nS[i].NameS[i].ClassS[i].NumberS[i].RoomNumS[i].AgeS[i].Sex;putchar\n;}voidMenu//菜单{printf学生寝室管理\n\n;printf*************************************菜单*************************************\n;printf
1.录入学生信息|
7.以班级号查询该班级中的全部学生信息\n;printf
2.修改学生信息|
8.按照班级号从小到大排序\n;printf
3.删除学生信息|
9.按照寝室号从小到大排序\n;printf
4.以姓名查询学生信息|
10.按照学号从小到大排序\n;printf
5.以学号查询学生信息|
11.显示所有学生的相关信息\n;printf
6.以寝室号查询该寝室中的全部学生信息|
12.退出程序\n;printf******************************************************************************\n;}voidmain{inti;StudentS;S-Total=0;do{Menu;printf请选择所要实现的功能请输入1~12中的任意一个数字:;scanf%di;getchar;//获取换行符putchar\n;switchi{case1:AddS;break;case2:AlterS;break;case3:DeleteS;break;case4:SerNameS;break;case5:SerNumberS;break;case6:SerRnumberS;break;case7:SerClassS;break;case8:SortClassS;printf排序完成!\n\n;break;case9:SortRooNumS;printf排序完成!\n\n;break;case10:SortNumberS;printf排序完成!\n\n;break;case11:PrintS;break;case12:exit0;break;default:printf选择错误:请在选项到之间选择!\n\n;break;}}whilei!=12;}。