求大神指导程序修改
求大神帮忙改一下以下程序,不胜感激#include<stdio.h>//I/O函数
#include<stdlib.h>//标准库函数
#include<string.h>//字符串函数
#include<ctype.h>//字符操作函数
#include<cstdlib>
typedef date_legal
//定义数据结构
struct room
{
char room num[10];
room num[10]={ //初始化数组
{"201",110},{"202",120},{"203",130},{"204",140},{"205",150},
{"206",160},{"207",170},{"208",180},{"209",190},{"210",200}};
}
struct date //日期
{
int year;
int month;
int day;
};
struct customer
{
char id[20]; //身份证号
char name[20]; //客户姓名
struct room num; //入住房间号与价格
char date_1[20]; //入住时间
char date_2[20]; //退房时间
int spend_time; //费用
int time; //入住天数
char begin_time[10];//开始统计时间
char end_time[10];//结束统计时间
struct customer *next;
};
int day(char *date) //输出天数
{
int k,leap;
int tab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int year,month,day;
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';
leap=((year%4==0&&year%100!=0)||year%400==0);
for(k=1;k<month;k++)
day=tab[leap][k]+day;
return day;
}
int check(char mem[],struct room member[])//比对房间号码
{ struct num[];
int i;
for(i=0;i<10;i++)
if(strcmp(num[i].number,mem)==0)
return 1;
return 0;
}
int check_price(char mem[],struct room num[])//搜寻符合的房间,并返回房间的编号
{
int q;
for(q=0;q<10;q++)
if(strcmp(num[q].number,mem)==0)
return q;
return 11;
}
//计算消费额
int cost (struct customer *head,struct room num[])
{ struct room num[50];
struct customer *p;
int i,flag,fee,k;
char mem[10];
p=head->next;
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("\n请输入需要统计费用的房间号:\n");
do {
scanf ("%s",mem);
flag=check(mem,num);
if(flag==0)
printf("\n您的输入有误(房间号不正确)\n本酒店现有房间201 202 203 204 205 206 207 208 209 210\n请重新输入:"); //函数调用check,判断房间号是否正确
}while(flag==0);
do{
printf("\n请输入开始统计时间(格式为YYYY-MM-DD)\n");
scanf("%s",p->begin_time);
while(date_legal(p->begin_time)==0) //调用date_legal,判断时间的合法性
{
scanf("%s",p->begin_time);
}
printf("\n结束统计时间(格式为YYYY-MM-DD) \n");
scanf("%s",p->end_time);
while(date_legal(p->end_time)==0)
{
printf("请输入结束统计时间:\n");
scanf("%s",p->end_time);
}
k=strcmp(p->date_1,p->date_2);
if(k>=0)
printf("\n您的输入有误(退房时间要大于入住时间)\n请重新输入:");
}while (strcmp(p->date_1,p->date_2)>=0);
i=check_price(mem,num);
if(strcmp(p->date_1,p->begin_time)<0&&strcmp(p->date_2,p->end_time)>0)
{
fee=num[i].price*(day(p->end_time)-day(p->begin_time));
printf("您的所在房间入住一天的价格为:%5d\n 统计时间内您所在房间入住天数为:%5d\n 在统计时间内您的费用为:%d\n",
num[i].price,day(p->end_time)-day(p->begin_time),fee);
}
p=p->next;
printf("按任意键返回主菜单\n");
getchar();
getchar();
return 0;
}
//菜单函数
int menu_show()
{
char s[50];
int c;
system("cls");
printf ("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf ("※※※※※※※※..酒..店..与..房..间..登..记..管..理..系..统※※※※※※※※※※");
printf ("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf ("※★★★★★★★★★★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★★★★★★★★★※");
printf ("※★※※※※※※※※★☆※※※--1.客户入住信息录入--※※★☆※※※※※※※※★※");
printf ("※★※--欢迎光临--※★☆※※※--2.客户入住信息显示--※※★☆※--欢迎光临--※★※");
printf ("※★☆★☆★☆★☆★★☆※※※--3.客户入住信息查询--※※★☆★☆★☆★☆★☆★※");
printf ("※★※--欢迎光临--※★☆※※※--4.客户入住费用统计--※※★☆※--欢迎光临--※★※");
printf ("※★※※※※※※※※★☆※※※--5.退出客户管理系统--※※★☆※※※※※※※※★※");
printf ("※★★★★★★★★★★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★★★★★★★★★※");
printf ("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf ("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
do{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("请进行菜单选择:");
scanf("%s",s);
c=atoi(s); //确保输入数字在1-5之间
}while(c<1||c>6);
return c;
}
//新住户登记
void add (struct customer *head,struct room member[])
{
struct customer *p,*temp;
char mem[10];
int flag,k,m;
p=head;
while(p->next!=NULL)
{
p=p->next;
}
system("cls");
temp=(struct customer*)malloc(sizeof(struct customer));
temp->next=NULL;
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);
}
printf("\n请输入房间号:\n本酒店现有房间201 202 203 204 205 206 207 208 209 210\n");
do{
scanf ("%s",mem);
flag=check(mem,member);
if(flag==0)
printf("\n您的输入有误(房间号不正确)\n本酒店现有房间201 202 203 204 205 206 207 208 209 210\n请重新输入:"); //函数调用check,判断房间号是否正确
}while(flag==0);
strcpy(temp->num.number,mem);
do{ //退房时间的判断时间的合法性
printf("\n开始入住时间(格式为YYYY-MM-DD)\n");
scanf("%s",temp->date_1);
while(date_legal(temp->date_1)==0) //调用date_legal,判断时间的合法性
{
scanf("%s",temp->date_1);
}
printf("\n退房时间(格式为YYYY-MM-DD) \n");
scanf("%s",temp->date_2);
while(date_legal(temp->date_2)==0)
{
printf("请输入退房时间:\n");
scanf("%s",temp->date_2);
}
k=strcmp(temp->date_1,temp->date_2);
if(k>=0)
printf("\n您的输入有误(退房时间要大于入住时间)\n请重新输入:");
}while (strcmp(temp->date_1,temp->date_2)>=0);
temp->time=day(temp->date_2)-day(temp->date_1); //计算入住天数
m=check_price(mem,member);
temp->spend_time=(day(temp->date_2)-day(temp->date_1))*num[m].price;//计算房间产生的费用
printf("您输入的信息已经录入成功\n");
p->next=temp;
printf("按任意键返回主菜单\n");
getchar();
getchar();
}
int date_legal(char *date)
{
int leap;
int year,month,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;
}
}
else{
printf("\n您的输入有误(日期输入长度错误格式为YYYY-MM-DD)\n请重新输入:");
flag=0;
}
return flag;
}
//显示现有住宿情况
void list (struct customer *head)
{
int i=0;
struct customer *p;
p=head->next;
if(head==NULL)
{
printf("记录为空,请重新输入!\n");
return;
}
system("cls");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("※******************************客户入住信息录入******************************※");
printf("※姓名 身份证号 房间号 入住时间 退房时间 入住天数 所需费用※");
printf("※----------------------------------------------------------------------------※");
while(p!=NULL)
{
printf(" %s%21s%6s%13s%13s%6d%10d\n", p->name,p->id,p->num.number,p->date_1,p->date_2,p->time,p->spend_time);
p=p->next;
}
printf("※*********************************结束***************************************※");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("按任意键返回主菜单\n");
getchar();
getchar();
}
//查询房间住宿情况
void search (struct customer *head)
{
char Num[20];
struct customer *p;
int flag;
p=head;
system("cls");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
printf("请输入待查找的房间号:\n");
scanf("%s",Num);
while(p!=NULL)
{
if(strcmp(Num,p->num.number)==0)
{
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->spend_time);
flag=1;
}
else
flag=0;
p=p->next;
}
if(flag==0)
printf("您的输入有误(暂无该房间的相关信息)\n");
printf("按任意键返回主菜单\n");
getchar();
getchar();
}
//函数结束
void end_time()
{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);
}
int menu_select(int sel,struct customer *head)
{
switch(sel)
{
case 1: add(head,num); break;
case 2: list(head); break;
case 3: search(head); break;
case 4: cost(head,num); break;
case 5: end_time();
}
return 0;
}
//主函数
void main()
{ struct customer *head;
head=malloc(sizeof(struct customer));
head->next=NULL;
system("cls"); //清屏
for( ; ; ) // 死循环
{
menu_select(menu_show(),head); //调用菜单函数
}