700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 酒店预订管理小系统c语言 酒店管理系统有些问题 求c语言大佬帮忙

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

时间:2022-08-31 02:22:34

相关推荐

酒店预订管理小系统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 ;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。