C语言:学生宿舍管理系统(难度系数:3级)(附加清屏操作)设计一个学生宿舍管理程序。
该程序应该具有以下功能:(1)录入学生宿舍信息;(2)修改、删除学生宿舍信息;(3)统计当前未住学生宿舍的个数并显示宿舍编号;(4)统计当前空闲的男生、女生床位数;(5)按宿舍编号由小到大显示已住学生的宿舍信息;(6)分别显示男生、女生有空床位的宿舍信息;(7)按宿舍编号、可住人数、空床数、宿舍性质(男生还是女生)等信息进行查询,若查询信息不存在,输出没找到的信息。
题目要求:(1)按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序,即在程序中加入异常处理,检查用户输入数据的有效性,以保证程序的健壮性;(2)宿舍信息应该包括宿舍编号、可住人数、空床数、宿舍性质等;(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单选项选则所需进行的操作项目,菜单要界面友好、清晰;(4)将所有宿舍信息存储在一个文件中,并实现文件的读写操作,即将输入的数据以文件的形式存盘,将原来已经存盘的文件读入内存,进行管理;(5)应保证测试用例测试程序的各种边缘情况。
输入要求:应用程序运行后,在屏幕上显示一个菜单。
用户可以根据需要,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
输出要求:(1)应用程序运行后,在屏幕上显示一个菜单。
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
代码:#include"stdio.h"#include"stdlib.h"#include"conio.h"#include"process.h"#define max 2 //最大容量//#define k 6 //每个宿舍最多可住人数typedef struct node{int num;int ke;int empty;int yi;int sex; //1-女0-男//struct node *next;}doc; //宿舍信息应该包括宿舍编号、可住人数、空床数、宿舍性质等;//int q=0; //已入住的房间数-1doc dcm[max];void a() //1.录入学生宿舍信息{int q;printf("\n\n\t现在执行录入学生宿舍信息\n");for(q=0;q<max;q++)// printf("请输入要录入的宿舍个数:\n");// scanf("%d",&j);// while(j<=0)// {// printf("输入错误!请重新输入:");// scanf("%d",&j);// }// else// while(j>0){printf("请输入该宿舍的宿舍号:\n");scanf("%d",&dcm[q].num);printf("请输入该宿舍的最大住人数:\n");scanf("%d",&dcm[q].ke);printf("请输入该宿舍的已住人数:\n");scanf("%d",&dcm[q].yi);while(dcm[q].yi>dcm[q].ke){printf("输入错误!已住人数大于最大入住人数!\n请重新输入:");scanf("%d",&dcm[q].yi);}dcm[q].empty=dcm[q].ke-dcm[q].yi;printf("请输入宿舍性质(0代表男宿舍,1代表女宿舍):\n");scanf("%d",&dcm[q].sex);while(dcm[q].sex!=1&&dcm[q].sex!=0){printf("非法输入宿舍性质!请重新输入!\n");scanf("%d",&dcm[q].sex);}// q++;// j--;}}void xianshi()//显示所有宿舍信息{for(int j=0;j<max;j++){printf("宿舍号为:%d 可住人数为:%d 空床数为%d ",dcm[j].num,dcm[j].ke,dcm[j].empty);if(dcm[j].sex==0)printf("宿舍性质:男宿舍\n");elseprintf("宿舍性质:女宿舍\n");}}void xs(int j){printf("宿舍号为:%d 可住人数:%d 空床数%d\n",dcm[j].num,dcm[j].ke,dcm[j].empty);if(dcm[j].sex==0)printf("宿舍性质:男宿舍\n");elseprintf("宿舍性质:女宿舍\n");}void b() //2.修改、删除学生宿舍信息{int j,m,h;doc k;while(1){printf("****************************************\n");printf("*************1、修改宿舍信息************\n");printf("*************2、删除宿舍信息************\n");printf("*************3、退出返回顶层菜单********\n");printf("****************************************\n");printf("请输入对应命令:");scanf("%d",&j);printf("****************************************\n");printf("以下为目前的宿舍信息:\n");xianshi();if(j==1){// case 1:printf("请输入要修改的宿舍的宿舍号:");scanf("%d",&m);for(int i=0,k=0;i<max;i++){if(m==dcm[i].num)k=i+1;}if(k==0){printf("在记录中没有找到这个宿舍!\n");continue;}printf("请输入该宿舍的最大住人数:\n");scanf("%d",&dcm[k-1].ke);printf("请输入该宿舍的已住人数:\n");scanf("%d",&dcm[k-1].yi);dcm[m].empty=dcm[k-1].ke-dcm[k-1].yi;printf("请输入宿舍性质(0代表男宿舍,1代表女宿舍):\n");scanf("%d",&dcm[k-1].sex);while(dcm[k-1].sex!=1&&dcm[k-1].sex!=0){printf("非法输入宿舍性质!请重新输入!\n");scanf("%d",&dcm[k-1].sex);}printf("\t操作成功!已经修改完毕\n");break;}// break;// case 2:else if(j==2){printf("请输入要删除的宿舍号:");scanf("%d",&h);for(int i=0,k=0;i<max;i++){if(h==dcm[i].num)k=i+1;}if(k==0){printf("在记录中没有找到这个宿舍!\n");continue;}for(i=k-1;i<max-1;i++){dcm[i]=dcm[i+1];}dcm[max-1].empty=NULL;dcm[max-1].ke=NULL;dcm[max-1].num=NULL;dcm[max-1].sex=NULL;dcm[max-1].yi=NULL;printf("\t操作成功!已经删除完毕\n");}// break;// default:else if(j==3)break;else{printf("输入错误!请重新输入。
\n");continue;}}printf("****************************************\n");}void c() //3.统计当前未住学生宿舍的个数并显示宿舍编号{int i=0;printf("****************************************\n");printf("未住学生空宿舍宿舍号如下:\n");for(int j=0;j<max;j++)if(dcm[j].ke==dcm[j].empty){printf("\t%d",dcm[j].num);i++;if(j%3==0)printf("\n");}printf("\n");printf("****************************************\n");printf("当前未入住的学生宿舍个数共有:%d个\n",i);}void d() //4.统计当前空闲的男生、女生床位数{int m=0,n=0;printf("****************************************\n");printf("统计当前空闲的男生、女生床位数\n");for(int j=0;j<max;j++){if(dcm[j].empty!=0){printf("宿舍号为:%d\t空床数为%d\t",dcm[j].num,dcm[j].empty);if(dcm[j].sex==0){printf("男生寝室\n");m+=dcm[j].empty;}else{printf("女生寝室\n");n+=dcm[j].empty;}}}printf("男生共有空床位%d个\n女生共有空床位%d个\n\t男女生合计共有空床位%d个\n",m,n,m+n);printf("****************************************\n");}void e() //5.按宿舍编号由小到大显示已住学生的宿舍信息{printf("****************************************\n");printf("按宿舍编号由小到大显示已住学生的宿舍信息\n");int i;doc k;for(int j=0;j<max;j++)for(i=j;i<max;i++){if(dcm[j].num>dcm[i].num){k=dcm[j];dcm[j]=dcm[i];dcm[i]=k;}}xianshi();printf("****************************************\n"); }void f() //6.分别显示男生、女生有空床位的宿舍信息{int m=0,n=0;printf("****************************************\n");printf("统计当前空闲的男生、女生床位数\n\n");printf("统计当前空闲的男生床位数:\n");for(int j=0;j<max;j++){if(dcm[j].empty!=0){if(dcm[j].sex==0){printf("宿舍号为:%d\t空床数为%d\n",dcm[j].num,dcm[j].empty);m+=dcm[j].empty;}}}printf("男生空床数共有%d个\n\n",m);printf("统计当前空闲的女生床位数:\n");for(j=0;j<max;j++){if(dcm[j].empty!=0){if(dcm[j].sex==1){printf("宿舍号为:%d\t空床数为%d\n",dcm[j].num,dcm[j].empty);n+=dcm[j].empty;}}}printf("女生空床数共有%d个\n",n);printf("****************************************\n");}void g() //7.宿舍查询{int m,i,p,k=0;while(1){printf("****************************************\n");printf("查询可按宿舍编号(0)、可住人数(1)、空床数(2)、宿舍性质(男生还是女生)(3)等信息进行");scanf("%d",&p);switch(p){case 0:{printf("****************************************\n");printf("按宿舍编号查询\t请输入要查询的宿舍号:");scanf("%d",&m);for(i=0;i<max;i++){if(m==dcm[i].num){xs(i);k++;}}if(k==0){printf("在记录中没有找到这个宿舍!\n");continue;}break;}case 1:{printf("****************************************\n");printf("按可住人数查询\t请输入要查询宿舍的可住人数:");scanf("%d",&m);for(i=0;i<max;i++){if(m==dcm[i].ke){xs(i);k++;}}if(k==0){printf("在记录中没有找到这个宿舍!\n");continue;}break;}case 2:{printf("****************************************\n");printf("按空床数查询\t请输入要查询宿舍的空床数:");scanf("%d",&m);for(i=0;i<max;i++){if(m==dcm[i].empty){xs(i);k++;}}if(k==0){printf("在记录中没有找到这个宿舍!\n");continue;}break;}case 3:{printf("****************************************\n");printf("按宿舍性质查询\t请输入要查询宿舍的性质(0-男,1-女,其他视为错误输入):");scanf("%d",&m);for(i=0;i<max;i++){if(m==dcm[i].sex){xs(i);k++;}}if(k==0){printf("在记录中没有找到这个宿舍!\n");continue;}break;}default:printf("非法输入查询条件!请重新输入!\n");continue;}printf("****************************************\n");break;}}void caidan(){printf("\n");printf("\n");printf("****************************************\n");printf(" **********学生宿舍管理系统菜单**********\n");printf(" 1.录入学生宿舍信息\n");printf(" 2.修改、删除学生宿舍信息\n");printf(" 3.统计当前未住学生宿舍的个数并显示宿舍编号\n");printf(" 4.统计当前空闲的男生、女生床位数\n");printf(" 5.按宿舍编号由小到大显示已住学生的宿舍信息\n");printf(" 6.分别显示男生、女生有空床位的宿舍信息\n");printf(" 7.宿舍查询\n");//按宿舍编号、可住人数、空床数、宿舍性质(男生还是女生)等信息进行printf(" 8.存盘\n");printf(" 9.退出\n");printf(" 0.清屏\n");printf("****************************************\n");printf("请输入对应操作的命令:\n");}void main(){int i,j;FILE *fp;if((fp=fopen("document","wt+"))==NULL){printf("\nerror!\ncan't open the file!/n");exit(0);}while(1){caidan();scanf("%d",&i);switch(i){case 1:a();break;case 2:b();break;case 3:c();break;case 4:d();break;case 5:e();break;case 6:f();break;case 7:g();break;case 8:for(j=0;j<max;j++){fprintf(fp,"宿舍号:%d 可住人数为:%d 已住人数%d 空床数为%d ",dcm[j].num,dcm[j].ke,dcm[j].yi,dcm[j].empty);if(dcm[j].sex==0)fprintf(fp,"宿舍性质: 男宿舍\n");elsefprintf(fp,"宿舍性质: 女宿舍\n");}break;case 9:fclose(fp);exit(0);break;case 0:system( "cls ");break;default:printf("输入错误!请重新输入!\n\n");break;}}}。