课程设计报告课程设计题目:宿舍管理查询软件的设计学生姓名xxx专业xxx班级xxx指导教师xxx201x年x月x日东华理工大学课程设计评分表学生姓名:xxx班级:xxx学号:课程设计题目:宿舍管理系统的设计项目内容满分实评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总分100指导教师评语:指导教师签名:年月日课程设计报告要求:报告内容要求包括:(1)问题的概述、分析及研究意义;(2)数据结构的逻辑设计和物理存储设计;(3)重要算法的设计、流程描述或伪代码描述;(4)数据结构的时空复杂性分析以及重要算法的复杂性分析;(5)程序最终实现结果(包括重点结果界面的抓取,能过说明问题的重要实验结果数据的打印或其可视化结果等)。(6)参考文献(如果需要)。格式要求:中文正文使用五号字体,英文及代码使用小五号字体摘要这是为宿舍管理人员编写一个宿舍管理查询软件,建立数据文件,数据文件可以按关键字(姓名、学号、房号)进行冒泡排序.可以通过二分法按关键字(姓名、学号、房号)来查询可连续输出任一查询结果,但不能实现信息存盘,使用简单方便。1方案设计1.1任务:为宿舍管理人员编写一个宿舍管理查询软件1.2程序设计要求:①建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)②查询菜单:(用二分查找实现以下操作)A按姓名查询B按学号查询C按房号查询1.3功能:根据上述要求,我觉得系统应该具备以下的功能:①应该创建一个操作主界面;②系统没有输入任何信息数据,要建立数据文件,需编写一个信息输入的函数,所以得创建一个学员线性表,这样我们就可以将数据暂时保存在内存中;③信息输入后都保存在内存中后,还需要设计一个信息显示功能,信息的显示应该便于查询,所以需具备按各种关键字显示的功能;④本系统按关键字(姓名、学号、房号)进行冒泡排序,采用二分查找方式分别实现按关键字(姓名、学号、房号)查询功能;⑤当用户操作完毕需要退出时,我们提供了退出选项,便于使用者退出。2算法设计2.1线性表的顺序存储2.1.1存储结构本系统定义的存储结构采用结构体数组,结构体为:typedefstruct//定义结构体成员{charname[20];intnum;introom;}stu;stustud;typedefstruct{intlength;//当前长度stu*base;//存储空间基址intlistsize;//当前分配的存储容量}linklist;2.1.2程序结构图为:主函数学号排序姓名排序房号排序房号查询姓名查询学号查询3详细设计#includestdio.h#includestdlib.h#includestring.h#defineN40//线性表存储空间的初始分配量#defineincrease10//线性表存储空间的分配量增量intf,t=0;//定义全局变量typedefstruct//定义结构体{charname[20];intnum;//学号和房号都为整型introom;}stu;stustud;typedefstruct//创建顺序表{intlength;//当前长度stu*base;//存储空间基址intlistsize;//当前分配的存储容量}linklist;voidinit(linklist&l)//线性表初始化{l.length=0;l.base=(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(\n);printf(\n);printf(\n);printf(\n);printf(提示:当输入的数字键为0时,退出操作\n);if(t==1){printf(请输入数字键(1~6为操作键):);//1~6为有效数字操作键scanf(%d,&f);if(f0||f7){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(stud.name);//输入一行字符串(姓名)printf(请输入学号:);scanf(%d,&stud.num);printf(请输入房号:);scanf(%d,&stud.room);}voidcreate(linklist&l)//创建学生信息表{if(l.length=l.listsize)//判断学生的人数是否超过初值,如果超过,则重新分配{stu*newbase;newbase=(stu*)realloc(l.base,(N+increase)*sizeof(stu));//扩大分配的存储容量l.base=newbase;l.listsize+=increase;}inti=2;charch;printf(\n);printf(**************************开始创建线性表***************************\n);printf(\n);printf(请输入第1个学生的信息\n);shuru(l);//调用输入函数ch=getchar();strcpy(l.base[l.length].name,stud.name);l.base[l.length].num=stud.num;l.base[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.base[l.length].name,stud.name);l.base[l.length].num=stud.num;l.base[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;il.length-1;i++)for(j=i+1;jl.length;j++)if(l.base[i].rooml.base[j].room){temp=l.base[i];l.base[i]=l.base[j];l.base[j]=temp;}}voidsort2(linklist&l)//按学号排序(采用冒泡排序){inti,j;stutemp;for(i=0;il.length-1;i++)for(j=i+1;jl.length;j++)if(l.base[i].numl.base[j].num){temp=l.base[i];l.base[i]=l.base[j];l.base[j]=temp;}}voidsort1(linklist&l)//按姓名排序(采用冒泡排序){inti,j;stutemp;for(i=0;il.length-1;i++)for(j=i+1;jl.length;j++)if(strcmp(l.base[i].name,l.base[j].name)0){temp=l.base[i];l.base[i]=l.base[j];l.base[j]=temp;}}voidprint1(linklist&l)//打印学生信息{inti;printf(\n);printf(姓名学号房号\n);printf(\n);for(i=0;il.length;i++)printf(%-15s%-3d%5d\n,l.base[i].name,l.base[i].num,l.base[i].room);}voidprint2(linklist&l,intmid)//打印查找到的学生信息{printf(查找成功-----该学生信息为:\n);printf(姓名学号房号\n);printf(\n);printf(%-15s%-5d%-5d\n,l.base[mid].name,l.base[mid].num,l.base[mid].room);}intpanduan1(charch)//判断是否继续查找{printf(是否继续查找?y/n:);scanf(%c,&ch);if(ch=='y'){system(cls);return(1);}elsereturn0;}intpanduan2(charch)//如果学生不存在,判断是否继续查找{printf(该学生不存在,是否继续查找?y/n:);scanf(%c,&ch);if(ch=='y'){system(cls);return(1);}elsereturn0;}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.base[mid].room){flag=1;break;}elseif(ml.base[mid].room)low=mid+1;elsehigh=mid-1;}if(flag==1){print2(l,mid);if(panduan1(ch))//调用判断函数1chazhao3(l);else{system(cls);menu();}}else{if(panduan2(ch))//调用判断函数2chazhao3(l);else{system(cls);menu(