版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
唐 山 学 院 数据结构 课 程 设 计题系班目(部)级宿舍管理查询系统设计与实现 计算机科学与技术系 姓名 学号 指导教师 2012年1月4日至1月13日共2周2012年1月13 日1引言高校学生宿舍信息管理系统的主要功能包括:可以对学生宿舍信息的查询功能,包括快速查询功能和分类查询功能:对学生宿舍的录入功能,修改功能,删除功能和统计功能。通过系统上述功能实现宿舍管理部门对学生宿舍信息的日常管理,即方便宿舍管理人员及时全面地掌握学生住宿情况及宿舍分配情况:为用户(管理用户和一般用户,如学生提供一些简单的数据查询并输入各种信息等在实现检索迅速和查找方便同时,进行宿舍管理。该程序是由C语言编写的一个宿舍管理查询软件,其主要功能是实现对学生信息的增加、删除、修改、查询、排序、储存、加载。其中查询可以分别以姓名、学号、寝室号、为关键字查询学生信息。排序可以分别以学号和寝室号为关键字进行从小到大的排序。2问题分析(1)该问题采用主要顺序线性表的查找和排序解决。(2)宿舍管理系统中存在先后顺序,因此采用线性表。为了加快查找速率采用了顺序查找和折半查找,因此需要将其按学号或宿舍号进行排序,所以采用了顺序表。通过上述分析我采用顺序线性表储存结构,其结构如下:typedefstruct{charS_name[31]; /学生姓名charS_number[16]; /学生学号intD_number; /学生所在寝室的宿舍号intTotal; /学生总数}Student[M],St;3总体设计此系统是由添加模块、修改模块、删除模块、判断模块、排序模块、查询模块、显示模块、保存模块和加载模块九个模块构成的。其中添加模块中运用了判断学号是否重复和宿舍人数是否已满函数,排序模块分为以姓名为关键字排序、以学号为关键字排序和以寝室号为关键字排序三个功能,查询模块分为按姓名查询、按学号查询和按寝室号查询三个功能,在对信息进行添加,修改,删除,排序,保存和加载之后可以用显示函数进行显示。模块结构图和总体流程图(如图3-1:宿宿舍管理查询系统添加模块修改模块删除模块判断模块排序模块提示保存模块查找模块显示模块储存模块加载模块按姓名按学号按学号按寝室号按姓名按寝室号图3-1系统模块结构图(1)添加学生信息:按照从先到后的顺序输入学生姓名(30个字符以内,学生学号(15个字符以内),学生学号(15个字符以内),宿舍号码(整数,范围在0-即可将该学生信息添加到系统中。(2修改学生信息输入要修改的学生姓(30个字符以内修改后学生的学(15个字符以内,修改后学生的宿舍号(整数,范围在0-32767,即可修改该学生信息。(3)删除学生信息:输入要删除的学生的姓名(30个字符以内,可删除该学生信息。(4)判断学号是否重复和判断宿舍人数是否已满:将输入学生的学号和宿舍号与表中原有的学生的学号和宿舍号进行比较,判断学号是否重复和该宿舍人数是否已满。(5)以姓名为关键字排序:添加学生信息之后,以学生姓名首字母的先后顺序排序。(6)以学号为关键字排序:添加学生信息之后,以学号从大到小排序。(7)以寝室号为关键字排序:添加学生信息之后,以寝室号大小排序。(8)以姓名查询学生信息:输入要查找的学生的姓名(30个字符以内),可显示所找学生信息。(9)以学号查找学生信息:输入要查找的学生的学号(15个字符以内),可显示所找学生信息。(10)以寝室号查询学生信息:输入寝室号(整数,范围在0-32767),可显示所找学生信息。(11)储存学生信息:可将录入的学生信息储存起来。(12)加载学生信息:可将学生信息加载到系统中。(13)提示学生信息是否保存:判断操作后的学生信息是否以保存,如果没有保存则显示提示信息。4.1添加模块4.1.1设计思路
4详细设计添加学生信息函数:在学生信息表中的最后一位插入要添加的学生信息,输入学生姓名,学生学号并判断是否重复,学生宿舍号并判断该宿舍人数是否已满,学生系别,学生班级,学生手机号。4.1.2流程图添加学生信息函数的流程图(如图4-1:开始输输入“1”学学号是否重复NN输入宿舍号宿舍人数是否已满N输入学号输入系别级和手机号Y添添加成功结束4.2修改模块4.2.1设计思路
图4-1添加流程图修改学生信息:输入要修改的学生的学号与表中的学生的学号进行比较,找到与其相等的学生学号。再输入此学号学生的信息:学生姓名,学生学号(判断是否重复,学生宿舍号(该宿舍人数是否已满,学生系别,学生班级,学生手机号。4.2.2流程图修改学生信息函数的流程图如下(如图4-2:是否存在Y输入姓名是否存在Y输入姓名输入学生新信息:姓名输入输入“2”N学号是否重复学号是否重复YN输入新学生学号输入新宿舍号判判断宿舍是否已满N修改成功修改成功结束4.3删除模块4.3.1设计思路
图4-2修改流程图删除学生信息:输入要删除的学生的姓名,找到与之相同的学生,然后将其后面的学生信息前移一个位置,再将学生总数减一。4.3.2流程图删除函数流程图(如图4-3:开始输入所要删除的学生姓名输入所要删除的学生姓名是否存在是否存在NY将后边的数前移删除成功删除成功结束4.4判断模块4.4.1设计思路
图4-3删除模块流程图判断学生学号是否重复函数:将输入的学生学号与表中的学生的学号一一比较(跳过自身与自身的比较)是否相等,若有相等的则说明重复,否则则没有。判断宿舍人数是否已满函数:将输入的学生的宿舍号与表中前面(Total-1)个学生的宿舍号进行比较是否相等,每相等一次,使时,说明该宿舍已满,否则没有满。4.4.2流程图判断学号是否重复函数流程图(如图4-4:开始输入学号比较是否相等输入学号比较是否相等N录入成功图4-4判断函数流程图结束判断宿舍人数是否已满(如图4-5:开始输入宿舍号比较是否四次相等输入宿舍号比较是否四次相等N录入成功结束图4-5判断函数流程图4.5显示模块显示所有学生信息:从第一个学生开始一直到最后一个学生依次输出学生的信息。4.6排序模块4.6.1设计思路以姓名为关键字排序(冒泡法):从第一个学生开始与后边的学生姓名的首字母比较,一直到最后一个学生分别与后面的比较。当此学生姓名首字母在后面学生姓名首字母之后时,两学生的位置交换。以学号为关键字排序和以宿舍号为关键字排(冒泡法从第一个学生开始与后面学生学号(或宿舍号)比较,直到最后一个学生。当前面学生的学号(或宿舍号)大于后面学生学号(或宿舍号)时,进行交换,否则不交换。4.6.2流程图冒泡排序流程图(如图4-6:开始下一个数据下一个数据是否到尾YN前一个字符是否大于后一个字符Y交换位置排序完成结束图4-6排序模块流程图4.7查询模块4.7.1设计思路以姓名为关键字查询函数:输入要查找的学生姓名,从第一个学生开始比较,当相等时,输出该学生信息,标记已找到该学生信息,若没有查找到,标记没有找到该学生信息。4.7.2流程图以姓名为关键字查找(如图4-7:开始下一个,下一个,是否到尾YN比较是否相同Y N输入要查找学生姓名输出此学生信息查找完成结束图4-7按姓名查询流程图4.8录入模块4.8.1设计思路以学号为关键字查询:定义折半查找所需的变量mid=(low+high)/2,输入要查找的学生的学号,与第mid个学生的学号比较:当等于时,输出该学生信息;当大于时,low=mid+1,继续折半,比较;当小于时,high=mid-1,继续折半,比较。若low>high时则没有查找到该学生信息。4.8.2流程图以学号为关键字查找流程图(如图4-8:输出该学生信息是否在这些学号之间Y输出该学生信息是否在这些学号之间Y N折半是否成功YNN比较是否相等Y按学号从小到大排序查找失败输入要查找的学生学号输入要查找的学生学号结束4.9查询模块4.9.1设计思路
图4-8按学号查询函数流程图以寝室号为关键字查询(折半查找):定义折半查找所需的变量low=1,high=Total,mid=(low+high)/2,将输入的学生的学号与第mid个学生的学号比较:相等时,输出该学生信息,同时利用两个循环对所查找的寝室分别向前向后查找符合要求的寝室号的学生信息;大于时,low=mid+1,折半,比较;小于时,high=mid-1,折半,比较。4.9.2流程图以寝室号为关键字查询函数流程图(如图4-9:开始输入要查找的学生寝室号输入要查找的学生寝室号输出该学生信息输出该学生信息该寝室号是否在其范围内Y折半是否成功YN判断是否相等NY按寝室号大小排序查找失败结束图4-9按寝室号查询函数流程图4.10储存模块4.10.1设计思路储存函数:打开文件并且正确写入数据时保存。4.10.2流程图储存函数的流程图(如图4-10:开始储存成功储存成功是否成功打开文件NY是否成功写入数据NY结束储存失败图4-10储存模块流程图4.11加载模块4.11.1设计思路加载函数:打开文件后读取数据,则加载成功,表中个数减一。4.11.2流程图加载函数流程图(如图4-11:开始加载成功Y加载成功Y是否成功打开文件NY是否读取成功NY加载失败图4-11加载模块流程图4.12提示保存模块4.12.1设计思路退出前判断是否保存函数:若标志变量已变,则提醒保存,允许保存后,执行储存函数。否则,不保存。4.12.2流程图退出前提示是否保存函数流程图(如图4-12:开始储存数据判断数据是否储存数据判断数据是否已变NY选择是否保存NY退出程序4.13选择模块4.13.1设计思路
图4-12提示保存函数流程图主函数:定义变量,选择要实现的功能。4.13.2流程图主函数流程图(如图4-13:开始输出功能菜单输出功能菜单选选择是否正确YN选择要实现的功能执行该功能图4-13选择模块流程图5运行测试(1)测试结果对功能1(添加学生信息)的测试:向程序中添加五条记录学生姓名学生学号宿舍号手机号码系别班级(如图5-2)d206315032…jiben10-2(如图5-3)f203315032…jiben10-2(如图5-4)k215315032…jiben10-2(如图5-5)j212315032…jiben10-2(如图5-6)n216615032…jiben10-2图5-1菜单界面图图5-2添加界面图图5-3添加界面图图5-4添加界面图图5-5添加界面图图5-6添加界面图对功能2(修改学生信息)的测试:修改学号为203的学生信息输入信息:学生姓名:f 学生学号:203 宿舍号:6手机号码:15032… 系别:jiben 班级:10-2(如图5-7)图5-7修改界面图对功能3(删除学生信息)的测试:删除学生n的信息(如图5-8)图5-8删除界面图对功能4(以姓名查找学生信息)的测试:查找学生f的信息(如图5-9)图5-9按姓名查找界面图对功能5(以学号查询学生信息)的测试:查找学号为212的学生信息(图5-10)图5-10按学号查找界面图对功能6(按寝室号查询学生信息)的测试:查找3号宿舍学生信息(如图5-11)图5-11按寝室号查询界面图对功能7(按寝室号从大到小排序)和功能9(显示所有学生信息)的测试(如图5-12和图图5-12按寝室号排序界面图图5-13显示结果界面图对功能8(按学号大小排序)的测试(如图5-14和图5-15:图5-14按学号排序界面图图5-15显示结果界面图对功能12(按姓名排序)的测试(如图5-16和图5-17:图5-16按姓名排序界面图图5-17显示结果界面图对功能10(保存数据)的测试(如图5-18:图5-18保存界面图对功能11(加载数据)的测试(如图5-19:图5-19加载界面图对功能13(退出程序)的测试(如图5-20):图5-20退出程序界面图当数据改变后为执行保存操作而要退出程序时(如图5-21):图5-21提醒是否保存界面图(2)时间复杂度分析n²logn
判断学号是否重复函数S_number_Judge(StudentS,intt);时间复杂度T(n)=n判断宿舍人数是否已满函数D_number_Judge(StudentS,intt);时间复杂度T(n)=n添加学生信息函数Add(StudentS); 时间复杂度T(n)=n删除学生信息函数Delete(StudentS);时间复杂度T(n)=n修改学生信息函数Modify(StudentS);时间复杂度T(n)=n显示学生信息函数Display_All(StudentS);时间复杂度T(n)=n按照学号从小到大排序函数Order_S_number(StudentS);时间复杂度T(n)=n²按照寝室号从小到大排序函数Order_D_number(StudentS);时间复杂度T(n)=n²按照姓名首字母的先后顺序排序函数Order_N_name(StudentS);时间复杂度T(n)=按照姓名查找学生信息函数Search_S_name(StudentS);时间复杂度T(n)=n按照学生学号查找学生信息函数Search_S_number(StudentS);时间复杂度T(n)=按照寝室号查找学生信息函数Search_D_number(StudentS);时间复杂度T(n)=logn(3)调试过程中对所遇到问题的分析问题主要出现在按寝室号查找函数Search_D_number(StudentS),加载函数Load(StudentS)和修改学生信息函数Modify(StudentS)上。在调试按寝室号查找函数Search_D_number(StudentS)时,由于一个寝室肯能居住多个学生,所以在找到所查找的寝室号时,必需利用两个循环对所查找的寝室分别向前向后查找符合要求的寝室号的学生信息。在调试加载函数Load(StudentS)时,由于程序每次都会从文件中多读一条记录,即乱码,所以在记录加载完毕之后,必需对记录总数减一。在调试修改学生信息函数Modify(StudentS)时,由于修改的学生学号不能与其他学生重复,因此需要用函数S_number_Judge(StudentS,intt)进行判断学号是否重复,然而若不修改该学生学号仍然输入原来的学号时会有“输入学生学号重复,请重新输入“的提示,因此需要在函数S_number_Judge(StudentS,intt)的if(4)算法的改进设想在排序函数上,可将冒泡排序改为效率更高的的算法:如堆排序,归并排序,基排序等。在查找函数上可将折半查找改为哈希查找法等。6总结通过这次数据结构的课程设计,我从中学到了很多,充分利用了这几天的时间进行程序的编程报告的整理和总结,感觉很满足。许多曾经不懂得知识有了较深刻的了解,并且熟练地掌握了一些编写程序的方法。(1)收获:1)一个函数既能调用它本身也能调用其他函数,而在C语言程序中源文件中包含2)以前不知道如何把各个函数编排在一起,不能形成一个整体的模块,现在通过实践和调试能组装好各个模块,使它们实现各自的功能。(2)程序的不足:按姓名、学号和寝室号排序是用冒泡法排的,程序的效率不高,当有较多学生信息时,程序的执行速度会较慢。参考文献[1]严蔚敏,吴伟民.数据结构.北京:清华大学出版社,2008.[2]苏仕华.数据结构课程设计.北京:机械工业出版社,2010.[3].滕国文.数据结构课程设计.北京:清华大学出版社,2010.附录S_number_Judge(StudentS,intt)初始条件:表S已存在操作结果:判断所输入学号在表中是否已存在Add(StudentS)初始条件:表S已存在操作结果:向表中插入一个记录Alter(StudentS)初始条件:表S已存在操作结果:修改表S中的一条记录Delete(StudentS)初始条件:表S已存在操作结果:删除S中的记录Display_All(StudentS)初始条件:表S已存在操作结果:显示表中所有学生的信息Sort_D_number(StudentS)初始条件:表S已存在操作结果:表中记录按寝室号从小到大排序Sort_S_number(StudentS)初始条件:表S已存在操作结果:表中记录按学号从小到大排序Query_S_name(StudentS)初始条件:表S已存在操作结果:根据所输入的学生姓名显示出该学生的信息Query_S_number(StudentS)初始条件:表S已存在操作结果:根据输入的学号显示出该学生的信息Query_D_number(StudentS)初始条件:表S已存在操作结果:根据所输入的寝室号显示出该寝室的学生的信息Save(StudentS)初始条件:表S已存在操作结果:将表中数据保存到文件中去Load(StudentS)初始条件:表S已存在操作结果:将文件中数据加载到程序中Judge_Save(inti,StudentS)初始条件:表S已存在操作结果:表中数据改变后没有及时保存在程序中时提醒用户是否保存程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#defineM100intsave=0; /用来判断是否已保存操作/定义一个存储学生相关信息的结构体typedefstruct{charS_name[31]; /学生姓名charS_number[16];/学生学号charS_xibie[31],S_banji[31],P_number[15];/学生系别,班级intD_number; /学生所在寝室的宿舍号,电话号码intTotal; /学生总数}Student[M],St;/判断学号是否与表中所存学号重复voidS_number_Judge(StudentS,intt){inti,j=0;for(i=0;i<=(S->Total)-1;i++)if(strcmp(S[i].S_number,S[t].S_number)==0&&(i!=t)){printf("学号输入失败,该学号已存在,请重新输入学号!;printf("请输入学生的学号(15个字符以内):");scanf("%s",S[t].S_number);getchar();j=0;}}/判断宿舍人数是否已满voidD_number_Judge(StudentS,intt){inti,j=0;for(i=0;i<=(S->Total)-1;i++){if(S[i].D_number==S[t].D_number)j++;while(j>=4){printf("宿舍号输入失败,该宿舍人数已满,请重新输入宿舍号!;printf("请输入学生的宿舍号(整数");scanf("%d",&S[t].D_number);j=0;}}}/添加学生信息函数voidAdd(StudentS){++(S->Total);printf("请输入学生姓名(30个字符以内):");scanf("%s",S[S->Total].S_name);getchar();/获取换行符printf("请输入学生的学号(15个字符以内):");scanf("%s",S[S->Total].S_number);getchar();S_number_Judge(S,S->Total);/判断输入的学号是否与表中所存在的学号重复printf("请输入宿舍号码:");scanf("%d",&S[S->Total].D_number);getchar();D_number_Judge(S,S->Total);/判断所安排宿舍人数是否已满printf("请输入学生系别(30个字符以内):");scanf("%s",S[S->Total].S_xibie);getchar();printf("请输入学生班级:");scanf("%s",S[S->Total].S_banji);getchar();printf("请输入学生电话号码:");scanf("%s",S[S->Total].P_number);getchar();save=1;printf("添加成功!;}/修改学生信息函数voidModify(StudentS){inti;intm=0;/用来判断表中是否存在所要修改的学生的信息charnumber[18],ch[16]="0";printf("请输入你要修改学生的学号:");scanf("%s",number);getchar();for(i=1;i<=S->Total;i++)if(strcmp(S[i].S_number,number)==0)m=i;if(!m)printf("你所要修改的学生信息在表中不存在!\n");else{}
printf("新信息如下:;printf("请输入学生姓名(30个字符以内):");scanf("%s",S[m].S_name);getchar();printf("请输入学生的学号(15个字符以内):");scanf("%s",S[m].S_number);getchar();S_number_Judge(S,m);/判断学号是否重复printf("请输入宿舍号:");scanf("%d",&S[m].D_number);getchar();D_number_Judge(S,S[m].D_number);/判断该宿舍人数是否已满printf("请输入学生系别:");scanf("%s",S[m].S_xibie);getchar();printf("请输入学生班级:");scanf("%s",S[m].S_banji);getchar();printf("请输入学生手机号码:");scanf("%s",S[m].P_number);getchar();save=1;printf("修改成功!;putchar('\n');}/删除学生信息voidDelete(StudentS){inti,j;intflag=0; /用来判断表中是否存在所要删除的学生的信息charname[20];printf("请输入你要删除学生的姓名:");scanf("%s",name);getchar();for(i=1;i<=S->Total;i++)if(strcmp(S[i].S_name,name)==0)flag=i;if(!flag)printf("你所要删除的学生在表中不存在!");else{
for(i=flag;i<S->Total;i++){j=i+1;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);strcpy(S[i].S_xibie,S[j].S_xibie);strcpy(S[i].S_banji,S[j].S_banji);strcpy(S[i].P_number,S[j].P_number);S[i].D_number=S[j].D_number;}(S->Total)--;save=1;printf("删除成功!");}printf("\n\n");}/显示所有学生信息函数voidDisplay_All(StudentS){inti;printf("全体学生信息如下:;printf("学生姓名 学生学号 宿舍号 手机号码 系别 班级;for(i=1;i<=S->Total;i++)printf("%-12s%-15s%-8d%-19s%-10s%-10s\n",S[i].S_name,S[i].S_number,S[i].D_number,S[i].P_number,S[i].S_xibie,S[i].S_banji);putchar('\n\n');}/按姓名排序(冒泡法)voidOrder_N_name(StudentS){inti,j,t;charname[30],ph[15];charnumber[15],xibie[31],banji[31];for(i=1;i<=S->Total;i++)for(j=i;j<=S->Total;j++)if(strcmp(S[i].S_name,S[j].S_name)>0){strcpy(name,S[i].S_name);strcpy(number,S[i].S_number);strcpy(ph,S[i].P_number);strcpy(xibie,S[i].S_xibie);strcpy(banji,S[i].S_banji);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);strcpy(S[i].P_number,S[j].P_number);strcpy(S[i].S_xibie,S[j].S_xibie);strcpy(S[i].S_banji,S[j].S_banji);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);strcpy(S[j].P_number,ph);strcpy(S[j].S_xibie,xibie);strcpy(S[j].S_banji,banji);S[j].D_number=t;}}/排序函数按照寝室号从小到大排序(冒泡法)voidOrder_D_number(StudentS){inti,j,t;charname[30],ph[15];charnumber[15],xibie[31],banji[31];for(i=1;i<=S->Total;i++)for(j=i+1;j<=S->Total;j++)if(S[i].D_number>S[j].D_number){strcpy(name,S[i].S_name);strcpy(number,S[i].S_number);strcpy(ph,S[i].P_number);strcpy(xibie,S[i].S_xibie);strcpy(banji,S[i].S_banji);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);strcpy(S[i].P_number,S[j].P_number);strcpy(S[i].S_xibie,S[j].S_xibie);strcpy(S[i].S_banji,S[j].S_banji);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);strcpy(S[j].P_number,ph);strcpy(S[j].S_xibie,xibie);strcpy(S[j].S_banji,banji);S[j].D_number=t;}}/排序函数按照学号从小到大排序(冒泡法)voidOrder_S_number(StudentS){inti,j,t;charname[30],ph[15];charnumber[15],xibie[31],banji[31];for(i=1;i<=S->Total;i++)for(j=i;j<=S->Total;j++)if(strcmp(S[i].S_number,S[j].S_number)>0){strcpy(name,S[i].S_name);strcpy(number,S[i].S_number);strcpy(ph,S[i].P_number);strcpy(xibie,S[i].S_xibie);strcpy(banji,S[i].S_banji);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);strcpy(S[i].P_number,S[j].P_number);strcpy(S[i].S_xibie,S[j].S_xibie);strcpy(S[i].S_banji,S[j].S_banji);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);strcpy(S[j].P_number,ph);strcpy(S[j].S_xibie,xibie);strcpy(S[j].S_banji,banji);S[j].D_number=t;}}/查询函数以姓名为关键字进行查询(顺序查找)voidSearch_S_name(StudentS){inti,j=0;charname[31];printf("请输入你要查找的学生的姓名(30个字符以内):");scanf("%s",name);getchar();printf("所查找学生信息如下:;printf("学生姓名 学生学号 宿舍号 手机号码 系别 班级;for(i=1;i<=S->Total;i++)if(strcmp(name,S[i].S_name)==0){printf("%-12s%-15s%-8d%-19s%-10s%-10s\n",S[i].S_name,S[i].S_number,S[i].D_number,S[i].P_number,S[i].S_xibie,S[i].S_banji);j=1;if(!j)}
}printf("\n查找失败,表中不存在该学生的信息!;/查询函数以学号为关键字进行查询(折半查找)voidSearch_S_number(StudentS){intj,low,high,mid;charnumber[15];j=0;low=1;high=S->Total;printf("请输入你要查找学生的学号:");scanf("%s",number);getchar();Order_S_number(S); /将表中原数据按照学号从小到大排序printf("所查找学生信息如下:;printf("学生姓名 学生学号 宿舍号 手机号码 系别 班级;if(strcmp(number,S[1].S_number)>=0&&strcmp(number,S[S->Total].S_number)<=0){while(low<=high){mid=(low+high);if(strcmp(number,S[mid].S_number)==0){printf("%-12s%-15s%-8d%-19s%-10s%-10s\n",S[mid].S_name,S[mid].S_number,S[mid].D_number,S[mid].P_number,S[mid].S_xibie,S[mid].S_banji);putchar('\n');j=1;break;}elseif(strcmp(number,S[mid].S_number)>0)low=mid+1;else if(strcmp(number,S[mid].S_number)<0)high=mid-1;}}if(!j)}
printf("\n查找失败,表中不存在该学生的信息!;/查询函数以寝室号为关键字进行查询(折半查找)voidSearch_D_number(StudentS){inti,j,m,n,low,high,mid;j=0;low=1;high=S->Total;printf("请输入你要查询的寝室号:");scanf("%d",&i);getchar();Order_D_number(S);/将表中原数据按照寝室号从小到大排序printf("所查找寝室信息如下:;printf("学生姓名 学生学号 宿舍号 手机号码 系别 班级;if(i>=S[1].D_number&&i<=S[S->Total].D_number){while(low<=high){mid=(low+high);if(i==S[mid].D_number){for(m=mid;m<=S->Total;m++){if(S[m].D_number==i)printf("%-12s%-15s%-8d%-19s%-10s%-10s\n",S[m].S_name,S[m].S_number,S[m].D_number,S[m].P_number,S[m].S_xibie,S[m].S_banji);}for(n=mid-1;n>=1;n--){if(S[n].D_number==i)printf("%-12s%-15s%-8d%-19s%-10s%-10s\n",S[n].S_name,S[n].S_number,S[n].D_number,S[n].P_number,S[n].S_xibie,S[n].S_banji);}j=1;putchar('\n');break;}elseif(i>S[mid].D_number)low=mid+1;}}if(!j)
else
high=mid-1;printf("\n查找失败,表中不存在该寝室的信息!;}/存储函数voidSave(StudentS){StNum;inti;intj=0,k=0;/判断存储是否成功FILE*fp;if((fp=fopen("file_a","w"))==NULL){printf("打开文件失败!;j=1;exit(0); /结束程序}for(i=1;i<=S->Total;i++)if(fwrite(&S[i],sizeof(Num),1,fp)!=1)/是否已写入数据{printf("数据写入错误;k=1;exit(0); /结束程序}if(!j&&!k){printf("数据存储成功!;save=0;}fclose(fp);/关闭文件}/加载记录函数voidLoad(StudentS){St Num;FILE*fp;if((fp=fopen("file_a","r"))==NULL)/打开文件{printf("打开文件失败!;exit(0);}while(!feof(fp))/若文件没有结束fread(&S[++(S->Total)],sizeof(Num),1,fp);/读取数据fclose(fp);/关闭文件printf("加载数据成功!;(S->Total)--; /由于读取问题,表中个数要减去}/退出程序时判断是否保存函数voidJudge_Save(inti,StudentS){charch;if(i){printf("表中数据已改变,是否保存后再退出(Ylse)?:");ch=getchar();getchar();if(ch=='Y')Save(S);else}}
exit(0);/菜单voidMenu(){/菜单printf(" 宿舍管理;printf("************************************* 菜 单*************************************\n");printf("1.添加学生信息 |7.按照寝室号从小到大排序;printf("2.修改学生信息 |8.按照学号从小到大排序\n");printf("3.删除学生信息 |9.显示所有学生的相关信息;printf("4.以姓名查询学生信息 |10.保存操作;printf("5.以学号查询学生信息 |11.加载记录\n");printf("6.以寝室号查询该寝室中的全部学生信息|13.退出程序;printf("12.按照姓名排序;printf("******************************************************************************\n");}voidmain(){inti;StudentS;S->Total=0;do{Menu();printf("请选择所要实现的功能(请输入0-13中的任意一个数字):");scanf("%d",&i);getchar(); /获取换行符putchar('\n');switch(i){case1:Add(S);break;case2:Modify(S);break;case3:Delete(S);break;case4:Search_S_name(S);break;case5:Search_S_number(S);break;case6:Search_D_number(S);break;case7:Order_D_number(S);printf("排序完成!;break;case8:Order_S_number(S);printf("排序完成!;break;case9:Display_All(S);break;case10:Save(S);break;case11:Load(S);break;case12:Order_N_name(S);printf("排序完成!;break;case13:Judge_Save(save,S);break;default:printf("选择错误:请在选项到之间选择!;break;}}while(i!=13);}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026化工磁力泵厂家哪家好?靠谱的生产厂家选型指南
- 3KW馈能型电力电子负载的研制:技术、设计与应用探索
- 3DOM含铁尖晶石催化剂:合成路径、催化特性及应用潜力探究
- 3-DES算法赋能列控系统车地安全通信的深度剖析与实践
- 2195铝锂合金焊接工艺与接头组织性能的深度剖析
- 2006年度我国上市公司资产减值准备行为的特征剖析与深度洞察
- 2026年药店验收人员试题及答案
- 某工程防护地面沉降制度
- 输血技术考试题及答案
- 清水混凝土施工方案-施工技术方案
- 2026年甘肃庆阳宁县直事业单位选聘24人笔试模拟试题及答案详解
- 2026年压力容器考试题库及答案
- 2026年山西省运城市重点学校初一入学数学分班考试试题及答案
- 2026四川省水电投资经营集团有限公司所属电力公司员工招聘5人备考题库含答案详解(精练)
- 2026年江苏省高考地理试卷(含答案及解析)
- 计算机行业2026年投资策略分析报告:迈向 经济新时代
- 2026年上海市中考数学试题【含答案解析】
- cnas-cl01-2018检验和校准实验室能力认可准则培训
- 早期胃癌内镜切除术后追加外科手术中国专家共识(2025版)
- 2026年全国新高考2卷英语试卷(含答案及解析)+听力音频及听力原文
- 清风沐初心 廉洁伴我行-新时代廉洁教育专题课件
评论
0/150
提交评论