《数据结构——宿舍管理查询系统实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构——宿舍管理查询系统实验报告.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、洛阳理工学院实验报告洛阳理工学院实验报告系别计算机系班级学号姓名课程名称数据结构实验日期实验名称宿舍管理查询系统成绩实验目的:掌握数据结构的两种基本技术:查找和排序,根据实际情况选择效率较高的算法解决应用问题。实验条件:计算机一台,Visual C+6.0实验内容:1.问题描述为宿舍管理人员设计一个宿舍管理查询系统,程序采用交互工作方式,完成下列功能:(1)建立合适的数据结构作为查找表并输入数据;数据分别按关键字姓名、学号、房号进行排序(所学排序算法任选一种效率较高的算法);(2)设计查询菜单,按指定关键字姓名、学号、房号进行查询并输出结果,要求查询采用效率较高的算法实现;(3)可以连续查询;
2、2.数据结构类型定义typedef structchar S_name31;char S_number16;intD_number;Stud;typedef structStudstudentM;intTotal;Stu,*St;3.模块划分(1)添加学生信息:void Add(St S)(2)修改学生信息:void Alter(St S)(3)删除学生信息:void Delete(St S)(4)显示所有学生信息:void Display_All(St S)(5)按照寝室号从小到大排序:void Sort_D_number(St S)(6)按照学号从小到大排序:void Sort_S_num
3、ber(St S)(7)以姓名为关键字查找:void Query_S_name(St S)(8)以学号为关键字进行查找:oid Query_S_number(St S)(9)以寝室号为关键字进行查找:void Query_D_number(St S)(10)主函数:void main()4.详细设计#include#include#include#define M 100int change=0;/用来判断是否已保存操作typedef structchar S_name31;char S_number16;intD_number;Stud;typedef structStudstudentM;
4、intTotal;Stu,*St;/判断学号是否与表中所存学号重复void S_number_Judge(St S,int t)int i;for(i=1;iTotal)-1;i+)if(i!=t)while(strcmp(S-studenti).S_number,(S-studentt).S_number)=0)&(i!=t)printf(该学号已存在,请重新输入学号!n);printf(请输入学生的学号:);scanf(%s,(S-studentt).S_number);getchar();i=1;/添加学生信息函数void Add(St S)printf(请输入学生的姓名:);scanf
5、(%s,(S-student+(S-Total).S_name);getchar();/获取换行符printf(请输入学生的学号:);scanf(%s,(S-studentS-Total).S_number);getchar();S_number_Judge(S,S-Total);/判断输入的学号是否重复printf(请输入学生的房号:);scanf(%d,&(S-studentS-Total).D_number);getchar();change=1;printf(信息添加成功!nn);/修改学生信息函数void Alter(St S)int i;int flag=0;/用来判断表中是否存在
6、所要修改的学生的信息char name20;printf(请输入你要修改学生的姓名:);scanf(%s,name);getchar();for(i=1;iTotal;i+)if(strcmp(S-studenti).S_name,name)=0)flag=i;if(!flag)printf(你所要修改的学生信息在表中不存在!n);elseprintf(请输入新信息:n);printf(请输入学生的姓名:);scanf(%s,(S-studentflag).S_name);getchar();printf(请输入学生的学号:);scanf(%s,(S-studentflag).S_number
7、);getchar();S_number_Judge(S,flag);printf(请输入学生的房号:);scanf(%d,&(S-studentflag).D_number);getchar();change=1;printf(信息修改成功!n);putchar(n);/删除学生信息void Delete(St S)int i,j;int flag=0;/用来判断表中是否存在所要删除的学生的信息char name20;printf(请输入你要删除学生的姓名:);scanf(%s,name);getchar();for(i=1;iTotal;i+)if(strcmp(S-studenti).S
8、_name,name)=0)flag=i;if(!flag)printf(你所要删除的学生在表中不存在!);elsefor(i=flag;iTotal;i+)j=i+1;strcpy(S-studenti).S_name,(S-studentj).S_name);strcpy(S-studenti).S_number,(S-studentj).S_number);(S-studenti).D_number=(S-studentj).D_number;(S-Total)-;change=1;printf(信息删除成功!);printf(nn);/显示所有学生信息函数void Display_Al
9、l(St S)int i;printf(全体学生信息如下:n);printf(学生姓名学生学号学生房号n);for(i=1;iTotal;i+)printf(%-20s%-15s%-5dn,(S-studenti).S_name,(S-studenti).S_number,(S-studenti).D_number);putchar(nn);void Sort_D_number(St S)/按照房号从小到大排序(冒泡法)int i,j,t;char name30;char number15;for(i=1;iTotal;i+)for(j=i;jTotal;j+)if(S-studenti).D
10、_number(S-studentj).D_number)strcpy(name,(S-studenti).S_name);strcpy(number,(S-studenti).S_number);t=(S-studenti).D_number;strcpy(S-studenti).S_name,(S-studentj).S_name);strcpy(S-studenti).S_number,(S-studentj).S_number);(S-studenti).D_number=(S-studentj).D_number;strcpy(S-studentj).S_name,name);str
11、cpy(S-studentj).S_number,number);(S-studentj).D_number=t;void Sort_S_number(St S)/按照学号从小到大排序(冒泡法)int i,j,t;char name30;char number15;for(i=1;iTotal;i+)for(j=i;jTotal;j+)if(strcmp(S-studenti).S_number,(S-studentj).S_number)0)strcpy(name,(S-studenti).S_name);strcpy(number,(S-studenti).S_number);t=(S-s
12、tudenti).D_number;strcpy(S-studenti).S_name,(S-studentj).S_name);strcpy(S-studenti).S_number,(S-studentj).S_number);(S-studenti).D_number=(S-studentj).D_number;strcpy(S-studentj).S_name,name);strcpy(S-studentj).S_number,number);(S-studentj).D_number=t;/以姓名为关键字进行查询(顺序查找)void Query_S_name(St S)int i,j
13、=0;char name31;printf(请输入要查找的学生的姓名(30 个字符以内):);scanf(%s,name);getchar();printf(要查找的学生信息如下:n);printf(学生姓名学生学号宿舍号n);for(i=1;iTotal;i+)if(strcmp(name,(S-studenti).S_name)=0)printf(%-20s%-15s%-5dn,(S-studenti).S_name,(S-studenti).S_number,(S-studenti).D_number);j=1;if(!j)printf(n 查找失败,表中不存在该学生的信息!nn);/以
14、学号为关键字进行查询(折半查找)void Query_S_number(St S)int flag,top,bottom,mid;char number15;flag=0;bottom=1;top=S-Total;printf(请输入你要查找学生的学号:);scanf(%s,number);getchar();Sort_S_number(S);/将表中原数据按照学号从小到大排序printf(要查找的学生信息如下:n);printf(学生姓名学生学号宿舍号n);if(strcmp(number,(S-student1).S_number)=0&strcmp(number,(S-studentS-
15、Total).S_number)=0)while(bottomstudentmid).S_number)=0)printf(%-20s%-15s%-5dn,(S-studentmid).S_name,(S-studentmid).S_number,(S-studentmid).D_number);putchar(n);flag=1;break;else if(strcmp(number,(S-studentmid).S_number)0)bottom=mid+1;elsetop=mid-1;if(!flag)printf(n 查找失败,表中不存在该学生的信息!nn);void Query_D_
16、number(St S)/以房号为关键字进行查询(折半查找)int i,j,m,n,base,top,mid;j=0;base=1;top=S-Total;printf(请输入你要查询的房号:);scanf(%d,&i);getchar();Sort_D_number(S);/将表中原数据按照房号从小到大排序printf(所查找房间信息如下:n);printf(学生姓名学生学号宿舍号n);if(i=(S-student1).D_number&istudentS-Total).D_number)while(basestudentmid).D_number)m=mid;n=mid-1;while(
17、S-studentm).D_number=i)printf(%-20s%-15s%-5dn,(S-studentm).S_name,(S-studentm).S_number,(S-studentm).D_number);m+;if(mS-Total)break;if(n0)while(S-studentn).D_number=i)printf(%-20s%-15s%-5dn,(S-studentn).S_name,(S-studentn).S_number,(S-studentn).D_number);n-;if(n(S-studentmid).D_number)base=mid+1;els
18、etop=mid-1;if(!j)printf(n 查找失败,表中不存在该房间的信息!nn);void Search(St S)int j;printf(n);printf(按 1 按姓名查找n);printf(按 2 按学号查找n);printf(按 3 按房号查找n);printf(n);doprintf(请输入信息n);scanf(%d,&j);getchar();putchar(n);switch(j)case 1:Query_S_name(S);break;case 2:Query_S_number(S);break;case 3:Query_D_number(S);break;de
19、fault:printf(错误:请在选项之间选择!nn);break;while(j!=1)&(j!=2)&(j!=3);void Judge_Save(int i,St S)exit(0);void Menu()printf(n);printf(欢迎使用宿舍管理系统n);printf(n);printf(1:添加学生信息n);printf(2:修改学生信息n);printf(3:删除学生信息n);printf(4:查询学生信息n);printf(5:显示所有学生信息n);printf(6:退出系统n);void main()char i;St S;S=(St)malloc(sizeof(St
20、u);S-Total=0;doMenu();printf(请输入 1-6 中的任意一个数字选择所要实现的功能):);scanf(%s,&i);getchar();putchar(n);switch(i)case 1:Add(S);break;case 2:Alter(S);break;case 3:Delete(S);break;case 4:Search(S);break;case 5:Display_All(S);break;case 6:Judge_Save(change,S);exit(0);break;default:printf(错误:请在选项之间选择!nn);break;while(i!=h);5.测试数据及结果实验总结:本次实验,让我掌握了数据结构的两种基本技术:查找和排序,学会了根据实际情况选择效率较高的算法解决应用问题,了解了结构化程序设计的重要性。