//先上程序了
程序代码:
#include<stdio.h>//I/O函数
#include<stdlib.h>//标准库函数
#include<string.h>//字符串函数
//定义数据结构
struct room
{
char _room[10];
int _num;
int on; //代表房间入住情况,0是没人,1是有人
};
struct room ROOM[10]={ //初始化数组
{"201",110,0},{"202",120,0},{"203",130,0},{"204",140,0},{"205",150,0},
{"206",160,0},{"207",170,0},{"208",180,0},{"209",190,0},{"210",200,0}};
struct customer
{
char id[20]; //身份证号
char name[20]; //客户姓名
struct room NUM; //入住房间号与价格
char date_1[20]; //入住时间
char date_2[20]; //退房时间
int cost; //费用
int time; //入住天数
char begin_time[10]; //开始统计时间
char end_time[10]; //结束统计时间
struct customer *next;
};
//新增入住函数
void check_in(char *mem, struct customer *temp)
{
int i;
for (i=0; i<10; i++)
{
if (!strcmp(mem, ROOM[i]._room))
{
ROOM[i].on = 1;
temp->NUM = ROOM[i];
}
}
}
//新增输出空房间名字函数
int print_offroom()
{
int i;
int flag = 0;
for (i=0; i<10; i++)
{
if (ROOM[i].on == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("对不起,现在没有空房间。\n");
return(1);
}
else
{
printf("现有空房间:\n");
for (i=0; i<10; i++)
{
if (ROOM[i].on == 0)
{
printf("%-5s",ROOM[i]._room);
}
putchar(10);
}
return(0);
} //end of if
}
//新增输出满房间名字函数
int print_onroom()
{
int i;
int flag = 0;
for (i=0; i<10; i++)
{
if (ROOM[i].on == 1)
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("对不起,现在没有顾客入住。\n");
return(1);
}
else
{
printf("现有顾客的房间:\n");
for (i=0; i<10; i++)
{
if (ROOM[i].on == 1)
{
printf("%-5s",ROOM[i]._room);
}
putchar(10);
}
return(0);
} //end of if
}
//新增加清屏函数
void clean()
{
int i;
for (i=0; i<14; i++)
{
putchar('\n');
}
}
int Day(char *date) //输出天数
{
int year;
int month;
int day;
int sum = 0;
int i = 1;
int tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};
year = 1000*(date[0]-'0') + 100*(date[1]-'0')
+ 10*(date[2]-'0') + (date[3]-'0');
month = 10*(date[5]-'0') + (date[6]-'0');
day = 10*(date[8]-'0') + (date[9]-'0');
for ( ; i < month; i++)
{
sum = sum + tab[i-1];
}
sum = sum + day;
if ((month > 2) && ((year%4 == 0) && (year % 100 != 0) || (year%400 == 0)))
{
sum = sum + 1;
}
return(sum);
}
//比对房间号码
int check(char mem[])
{
int i;
for(i=0; i<10; i++)
{
if (strcmp(ROOM[i]._room,mem) == 0)
{
return(ROOM[i].on);
}
}
printf("您输入的房间号不正确。\n");
return(1);
}
//搜寻符合的房间,直接返回房间价格
int check_price(char mem[])
{
int i;
for (i=0; i < 10; i++)
{
if (!strcmp(mem, ROOM[i]._room))
{
return(ROOM[i]._num);
}
}
return(0);
}
//日期格式合法性判断函数,合法返回1,否则返回0。
int date_legal(char *date)
{
int leap;
int year;
int month;
int day;
int flag=1;
if (strlen(date) == 10)//判断长度
{
if ((date[4] == '-') && (date[7] == '-'))//判断格式
{
year = 1000*(date[0]-'0') + 100*(date[1]-'0')
+ 10*(date[2]-'0') + (date[3]-'0'); //转换日期,将字符型转换为整形
month = 10*(date[5]-'0') + (date[6]-'0');
day = 10*(date[8]-'0') + (date[9]-'0');
if (month > 12)
{
printf("\n您的输入有误(月份不可超出12)。\n"); //判断月份是否合法
flag = 0;
}
if (month == 2)
{
leap=((year%4 == 0) && (year%100 != 0) || (year%400 == 0));
if ((leap == 1) && (day > 29))
{
printf("\n您的输入有误(输入的年份属于闰年,二月只有二十九天)。\n");//判断闰年
flag = 0;
}
if ((leap == 0) && (day > 28))
{
printf("\n您的输入有误(输入的年份属于平年,二月只有二十八天)。\n");//判断平年
flag = 0;
}
}
if ((month == 4) || (month == 6) || (month == 9) || (month == 11))
{
if (day > 30)
{
printf("\n您的输入有误(输入的月份只有三十天)\n"); //判断天数
flag = 0;
}
}
if ((month == 1) || (month == 3) || (month == 5) || (month == 7)
|| (month == 8) || (month == 10) || (month == 12))
{
if (day > 31)
{
printf("\n您的输入有误(输入的月份只有三十天)。\n");
flag = 0;
}
}
}
else
{
printf("\n您的输入有误(日期输入格式错误格式为YYYY-MM-DD)。\n");
flag = 0;
}
} //end of 格式判断
else
{
printf("\n您的输入有误(日期输入长度错误格式为YYYY-MM-DD)。\n");
flag = 0;
} //end of 长度判断
return flag;
}
//计算消费额
int Cost(struct customer *head)
{
struct customer *p;
int a;
int fee;
int sum;
char mem[10];
p = head->next;
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
a = print_onroom(); ////新增满房间号输出函数
if (a)
{
return(0);
}
printf("\n请输入需要统计费用的房间号:\n");
scanf ("%s", mem);
for ( ; !check(mem); )
{
printf("\n您的输入有误。\n");
print_onroom();
printf("\n请输入房间号:\n");
scanf("%s", mem);
}
while (!strcmp(mem, p->NUM._room))
{
p = p->next;
}
printf("\n开始统计时间(格式为YYYY-MM-DD):\n"); //退房时间的判断时间的合法性
scanf("%s", p->begin_time);
for ( ; !date_legal(p->begin_time); ) //调用date_legal,判断时间的合法性
{
printf("\n您的输入有误。\n");
printf("\n请重新输入开始统计时间(格式为YYYY-MM-DD):\n");
scanf("%s", p->begin_time);
}
printf("\n结束统计时间(格式为YYYY-MM-DD): \n");
scanf("%s", p->end_time);
for ( ; (!date_legal(p->end_time))
|| (!strcmp(p->end_time, p->begin_time)); ) //调用date_legal,判断时间的合法性
{
printf("\n您的输入有误。\n");
printf("\n请重新输入结束统计时间(格式为YYYY-MM-DD并且退房时间要大于入住时间):\n");
scanf("%s", p->end_time);
}
if ((strcmp(p->date_1, p->begin_time) <= 0) && (strcmp(p->date_2, p->end_time) >= 0))
{
sum = Day(p->end_time) - Day(p->begin_time);
fee = check_price(mem) * sum;
printf("您的所在房间入住一天的价格为:%5d\n", check_price(mem));
printf("统计时间内您所在房间入住天数为:%5d\n", sum);
printf("在统计时间内您的费用为:%d\n", fee);
}
printf("按任意键返回主菜单\n");
getchar();
getchar();
return 0;
}
//菜单函数
int menu_show()
{
int c;
clean(); //system("cls");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※※※※※※※※..酒..店..与..房..间..登..记..管..理..系..统※※※※※※※※※※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※★★★★★★★★★★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★★★★★★★★★※");
printf("※★※※※※※※※※★☆※※※--1.客户入住信息录入--※※★☆※※※※※※※※★※");
printf("※★※--欢迎光临--※★☆※※※--2.客户入住信息显示--※※★☆※--欢迎光临--※★※");
printf("※★☆★☆★☆★☆★★☆※※※--3.客户入住信息查询--※※★☆★☆★☆★☆★☆★※");
printf("※★※--欢迎光临--※★☆※※※--4.客户入住费用统计--※※★☆※--欢迎光临--※★※");
printf("※★※※※※※※※※★☆※※※--5.退出客户管理系统--※※★☆※※※※※※※※★※");
printf("※★★★★★★★★★★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★★★★★★★★★※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("请进行菜单选择:");
scanf("%d", &c);
for ( ; (c<1)||(c>5); )
{
printf("您的输入有误,请重新输入\n");
printf("请进行菜单选择:");
scanf("%d", &c);
}
return (c);
}
//新住户登记
int Add(struct customer *head)
{
struct customer *p;
struct customer *temp;
char mem[10];
int a;
p = head;
temp = (struct customer*)malloc(sizeof(struct customer));
temp->next = NULL;
while (p->next != NULL)
{
p = p->next;
}
clean(); //system("cls");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("请输入客户入住信息\n");
printf("客户姓名:\n");
scanf("%s", temp->name);
printf("身份证号(15或18位):\n");
scanf("%s", temp->id);
while ((strlen(temp->id) != 15) && (strlen(temp->id) != 18)) //身份证长度判断
{
printf("\n您的输入有误\n请重新输入(15或18位):\n");
scanf("%s", temp->id);
}
a = print_offroom(); //新增空房间号输出函数
if (a)
{
return(0);
}
printf("\n请输入房间号:\n");
scanf("%s", mem);
for ( ; check(mem); )
{
printf("\n您的输入有误。\n");
print_offroom();
printf("\n请输入房间号:\n");
scanf("%s", mem);
}
check_in(mem, temp); //新增入住函数
printf("\n开始入住时间(格式为YYYY-MM-DD):\n"); //退房时间的判断时间的合法性
scanf("%s", temp->date_1);
for ( ; !date_legal(temp->date_1); ) //调用date_legal,判断时间的合法性
{
printf("\n您的输入有误。\n");
printf("\n请重新输入开始入住时间(格式为YYYY-MM-DD):\n");
scanf("%s", temp->date_1);
}
printf("\n退房时间(格式为YYYY-MM-DD): \n");
scanf("%s", temp->date_2);
for ( ; (!date_legal(temp->date_2))
|| (!strcmp(temp->date_2, temp->date_1)); ) //调用date_legal,判断时间的合法性
{
printf("\n您的输入有误。\n");
printf("\n请重新输入退房时间(格式为YYYY-MM-DD并且退房时间要大于入住时间):\n");
scanf("%s", temp->date_2);
}
temp->time = Day(temp->date_2) - Day(temp->date_1); //计算入住天数
temp->cost = temp->time * check_price(mem); //计算房间产生的费用
printf("您输入的信息已经录入成功。\n");
p->next = temp;
printf("按任意键返回主菜单。\n");
getchar();
getchar();
return(1);
}
//显示现有住宿情况
void List(struct customer *head)
{
int i = 0;
struct customer *p;
p = head->next;
if (p == NULL)
{
printf("无顾客入住!\n");
return;
}
clean(); //system("cls");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※******************************客户入住信息录入******************************※");
printf("※姓名 身份证号 房间号 入住时间 退房时间 入住天数 所需费用※");
printf("※----------------------------------------------------------------------------※");
while (p!=NULL)
{
printf(" %s%21s%6s%13s%13s%6d%10d\n", p->name, p->id, p->NUM._room,
p->date_1, p->date_2, p->time, p->cost);
p = p->next;
}
printf("※*********************************结束***************************************※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("按任意键返回主菜单\n");
getchar();
getchar();
}
//查询房间住宿情况
int Search (struct customer *head)
{
int a;
char Num[20];
struct customer *p;
int flag = 0;
p = head->next;
clean(); //system("cls");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
a = print_onroom();
if (a)
{
return(0);
}
printf("请输入待查找的房间号:\n");
scanf("%s", Num);
while (p != NULL)
{
if (!strcmp(Num, p->NUM._room))
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※******************************客户入住记录信息******************************※");
printf("※客户姓名 身份证号 入住时间 退房时间 入住天数 所需费用 ※");
printf("※============================================================================※");
printf("※............................................................................※");
printf(" %s%21s%13s%13s%6d%10d \n ", p->name, p->id,
p->date_1, p->date_2, p->time, p->cost);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
flag=1;
}
p = p->next;
}
if (flag == 0)
{
printf("您的输入有误(暂无该房间的顾客入住相关信息)。\n");
}
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("按任意键返回主菜单\n");
getchar();
getchar();
return(1);
}
//函数结束
void End_time()
{
clean(); //system("cls");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※.......................心情愉快.........和气生财............................※");
printf("※............................................................................※");
printf("※***★★★******★★★******★★★****★★★*****★★★*******★*****★****★※");
printf("※*★*****★****★*****★***★*****★**★****★***★****★***★**★***★****★※");
printf("※★******★***★*******★*★*******★*★*****★**★****★*★******★*★****★※");
printf("※★***********★*******★*★*******★*★******★*★***★**★******★**★**★*※");
printf("※★***********★*******★*★*******★*★******★*★★★***★★★★★****★***※");
printf("※★****★★★*★*******★*★*******★*★******★*★***★**★******★****★***※");
printf("※★******★★*★*******★*★*******★*★*****★**★****★*★******★****★***※");
printf("※*★****★*★**★*****★***★*****★**★****★***★****★*★******★****★***※");
printf("※**★★★**★***★★★*******★★★***★★★*****★★★***★******★****★***※");
printf("※.......................版权所有.........翻录必究............................※");
printf("※...................................................Made by zoujun...........※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
exit(0);
}
void menu_select(int sel, struct customer *head)
{
switch(sel)
{
case 1: Add(head);
break;
case 2: List(head);
break;
case 3: Search(head);
break;
case 4: Cost(head);
break;
case 5: End_time();
break;
}
}
//主函数
void main()
{
struct customer *head;
head = (struct customer *)malloc(sizeof(struct customer));
head->next = NULL;
clean(); //system("cls"); //清屏
for ( ; ; ) // 死循环
{
menu_select(menu_show(), head); //调用菜单函数
}
}