火车售票系统的设计与实现(上)

题目:火车售票系统的设计与实现
任务:通过此系统可以实现售票、退票、车票剩余情况查询等功能。每张车票包含 车次、座位信息。
要求:在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。
为简单起见,在此假设所有出售的车票均为同一车次的车票。
退票时,必须是车站售出的车票才能退,否则视为无效票,不能退票。

定义如下:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 3  //定义火车车程量最大值
typedef struct wat_ros
{
char name[10];//姓名
int req_amt;   //订票量
struct wat_ros *next;
}qnode,*qptr;
typedef struct pqueue
{
    qptr front;  //等候替补客户名单域的头指针
    qptr rear;    //等候替补客户名单域的尾指针
}linkqueue;
typedef struct ord_ros
{
char name[10]; //客户姓名
int ord_amt;   //订票量
int grade;     //车厢号
struct ord_ros *next;
}linklist;
struct trainline
{
char ter_name[50];   //终点站名
char train_num[50]; //车次
char day[50];        //运行周日
int tkt_amt;       //乘员定额
int tkt_sur;       //余票数量
    linklist *order;   //乘员名单域,指向乘员名单链表的头指针
    linkqueue wait;    //乘员名单域,分别指向排队等候名单队头队尾指针
}lineinfo;
struct trainline *start;

打印基本信息:

void display(struct trainline *info)
{
//打印基本信息
printf("%8s\t%3s\t%s\t\t%3d\t%10d\n",info->ter_name,info->train_num,info->day,info->tkt_amt,info->tkt_sur);
}

显示车次信息:

void list()
{
struct trainline *info;
int i=0;
    info=start;
printf("终点   车次   运行时间  成员数量   剩余数量\n");
while(i<MAXSIZE)
{
display(info);
        info++;
        i++;
}
printf("\n\n");
}

搜索功能(根据客户提出的终点站名输出车次信息):

void search()
{   //根据客户提出的终点站名输出车次信息
struct trainline *info,*find();
char name[10];
int i=0;
    info=start;
printf("请输入您要去的终点站名:\n");
scanf("%s",name);
while(i<MAXSIZE)
{
if(!strcmp(name,info->ter_name))
break;
        info++;
        i++;
}
if(i>MAXSIZE)
printf("没有找到该终点站!\n");
else
{
printf("终点   车次   运行时间  成员数量   剩余数量\n");
display(info);
}
}

查询功能(根据系统提供的车次号进行查询并且以指针形式返回):

struct trainline *find()
{
//根据系统提供的车次号进行查询并且以指针形式返回
struct trainline *info;
char number[10];
int i=0;
    info=start;
printf("请输入你的车次号");
scanf("%s",number);
while(i<MAXSIZE)
{
if(!strcmp(number,info->train_num))
return info;
        info++;
        i++;
}
printf("抱歉,没有找到车次");
return NULL;
}

打印功能(打印订票乘员名单域的客户名单信息):

void prtlink()
{
//打印订票乘员名单域的客户名单信息
    linklist *p;
struct trainline *info;
    info=find();
    p=info->order;
if(p!=NULL)
{
printf("乘员姓名  已购票数  座位号\n");
while(p)
{
printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);
            p=p->next;
}
}
else
printf("已购票人员为0!\n");
}

订票功能(添加订票乘员名单域的客户信息):

linklist *insertlink(linklist *head,int amount, char name[],int grade)
{
//添加订票乘员名单域的客户信息
    linklist *p1,*news;
    p1=head;
    news=(linklist*)malloc(sizeof(linklist));
if(!news)
{
printf("\n 没有空间!\n");
return NULL;
}
strcmp(news->name,name);
    news->ord_amt=amount;
    news->grade=grade;
    news->next=NULL;
if(head==NULL)
{
        head=news;   //若原没有乘客订票
        news->next=NULL;
}
else
        head=news;
    news->next=p1;
return head;
}

增加排队等候的客户的名单域 功能:

linkqueue appendqueue(linkqueue q,char name[],int amount)
{
//增加排队等候的客户的名单域
    qptr news;
    news=(qptr)malloc(sizeof(qnode));
strcpy(news->name,name);
    news->req_amt=amount;
    news->next=NULL;
if(q.front==NULL)
        q.front=news;
else
        q.rear->next=news;
    q.rear=news;
return q;
}
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redamancy_meng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值