数据结构课程设计宿舍管理查询软件_第1页
数据结构课程设计宿舍管理查询软件_第2页
数据结构课程设计宿舍管理查询软件_第3页
数据结构课程设计宿舍管理查询软件_第4页
数据结构课程设计宿舍管理查询软件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计宿舍管理查询软件数据结构课程设计宿舍管理查询软件班级学号班学生姓名提交日期7月24日成绩计算机与通信工程学院一、需求分析程序设计任务为宿舍管理人员编写一个宿舍管理查询软件。①程序设计要求:A.采取交互工作方式B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一个)②查询菜单:(用二分查找实现以下操作)A.按姓名查询B.按学号查询C.按房号查询③打印任一查询结果(能够连续操作)2、功效①要实现交互工作方式,各项操作结束后均应返回主菜单;②系统本无任何信息数据,要建立数据文件,需开发一个信息录入功效,即首先创建一个学员线性表,同时我们能够将数据暂时保留在内存中,所以我们未开发信息存盘功效;③信息录入后都保留在内存中,用户看不到,需要设计一个信息显示功效,信息显示应该便于查阅,所以需具备按各种关键字显示功效;④本系统按关键字(姓名、学号、房号)进行冒泡排序,采取二分查找方式分别实现按关键字(姓名、学号、房号)查询功效;⑤因为有些同学因为不一样原因而离校,所以设计了删除功效;⑥因为有新同学入校,所以设计了插入功效;⑦当用户操作完成需要退出时,我们提供了退出选项,便于使用者退出交互式工作系统。功效模块图流程图输入和输出①输入形式1)开始创建线性表:按先后次序输入姓名(20个字以内),学号(整型),房号(整型)。2)依照用户所选择操作键,然后再依照程序对应提醒进行输入。选择操作键1(按姓名排序):无输入;选择操作键2(按学号排序):无输入;选择操作键3(按房号排序):无输入;选择操作键4(按姓名查找):输入要查找姓名;选择操作键5(按学号查找):输入要查找学号;选择操作键6(按房号查找):输入要查找房号;选择操作键7(按学号插入):按照提醒次序输入要插入学生姓名,学号,房号;选择操作键8(按学号删除):输入要删除学生学号。②输出形式及范围依照用户选择不一样,会有不一样输出。选择操作键1(按姓名排序):输出以姓名首字母排序全部学生信息;选择操作键2(按学号排序):输出按学号从小到大排列全部学生信息;选择操作键3(按房号排序):输出按房号从小到大排列全部学生信息;选择操作键4(按姓名查找):若查找成功,则输出对应学生信息,若不成功,则输出该学生不存在;选择操作键5(按学号查找):若查找成功,则输出对应学生信息,若不成功,则输出该学生不存在;选择操作键6(按房号查找):若查找成功,则输出对应学生信息,若不成功,则输出该学生不存在。选择操作键7(按学号插入):输出插入后全部学生信息;选择操作键8(按学号删除):输出所需删除学生信息,确认删除后,输出删除后全部学生信息。测试数据开始录入数据:姓名学号房号刘备1102孙权6231周瑜3124正确输入:查找数据:6(按学号)正确输出:孙权6231详细设计1、数据结构typedefstruct//定义结构体组员{ charname[20]; intnum;//学号和房号都为整型 introom;}stu;stustud;typedefstruct{ intlength;//当前长度 stu*elem;//存放空间基址 intlistsize;//当前分配存放容量}linklist;2、数据intf;f为全局变量,指选择操作键数charname[20];name为姓名intnum;num为学号introom;room为房号intlength;length为线性表当前长度stu*elem;elem指示线性表基地址intlistsize;listsize为当前分配存放容量charc;c为进入主界面任意键charch;ch为判断字符y或ninti,j;在冒泡排序中,i为外层循环次数,j为内层循环次数inti;在打印学生信息时,i作为循环变量intm;intn;inta;m,n,a在二分查找中分别代表房号,学号,姓名inti,j,k;i,j,k在按学号插入中作为循环变量inti,j,k=-1;i,j,k在按学号删除中作为循环变量3、函数调用详细函数以下:voidinit(linklist&l):用于线性表初始化,经过调用C语言文件操作函数来实现。voidcreate(linklist&l):用于创建学生信息表,经过线性表来实现。voidsort3(linklist&l):用于按房号排序,经过采取冒泡排序算法来实现。voidsort2(linklist&l):用于按学号排序,经过采取冒泡排序算法来实现。voidsort1(linklist&l):用于按姓名排序,经过采取冒泡排序算法来实现。voidchazhao3(linklist&l):用于按房号从小到大查找,经过采取二分查找算法来实现。voidchazhao2(linklist&l):用于按学号从小到大查找,经过采取二分查找算法来实现。voidchazhao1(linklist&l):用于按姓名从小到大查找,经过采取二分查找算法来实现。voidprint1(linklist&l):用于打印学生信息,经过调用文件操作函数实现。voidprint2(linklist&l,intmid):用于打印查找到学生信息,经过调用文件查找函数实现。intpanduan2(charch):用于假如学生不存在,判断是否继续查找,经过if语句,文件操作函数实现voidpanduan3():用于假如已无学生统计则返回主界面,经过调用其它函数和文件操作函数实现。voiddisp():用于返回主界面,经过调用menu()函数实现。voidmenu():用于列出操作菜单,经过输入输出语句实现。voidmain():程序操作入口,是程序主函数,能够按照已定义函数调用子函数。4、主程序:intmain()//主函数{ linklistl;//定义线性表l init(l);//调用初始化函数 charch; system("colora"); printf("\n"); printf("*************************欢迎进入宿舍管理查询系统*************************\n"); printf("\n"); printf("请按任意键开始操作:"); scanf("%c",&ch); system("cls");//将屏幕先前显示内容清理掉 create(l);//调用线性表创建函数 system("cls"); t=1; menu(); //调用主菜单函数while(f!=0) { system("cls"); switch(f) { case1:sort1(l);//调用按姓名排序函数 printf("\n"); if(l.length==0) { printf("已无学生统计\n"); printf("\n"); disp(); menu(); } else { printf("按姓名排序:\n"); print1(l); disp();//调用返回主界面 menu(); } break; case2:sort2(l);//调用按学号排序函数 printf("\n"); if(l.length==0) { printf("已无学生统计\n"); printf("\n"); disp(); menu(); } else { printf("按学号排序:\n"); print1(l); disp(); menu(); }break; case3:sort3(l);//调用按房号排序函数 printf("\n"); if(l.length==0) { printf("已无学生统计\n"); printf("\n"); disp(); menu(); } else { printf("按房号排序:\n"); print1(l); disp(); menu(); }break; case4:sort1(l);//先调用按姓名排序函数进行排序 chazhao1(l);//再调用按姓名查找函数进行(二分)查找 break; case5:sort2(l);//先调用按学号排序函数进行排序 chazhao2(l);//再调用按学号查找函数进行(二分)查找 break; case6:sort3(l);//先调用按房号排序函数进行排序 chazhao3(l);//再调用按房号查找函数进行(二分)查找 break; case7:sort2(l);//调用插入函数 insert(l); system("cls"); printf("显示插入后学生信息:\n");print1(l); disp(); menu(); break; case8:Delete(l);//调用删除函数 if(l.length==0) { printf("\n"); printf("学生统计已被删除完\n"); printf("\n"); disp(); menu(); } else { printf("显示删除后学生信息:\n"); print1(l); disp(); menu(); } break; } }}调试分析①为了防止繁琐、改进算法,在一些函数中调用了其它函数。如:在按(姓名、学号、房号)查找中都调用了panduan1(ch)和panduan2(ch)函数。②在插入和删除模块中,显示学生信息下面总是有主界面,经过调试,利用system("cls")函数清屏后,显示只有学生信息了,再按键即可返回主界面。③本程序数次利用了disp()、menu()、system("cls")、fflush(stdin)等函数,经过数次调试,已经很好控制了显示学生信息与主界面转换。④经过此次课程设计,对线性表、冒泡排序、二分查找应用有了更深入了解。用户手册首先,运行程序进入“欢迎进入宿舍管理查询系统”界面,然后进入线性表创建界面中,输入学生信息,创建好学生信息以后单击任意键则进入操作界面(主界面),然后可按键进行操作。单击数字键“1”,则为按姓名排序单击数字键“2”,则为按学号排序单击数字键“3”,则为按房号排序单击数字键“4”,则为按姓名查找单击数字键“5”,则为按学号查找单击数字键“6”,则为按学号查找单击数字键“7”,则为按学号插入单击数字键“8”,则为按学号删除系统中有以下关键词:提醒:当输入数字键为0时,退出操作;请输入数字键(1~8为操作键);请按任意键进入主界面。测试结果欢迎界面按任意键进入线性表创建界面,并输入数据,开始创建按操作键选择操作按姓名排序按学号排序按房号排序按姓名查找按学号查找按房号查找按学号插入按学号删除附录源程序://采取次序线性表处理宿舍管理问题(C语言)#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN40//线性表存放空间初始分配量#defineincrease10//线性表存放空间分配量增量intf,t=0;//定义全局变量typedefstruct{ charname[20]; intnum;//学号和房号都为整型 introom;}stu;stustud;typedefstruct{ intlength;//当前长度 stu*elem;//存放空间基址 intlistsize;//当前分配存放容量}linklist;voidinit(linklist&l)//线性表初始化{ l.length=0; l.elem=(stu*)malloc(N*sizeof(stu)); l.listsize=N;}voidmenu()//操作菜单{ printf("\n"); printf("***************请按键选择操作****************\n"); printf("\n");printf("\n"); printf("1按姓名排序2按学号排序\n"); printf("\n"); printf("3按房号排序4按姓名查找\n"); printf("\n"); printf("5按学号查找6按房号查找\n"); printf("\n"); printf("7按学号插入8按学号删除\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("提醒:当输入数字键为0时,退出操作\n"); if(t==1) { printf("请输入数字键(1~8为操作键):");//1~8为有效数字操作键 scanf("%d",&f); if(f<0||f>9) { system("cls"); printf("\n"); printf("输入数字不对,请在原处重输!\n");printf("\n"); menu(); } } }voiddisp()//返回主界面{ charc; fflush(stdin); printf("\n"); printf("请按任意键进入主界面:"); scanf("%c",&c); system("cls");}voidpanduan3()//假如已无学生统计则返回主界面{ printf("\n"); printf("已无学生统计\n"); printf("\n"); disp(); menu();}voidshuru(linklistl)//输入学生信息{ printf("请输入姓名:"); fflush(stdin);//清空输入缓冲区,得到正确输入数据 gets();//输入一行字符串(姓名) printf("请输入学号:"); scanf("%d",&stud.num); printf("请输入房号:"); scanf("%d",&stud.room);}voidcreate(linklist&l)//创建学生信息表{ if(l.length>=l.listsize)//判断学生人数是否超出初值,假如超出,则重新分配 { stu*newbase; newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu)); l.elem=newbase; l.listsize+=increase; } inti=2; charch; printf("\n"); printf("**************************开始创建线性表***************************\n");printf("\n"); printf("请输入第1个学生信息\n"); shuru(l);//调用输入函数 ch=getchar(); strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; l.length++; printf("\n"); printf("是否继续输入?<y/n>:"); scanf("%c",&ch); printf("\n");printf("\n"); while(ch=='y') { printf("请输入第%d个学生信息\n",i); shuru(l); strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; l.length++; i++; ch=getchar();printf("\n"); printf("是否继续输入?<y/n>:"); scanf("%c",&ch); printf("\n");printf("\n"); }if(ch=='n')system("cls"); }voidsort3(linklist&l)//按房号排序(采取冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].room>l.elem[j].room) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }}voidsort2(linklist&l)//按学号排序(采取冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].num>l.elem[j].num) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }}voidsort1(linklist&l)//按姓名排序(采取冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(strcmp(l.elem[i].name,l.elem[j].name)>0) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } }voidprint1(linklist&l)//打印学生信息{ inti; printf("\n"); printf("姓名学号房号\n");printf("\n"); for(i=0;i<l.length;i++) printf("%-15s%-3d%5d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room);}voidprint2(linklist&l,intmid)//打印查找到学生信息{ printf("查找成功----->该学生信息为:\n"); printf("姓名学号房号\n");printf("\n"); printf("%-15s%-5d%-5d\n",l.elem[mid].name,l.elem[mid].num,l.elem[mid].room);}intpanduan1(charch)//判断是否继续查找{ scanf("%c",&ch); printf("是否继续查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return0;}intpanduan2(charch)//假如学生不存在,判断是否继续查找{ scanf("%c",&ch); printf("该学生不存在,是否继续查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return0;}voidchazhao3(linklist&l)//按房号从小到大查找(采取二分查找){ if(l.length==0)panduan3();//此函数功效为:返回主界面 else { intlow=0,high=l.length,mid,flag=0;//flag作为标志符,为1则表示查找成功,不然没有所要查找学生 intm; charch; printf("\n");printf("\n"); printf("按房号查找----->请输入要查找房号:"); scanf("%d",&m); printf("\n"); while(low<=high) { mid=(low+high)/2; if(m==l.elem[mid].room) { flag=1; break; } elseif(m>l.elem[mid].room) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch))//调用判断函数1 chazhao3(l); else { system("cls"); menu(); } } else { if(panduan2(ch))//调用判断函数2 chazhao3(l); else { system("cls"); menu(); } } }}voidchazhao2(linklist&l)//按学号从小到大查找(采取二分查找){if(l.length==0)panduan3(); else { intlow=0,high=l.length,mid,flag=0; intn; charch; printf("\n");printf("\n"); printf("按学号查找----->请输入要查找学号:"); scanf("%d",&n); printf("\n"); while(low<=high) { mid=(low+high)/2; if(n==l.elem[mid].num) { flag=1; break; } elseif(n>l.elem[mid].num) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch)) chazhao2(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao2(l); else { system("cls"); menu(); } } }}voidchazhao1(linklist&l)//按姓名从小到大查找(采取二分查找){ if(l.length==0)panduan3(); else { intlow=0,high=l.length,mid,flag=0; printf("\n");printf("\n"); printf("按姓名查找----->请输入要查找姓名:"); chara[15],ch; scanf("%s",a); printf("\n"); while(low<=high) { mid=(low+high)/2; if(strcmp(a,l.elem[mid].name)==0) { flag=1; break; } elseif(strcmp(a,l.elem[mid].name)>0) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid);//打印查找到学生信息 if(panduan1(ch))chazhao1(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao1(l); else { system("cls"); menu(); } } }}voidinsert(linklist&l)//按学号从小到大插入该学生{ inti,j,k; charch; printf("\n"); printf("插入学生信息为:\n"); printf("姓名:"); fflush(stdin);//清空输入缓冲区,得到正确输入数据 gets(); printf("学号:"); scanf("%d",&stud.num); printf("房号:"); scanf("%d",&stud.room); if(l.length==0) { strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } for(i=0;i<l.length;i++) { if(stud.num<l.elem[i].num) { k=i; for(j=l.length;j>k;j--) l.elem[j]=l.elem[j-1]; strcpy(l.elem[k].name,); l.elem[k].num=stud.num; l.elem[k].room=stud.room; break; } else { strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } } l.length++; fflush(stdin); printf("\n"); printf("是否继续插入?<y/n>:"); scanf("%c",&ch); if(ch=='y')insert(l); elsesystem("cls");}voidDelete(linklist&l)//按学号删除该学生{ inti,j,k=-1; charch; printf("\n");printf("\n"); printf("请输入要删除学生学号:"); scanf("%d",&stud.num); for(i=0;i<l.length;i++) { if(stud.num==l.elem[i].num) { printf("该学生信息为:\n");printf("\n"); printf("%-15s%-3d%7d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); k=i; for(j=k;j<l.length-1;j++) l.elem[j]=l.elem[j+1]; printf("\n"); break; } } if(i>=l.length)printf("该学生不存在\n"); if(k>=0)l.length--; fflush(stdin); printf("\n"); printf("是否继续删除?<y/n>:"); scanf("%c",&ch); system("cls"); if(ch=='y')Delete(l); elsesystem("cls"); }intmain()//主函数{ linklistl;//定义线性表l init(l);//调用初始化函数 charch; system("colora"); printf("\n"); printf("*************************欢迎进入宿舍管理查询系统*************************\n"); printf("\n"); printf("请按任意键开始操作:"); scanf("%c",&ch); system("cls");//将屏幕先前显示内容清理掉 create(l);//调用线性表创建函数 system("cls"); t=1; menu(); //调用主菜单函数 while(f!=0) { system("cls"); switch(f) { case1:sort1(l);//调用按姓名排序函数 printf("\n"); if(l.leng

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论