标题:求帮助,数据结构程序运行有问题
只看楼主
苏酥甜心糕XD
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-12-1
结帖率:0
已结贴  问题点数:20 回复次数:3 
求帮助,数据结构程序运行有问题
题目:(一)试设计一个航空客运定票系统。基本要求如下:
1、    每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
2、    系统能实现的操作和功能如下:
1)    查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
2)    承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。若需要,可登记排队候补;
3)    承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
3、    实现提示:两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。由于预约人数无法预计,队列也应以链表作为存储结构。
     创建链表,队列
     查找链表,队列插入,删除
下面是我自己写的程序:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct FLIGHT
{
    char end[10];//终点站
    int number;//航班号
    char id[10];//飞机号
    int  date;//航班日期
    int menber;//飞机票定额
    int rest;//飞机票余额
    FLIGHT *next;
}flight;

typedef struct CUSTOM
{
    char name[10];
    int number;//航班号
    int count;//订票数量
    int rank;//舱位等级
     CUSTOM *next;
}custom;

typedef struct     WAIT
{
    char name[10];
    int count;
    int number;
    WAIT *next;
}wait;

flight * createnohead1() //创建第一个结构体的链表
{   
   FLIGHT *head1,*tail,*p;
   char end[10],id[10];
   int number,date,menber,rest;
   head1=tail=NULL;
    printf("请输入链表的初始数据:航班号,终点站,飞机号,航班日期,飞机票定额,余票(以-1结束)\n");
    scanf("%d",&number);
    scanf("%s",end);
    scanf("%s",id);
    scanf("%d",&date);
    scanf("%d",&menber);
    scanf("%d",&rest);
    printf("\n");
     while(number!=-1)   //输入数据加入链表尾部
     {
         p=( FLIGHT *)malloc(sizeof(FLIGHT));
         if(p==NULL)
         {
             printf("Malloc Failure\n");
             return NULL;
         }
         p->number=number;
         strcpy(p->end,end);
         strcpy(p->id,id);
         p->date=date;
         p->menber=menber;
         p->rest=rest;
         p->next=NULL;
         if(head1==NULL)
          head1=p;
         else
         tail->next=p;
         tail=p;
         scanf("%d",&number);
         scanf("%s",end);
         scanf("%s",id);
         scanf("%d",&date);
         scanf("%d",&menber);
         scanf("%d",&rest);
         printf("\n");

     }
    return head1;
}

custom * createnohead2 () //创建第二个结构体的链表
{   
  custom *head2,*tail,*p;
  char name[10];
  int number,count,rank;
head2=tail=NULL;
printf("请输入链表的初始数据:航班号,姓名,订票数量,舱位等级(以-1结束)\n");
scanf("%d",&number);
scanf("%s",name);
scanf("%d",&count);
scanf("%d",&rank);
printf("\n");

     while(number!=-1)   //输入数据加入链表尾部
     {
         p=( custom *)malloc(sizeof(custom));
         if(p==NULL)
         {
             printf("Malloc Failure\n");
             return NULL;
         }
         p->number=number;
         strcpy(p->name,name);
         p->count=count;
         p->rank=rank;
         p->next=NULL;
         if(head2==NULL)
          head2=p;
         else
         tail->next=p;
         tail=p;
         scanf("%d",&number);
         scanf("%s",name);
         scanf("%d",&count);
         scanf("%d",rank);
         printf("\n");

     }
    return head2;
}

wait * createnohead3 () //创建第三个结构体的链表
{   
 wait *head3,*tail,*p;
  char name[10];
  int number,count;
  head3=tail=NULL;
  printf("请输入链表的初始数据:航班号,姓名,订票数量(以-1结束)\n");
  scanf("%d",&number);
  scanf("%s",name);
  scanf("%d",&count);
  printf("\n");

     while(number!=-1)   //输入数据加入链表尾部
     {
         p=( wait *)malloc(sizeof(wait));
         if(p==NULL)
         {
             printf("Malloc Failure\n");
             return NULL;
         }
         p->number=number;
         strcpy(p->name,name);
         p->count=count;
         p->next=NULL;
         if(head3==NULL)
          head3=p;
         else
         tail->next=p;
         tail=p;
         scanf("%d",&number);
         scanf("%s",name);
         scanf("%d",&count);
         printf("\n");

     }
    return head3;
}
custom * insert(custom *head2,char name[10],int number,int count,int rank)
{
     custom *tail,*p;
     p=(custom *)malloc(sizeof(custom));
     if (p==NULL)
     {  printf("memory allocate error");
           exit(1);
     }
     strcpy(p->name,name);
     p->number=number;
     p->count=count;
     p->rank=rank;
     p->next=NULL;
     if(head2==NULL) return p;
     tail=head2;
     while(tail->next)
     {
         tail=tail->next;
     }

     tail->next=p;
     printf("%d",head2->rank);
     return head2;

}
wait * winsert(wait *head3,char name[10],int number,int count)
{
     wait *tail,*p;
     p=(wait *)malloc(sizeof(wait));
     if (p==NULL)
     {  printf("memory allocate error");
           exit(1);
     }
     strcpy(p->name,name);
     p->number=number;
     p->count=count;
     p->next=NULL;
     if(head3==NULL) return p;
     tail=head3;
     while(tail->next)
     {
         tail=tail->next;
     }

     tail->next=p;
     return head3;

}
wait *  zdelete( wait *head3, int pos) //&表示引用传递
{
     wait *p,*q;
     int i=1;
     if(head3==NULL||pos<=0)
     {      
         return head3;
     }
     p=head3;
     q=head3;
     while(q->next&&i<pos)
     {  
         p=q;   
         q=q->next;   
         i++;
     }     
     if(i<pos){
         return head3;}
     if(q==head3) //只有一个节点
         head3=NULL;
     else
         p->next=q->next;
     free(q);
     return head3;
}
custom *  Delete( custom *head2, int pos) //&表示引用传递
{
     custom *p,*q;
     int i=1;
     if(head2==NULL||pos<=0)
     {      
         return head2;
     }
     p=head2;
     q=head2;
     while(q->next&&i<pos)
     {  
         p=q;   
         q=q->next;   
         i++;
     }     
     if(i<pos){
         return head2;}
     if(q==head2) //只有一个节点
         head2=NULL;
     else
         p->next=q->next;
     free(q);
     return head2;
}
void search()
{
    flight *head1;
    char end[10];
    int date;
    flight *q;
    q=head1;
    scanf("%s %d",end,&date);
    printf("有以下航线:");
    printf("\n");
    while(head1)
    {
        if(strcmp(head1->end,end)==0)
            printf("%d %s &d\n",head1->number,head1->id,head1->date);
        head1=head1->next;
    }
    printf("最近一天的航班:");
    printf("\n");
       while(q)
    {
        if(strcmp(q->end,end)==0)
        {
            if(q->date==date)
            printf("%d %s &d\n",q->number,head1->id,q->date);
        }
        q=q->next;
    }
   
}
void book()
{
    flight *head1;
    custom *head2;
    wait *head3;
    char str[5];
    char name[10];
    int number;
    int count;
    int rank;
    scanf("%s %d %d %d",name,&number,&count,&rank);
    while(head1)
    {
        if(head1->number==number&&head1->rest==count)
        {
           insert(head2,name,number,count,rank);
           head1->rest=head1->rest-count;
        }
        else
        {
            printf("是否要排队候补?");
            scanf("%s",str);
            if(strcmp(str,"yes")==0)
            {
               winsert(head3,name,number,count);
            }
            else
                break;
        }
        head1=head1->next;
    }
}
void refund()
{
    flight *head1;
    custom *head2;
    wait *head3;
    int i=0,j=0;
    int date;
    int number;
    char name[10];
     scanf("%d %d %s",&date,&number,name);
        while(head2)//退票遍历已订票的客户,然后删除
    {
        i++;
        if(strcpy(head2->name,name)==0&&head2->number==number)
        {
            Delete(head2,i);
            while(head1)
            {
                 if(head1->number==number&&head1->date==date)
                 {
                     head1->rest=head1->rest+head2->count;
                     break;
                 }
                 head1=head1->next;
            }
            break;
        }
        head2=head2->next;
    }
    printf("退票完成。");
    while(head3)//遍历候补客户,有的然后完成候补,然后删除
    {
        j++;
        if(head3->number==number)
        {
            zdelete(head3,j);
            while(head1)
            {
                if(head1->number==head3->number)
                {
                    head1->rest=head1->rest+head3->count;
                    break;
                }
                head1=head1->next;
            }
            break;
        }
        head3=head3->next;
    }


}
void main()   
{
      int i;
      createnohead1();
      createnohead2();
      createnohead3();
      printf("*****************************请选择服务*****************************\n");
      printf("1.查询航班   2.预订机票  3.退票服务  4.退出服务\n");
      printf("*********************************************************************\n");
      scanf("%d",&i);
      switch(i){
      case 1:search();//查询函数
              break;
      case 2:book();//预定函数
              break;
      case 3:refund();//退票
              break;
      case 4:break;
      defult:printf("输入有误");break;
}
printf("欢迎下次使用!");
}
输入第一组数据:
1001 beijing plane1 21 100 50
1002 shanghai plane2 22 100 40
1003 tianjin plane3 23 100 30
-1 guangzhou plane4 100 60
这个行的,接着输入第二组数据就有问题了:
1001 any 50 3
1002 black 60 2
然后就不能运行了
编译也没错误,到底哪里错了,求助,给个提示也好
搜索更多相关主题的帖子: 终点站 订票 信息 姓名 
2014-06-05 19:32
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:10 
我觉得你得学会调试,一步步跟进看看

程序代码:
createnohead2 () {
  ...
  scanf("%d", rank);    //这行有问题
  ...
}



[fly]存在即是合理[/fly]
2014-06-06 17:00
zycz2p
Rank: 2
等 级:论坛游民
帖 子:22
专家分:10
注 册:2013-11-12
得分:10 
回复 2 楼 azzbcc
大牛求教。。怎么分开调试啊。。。我也是写完了一并调试。。。百十来个错一个一个改。。。好蛋疼。。。
2014-06-06 20:15
zycz2p
Rank: 2
等 级:论坛游民
帖 子:22
专家分:10
注 册:2013-11-12
得分:0 
回复 2 楼 azzbcc
大牛求教。。怎么分开调试啊。。。我也是写完了一并调试。。。百十来个错一个一个改。。。好蛋疼。。。
2014-06-06 20:15



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




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

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