1、一、题目名称:宿舍管理查询软件二、设计目的:进一步掌握和利用 C 语言进行课程设计的能力,理解和运用结构化程设计的思想和方法,熟练掌握条件语句、循环、数组、函数操作,初步掌握开发一个小型实用系统的基本方法,学会高度一个较长程序的基本方法和利用流程图或 N-S 图表示算法,将本课程所学的知识合理地运用于实践当中。了解一些书上没有的函数及使用方法。三、设计分析:1、需求分析为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少不必要的人力、物力和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门开发设计专用系统学生宿舍信息管理系统来进行管理学生宿舍信息,使学生宿
2、舍信息实现标准化的管理和规范化的制度是十分必要的。2、经济可行性分析如今是信息化时代,信息化管理可以使学生宿舍管理更加系统化,全面化,快速化,这样可以为学校带来高效的工作效益和经济效益,开发出本系统可以减少宿舍管理人员人数,而且管理方便,各功能实现迅速,数据有效的管理。这些效益和管理上的便捷远远超过了开发本系统的成本,所以在经济上具有完全的可行性。四、总体设计:根据系统要求,即本系统具有信息的录入,显示,查找,删除,从文件中读入数据、循环写入数据、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。程序总体分九个项目:输入记录、显示记录、按房间号排序并显示、按学号
3、排序并显示、插入一条记录并按学号排序并显示、按姓名查找、删除一条记录、查找并显示一个记录、从文件中读入数据、循环写入数据以及结束程序。五、详细设计:1、系统流程图如图 5-1 所示开始输出界面选择操作选择 1选择 2选择 3选择 4选择 5选择 6选择 7选择 8选择 9选择 0输入记录是是显示记录否否否否否否否否否退出系统结束按床位排序显示按学号排序显示是是是是插入一个记录查找删除记录查找显示记录从文件输入写入文件保存是是是是否图 5-1 系统流程图2、根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录的输入,输入一个数据后提示是否继续输入,直到结束程序为止。输入主菜单如下:输出
4、(“tt学生宿舍管理系统n“); 输出(“tt 1. 输入记录 n“);输出(“tt 2. 显示记录 n“);输出(“tt 4. 按学号排序并显示 n“);输出(“tt 5. 插入一条记录按学号排序并显示 n“);输出(“tt 6. 按姓名查找,删除一条记录 n“);输出(“tt 7 查找并显示一个记录 n“);输出(“tt 8. 从文件中读入数据 n“);输出(“tt 9. 循环写入数据 n“);输出(“tt 0. 结束程序 n“);输出(“ttn“);输出(“tt 请选择您要运行的选项按(0-9):“);将程序编译生成“学生宿舍管理系统.exe” 。运行该文件如图 5-2 所示。图 5-2
5、 输出界面图输入记录采用循环输入while(sign!=n 输入(“tt%s“输出(“tt 床位号:“);输入(“tt%s“,输出(“tt 学号:“);输入(“tt%s“,输出(“tt 姓名:“);输入(“tt%s“,gets(x); /*清除多余的输入*/输出(“tt 是否继续输入?(Y/N)“);输入(“tt%c“, i+;返回(n+i);按照提示选择“1”进行记录的输入如图 5-3 所示:图 5-3 输入记录显示图 按房间号排序采用冒泡排序法。int i,j,*p,*q,s;char t10;for(i=0;i0)比较(t,roomj+1.roomnum);比较(roomj+1.room
6、num,roomj.roomnum);比较(roomj.roomnum,t);比较(t,roomj+1.bednum);比较(roomj+1.bednum,roomj.bednum);比较(roomj.bednum,t);比较(t,roomj+1.num);比较(roomj+1.num,roomj.num);比较(roomj.num,t);比较(t,roomj+1.name);比较(roomj+1.name,roomj.name);比较(roomj.name,t);连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图 5-4 所示。图 5-4 按房间号
7、排序并显示图按学号排序采用冒泡排序法比较(t,roomj+1.bednum);比较(roomj+1.bednum,roomj.bednum);比较(roomj.bednum,t);比较(t,roomj+1.num);比较(roomj+1.num,roomj.num);比较(roomj.num,t);比较(t,roomj+1.name);比较(roomj+1.name,roomj.name);比较(roomj.name,t);显示后提示按任意键继续,选择“4”进行按学号排序并显示,如图 5-5 所示。图 5-5 按学号排序显示图插入记录采用交互式输入:输出(“tt 输入他(她)的姓名:“); 输
8、入(“tt%s“,while(strcmp(roomi.name,s)!=0 /*房间号*/char bednum2; /*床位号*/char num10; /*学号*/char name20; /*姓名*/Student;Student room11000; /*结构体数组变量*/int menu_select() /*菜单函数*/char c;dosystem(“cls“); /*运行前清屏*/printf(“tt学生宿舍管理系统n“); /*菜单选择*/printf(“tt 1. 输入记录 n“);printf(“tt 2. 显示记录 n“);printf(“tt 4. 按学号排序并显示
9、 n“);printf(“tt 5. 插入一条记录按学号排序并显示 n“);printf(“tt 6. 按姓名查找,删除一条记录 n“);printf(“tt 7 查找并显示一个记录 n“);printf(“tt 8. 从文件中读入数据 n“);printf(“tt 9. 循环写入数据 n“);printf(“tt 0. 结束程序 n“);printf(“ttn“);printf(“tt 请选择您要运行的选项按(0-9):“);c=getchar(); /*读入选择*/while(c9);return(c-0); /*返回选择*/int Input(Student room,int n) /*
10、输入若干条记录*/int i=0;char sign,x10; /*x10为清除多余的数据所用*/while(sign!=n /*交互输入*/scanf(“tt%s“printf(“tt 床位号:“);scanf(“tt%s“,printf(“tt 学号:“);scanf(“tt%s“,printf(“tt 姓名:“);scanf(“tt%s“,gets(x); /*清除多余的输入*/printf(“tt 是否继续输入?(Y/N)“);scanf(“tt%c“, /*输入判断*/i+;return(n+i);void Display(Student room,int n) /*显示所有记录*/
11、int i;printf(“tt-n“); /*格式头*/printf(“tt 房间号 床位号 学号 姓名 n“);printf(“tt-n“);for(i=1;i1/*格式*/printf(“tt“);system(“pause“);printf(“tt-n“);printf(“tt“);system(“pause“);void Sort_by_num(Student room,int n) /*按学号排序*/int i,j,*p,*q,s;char t10;for(i=0;i0)strcpy(t,roomj+1.bednum);strcpy(roomj+1.bednum,roomj.bed
12、num);strcpy(roomj.bednum,t);strcpy(t,roomj+1.num);strcpy(roomj+1.num,roomj.num);strcpy(roomj.num,t);strcpy(t,roomj+1.name);strcpy(roomj+1.name,roomj.name);strcpy(roomj.name,t);void Sort_by_roomnum(Student room,int n) /*按房间号排序*/int i,j,*p,*q,s;char t10;for(i=0;i0)strcpy(t,roomj+1.roomnum);strcpy(room
13、j+1.roomnum,roomj.roomnum);strcpy(roomj.roomnum,t);strcpy(t,roomj+1.bednum);strcpy(roomj+1.bednum,roomj.bednum);strcpy(roomj.bednum,t);strcpy(t,roomj+1.num);strcpy(roomj+1.num,roomj.num);strcpy(roomj.num,t);strcpy(t,roomj+1.name);strcpy(roomj+1.name,roomj.name);strcpy(roomj.name,t);int Insert_a_reco
14、rd(Student room,int n) /*插入一条记录*/char x100; /*清除多余输入所用*/printf(“tt 学生房间号:“); /*交互式输入*/scanf(“tt%s“,printf(“tt 学生床位号:“);scanf(“tt%s“,printf(“tt 学生学号:“);scanf(“tt%s“,printf(“tt 学生姓名:“);scanf(“tt%s“,gets(x);n+;Sort_by_num(room,n); /*调用排序函数*/printf(“tt 插入记录成功!n“); /*返回成功信息*/return(n);int Delete_a_record
15、(Student room,int n) /*按姓名查找,删除一条记录*/char s20;int i=0,j;printf(“tt 输入他(她)的姓名:“); /*交互式问寻*/scanf(“%s“,s);while(strcmp(roomi.name,s)!=0 /*查找判断*/if(i=n)printf(“tt 对不起没找到该学生!n“); /*返回失败信息*/return(n);for(j=i;jn-1;j+) /*删除操作*/strcpy(roomj.roomnum,roomj+1.roomnum);strcpy(roomj.bednum,roomj+1.bednum); strcp
16、y(roomj.num,roomj+1.num);strcpy(roomj.name,roomj+1.name);printf(“tt 删除记录成功!n“); /*返回成功信息*/return(n-1);void Query_a_record(Student room,int n) /*查找并显示一个记录*/char s20;int i=0;printf(“tt 输入他(她)的姓名:“); /*交互式输入*/scanf(“tt%s“,while(strcmp(roomi.name,s)!=0 /*查找判断*/if(i=n)printf(“tt 对不起没找到该学生!n“); /*输入失败信息*/
17、return;printf(“tt 他(她)的房间号:%sn“,roomi.roomnum); /*输出该学生信息*/printf(“tt 他(她)的床位号:%sn“,roomi.bednum);printf(“tt 他(她)的学号:%sn“,roomi.num);int AddfromText(Student room,int n) /*从文件中读入数据*/int i=0,num;FILE *fp; /*定义文件指针*/char filename20; /*定义文件名*/printf(“tt 输入文件名:“);scanf(“tt%s“, /*输入文件名*/if(fp=fopen(filena
18、me,“rb“)=NULL) /*打开文件*/printf(“tt 无法打开该文件n“); /*打开失败信息*/printf(“tt“);system(“pause“);return(n);fscanf(fp,“%d“, /*读入总记录量*/while(inum) /*循环读入数据*/ fscanf(fp,“%s%s%s%s“,roomn+i.roomnum,roomn+i.bednum,roomn+i.num,roomn+i.name);i+;n+=num;fclose(fp); /*关闭文件*/printf(“tt 读入成功!n“);printf(“tt“);system(“pause“)
19、;return(n);void WritetoText(Student room,int n) /*将所有记录写入文件*/int i=0;FILE *fp; /*定义文件指针*/char filename100; /*定义文件名*/printf(“tt 循环写入数据n“); /*输入文件名*/printf(“tt 输入文件名:“);scanf(“tt%s“,if(fp=fopen(filename,“w“)=NULL) /*打开文件*/printf(“tt 无法打开该文件n“);system(“pause“);return;fprintf(fp,“%dn“,n); /*循环写入数据*/whil
20、e(in)fprintf(fp,“%-10s%-10s%-10s%-10sn“,roomi.roomnum,roomi.bednum,roomi.num,roomi.name);i+;fclose(fp); /*关闭文件*/printf(“写入成功!n“); /*返回成功信息*/void main() /*主函数*/int n=0;for(;)switch(menu_select() /*选择判断*/ case 1:printf(“tt 输入记录n“); /*输入若干条记录*/n=Input(room1,n);break;case 2:printf(“tt 显示记录n“); /*显示所有记录*
21、/Display(room1,n);break;case 3:printf(“tt 按房间号排序并显示n“);Sort_by_roomnum(room1,n); /*按房间号排序*/printf(“tt 排序成功!n“);Display(room1,n);printf(“tt“);break;case 4:printf(“tt 按学号排序并显示n“);Sort_by_num(room1,n); /*按学号排序*/printf(“ttt 排序成功!n“);Display(room1,n);printf(“tt“);break; case 5:printf(“tt 插入一条记录按学号排序并显示n“
22、);n=Insert_a_record(room1,n); /*插入一条记录*/Display(room1,n);printf(“tt“);break;case 6:printf(“tt 按姓名查找,删除一条记录n“);n=Delete_a_record(room1,n); /*按姓名查找,删除一条记录*/printf(“tt“);system(“pause“);break;case 7:printf(“tt 查找并显示一个记录n“);Query_a_record(room1,n); /*查找并显示一个记录*/printf(“tt“);system(“pause“);break;case 8:printf(“tt 从文件中读入数据n“);AddfromText(room1,n); /*从文件中读入数据*/printf(“tt“);system(“pause“);break;case 9:printf(“tt 循环写入数据n“);WritetoText(room1,n); /*循环写入数据*/printf(“tt“);system(“pause“);break;case 0:printf(“tt 谢谢使用,祝您好运,再见!n“); /*结束程序*/printf(“tt“);system(“pause“);exit(0);