鱼C论坛

 找回密码
 立即注册
查看: 2242|回复: 3

悬赏一个实验设计

[复制链接]
发表于 2014-12-30 19:36:47 | 显示全部楼层 |阅读模式
50鱼币
航空客运订票系统【问题描述】:包括:查询航线、客票预定、和办理退票等。
【基本要求】:(1)每条航线所涉及的信息有:终点站名,航班号,飞机号,飞行日期(星期几),乘员定额,余票量,已订票的客户名单(包括姓名,订票量,航位等级 1,2,或3)以及等候的客户名单(包括姓名,所需票量);
(2)作为示意系统,全部数据可以只存放在内存中;
(3)系统能实现的操作功能如下:
①查询航线:根据旅客提出的终点站名输出下列信息:航班号,飞机号,飞行日期,最近一天的航班的日期和余票量;
②承办订票业务:根据客户提出的要(航班号、订票数额)查询改航班票额情况,如果还有余票,则为客户办理订票手续,输出座位号,如果满员或者余票额少于订票额,则重新询问客户要求,如果客户需要,可登记排队作为候补;
③承办退票业务:根据客户提供的情况(日期,航班)为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一位的客户,如果的退票额能满足他的需求,则为他办理订票手续,否则一次询问其他排队候补的客户。
【测试数据】:自行制定。
【实现提示】:两个客户名单可以分别由线性表和队列实现,为了方便查找,已订票客户的线性表应该按照客户姓名的有序,并且,为了方便插入和删除应该以链表作为存储结构。由于预约人数无法估计,队列也应该以链表作为存储结构。这个系统需要汇总各条航线的情况登记在一张线性表上,由于航线基本不变,可以采用顺序存储结构,别按照航班有序或者按照终点站有序。每条航线是这张表上的一个记录,包含上述八个域。其中乘员名单域为指向乘员名单链表的头指针,等货替补的客户名单域为分别指向队头和队尾的指针。

要求C/C++实现,注释尽量多一些便于理解,友好的用户界面,提示用户需要输入的信息, 将测试数据一并提交。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-1-1 10:28:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-1 20:09:42 | 显示全部楼层
这种程序也就是烦点,其实一点都不难。如果LZ实在是有困难,拿个20元RMB,就有人可以帮你写好代码了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-28 17:51:01 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*已订票者*/
typedef struct Orderman       
{
        char name[10];
        int ordernum;/*订票量*/
        int grade;
        struct Orderman *next;
}LinkList;
/*等待订票者*/
typedef struct Waiter       
{
        char name[10];
        int neednum;/*需求量*/
        struct Waiter *next;
}LQNode,*Queueptr;/*结点和结点指针类型*/
typedef struct WQueue
{
        Queueptr front;
        Queueptr rear;
}LinkQueue;
/*航线信息*/
typedef struct Airline
{
        char lname[10];/*终点站名*/
        char airnum[10];/*航班号*/
        char planenum[10];/*飞机号*/
        char day[7];/*星期几*/
        int passnum;/*乘员定额*/
        int surnum;/*余票量*/
        LinkList *order;
        LinkQueue wait;
}LineInfo;
LineInfo *begin;/*全局变量*/
void Display(LineInfo *infomt)
{
        printf("%s\t%3s\t%5s\t%5s\t%8d\t%d\n",infomt->lname,infomt->airnum,infomt->planenum,infomt->day,infomt->passnum,infomt->surnum);
}
void AirLineInfo()/*浏览全部航线信息*/
{
        LineInfo *infomt;
        int i=0;
        infomt=begin;
        printf("终点站\t航班号\t飞机号\t飞行周日   乘员定额   余票量\n");
        for(;i<10;i++,infomt++)
        Display(infomt);
        printf("\n");
}
void SearchOneLine()/*查询某一航班信息*/
{
        LineInfo *infomt;
        int i=0,j=0;
        char name[20];
        infomt=begin;
        printf("请输入终点站名:");
        scanf("%s",name);
        for(;i<10;i++,infomt++)
        if(0==strcmp(name,infomt->lname))/*按终点站名查询航班*/
        {
        j++;
        if(1==j) printf("终点站\t航班号\t飞机号\t飞行周日   乘员定额   余票量\n");
        Display(infomt);
        }
        if(!j)        printf("对不起,没有飞往%s的航班\n",name);
}
LineInfo *FindAirnum()/*根据输入的航班号查询并以指针形式返回*/
{          LineInfo *infomt;
           int i=0;
        char number[10];
          infomt=begin;
           printf("请输入航班号:");
           scanf("%s",number);
           for(;i<10;infomt++,i++)
        if(!strcmp(number,infomt->airnum))
        return infomt;
    printf("对不起,没有该航班!\n");
           return NULL;
}
void PutOrder() /*输出订票客户的名单信息*/
{         LinkList *p;
          LineInfo *infomt;
           infomt=FindAirnum();/*根据航班号得到*/
           p=infomt->order;
           if(p!=NULL)
        {
           printf("客户姓名   订票数额   舱位等级\n");
           for(;p!=NULL;p=p->next)
        printf("%s\t\t%d\t%d\n",p->name,p->ordernum,p->grade);
    }
        else printf("该航线暂时没有客户订票!\n");
}
void PutWaiter()/*输出等候订票客户的名单信息*/
{        Queueptr p;
        LineInfo *infomt;
           infomt=FindAirnum();
        p=infomt->wait.front;
        if(p!=NULL)
        {
        printf("客户姓名    预订票数\n");
        for(;p!=NULL;p=p->next)
        printf("%s\t\t%d\n",p->name,p->neednum);
        }
        else printf("该航线暂时没有客户等票!\n");
}
LinkList *InsertLink(LinkList *head,int amount,char name[],int grade)/*增加订票乘员名单域的客户信息*/
{        LinkList *p,*newbase;
           p=head;
           newbase=(LinkList*)malloc(sizeof(LinkList));
           if(!newbase)
        {
        printf("\nNo enough memory\n");
        return NULL;
        }
           strcpy(newbase->name,name);
           newbase->ordernum=amount;
           newbase->grade=grade;
           newbase->next=NULL;
           if(head==NULL)/*若原无订票客户信息*/
    {
        head=newbase;
        newbase->next=NULL;
        }
           else
    {
        for(;p->next!=NULL;p=p->next);
        p->next=newbase;
        }
        return head;
}
LinkQueue AddQueue(LinkQueue q,char name[],int amount)/*增加排队等候的客户名单域*/
{         Queueptr newbase;
          newbase=(Queueptr)malloc(sizeof(Queueptr));
          strcpy(newbase->name,name);
          newbase->neednum=amount;
          newbase->next=NULL;
          if(q.front==NULL)/*若原排队等候客户名单域为空*/
    q.front=newbase;
          else
    q.rear->next=newbase;
          q.rear=newbase;/*队列尾指针位于新加入的结点*/
          return q;
}
void Order()/*订票业务*/
{          LineInfo *infomt;
           int amount,grade;
           char name[10],select1,select2;
           infomt=begin;
           infomt=FindAirnum();
           while(NULL==infomt)/*根据客户提供的航班号进行查询,若为空询问是否需要查询其他航班*/
        {
                printf("请问您是否需要查询别的航班?需要请按Y,不需要请按N:");
                fflush(stdin);
                scanf("%c",&select1);
                if(select1=='Y'||select1=='y')
                infomt=FindAirnum();
                else return;
        }
           printf("请输入您订票的数量:");
           scanf("%d",&amount);
           if(amount>infomt->passnum)/*客户订票额超过乘员定额*/
           {          char choose1,choose2;       
                   printf("对不起,您的订票数量已经超过乘员定额!\n按Y:查询到达同一目的地的其他航班,按N:退出:");
                fflush(stdin);
                scanf("%c",&choose1);
                   if(choose1=='Y'||choose1=='y')
                   {
                   SearchOneLine();
                   printf("请问是否选择其他航班,按Y:是,按N:否");
                   fflush(stdin);
                   scanf("%c",&choose2);
                   if(choose2=='Y'||choose2=='y')
                   {
                   infomt=FindAirnum();
                   printf("请输入您订票的数量:");
                   scanf("%d",&amount);          
                   }
                   else return;
                }
                else return;
           }
           if(amount<=infomt->surnum)/*客户订票额未超过余票量,订票成功并等记信息*/
           {
            int i;
                printf("请输入您的姓名(订票客户):");
            scanf("%s",name);
                  printf("请输入您购买的机票舱位等级(等级1,2或3):");
             scanf("%d",&grade);
             while(grade>3)/*舱位等级1,2,或3,输入错误需重新输入*/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                {
                printf("舱位等级只有1,2或3,请重新输入:");
             scanf("%d",&grade);
                }
                infomt->order=InsertLink(infomt->order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/
             for(i=0;i<amount;i++)/*依次输出该订票客户的座位号*/
               printf("%s的座位号是:%d\n",name,infomt->passnum-infomt->surnum+i+1);
             infomt->surnum-=amount;/*该航线的余票量应减掉该客户的订票量*/
                  printf("订票成功,祝您旅途愉快!\n");
   }
           else /*若满员或余票不足,询问客户是否需要查询其他航班或排队等候*/
           {  
                   printf("余票不足,按Y:排队等候,按C:查询到达同一目的地的其他航班,按N:退出:");
                   fflush(stdin);
                   scanf("%c",&select2);
                   if(select2=='Y'||select2=='y')
                   {          printf("请输入您的姓名(等候订票客户):");
                scanf("%s",name);
                      infomt->wait=AddQueue(infomt->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/
                      printf("等候登记成功!余票足够时会自动为您订票\n");
                   }
                   else if(select2=='C'||select2=='c')
                   {
                           char choose3;
                        SearchOneLine();
                           printf("请问是否选择其他航班,按Y:是,按N:否:");
                           fflush(stdin);
                           scanf("%c",&choose3);
                           if(choose3=='Y'||choose3=='y')
                           Order();/*d递归调用*/
                        else return;       
                }
                else printf("欢迎您再次订购!\n");
        }
}
void RefundTicket()/*退票业务*/
{  
        LineInfo *infomt;
           LQNode *t,*q,*f,*r;
           LinkList *p1,*p2,*head;
           int grade,num;
        char refundname[10];
           if(!(infomt=FindAirnum())) return;/*调用查询函数,根据客户提供的航班号进行搜索*/
           head=infomt->order;
           p1=head;
           printf("请输入您的姓名(退票客户):");
           scanf("%s",refundname);
           for(;p1!=NULL;p1=p1->next)/*根据客户提供的姓名到订票客户名单域进行查询*/
           {
         if(0==strcmp(refundname,p1->name))
         break;
         p2=p1;          
        }
        if(!p1)
        {
        printf("对不起,您没有订过票!\n");/*若未订过票,退出订票业务*/
        return;
        }
           else/*查询成功,删除订票客户名单中该订票者的信息*/
        {
        printf("您的订票量为:%d\n",p1->ordernum);
        printf("请输入您的退票数量:");
        scanf("%d",&num);
        while(num>p1->ordernum)/*退票数量超出订票数量*/
               {
                        printf("退票数量超出订票数量,请重新输入:");
                        scanf("%d",&num);
                }
                if(p1==head)
        {   grade=p1->grade;
                  if(p1->ordernum==num)/*退所有的票*/
                        {
                          head=p1->next;
                          free(p1);
                        }
                  else
                  {
            if(num<p1->ordernum)/*退部分票*/
                        head->ordernum-=num;
                  }
        }
        else
        {
                   if(p1->ordernum==num)/*退所有的票*/  
                        {
                        p2->next=p1->next;
                        free(p1);
                        }
                  else
                  {
            if(num<p1->ordernum)
                        p1->ordernum-=num;
                  }
        }
            infomt->surnum+=num;/*余票增加*/
                printf("退票成功!欢迎您再次订票\n");
        }
           infomt->order=head;/*重新将航线名单域指向订票单链表的头指针 */
           if(infomt->wait.front==NULL)
           return;
        f=(infomt->wait).front;
           r=(infomt->wait).rear;
           t=f;/*t为满点条件的等候名单域*/
    if(infomt->wait.front->neednum<=infomt->surnum)/*头结点的等候者满足订票条件*/
        {
    int i;
           infomt->wait.front=t->next;/*头结点出队列*/
    printf("%s订票成功!\n",t->name);
    for(i=0;i<t->neednum;i++)/*输出座位号*/
    printf("%s的座位号是:%d\n",t->name,(infomt->surnum)-i);
    infomt->surnum-=t->neednum;
    infomt->order=InsertLink(infomt->order,t->neednum,t->name,grade);/*插入到订票客户名单链表中*/
    free(t);
    return;
           }
           else printf("余票不足,%s",t->name);
        for(q=t,t=t->next;t!=NULL;q=t,t=t->next)
        {
        if((infomt->surnum)>=(t->neednum)&&t!=NULL)/*若头结点的等候者不满足订票条件*/
              {  
                  int i;
              q->next=t->next;/*t结点出队列*/
                   printf("\n\t%s订票成功!\n",t->name);
              for(i=0;i<t->neednum;i++)
        printf("%s的座位号是:%d\n",t->name,(infomt->surnum)-i);
              infomt->surnum-=t->neednum;
                   infomt->order=InsertLink(infomt->order,t->neednum,t->name,grade);
              free(t);
                return;
                     }
           else printf(",%s",t->name);
        }
        printf("都无法成功订票\n");
}
int Menu()/*主函数*/
{
           char s[20];
           int c;
        printf("-------------------------------------------------------------------------------- "
            "-----------------------    欢迎使用航空客运订票系统     ----------------------"
            "                              * * * * * * * * * *             \n"
            "                               1.浏览全部航线信息             \n"
                    "                               2.查询航线信息                                    \n"
                        "                               3.浏览订票客户信息                       \n"
            "                               4.浏览等候订票客户信息         \n"
            "                               5.办理订票业务                 \n"
            "                               6.办理退票业务                 \n"
                    "                               7.退出系统                     \n"
                "                          计科6班  3114006065  郑湘平         \n"
                 "-------------------------------------------------------------------------------- ");
   do{
     printf("                             请选择并按回车键结束:");
     scanf("%s",s);
     c=atoi(s);
   }while(c<0||c>7);
   return c;
}
void main()
{
        LineInfo air[10]={{"北京","1","B1530","日",5,5},{"上海","2","S1112","一",5,5},{"香港","3","H1026","二",5,5},
        {"广州","4","G1011","三",5,5},{"深圳","5","S2140","四",5,5},{"北京","6","B3054","五",10,10},
        {"上海","7","S4839","六",10,10},{"香港","8","H2964","日",10,10},
        {"广州","9","G3945","日",10,10},{"深圳","10","S7421","一",10,10}};/*初始化航线信息*/
          begin=air;
        for(;;)
        {
        switch(Menu()){
                               case 1:AirLineInfo();break;
                               case 2:SearchOneLine();break;
                               case 3:PutOrder();break;
                               case 4:PutWaiter();break;
                               case 5:Order();break;
                               case 6:RefundTicket();break;
                               case 7:exit(0);
                            }
        }
}





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-2 00:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表