酒店预订管理小系统c语言,酒店管理系统有些问题,求c语言大佬帮忙

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这是从我的酒店管理系统截取出来的一部分,旅客入住这一块有问题,只能储存一个房间的入住信息,如果再输入新的入住信息,旧的房间信息就会被顶掉,也就是说它只能储存一个最新的房间信息

#include

#include

#include

#include

#define LOGIN_USER_MAX 10

#define LOGIN_PASSWORD_MAX 10

#define INPUT_USER_MAX 16

#define INPUT_PASSWORD_MAX 16

#define ROOM_NUMBER_MIN 1//房间号的最小值

#define ROOM_NUMBER_MAX 30//房间号的最大值

#define LEN sizeof(struct Hotel) //用LEN代替结构体的"长度"

typedef struct Hotel//定义结构体变量

{

unsigned int iRoomNumber;

char Name[20];

char Sex[2];

char ID[10];

float Paid;

unsigned int iRegeistYear ;

unsigned int iRegeistMonth ;

unsigned int iRegeistDay ;

struct Hotel *next ;

}*HotelPtr;

char MainMenu(void); //主菜单

int Regeist(void); //登记旅客入住的函数

int CheckNumber(int n); //检查房间是否已经入住的函数

HotelPtr Load(void);

char MainMenu(void)//MainMenu函数,完成菜单功能

{

char select ;

printf ("\n--------------------------欢迎使用旅店信息管理系统---------------------------\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 ("\n-----------------------------------------------------------------------------\n");

select = getch();

return select ;

}

int Regeist (void)//Regeist函数,完成旅客入住功能

{

FILE *fpCustomerInformation;//定义文件指针 fpCustomerInformation

char Choice[2];//储存有一个空字符 , 不然就是char型的数组了 ,而不是字符串

unsigned int iTempNumber;

HotelPtr LinklistPtr;

LinklistPtr = (HotelPtr)malloc(LEN);

if (LinklistPtr == NULL)

{

printf ("动态内存分配失败!\n");

getch();

return -1;

}

if((fpCustomerInformation = fopen("CustomerInformation.dat", "a+")) == NULL)

{

printf ("无法打开文件!\n");

getch();

return -1;

}

while(1)

{

printf ("\n请登记入住信息 : \n");

printf ("RoomNumber( %d ~ %d ):", ROOM_NUMBER_MIN, ROOM_NUMBER_MAX);

scanf ("%d", &iTempNumber);

if(iTempNumber < ROOM_NUMBER_MIN || iTempNumber > ROOM_NUMBER_MAX)//检查房间号的正确性

{

printf ("\a\nError !");

return -1;

}

CheckNumber(iTempNumber);//检查该房间是否已经入住

LinklistPtr->iRoomNumber = iTempNumber ;//在该房间没有旅客时,登记入住

printf("Name:\t");

scanf("%s", &LinklistPtr->Name);

printf("Sex:\t");

scanf("%s", &LinklistPtr->Sex);

printf("ID ( <10位 ):\t");

scanf("%s", &LinklistPtr->ID);

printf("Paid:\t");

scanf("%f", &LinklistPtr->Paid);

printf("Date (年月日空格隔开):");

scanf("%d %d %d", &LinklistPtr->iRegeistYear, &LinklistPtr->iRegeistMonth, &LinklistPtr->iRegeistDay);

/*

if(scanf("%d %d %d", &LinklistPtr->iRegeistYear, &LinklistPtr->iRegeistMonth, &LinklistPtr->iRegeistDay) != 3)

{

printf("\a\nError !");

getch();

exit(0);

}

当你输入的整形数据大于3个时 ,这样是检测不到错误的 ,因为scanf()确实成功读入了3个数 ,只是留下一个在缓冲区而已,将要被其他语句取走

*/

LinklistPtr->next = NULL ;

fwrite(LinklistPtr, LEN, 1, fpCustomerInformation); //将链表信息保存到磁盘文件

printf ("\n请选择是否继续登记信息 ( y ): ");

scanf("%s",Choice);

if((strcmp(Choice, "Y") != 0) && (strcmp(Choice, "y") != 0))

{

fclose (fpCustomerInformation);

printf ("\nOk !");

return 0;

}

}

return 0;

}

int CheckNumber(int n) //CheckNumber函数,检查登指定的房间是否已经有旅客入住

{

int iTempNumber = n;

HotelPtr LinklistPtr = Load();

while(LinklistPtr)

{

if (LinklistPtr->iRoomNumber == n)

{

printf ("\n%d号房间已经有旅客入住了!\n",n);

getch();

exit(0);

}

LinklistPtr = LinklistPtr->next ;

}

return 0;

}

HotelPtr Load(void)//定义Load函数读取当前的信息,并存到链表中

{

FILE *fpCustomerInformation;

HotelPtr head, LinklistPtr, TempPtr;

LinklistPtr = (HotelPtr)malloc(LEN);

TempPtr = (HotelPtr)malloc(LEN);

if((LinklistPtr == NULL) || (TempPtr == NULL))

{

printf ("内存分配失败!\n");

getch();

return 0;

}

head = LinklistPtr;

if((fpCustomerInformation = fopen("CustomerInformation.dat","rb")) == NULL)

{

printf ("无法打开文件!\n");

getch();

return 0;

}

while(fread (TempPtr, LEN, 1, fpCustomerInformation)) //读取当前的信息,并存到链表中

{

LinklistPtr->next = TempPtr;

LinklistPtr = TempPtr;

}

LinklistPtr->next = NULL;

return head ;//返回链表的头指针

}

int main () //主函数部分,调用若干子函数完成相应的功能

{

char choice ;

//Login();//登录系统

while(1)

{

system("cls");

choice = MainMenu();

switch(choice)

{

case '6':Regeist();break;

}

printf ("\n\n请按任意键继续 !\n");

getch();

system("cls");

}

return 0 ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值