收藏 分销(赏)

数据结构宿舍管理查询系统实验报告.doc

上传人:w****g 文档编号:9789297 上传时间:2025-04-08 格式:DOC 页数:14 大小:125.54KB 下载积分:8 金币
下载 相关 举报
数据结构宿舍管理查询系统实验报告.doc_第1页
第1页 / 共14页
数据结构宿舍管理查询系统实验报告.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
洛阳理工学院实验报告 系别 计算机系 班级 学号 姓名 课程名称 数据结构 实验日期 实验名称 宿舍管理查询系统 成绩 实验目的: 掌握数据结构的两种基本技术:查找和排序,根据实际情况选择效率较高的算法解决应用问题。 实验条件: 计算机一台,Visual C++6.0 实验内容: 1. 问题描述 为宿舍管理人员设计一个宿舍管理查询系统, 程序采用交互工作方式,完成下列功能: (1)建立合适的数据结构作为查找表并输入数据; 数据分别按关键字姓名、学号、房号进行排序(所学排序算法任选一种效率较高的算法); (2)设计查询菜单,按指定关键字姓名、学号、房号进行查询并输出结果,要求查询采用效率较高的算法实现; (3)可以连续查询; 2. 数据结构类型定义 typedef struct { char S_name[31]; char S_number[16]; int D_number; }Stud; typedef struct { Stud student[M]; int Total; }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_number(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<stdio.h> #include<string.h> #include<stdlib.h> #define M 100 int change=0; //用来判断是否已保存操作 typedef struct { char S_name[31]; char S_number[16]; int D_number; }Stud; typedef struct { Stud student[M]; int Total; }Stu,*St; //判断学号是否及表中所存学号重复 void S_number_Judge(St S,int t) { int i; for(i=1;i<=(S->Total)-1;i++) { if(i!=t) { while((strcmp((S->student[i]).S_number, (S->student[t]).S_number)==0)&&(i!=t)) { printf("该学号已存在,请重新输入学号!\n"); printf("请输入学生的学号:"); scanf("%s",(S->student[t]).S_number); getchar(); i=1; } } } } //添加学生信息函数 void Add(St S) { printf("请输入学生的姓名:"); scanf("%s",(S->student[++(S->Total)]).S_name); getchar();//获取换行符 printf("请输入学生的学号:"); scanf("%s",(S->student[S->Total]).S_number); getchar(); S_number_Judge(S,S->Total);//判断输入的学号是否重复 printf("请输入学生的房号:"); scanf("%d",&(S->student[S->Total]).D_number); getchar(); change=1; printf("信息添加成功!\n\n"); } //修改学生信息函数 void Alter(St S) { int i; int flag=0; //用来判断表中是否存在所要修改的学生的信息 char name[20]; printf("请输入你要修改学生的姓名:"); scanf("%s",name); getchar(); for(i=1;i<=S->Total;i++) if(strcmp((S->student[i]).S_name,name)==0) flag=i; if(!flag) printf("你所要修改的学生信息在表中不存在!\n"); else { printf("请输入新信息:\n"); printf("请输入学生的姓名:"); scanf("%s",(S->student[flag]).S_name); getchar(); printf("请输入学生的学号:"); scanf("%s",(S->student[flag]).S_number); getchar(); S_number_Judge(S,flag); printf("请输入学生的房号:"); scanf("%d",&(S->student[flag]).D_number); getchar(); change=1; printf("信息修改成功!\n"); } putchar('\n'); } //删除学生信息 void Delete(St S) { int i,j; int flag=0; //用来判断表中是否存在所要删除的学生的信息 char name[20]; printf("请输入你要删除学生的姓名:"); scanf("%s",name); getchar(); for(i=1;i<=S->Total;i++) if(strcmp((S->student[i]).S_name,name)==0) flag=i; if(!flag) printf("你所要删除的学生在表中不存在!"); else { for(i=flag;i<S->Total;i++) { j=i+1; strcpy((S->student[i]).S_name,(S->student[j]).S_name); strcpy((S->student[i]).S_number,(S->student[j]).S_number); (S->student[i]).D_number=(S->student[j]).D_number; } (S->Total)--; change=1; printf("信息删除成功!"); } printf("\n\n"); } //显示所有学生信息函数 void Display_All(St S) { int i; printf("全体学生信息如下:\n"); printf("学生姓名 学生学号 学生房号\n"); for(i=1;i<=S->Total;i++) printf("%-20s%-15s%-5d\n",(S->student[i]).S_name, (S->student[i]).S_number,(S->student[i]).D_number); putchar('\n\n'); } void Sort_D_number(St S) //按照房号从小到大排序(冒泡法) { int i,j,t; char name[30]; char number[15]; for(i=1;i<=S->Total;i++) for(j=i;j<=S->Total;j++) if((S->student[i]).D_number>(S->student[j]).D_number) { strcpy(name,(S->student[i]).S_name); strcpy(number,(S->student[i]).S_number); t=(S->student[i]).D_number; strcpy((S->student[i]).S_name,(S->student[j]).S_name); strcpy((S->student[i]).S_number,(S->student[j]).S_number); (S->student[i]).D_number=(S->student[j]).D_number; strcpy((S->student[j]).S_name,name); strcpy((S->student[j]).S_number,number); (S->student[j]).D_number=t; } } void Sort_S_number(St S) //按照学号从小到大排序(冒泡法) { int i,j,t; char name[30]; char number[15]; for(i=1;i<=S->Total;i++) for(j=i;j<=S->Total;j++) if(strcmp((S->student[i]).S_number,(S->student[j]).S_number)>0) { strcpy(name,(S->student[i]).S_name); strcpy(number,(S->student[i]).S_number); t=(S->student[i]).D_number; strcpy((S->student[i]).S_name,(S->student[j]).S_name); strcpy((S->student[i]).S_number,(S->student[j]).S_number); (S->student[i]).D_number=(S->student[j]).D_number; strcpy((S->student[j]).S_name,name); strcpy((S->student[j]).S_number,number); (S->student[j]).D_number=t; } } //以姓名为关键字进行查询(顺序查找) void Query_S_name(St S) { int i,j=0; char name[31]; printf("请输入要查找的学生的姓名(30个字符以内):"); scanf("%s",name); getchar(); printf("要查找的学生信息如下:\n"); printf("学生姓名 学生学号 宿舍号\n"); for(i=1;i<=S->Total;i++) if(strcmp(name,(S->student[i]).S_name)==0) { printf("%-20s%-15s%-5d\n",(S->student[i]).S_name, (S->student[i]).S_number,(S->student[i]).D_number); j=1; } if(!j) printf("\n查找失败,表中不存在该学生的信息!\n\n"); } //以学号为关键字进行查询(折半查找) void Query_S_number(St S) { int flag,top,bottom,mid; char number[15]; flag=0; bottom=1; top=S->Total; printf("请输入你要查找学生的学号:"); scanf("%s",number); getchar(); Sort_S_number(S); //将表中原数据按照学号从小到大排序 printf("要查找的学生信息如下:\n"); printf("学生姓名 学生学号 宿舍号\n"); if(strcmp(number,(S->student[1]).S_number)>=0&& strcmp(number,(S->student[S->Total]).S_number)<=0) { while(bottom<=top) { mid=(bottom+top)/2; if(strcmp(number,(S->student[mid]).S_number)==0) { printf("%-20s%-15s%-5d\n",(S->student[mid]).S_name, (S->student[mid]).S_number,(S->student[mid]).D_number); putchar('\n'); flag=1; break; } else if(strcmp(number,(S->student[mid]).S_number)>0) bottom=mid+1; else top=mid-1; } } if(!flag) printf("\n查找失败,表中不存在该学生的信息!\n\n"); } void Query_D_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->student[1]).D_number&&i<=(S->student[S->Total]).D_number) { while(base<=top) { mid=(base+top)/2; if(i==(S->student[mid]).D_number) { m=mid; n=mid-1; while((S->student[m]).D_number==i) { printf("%-20s%-15s%-5d\n",(S->student[m]).S_name, (S->student[m]).S_number,(S->student[m]).D_number); m++; if(m>S->Total) break; } if(n>0) { while((S->student[n]).D_number==i) { printf("%-20s%-15s%-5d\n",(S->student[n]).S_name, (S->student[n]).S_number,(S->student[n]).D_number); n--; if(n<1) break; } } j=1; putchar('\n'); break; } else if(i>(S->student[mid]).D_number) base=mid+1; else top=mid-1; } } if(!j) printf("\n查找失败,表中不存在该房间的信息!\n\n"); } void Search(St S) { int j; printf("★★★★★★★★★★★★★★★★★★★\n"); printf("★★★★★★按1按姓名查找★★★★★★\n"); printf("★★★★★★按2按学号查找★★★★★★\n"); printf("★★★★★★按3按房号查找★★★★★★\n"); printf("★★★★★★★★★★★★★★★★★★★\n"); do { printf("请输入信息\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; default: printf("错误:请在选项之间选择!\n\n"); 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(Stu)); S->Total=0; do { Menu(); 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("错误:请在选项之间选择!\n\n"); break; } }while(i!='h'); } 5. 测试数据及结果 实验总结: 本次实验,让我掌握了数据结构的两种基本技术:查找和排序,学会了根据实际情况选择效率较高的算法解决应用问题,了解了结构化程序设计的重要性。 第 14 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服