C++宿舍管理系统课程设计_第1页
C++宿舍管理系统课程设计_第2页
C++宿舍管理系统课程设计_第3页
C++宿舍管理系统课程设计_第4页
C++宿舍管理系统课程设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

河南城建学院课程设计报告书专业:信息管理与信息系统课程设计名称:《数据结构课程设计》题目:宿舍管理查询软件班级:信管2班设计者学号:083215217设计者姓名:张凯迪同组人员:姚飒飒指导老师:张延红崔雪冰杨斌完成时间:2016年6月12日摘要在校学生的信息管理是校园管理中的一个重要内容,随着国家扩招政策的继续实施,学生数量也不断增加、信息的不断细化、各个行业间联系的不断密切,对人事管理的要求也不断提高。如何记录和管理好学生的信息,对学生实施高效的宏观管理,对学生出入宿舍以及学生注入和迁出的信息的灵活的记录及更新,是一项繁重而艰巨的任务。关键词:C++;数据库表;宿舍信息查询;宿舍信息管理 目录104目录 132340第一章开发环境和开发工具 197201.1C++简介 1293771.2开发背景 124261.3开发环境 113701第二章算法思想 2272492.1系统需求分析 2172722.2系统总体设计 2102882.2.1系统设计目标 2258752.2.2开发设计思想 3322462.2.3系统功能模块设计 3211482.3算法思想描述 53305第三章算法实现 6129763.1数据结构 628173.2程序模块 635983.2.1数据结构设计 6261383.3各模块之间的调用关系 7273463.3.1模块划分 7257973.3.2操作实现 1047443.4源程序代码 1823197第四章测试与分析 32250124.1使用方法 32297244.2测试数据选择 32135124.3测试结果分析 3232331总结 3826014心得体会 3928865参考文献 40第一章开发环境和开发工具1.1C++简介C++标准可分为两部分,C++语言本身和C++标准库。C++标准库对于VisualC++是相当新的,实际上微软只是在发布VisualC++5.0时去除了一些“bug”。标准库提供了标准的输入/输出、字符串、容器(如矢量、列表和映射等)、非数值运算(如排序、搜索和合并等)和对数值计算的支持。应该说,C/C++包含了相对少的关键字,而且很多最有用的函数都来源于库,C++标准库实现容器和算法的部分就是STL。STL是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、拷贝和排序等。1994年7月,ANSI/ISOC++标准委员会投票决定接受STL为C++标准库的一部分,这个建议是根据AlexStepanov、MengLee和DavidMusser这三人的编程和软件库研究提出的。STL的产生是为了满足通用性的设计目标,而不是为了提高性能。1.2开发背景随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而人事管理的全面自动化、信息化则是其中重要的组成部分。人事管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。因此,本文所研究的人事管理信息系统具有一定的使用价值和现实意义。1.3开发环境本文所采用的开发环境主要是在一般的PC硬件环境和WindouwsVista/2003/XP系统由Visual++6.0编写而成,在用到MicrosoftVisualC++6.0中c语言的情况下,对于查询采用了逐个查询法,程序通过调试运行实现了设计目标,并且经过适当完善后,将可以应用在实际中解决问题。第二章算法思想2.1系统需求分析为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少少不必要的人力,物力,和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门开发设计专用系统软件—宿舍管理软件来进行管理学生宿舍信息,使学生宿舍信息实现标准化的管理和规范化的制度是十分必要的。该程序应该具有以下功能:(1)学生的入住信息录入;(2)输出学生入住信息(分别按姓名,学号,房间号有序);(3)按给定学号,姓名,房间号查询;(4)插入新增的学生信息;(5)按学号删除学生信息。该程序执行的全过程大致为:(1)按照提示输入所需要的条件;(2)选择要实现的功能;(3)显示执行后的结果2.2系统总体设计2.2.1系统设计目标任务:为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:(1)采用交互工作方式(2)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)查询菜单:(用二分查找实现以下操作)(3)按姓名查询(4)按学号查询(5)按房号查询(6)打印任一查询结果(可以连续操作)2.2.2开发设计思想基于以上系统设计目标,本文在开发人事管理信息系统时遵循了以下开发设计思想:●采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。●尽量达到操作过程中的直观、方便、实用、安全等要求。●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。●系统应具备数据库维护功能,及时根据用户需求进行数据的添加、查找、显示、排序等操作。2.2.3系统功能模块设计本系统分为八个模块:如图2-1所示的系统功能模块图。如图2-2系统功能模块图。2-1系统模块图如下请按选择操作1按姓名排序2按学号排序3按房号排序4按姓名查找5按学号查找6按房号查找7按学号插入8按学号删除2-2系统功能图如下2-2系统功能图如下输入信息输出界面选择操作选择1选择2选择3选择4选择5选择6选择7选择8选择11按姓名排序显示按学号排序显示按房号排序并显示按姓名查找并显示按学号查找并显示按房号排序并显示按学号插入按学号删除选择0结束系统退出yyyyyyyynnnnnnnnny2.3算法思想描述该程序的由多种函数实现,每个函数具有不同的功能,主要有主菜单函数,插入功能子菜单函数,查找功能子菜单函数,学生信息录入函数,显示函数,排序函数,插入函数以及查找函数。在每个区域中会调用不同的函数来实现主要的功能。比如,在学生显示这个功能里调用显示函数;在插入功能里调用子菜单函数;在显示信息时调用排序函数先对需要输出的信心进行排序,然后再输出;在查找功能里会调用查找函数来进行查找,包括按照性别,学号,姓名,房间号等查询。而最主要的函数有:<1>插入函数,它用尾插法来实现;<2>排序函数,用快速排序函数来实现;<3>查找函数,用逐个查找法;第三章算法实现3.1数据结构选择的数据结构为:#include<stdio.h>#include<stdlib.h>#include<string.h>数据结构采用链式存储,所有程序从主函数voidmain()开始,首先调用menu()主菜单函数,在menu()函数中依次增加各种功能,然后通过switch…case语句分别选择录入,显示,插入,查找,退出功能1,选择录入功能时调用shuru()函数录入信息;2选择显示功能时,首先用 linklistl()表头显示函数,然后分别调用sort1(linklist&l)sort2(linklist&l),sort3(linklist&l),函数根据学生学号,学生宿舍号,学生姓名关键字进行冒泡排序,然后显示3选择查询功能时首先调用insert(linklist&l)函数进行信息插入,然后调用linklistl()表头显示函数,最后调用print1(l)函数显示信息并对其进行排序4选择查询功能时,首先调用menu5()显示查询的菜单,然后分别调用chazhao1(linklist&l),chazhao2(linklist&l),chazhao3(linklist&l),以学生学号,姓名,宿舍号为关键字进行查找,最后调用system()显示函数退出功能。3.2程序模块3.2.1数据结构设计数据结构:线性存储结构:链式#include<stdio.h>//线性表的静态单链表表示存储结构#include<string.h>//定义一个存储学生相关信息的结构体#defineN10;//链表的最大长度voidmain()//主函数{ 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(); //调用主菜单函数voidinit(linklist&l)//线性表初始化voidmenu()//操作菜单voiddisp()//返回主界面voidpanduan3()//如果已无学生记录则返回主界面3.3各模块之间的调用关系3.3.1模块划分voidshuru(linklistl)//输入学生的信息voidcreate(linklist&l)//创建学生信息表shuru(l);//调用输入函数voidsort3(linklist&l)//按房号排序(采用冒泡排序)voidsort2(linklist&l)//按学号排序(采用冒泡排序)voidsort1(linklist&l)//按姓名排序(采用冒泡排序) voidprint1(linklist&l)//打印学生信息voidprint2(linklist&l,intmid)//打印查找到的学生信息 intpanduan1(charch)//判断是否继续查找 intpanduan2(charch)//如果学生不存在,判断是否继续查找 voidchazhao3(linklist&l)//按房号从小到大查找(采用二分查找)voidchazhao2(linklist&l)//按学号从小到大查找(采用二分查找)voidchazhao1(linklist&l)//按姓名从小到大查找(采用二分查找)voidinsert(linklist&l)//按学号从小到大插入该学生voidDelete(linklist&l)//按学号删除该学生调用函数的实现: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; } }}3.3.2操作实现录入学生信息voidshuru(linklistl)//输入学生的信息{ printf("请输入姓名:"); fflush(stdin);//清空输入缓冲区,得到正确的输入数据 gets();//输入一行字符串(姓名)printf("请输入性别:");//hnnn fflush(stdin);//清空输入缓冲区,得到正确的输入数据、、、 gets(stud.sex);//输入一行字符串(性别)、、、、 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");}显示学生信息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);}学生信息插入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");}学生信息排序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; }学生信息查找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; }删除操作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"); }3.4源程序代码#include<stdio.h>//c语言头文件,包含一些函数,如scanf,printfK可直接调用#include<stdlib.h>//定义五种类型、一些宏和通用工具函数。类型例如size_等#include<string.h>//包含字符串处理函数的头文件#defineN40//线性表存储空间的初始分配量#defineincrease10//线性表存储空间的分配量增量intf,t=0;//定义全局变量typedefstruct//定义新结构{ charname[20];charsex[20]; intnum;//学号和房号都为整型 introom;}stu;stustud;typedefstruct//二叉树的二叉链表存储表示{ intlength;//当前长度 stu*elem;//存储空间基址 intlistsize;//当前分配的存储容量}linklist;voidinit(linklist&l)//线性表初始化{ l.length=0; l.elem=(stu*)malloc(N*sizeof(stu));//将malloc返回的内存空间地址转成大小为结构体stu的大小的空间,再赋给L.elem. 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("请输入性别:");//输出文字 fflush(stdin);//清空输入缓冲区,得到正确的输入数据、、、 gets(stud.sex);//输入一行字符串(性别)、、、、 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");//调用系统命令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"); }voidmain()//主函数{ 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();

温馨提示

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

评论

0/150

提交评论