#include
#include
#include
typedef struct Student{
char name[20];
char sex[5];
int age;
char institute[20];
char specialty[30];
}Student;
typedef struct Room{
int roomnum;
int roomarea;
int totalnum;
int stunum;
Student stu[10];
Room *next;
}Room;
typedef struct Story{
char storynum;
Room *room;
}Story;
/*-------------------------------------------------------------------------------------------------*/
Student *StudentCreat(int age,char name[],char institute[],char specialty[],char sex[])
{
Student *Stu;
Stu=(Student *)malloc(sizeof(Student));
Stu->age=age;
strcpy(Stu->institute,institute);
strcpy(Stu->name,name);
strcpy(Stu->specialty,specialty);
strcpy(Stu->sex,sex);
return Stu;
}
Room *RoomCreat(int room_num,int room_area,int total_num,int stu_num)
{
Room *R;
int i;
R=(Room *)malloc(sizeof(Room));
if(!R)return NULL;
R->roomnum=room_num;
R->roomarea=room_area;
R->totalnum=total_num;
R->stunum=stu_num;
R->next=NULL;
return R;
}
Story *StoryCreat()
{
Story *S;
S=(Story *)malloc(sizeof(Story));
S->room=RoomCreat(0,0,0,0);
return S;
Story *DormCreat()
{
Story *S,*control;
char i;
control=(Story *)malloc(26*sizeof(Story));
if(!control)return NULL;
for(i='A';i<='Z';i++)
{
S=StoryCreat();
S->storynum=i;
control[i-'A']=*S;
}
return control;
}
}
}
}
/*-------------------------------------------------------------------------------------------------*/
Story *StorySearch(Story *control,char storynum)
{
return control+(storynum-'A');
Room *RoomSearch(Room *R,int room_num)
{
while(R->next!=NULL)
{
if(R->next->roomnum==room_num)break;
else R=R->next;
}
return R;
Student *StudentSearch(Room *R,char name[])
{
Student *p;
int i;
R=R->next;
p=R->stu;
for(i=0;i
stunum;i++)
{
if(strcmp(p->name,name)==0)return p;
else p++;
}
return NULL;
}
/*-------------------------------------------------------------------------------------------------*/
void RoomInsert(Story *S,Room *R)
{
R->next=S->room->next;
S->room->next=R;
}
}
}
}
void StudentInsert(Room *R,Student *Stu)
{
R=R->next;
R->stu[R->stunum]=*Stu;
R->stunum++;
void RoomDelete(Room *R)
{
Room *p;
R=R->next;
p=R;
R=R->next;
free(p);
void StudentDelete(Room *R,Student *Stu)
{
R=R->next;
Student *p;
for(p=R->stu;Stustunum-1;Stu++)*Stu=*(Stu+1);
R->stunum--;
void RoomRevamp(Room *R)
{
int i,k;
R=R->next;
printf("1、房号 2、面积 3、可容纳人数:\n");
printf("要修改那一项:\n");
scanf("%d",&i);
switch(i)
{
}
}
void StudentRevamp(Student *Stu)
{
int i,k;
char str[30];
printf("1、姓名 2、性别 3、学院 4、专业 5、年龄:\n");
printf("要修改那一项:\n");
scanf("%d",&i);
switch(i)
{
case 1:{
printf("房号:");
scanf("%d",&k);
R->roomnum=k;
break;
}
case 2:{
printf("面积:");
scanf("%d",&k);
R->roomarea=k;
break;
}
case 3:{
printf("可容纳人数:");
scanf("%d",&k);
R->totalnum =k;
break;
}
case 1:{
printf("姓名:");
scanf("%s",str);
strcpy(Stu->name,str);
break;
}
case 2:{
printf("性别:");
scanf("%s",str);
strcpy(Stu->sex,str);
break;
}
case 3:{
printf("学院:");
scanf("%s",str);
strcpy(Stu->institute,str);
break;
}
case 4:{
printf("专业:");
scanf("%s",str);
strcpy(Stu->specialty,str);
break;
}
case 5:{
printf("年龄:");
scanf("%d",&k);
Stu->age =k;
break;
}
}
}
/*-------------------------------------------------------------------------------------------------*/
void RoomScan(Room *R)
{
int i;
Student *p;
R=R->next;
printf("房号:%d\n",R->roomnum);
printf("面积:%d\n",R->roomarea);
printf("可容纳人数:%d\n",R->totalnum);
printf("已住入人数:%d\n",R->stunum);
printf("成员:");
for(i=0;istunum;i++)
{
p=&(R->stu[i]);
printf("%s ",p->name);
}
putchar('\n');
}
void StudentScan(Student *Stu)
{
printf("姓名:%s\n",Stu->name);
printf("年龄:%d\n",Stu->age);
printf("性别:%s\n",Stu->sex);
printf("学院:%s\n",Stu->institute);
printf("专业:%s\n",Stu->specialty);
}
int main()
{
int roomnum,roomarea,totalnum,stunum,age;
int event;
char name[20],institute[20],specialty[30],sex[5];
char storynum,judge;
Story *control;
Story *S;
Room *R;
Student *Stu;
control=DormCreat();
do
{
printf("****************************注意
**********************************\n");
printf("*
先录入宿舍信息才能录入学生信息
printf("*
先录入信息才能删除浏览或修改信息
*\n");
*\n");
printf("***************************************************************
***\n");
宿舍管理系统
printf("功能选择菜单:\n");
printf("1、宿舍信息录入 2、学生信息录入 3、删除某个宿舍 4、删除
printf("5、宿舍信息浏览 6、学生信息浏览 7、宿舍信息修改 8、学生
printf("\n\n\n
\n\n\n");
某个学生\n");
信息修改\n");
scanf("%d",&event);
switch(event)
{
case 1:
{
do
{
纳人数,已住入人数:(以空格隔开)\n");
fflush(stdin);
printf("请输入宿舍房间号,房间面积,可容
scanf("%c%d %d %d %d",&storynum,&roomnum,&roomarea,&totalnum,&stunum);
S=StorySearch(control,storynum);
R=RoomCreat(roomnum,roomarea,totalnum,stunum);
RoomInsert(S,R);
printf("宿舍信息录入成功!\n");
fflush(stdin);
printf("是否继续录入宿舍信息(Y/N)\n");
scanf("%c",&judge);
}while(judge=='Y');
break;
do
{
printf("请输入该生要入住的宿舍:\n");
fflush(stdin);
scanf("%c%d",&storynum,&roomnum);
fflush(stdin);
S=StorySearch(control,storynum);
R=S->room;
R=RoomSearch(R,roomnum);
printf("请输入该生姓名,性别,学院,专业,
}
case 2:
{
年龄:(以空格隔开)\n");
scanf("%s%s%s%s",name,sex,institute,specialty);
scanf("%d",&age);
Stu=StudentCreat(age,name,institute,specialty,sex);
StudentInsert(R,Stu);
printf("学生信息录入成功!\n");
fflush(stdin);
printf("是否继续录入学生信息(Y/N)\n");
scanf("%c",&judge);
}while(judge=='Y');
break;
break;
do
{
}
case 3:
{
}
case 4:
{
printf("请输入要删除的宿舍号码:\n");
fflush(stdin);
scanf("%c%d",&storynum,&roomnum);
fflush(stdin);
S=StorySearch(control,storynum);
R=S->room;
R=RoomSearch(R,roomnum);
RoomDelete(R);
printf("宿舍信息删除成功!\n");
fflush(stdin);
printf("是否继续删除宿舍信息(Y/N)\n");
scanf("%c",&judge);
}while(judge=='Y');
break;
break;
do
{
printf("请输入要删除学生现住宿舍:\n");
fflush(stdin);
scanf("%c%d",&storynum,&roomnum);
fflush(stdin);
S=StorySearch(control,storynum);
R=S->room;
R=RoomSearch(R,roomnum);
printf("请输入要删除学生的姓名:\n");
scanf("%s",name);
Stu=StudentSearch(R,name);
StudentDelete(R,Stu);
printf("学生信息删除成功!\n");
fflush(stdin);
printf("是否继续删除学生信息(Y/N)\n");
scanf("%c",&judge);
}while(judge=='Y');
break;