标题:请高手帮忙如何修改订票系统
只看楼主
tonlin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2009-10-14
结帖率:69.23%
 问题点数:0 回复次数:1 
请高手帮忙如何修改订票系统
程序代码:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
                           /*定义存储火车信息的结构体*/
struct train 
{   char num[10];          /*列车号*/
    char city[10];         /*目的城市*/
    char takeoffTime[10];          /*发车时间*/
    char receiveTime[10];      /*到达时间*/
    int  checi;            /*车次*/
    int  price;          /*票价*/
    int  bookNum ;           /*票数*/
};
                             /*订票人的信息*/
struct man 
{   char  trainnum[10];   /*列车号*/
    char num[10];                    /*ID*/
    char name[10];               /*姓名*/
    int  bookNum ;               /*需求的票数*/              
};

                            
typedef struct node            /*定义火车信息链表的结点结构*/
{
    struct train data ;
    struct node * next ;
}Node,*Link ;
                          /*定义订票人链表的结点结构*/
typedef struct people 
{
    struct man data ;
    struct people*next ;
}bookMan,*bookManLink ;

void InsertTraininfo(Link linkhead) /*添加列车数据*/
{
    struct node *r,*s,*p;
    char num[10];
    r = linkhead ;
    s = linkhead->next ;
    while(r->next!=NULL)
    r=r->next ;
    while(1)
    {
        printf("请输入列车号(按0返回)");
        scanf("%s",num);
        if(strcmp(num,"0")==0)
          break ;
                                       
        while(s)                     /*判断该列列车信息是否已经存在*/
        {
            if(strcmp(s->data.num,num)==0)
            {
                printf(" 第'%s'列列车信息已存在!\n",num);
                return ;
            }
            s = s->next ;
        }
        p = (struct node*)malloc(sizeof(struct node));
        strcpy(p->data.num,num);                      /*输入列车信息*/ 
        printf("请输入该列车终点站:");
        scanf("%s",p->data.city);
        printf("请输入该列车出发时间:");
        scanf("%s",p->data.takeoffTime);
        printf("请输入该列车到达时间:");
        scanf("%s",&p->data.receiveTime);
        printf("请输入车票价格:");
        scanf("%d",&p->data.price);
        printf("请输入该列车总票数:");
        scanf("%d",&p->data.bookNum);       
        printf("请输入该列车车次:");
        scanf("%d",&p->data.checi);     
        r->next=p ;
        r=p ;
    }
    p->next=NULL ;
}

void logo()              /*主界面函数*/
{   system("cls");
    puts("\t\t********************************************************");
    puts("\t\t*               欢迎使用列车订票系统                   *");
    puts("\t\t********************************************************");
    puts("\t\t*                      选项:                           *");
    puts("\t\t*                1:添加列车数据                        *");
    puts("\t\t*                2:查询剩余票数                        *");
    puts("\t\t*                3:定票                                *");
    puts("\t\t*                4:退票                                *");
    puts("\t\t*                0:退出                                *");
    puts("\t\t********************************************************");
}

void Refund(Link l,bookManLink k)             /*退票子函数*/
 {  Node*r ;
    bookMan*v,*h ;
    char str[10],str1[10],str2[10];
    int mar=0,mar1=0,n;
    r=l->next;
    h=k->next;
    printf("请输入您的姓名:"); 
    scanf("%s",str1);
    printf("请输入您的ID:");
    scanf("%s",str2); 
    while(h)                  /*用户登录*/
    { 
      if(strcmp(h->data.name,str1)==0&&strcmp(h->data.num,str2)==0)  
      {mar1=1;break;} 
      h=h->next;     
    } 
      if(mar1==1)
      {
       printf("请输入您要退定哪列列车的票: ");
       scanf("%s",str);
       printf("请输入您要退的票数: ");
       scanf("%d",&n);
        while(h)
        {
         if(strcmp(h->data.trainnum,str)==0&&n==h->data.bookNum) 
         {mar1=2;break;}
         h=h->next;
        }
      } 
       
       while(r&&mar1==2)
        {
           if(strcmp(r->data.num,str)==0)
           {
            mar=1 ;
            printf("\n恭喜!退订成功!\n\n");
            r->data.bookNum=r->data.bookNum+n;
            printTrainInfo1(r);break;
           }
           
           r=r->next ;
        }
      
      
    if(mar1==0)printf("对不起登录出错!");
    if(mar==0&&mar1==1)printf("对不起!您没有定制前往该城市的票!或者您提交票数出错"); 
  }
void BookTicket(Link l,bookManLink k)    /*订票子函数*/
{
    Node*r[10],*p,*q;
    int ch;
    bookMan*v,*h ;
    int i=0,t=0,dem;
    char str[10],str1[10],str2[10],str3[10];
    v=k ;
    while(v->next!=NULL)
    v=v->next ;
    printf("请输入您要定制哪个城市的票: ");
    scanf("%s",&str);
    p=l->next ;
    while(p!=NULL)
    {
        if(strcmp(p->data.city,str)==0)
        {
            r[i]=p ;
            i++;
        }
        p=p->next ;
    }
    printf("\n\n相关符合信息:%d\n",i);
    for(t=0;t<i;t++)
    printTrainInfo(r[t]);
    if(i==0)
    printf("\n\t\t\t对不起!没有找到!\n");
    else 
    {
        printf("\n您确定要定制吗?<1/0>\n");
        scanf("%d",&ch);
        if(ch == 1)
        {
            h=(bookMan*)malloc(sizeof(bookMan));               
            printf("请输入你要定的列车号: ");
            scanf("%s",str3); 
            strcpy(h->data.trainnum,str3);
            printf("请输入您的名字: ");        /*存储用户信息*/
            scanf("%s",&str1);
            strcpy(h->data.name,str1);
            printf("请输入您的ID: ");
            scanf("%s",&str2);
            strcpy(h->data.num,str2);
            printf("请输入您要定的票数: ");
            scanf("%d",&dem);
            p=l->next ;
            while(p!=NULL)                  /*列车总票数计算*/
           {
             if(strcmp(p->data.num,str3)==0)
             {p->data.bookNum=p->data.bookNum-dem;
              break;
              }
            p=p->next ;
           }
            h->data.bookNum=dem ;
            h->next=NULL ;
            v->next=h ;
            v=h ;
            printf("\n恭喜!您已经定了 %d 张前往%s的票!",dem,p->data.city);
            getch();

        }
    }
}


 printTrainInfo(struct node*p)   /*打印火车票信息*/
{
    puts("\n信息如下:");
    printf(">>列车号: %s\n",p->data.num);
    printf(">>终点站: %s\n",p->data.city);
    printf(">>出发时间: %s\n",p->data.takeoffTime);
    printf(">>到达时间:  %s\n",p->data.receiveTime);
    printf(">>票价:  %d\n",p->data.price);
    printf(">>该列车总票数: %d\n",p->data.bookNum);
    printf(">>该列车车次: %d\n",p->data.checi);
}
printTrainInfo1(struct node*p)      /*打印某列列车总票数*/
{printf(">>目前前往该城市第%s列列车总票数: %d\n",p->data.num,p->data.bookNum);}
void check(Link l)  /*查看前往某城市列车总票数*/
{
    Node*r ;
    char str[10];
    int mar=0 ;
    r=l->next ;
    printf("请输入您要查看前往哪个城市列车的总票数: ");
    scanf("%s",str);
    while(r)
    {
        if(strcmp(r->data.city,str)==0&&r->data.bookNum<200)
        {
            mar=1 ;
           
            printTrainInfo1(r);
        }
        r=r->next ;
    }
    if(mar==0)
    printf("\n\t\t\t对不起!没有该信息!\n");
    
}

int main() /*主函数*/
{
    int sel;
    Link l ;
    
    bookManLink k ;
    l=(Node*)malloc(sizeof(Node));
    l->next=NULL ;
    k=(bookMan*)malloc(sizeof(bookMan));
    k->next=NULL ;
    
    while(1)
    {
        
        logo();
        printf("\t\t请选择:  ");
        scanf("%d",&sel);
        system("cls");

        switch(sel)
        {
            case 1 :
              InsertTraininfo(l);break ;
            case 2 :
               check(l);break ;
            case 3 :
              BookTicket(l,k);break ;
            case 4 :
               Refund(l,k);break ;
            case 0 :
            return 0;
        }
        printf("\n按任意键继续.......");
        getch();
    }
 return 0;
}
代码没有问题了,现在我想增加一个功能:在订票的时候增加一个座位信息;例如我定3张某航班的票分别打印出每张票的座位号。我想了好久没有头绪,来请教高手,先谢谢了
搜索更多相关主题的帖子: 订票 系统 
2010-01-06 13:37
tonlin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2009-10-14
得分:0 
如果我再用一个链表来存放每个航班是否可行?
2010-01-06 13:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-295121-1-1.html




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

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