#include<stdio.h>
#include<math.h>
#include<malloc.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<dos.h>
#include<windows.h>
#include<string.h>
typedef struct b{
char name[9];//姓名
char num[12];//学号
char sex;//性别
int str;//楼号
int floor ;//层号
int room;//宿舍号
int bed;//床号
} now;
typedef struct c
{
char name[9];
char num[12];
char io;//入住或者退出
char time[9];
}all;
typedef struct a
{
int str;//楼号
char sex;//性别
int floor ;//层号
int room;//宿舍号
int num;//床位的剩余数量;
}dormitory;
void dors(dormitory*p,now*w,int j)//删除用的宿舍管理系统
{
int k=0,z=0;
for(;k!=1;z++)
{
if( (p+z)->str==(w+j)->str&&(p+z)->room==(w+j)->room)
k=1;
}
z-=1;
(p+z)->num+=1;
}
void dor(dormitory*p,now*w,int y)
{
int z=0,k=0;
for(;k!=1;z++)
{
if((p+z)->str==(w+y-1)->str&&(p+z)->room==(w+y-1)->room)
k=1;
}
z=z-1;
(p+z)->num=((p+z)->num)-1;
}
void insert(dormitory*p,int a)
{
int i=1,j=0,k=0,b=0;
char sex;
while(i<6)//设有五栋楼
{
fflush(stdin);
for(j=1;j<7;j++)//每栋有六层
{
for(k=1;k<16;k++)//每层15个寝室;
{
if(i==1||i==2||i==3)
(p+b)->sex='b';
else
(p+b)->sex='g';
(p+b)->str=i;
(p+b)->floor=j;
(p+b)->room=(j*100+k);
(p+b)->num=4;
b++;
}
}
i++;
}
}
void allss(dormitory*p,all *q,now*w,int j,int v)
{
memcpy((q+v)->name,(w+j)->name,strlen((w+j)->name));
memcpy((q+v)->num,(w+j)->num,strlen((w+j)->num));
(q+v)->io='o';//入住
printf("输入时间:(请输入八个数字 前四个为年份 第五第六为月份 第七第八位日份)");
fflush(stdin);
scanf("%s",(q+v)->time);
}
int alls(now*w,all *q,int y,int v)
{
memcpy((q+v)->name,(w+y-1)->name,strlen((w+y-1)->name));
memcpy((q+v)->num,(w+y-1)->num,strlen((w+y-1)->num));
(q+v)->io='i';
printf("输入该学生入住的时间");
fflush(stdin);
scanf("%s",(q+v)->time);
printf("已成功录入");
Sleep(2000);
return v+1;
}
int out(dormitory*p,all *q,now*w,int y,int v)
{
int i,j=0,k=0;
char num[12];
fflush(stdin);
printf("请输入要退出的学生学号:");
scanf("%s",num);
for(;k!=1&&j<y;j++)
{
if(strcmp(num,(w+j)->num)==0)
k++;
}
if(k==0)
{
printf("\n未找到相关学生的信息,三秒后自动返回主界面");
Sleep(3000);
return y;
}
else
{
j-=1;
char name[9];
allss(p,q,w,j,v);
dors(p,w,j);
for(;j<y-1;j++)
{
strcpy((w+j)->name,(w+j+1)->name);
strcpy((w+j)->num,(w+j+1)->num);
(w+j)->sex=(w+j+1)->sex;
(w+j)->str=(w+j+1)->str;
(w+j)->floor=(w+j+1)->floor;
(w+j)->room=(w+j+1)->room;
(w+j)->bed=(w+j+1)->bed;
}
printf("删除成功\n");
printf("\n\n\n输入任意键返回主界面\n");
char o;
fflush(stdin);
scanf("%c",&o);
system("cls");
return y-1;
}
}
int in(dormitory*p,all *q,now*w,int y)
{
system("cls");
int i,j=0,k=0;
char name[9];
fflush(stdin);
printf("请输入姓名:");
scanf("%s",(w+y)->name);
fflush(stdin);
printf("请输入学号:");
scanf("%s",(w+y)->num);
while(k<y)
{
if(strcmp((w+y)->num,(w+k)->num)==0)
break;
k++;
}
if(k==y)
{
fflush(stdin);
printf("请输入性别:");
scanf("%c",&(w+y)->sex);
printf("下面为所有可选择的宿舍:\n"); //此时需要提供相关的宿舍;
while(j<450)
{
if(((p+j)->num)>0&&(p+j)->sex==(w+y)->sex)//检索有空位置的宿舍
{
printf("楼号:%d ",(p+j)->str);
printf("层号:%d" ,(p+j)->floor);
printf("房间号:%d" ,(p+j)->room);
printf("已使用床位:");
for(k=0;k<y;k++)
{
if((((p+j)->str)==(w+k)->str)&&((p+j)->room==(w+k)->room))//找相关宿舍的空床位号
{
printf("%d号 ",(w+k)->bed);
}
}
printf("\n");
}
j++;
}
printf("\n");
printf("请输入该学生入住的栋数,层数,宿舍号,以及床号:\n");
scanf("%d%d%d%d",&(w+y)->str,&(w+y)->floor,&(w+y)->room,&(w+y)->bed);
j=0;
while(j<y)
{
if((w+j)->str==(w+y)->str&&(w+y)->room==(w+j)->room&&(w+y)->bed==(w+j)->bed)
break;
j++;
}
if(j==y)
{
return y+1;
}
else
{
printf("该床位已经满,请重新选择,三秒后自动返回主界面");
Sleep(3000);
return y;
}
}
if(k!=y)
{
printf("输入学号有误\n三秒后自动返回主界面");
Sleep(3000);
return y;
}
}
int one(dormitory*p)
{
int k=0,j=0;
printf("请输入要查询的栋数");
int y;
scanf("%d",&y);
printf("以下宿舍为空寝室\n");
for(;k<450;k++)
{
if((p+k)->str==y&&(p+k)->num==4)
{printf("%d ",(p+k)->room);
j++;
}
if(j%10==0&&j>0)
printf("\n");
}
printf("\n");
printf("共有%d个空宿舍\n",j);
printf("输入任意键返回主界面\n");
char o;
fflush(stdin);
scanf("%c",&o);
system("cls");
}
int load2(all*q)
{
int k=0;
FILE* fq;
fq=fopen("d:\\所有学生出入信息.txt","r");
while(!feof(fq))
{
fscanf(fq,"%s %s %c %s",(q+k)->name,(q+k)->num,&(q+k)->io,(q+k)->time);
k++;
}
fclose(fq);
return k-1;
}
int load1(dormitory*p,now*w)
{
int x=0,k=0;
FILE* fp;
FILE* fh;
fp=fopen("d:\\现有学生信息.txt","r");
fh=fopen("d:\\宿舍楼信息.txt","r");
while(!feof(fp))
{
fscanf(fp,"%s %s %c %d %d %d %d",(w+x)->name,(w+x)->num,&(w+x)->sex,&(w+x)->str,&(w+x)->floor,&(w+x)->room,&(w+x)->bed);
x++;
}
while(!feof(fh))
{
fscanf(fh,"%d %c %d %d %d",&(p+k)->str,&(p+k)->sex,&(p+k)->floor,&(p+k)->room,&(p+k)->num);
k++;
}
fclose(fp);
fclose(fh);
return x-1;
}
void keep(dormitory*p,all *q,now*w,int y,int v)
{
int x=0,k=0;
FILE* fp;
FILE* fq;
FILE* fh;
fp=fopen("d:\\现有学生信息.txt","wb");
fq=fopen("d:\\所有学生出入信息.txt","wb");
fh=fopen("d:\\宿舍楼信息.txt","wb");
while(x<y)
{
fflush(stdin);
fprintf(fp,"%s %s %c %d %d %d %d\n",(w+x)->name,(w+x)->num,(w+x)->sex,(w+x)->str,(w+x)->floor,(w+x)->room,(w+x)->bed);
fflush(stdin);
x++;
}
while(k<v)
{ fflush(stdin);
fprintf(fq,"%s %s %c %s\n",(q+k)->name,(q+k)->num,(q+k)->io,(q+k)->time);
k++;
}
k=0;
while(k<450)
{
fflush(stdin);
fprintf(fh,"%d %c %d %d %d\n",(p+k)->str,(p+k)->sex,(p+k)->floor,(p+k)->room,(p+k)->num);
fflush(stdin);
k++;
}
fclose(fp);
fclose(fq);
fclose(fh);
}
void two(dormitory*p,now*w,int y)
{
printf("请输入要查询的宿舍的栋数和宿舍号;\n");
int a,b,s=0,k=0,j=0;
scanf("%d%d",&a,&b);
for(;s!=1;j++)
{
if((p+j)->str==a&&(p+j)->room==b)
{
printf("该宿舍的空床位数目为%d\n",(p+j)->num);
s=1;
printf("已使用的床位为:");
for(k=0;k<y;k++)
{
if(a==(w+k)->str&&b==(w+k)->room)//找相关宿舍的空床位号
{
printf("%d号 ",(w+k)->bed);
}
}
}
}
printf("\n\n\n输入任意键返回主界面\n");
char o;
fflush(stdin);
scanf("%c",&o);
system("cls");
}
void three(dormitory*p)
{
char a;
printf("输入要查询的性别");//(b代表男生,g代表女生)
fflush(stdin);
scanf("%c",&a);
int k=0,b=0;
for(;b<450;b++)
{
if((p+b)->sex==a)
{
k+=(p+b)->num;
}
}
if(a=='b')
printf("男生当前占用的床位数为%d,空床位数为%d",1080-k,k);
else
printf("女生当前占用的床位数为%d,空床位数为%d",720-k,k);
printf("\n\n\n输入任意键返回主界面\n");
char o;
fflush(stdin);
scanf("%c",&o);
system("cls");
}
void four (now*w,int y)
{
printf("请输入所要查询的学生的楼号和房号:\n");
int a,b,c=0;
int j=0;
scanf("%d%d",&a,&b);
for(;c<y;c++)
{
if((w+c)->str==a&&(w+c)->room==b)
{
printf("同学的名字为:\n");
puts((w+c)->name);
printf("\n");
printf("同学的学号为:\n") ;
puts((w+c)->num);
printf("\n");
printf("同学的性别为:\n");
printf("%c",(w+c)->sex);
j=1;
printf("\n");
}
}
printf("\n");
if(j==0)
printf("未找到\n");
printf("输入任意键返回主界面\n");
char o;
fflush(stdin);
scanf("%c",&o);
system("cls");
}
void five(all *q,int v)
{
printf("请输入相关学生的学号:\n");
char num[12];
fflush(stdin);
scanf("%s",num);
int k=0,j=0;
for(;k<v;k++)
{
if( strcmp(num,(q+k)->num)==0)
{
printf("该学生的姓名为:");
puts((q+k)->name);
printf("\n");
printf("该学生的学号为:");
puts((q+k)->num);
printf("\n");
printf("出入:");
printf("%c",(q+k)->io);
printf("\n");
printf("时间为:");
puts((q+k)->time);
j=1;
}
}
if(j==0)
{
printf("未找到相关学生的信息");
}
char o;
fflush(stdin);
printf("输入任意键返回主界面\n");
scanf("%c",&o);
system("cls");
}
int search(dormitory*p,all *q,now*w,int y,int v)
{
printf(" **********************************************************************************************************************");
printf(" **********************************************************************************************************************");
printf(" 请选择要查询的内容\n");
printf(" 1.某栋楼的空宿舍数目以及宿舍号\n");
printf(" 2.某宿舍的空床位数目\n");
printf(" 3.男或者女生的总空床位数和当前占用的床位数\n");
printf(" 4.查询学生的相关信息\n");
printf(" 5.查询入住、退出信息\n");
int i;
printf(" 请输入要查询的内容\n");
printf(" ");
fflush(stdin);
scanf("%d",&i);
system("cls");
switch(i)
{
case 1:one(p);break;
case 2:two(p,w,y); break;
case 3:three(p);break;
case 4:four(w,y);break;
case 5:five(q,v); break;
}
}
int main()
{
char putin[8]="";
char right[8]="2391960";
char e='y';
while(e=='y')
{
system("cls");
printf("************************************************************************************************************************\n");
printf("************************************************************************************************************************\n");
printf(" 欢迎使用学生宿舍管理系统!\n");
printf(" 使用系统前请验证您的身份!\n");
printf("请输入宿舍管理系统的密码\n");
fflush(stdin);
scanf("%s",putin);
if((strcmp(putin,right)!=0))
{
printf("密码错误,请选择是否继续登录\n");
fflush(stdin);
scanf("%c",&e);//y表示是,n表示不是
}
else
break;
}
if(strcmp(putin,right)!=0)
printf("感谢您的使用");
else
{
int a,b,c;
int y=0,v=0;//y表示现在宿舍居住的总人数;
a=450;//总的宿舍数量是已知的;
dormitory*p=(dormitory*)malloc(sizeof(dormitory)*450);
all *q=(all*)malloc(sizeof(all)*5000);
now*w=(now*)malloc(sizeof(now)*(450*4));//假定一个寝室住四个人;
y=load1(p,w);
v=load2(q);
if(y==0)
{
insert(p,450);
}
system("cls");
int l;
do
{
system("cls");
system("color 87");
printf("************************************************************************************************************************\n");
printf("************************************************************************************************************************\n");
printf(" 欢迎使用学生宿舍管理系统!\n");
printf(" 菜单: \n");
printf(" 0.退出该宿舍管理系统系统\n");
printf(" 1.添加学生的相关信息\n");
printf(" 2.删除学生的相关信息\n");
printf(" 3.查询学生的相关信息\n");
printf(" 4.将所有的学生信息存盘\n");
printf("************************************************************************************************************************\n");
printf("************************************************************************************************************************\n");
printf(" 请输入相关的数字进行下一步操作:");
scanf("%d",&l);
system("cls");
int k=0,x;
switch(l)
{
case 0:
printf("感谢使用!");break;
case 1:
system("color 4f");
x=in(p,q,w,y); //入住管理;
if((y+1)==x)
{
y=x;
v=alls(w,q,y,v);
dor(p,w,y);
}
system("cls");
break;
case 2:
system("color 5f");
x=out(p,q,w,y,v);
if((y-1)==x)
{
v+=1;
y=x;
}
break;
case 3:
system("color 6f");
search(p,q,w,y,v);
break;
case 4: keep(p,q,w,y,v);break;
}
}while(l);
return 0;
}
}