您好,欢迎访问三七文档
课程设计报告一、需求分析该程序为学生宿舍管理系统。设计内容:(1)输入记录并建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)(2)显示记录;(3)查找记录,用二分法实现按姓名、学号、房号查询;(4)打印任一查询结果;(5)删除记录(6)能够实现连续操作。分析:1.程序采用交互工作方式,也就是说要有一个人性化的操作界面。将每一种操作赋给一个数字,通过输入不同的数字来实现不同的操作。这样这样使人一看就能明白怎样实现不同的操作。全使用提示选择方式,只需要输入你要使用方式的代号即可。2.系统本无任何信息数据,要建立数据文件,需开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中。3.录入或修改:录入或修改某学生的住宿信息;建立相应的录入和修改函数,然后在主函数中调用,从而实现录入或修改某学生的住宿信息。4.排序和查询:本系统按关键字(姓名、学号、房号)进行冒泡排序,采用二分查找方式分别实现按关键字(姓名、学号、房号)查询功能;对不同的关键字建立不同的函数,在函数中调用,通过调用不同的函数来实现不同关键字的查询。统计纪录中的所有纪录的个数,当添加一个纪录时加一,当删除一个纪录时减一。然后在主函数中打印出来,从而实现纪录数据的统计。5.另外,为了完善系统,我们又添加了删除功能和退出功能。二、概要设计1.定义了一个结构体来储存学生信息:typedefstruct{charS_name[31];//学生姓名charS_number[16];//学生学号charsex[8];//性别intD_number;//学生所在寝室的宿舍号intTotal;//学生总数}Student[M],St;2.本程序所包含的15个函数为:(1).主函数main();(2).菜单函数Menu();(3).判断学号是否重复函数S_number_Judge(StudentS,intt);(4).添加学生信息函数Add(StudentS);(5).修改学生信息函数Alter(StudentS);(6).删除学生信息函数Delete(StudentS);(7).显示所有学生信息函数Display_All(StudentS);(8).按照寝室号从小到大排序函数Sort_D_number(StudentS);(9).按姓名从小到大排序函数Sort_S_name(StudentS)(10).按照学号从小到大排序函数Sort_S_number(StudentS);(11).根据学生姓名查找函数Query_S_name(StudentS);(12).根据学生学号查找函数Query_S_number(StudentS);(13).根据寝室号查找函数Query_D_number(StudentS)(14).存储函数Save(StudentS);(15).加载函数Load(StudentS);(16).判断在退出程序时是否保存函数Judge_Save(inti,StudentS);3.函数间关系:利用主函数调用其他的各个函数。添加数据纪录函数Add(),删除数据信息函数Delete(),修改函数Alter()这些函数都是在同一等级上的函数,是平行关系。按宿舍号,姓名,学号排序函数Sort_D_number(),Sort_S_name(),Sort_S_numbe();这些函数都是排序函数中的子函数,他们之间是平行的关系。按宿舍号,姓名,学号查询函数Query_D_number(),Query_S_name(),Query_D_number(),是查询函数的子函数,他们之间是平行关系。三、详细设计#includestdio.h#includestdlib.h#includestring.h#defineM100intdirty=0;//用来判断是否已保存操作//定义一个存储学生相关信息的结构体typedefstruct{charS_name[31];//学生姓名charS_number[16];//学生学号charS_sex[15];//学生性别intD_number;//学生所在寝室的宿舍号intTotal;//学生总数}Student[M],St;voidMenu();voidSort_S_number(S);//判断学号是否与表中所存学号重复voidS_number_Judge(StudentS,intt){inti;for(i=1;i=(S-Total)-1;i++)while(strcmp(S[i].S_number,S[t].S_number)==0){printf(学号输入失败,该学号已存在,请重新输入学号!\n);printf(请输入学生的学号(15个字符以内):);scanf(%s,S[t].S_number);getchar();i=1;}}//添加学生信息函数voidAdd(StudentS){charch;printf(请输入学生的学号(15个字符以内):);scanf(%s,S[S-Total].S_number);getchar();printf(请输入学生姓名(30个字符以内):);scanf(%s,S[++(S-Total)].S_name);getchar();printf(请输入学生的性别:);scanf(%s,S[S-Total].S_sex);S_number_Judge(S,S-Total);//判断输入的学号是否与表中所存在的学号重复printf(请输入宿舍号码:);scanf(%d,&S[S-Total].D_number);getchar();dirty=1;printf(添加成功!\n\n);printf(是否继续添加学生信息?请输入N(n)或者Y(y):);ch=getchar();if(ch=='y'||ch=='Y')Add(S);elseMenu();}//修改学生信息函数voidAlter(StudentS){inti;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(你所要修改的学生信息在表中不存在!\n);else{printf(新信息如下:\n);printf(请输入学生姓名(30个字符以内):);scanf(%s,S[flag].S_name);getchar();printf(请输入学生的学号(15个字符以内):);scanf(%s,S[flag].S_number);getchar();S_number_Judge(S,flag);printf(请输入学生的性别:);scanf(%s,S[flag].S_sex);printf(请输入宿舍号:);scanf(%d,&S[flag].D_number);getchar();dirty=1;printf(修改成功!\n);}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);S[i].D_number=S[j].D_number;}(S-Total)--;dirty=1;printf(删除成功!);}printf(\n\n);}//显示所有学生信息函数voidDisplay_All(StudentS){inti;printf(\n\n);printf(\n\n);printf(全体学生信息如下:\n);printf(\n);printf(学生姓名学生学号学生性别宿舍号\n);for(i=1;i=S-Total;i++)printf(%s%s%s%d\n,S[i].S_name,S[i].S_number,S[i].S_sex,S[i].D_number);printf(\n\n);}//按姓名排序(冒泡法)voidSort_S_name(StudentS){inti,j,t;charname[30];charnumber[15];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);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);S[j].D_number=t;}printf(\n\n);}//排序函数按照寝室号从小到大排序(冒泡法)voidSort_D_number(StudentS){inti,j,t;charname[30];charnumber[15];for(i=1;i=S-Total;i++)for(j=i;j=S-Total;j++)if(S[i].D_numberS[j].D_number){strcpy(name,S[i].S_name);strcpy(number,S[i].S_number);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);S[j].D_number=t;}}//排序函数按照学号从小到大排序(冒泡法)voidSort_S_number(StudentS){inti,j,t;charname[30];charnumber[15];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);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);S[j].D_number=t;}printf(\n\n);}//查询函数以姓名为关键字进行查询(顺序查找)voidQuery_S_name(StudentS){inti,j=0;charname[31];printf(请输入你要查找的学生的姓名(30个字符以内):);scanf(%s
本文标题:学生宿舍管理系统
链接地址:https://www.777doc.com/doc-6499610 .html