一道C++题目,要的急,谢谢强人了!
宿舍管理系统:
1、宿舍有四个房间,每个房间可住学生<=4人,要求使用如下的链表存储结构:学号、姓名、房间号、后续指针(NEXT);
2、整个链表按房间号有序的排列,实现学生的入住、退房和查询;
3、按给定学号、姓名、房号查询。
以下是一个人写的(狂错。。。),要我帮忙,可是程序实在太。。。我能力有限,而他后天就要交了,请大虾们帮忙啊~~~如果实在对以下程序不堪入目,希望大虾能重新写一个。谢谢了
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define SN sizeof(struct student)
struct student
{
int number[4];
char name[20];
int room_number[4];
struct student *next;
};
int n;
struct student *creat(void)
{
int i,n=0;
struct student *head;
struct student *p1,*p2;
p1=p2=(struct student*)malloc(SN);
for(i=0;i<4;i++)
{
scanf("%d,%s,%d",&p1->number[i],&p1->name[i],&p1->room_number[i]);
}
head=NULL;
while(p1->number[0]!=0)
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student*)malloc(SN);
for(i=0;i<4;i++)
{
scanf("%d%s%d",&p1->number[i],&p1->name[i],&p1->room_number[i]);
}
}
p2->next=NULL;
return(head);
}
struct student *inputroom(struct student *head)
{
int i;
struct student *p1,*p2;
int number[4];
char name[20];
int room_number[4];
p1=head;
while(head!=NULL)
{
for(i=0;i<4;i++)
if(p1->number[i]!=0)
{scanf("%ld,%s,%d",&p1->number[i],&p1->name[i],&p1->room_number[i]);
head=p1;
return(head);
}
p1=p1->next;
}
printf("There is no space");
return(head);
}
struct student *del(struct student *head)
{
int number[4];
int i;
struct student *p1,*p2;
p1=head;
for(i=0;i<4;i++)
{
while(number[i]!=p1->number[i]&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(number[i]==p1->number[i])
printf("delete :%ld\n",number[i]);
else printf("%ld not been found!\n",number[i]);
return(head);
}
}
struct student *xhfine(struct student *head)
{
struct student *p1,*p2;
int number[4]; int i;
printf("input the fine number");
scanf("%ld",&number);
p1=head;
while(head!=NULL)
{
for(i=0;i<4;i++)
{
if(number[i]=p1->number[i])
{printf("%ld,%s,%d",p1->number[i],p1->name[i],p1->room_number[i]);}
p1=p1->next;
}
}
printf("There is no person");
return (head);
}
struct student *xmfine(struct student *head)
{
struct student *p1;
char name[20]; int i;
printf("input the fine name");
scanf("%s",&name);
p1=head;
while(head!=NULL)
{
for(i=0;i<4;i++)
{
if(name[i]=p1->name[i])
{printf("%ld,%s,%d",p1->number[i],p1->name[i],p1->room_number[i]);}
p1=p1->next;
}
}
printf("There is no person");
return(head);
}
struct student *fjfine(struct student *head)
{
struct student *p1;
int room_number[4]; int i;
printf("input the fine room_number");
scanf("%d",&room_number);
p1=head;
while(head!=NULL)
{
for(i=0;i<4;i++)
{
if(room_number[i]=p1->room_number[i])
{printf("%ld,%s,%d",p1->number[i],p1->name[i],p1->room_number[i]);}
p1=p1->next;
}
}
printf("There is no person");
return(head);
}
main()
{
struct student *head;
int number[1],number[2], number[3];
char name1,name2,name3;
int room_number[1],room_number[2], room_number[3];
head=creat();
scanf("%d,%s,%d",&number[1],name1,&room_number[1]);
if(number[1]!=0)
head=inputroom(head,number[1],name2,room_number[1]);
scanf(%d,%s,%d",&number[2],name2,room_number[2]);
if(number[2]!=0)
head=del(head,number[2]);
scanf("%d,%s,%d",&number[3], name3,room_number[3]);
head=fine(head,number);
}