| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 794 人关注过本帖
标题:求大神指导程序修改
只看楼主 加入收藏
非是菲菲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-12-20
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:16 
求大神指导程序修改
求大神帮忙改一下以下程序,不胜感激


#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);  //调用菜单函数
    }
搜索更多相关主题的帖子: 不胜感激 include 字符串 
2013-12-20 12:51
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
什么问题

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-20 14:10
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
so long...   也没说什么问题

三十年河东,三十年河西,莫欺少年穷!
2013-12-20 14:16
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
3楼 你慢慢看。。。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-20 14:18
IceSource
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:139
注 册:2013-12-3
收藏
得分:0 

 .
2013-12-20 15:28
非是菲菲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-12-20
收藏
得分:0 
回复 楼主 非是菲菲
图片附件: 游客没有浏览图片的权限,请 登录注册
这是程序运行时出现的错误,帮忙看一下
2013-12-21 23:35
非是菲菲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-12-20
收藏
得分:0 
回复 3楼 韶志
图片附件: 游客没有浏览图片的权限,请 登录注册
这是程序运行时出现的错误,帮忙看一下
2013-12-21 23:50
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
//定义数据结构
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构造体建立应该是:

//定义数据结构
struct room
{
char room num[10];
}num[10]={           //初始化数组
{"201",110},{"202",120},{"203",130},{"204",140},{"205",150},
{"206",160},{"207",170},{"208",180},{"209",190},{"210",200}};

或者:
//定义数据结构
struct room
{
char room num[10];
};
struct room num[10]={           //初始化数组
{"201",110},{"202",120},{"203",130},{"204",140},{"205",150},
{"206",160},{"207",170},{"208",180},{"209",190},{"210",200}};


。。。。 希望对你有帮助

未知令人期待!
2013-12-22 00:07
千树
Rank: 1
等 级:新手上路
帖 子:62
专家分:1
注 册:2013-11-4
收藏
得分:0 
回复 楼主 非是菲菲
结构体的定义后面少了一个分号
2013-12-22 14:51
非是菲菲
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-12-20
收藏
得分:0 
回复 8楼 神机军师
改了之后在那个地方还是出现相同的错误。。。
2013-12-22 23:03
快速回复:求大神指导程序修改
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031450 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved