火车票订票模拟软件设计
if(p->k==0)m++;
if(p->k==2)n++;
p=p->next;
}
printf("剩余票数%d\n",sy); //输出余票数,下同
printf("已售车票%d\n",m);
printf("已订车票%d\n",n);
}
void CHARUXINXI(LinkList linkhead) //查询
{
p=p->next; //p的下一节点的指针域赋予p
}
printf("请输入6位身份证号码\n");
int a;
scanf("%d", &a); //输入身份证号
if(p->k==1) //链表p的标志k为1
{
printf("成功订票!\n\n\n"); //输出票务信息
printf("你订的车票信息:");
{ LNode *p,*r,*s ; //分配*p,*r,*s三个指针
int j,i; //定义j,i
r = linkhead ;
s = linkhead->next; //头节点下一节点给s
while(r->next!=NULL) //当指针r的下一节点不为空
r=r->next ; //r下一节点的值赋予r
执行时,设置1个选择函数,用户分别1、2、3、4、5,1、2、3、4、5分别代表一个功能
1,执行查询。
2,执行预定。
3,执行购票。
4,执行退票。
5,执行退出。
五、
1.总体流程图
表示总体的程序与操作,具体执行有模块运行。
2.预订操作
3.购票操作
4.退票操作
六、
#include<stdio.h>
#include<malloc.h>
火车出行由于现在成本低,较为舒适,速度快,是现在选择较多。正因如此,每年春运一票难求,大量不法分子趁机进行违法活动。所以此次以火车售票来进行模拟软件的设计(不包括支付系统)。
二、
利用C语言设计一个较为简单的火车售票系统,可进行显示、查询、预订、购票、退票等基本操作。
假设每一张车票对应一个座位,将所有的座位共同建立起一个带有头节点的销售链表。若再定义一个链表,使链表中的每个节点地址指向代表车次的每个链表,便可构成一个车站所有售卖车票的信息。同理,将代表多个车站的庞大链表用另一个链表和指针表示,附加上支付系统,就可编写出一个简易的全国性售票系统。
#include<string.h>
typedef struct LNode //数据类型
{
int jie; //车厢
int seat; //座位号
int k; //标志k
int price; //价格
struct LNode *next; //指针域
}LNode,*LinkList,*PNode;
r=p ; //p=r
}
}
}
void XIANSHIPIAOWU(LinkList h) //遍历整个表并显示
{
PNode p=h->next;
int a=1,i=0;
printf("\n");
while(p)
{
printf("%d ",p->jie); //输出车厢号
printf(" %d",p->seat); //输出座位号
int cx,pos; //定以车厢号,座位号
printf("请输入你要退车票的车厢号:\n注意:输入值小于3\n");
//车厢号输入值有限制
scanf("%d",&cx);
printf("请输入你要退的座位号:\n注意:输入值小于24\n");
//座位号输入值有限制
scanf("%d",&pos);
LNode *sale;
int InitList(LinkList *h) //初始化链表
{
*h=(LinkList)malloc(sizeof(LNode)); //为首节点分配内存
if(!h)
{
printf("初始化链表错误!\n");
return 0;
}
(*h)->next=NULL; //链表头节点指针域为空
PNode q=h->next;
while (cx!=q->jie)q=q->next; //当车厢号不等于预置值
while(pos!=q->seat)q=q->next; //当座位号不等于预置值
if(q->k=1)printf("退票成功!");
else printf("您输入的信息有误!"); //1赋予链表q的节点k
}
void YUDING(LinkList h)
{
int cx,pos; //定以车厢号,座位号
PNode p=h->next; //第一个节点赋予p
printf("\n------------------------预订服务--------------------------\n");
printf("请输入预订车厢号:\n注意:输入值小于3\n");
scanf("%d", &a); //输入身份证号
printf("成功购票!\n\n\n"); //输出票务信息
printf("您已购车票信息:\n");
printf("火车车次为:T980\n");
printf("购票人身份号码%d",a);
printf("车厢号码:%d\n",p->jie);
printf("座位号码:%d\n",p->seat);
printf("购票人身份号码%d",a);
printf("火车车次为:T980");
printf("车厢号码:%d\n",p->jie);
printf("座位号码:%d\n",p->seat);
printf("车票价格:%d\n",p->price);
printf("请在两小时内完成支付,否则自动取消订单\n");
订票时,用户输入要购买的车厢号,座位号,判断输入的号码是否正确后,遍历单链表,找到这个座位,让这个节点的标记k为2。然后向用户输出预定状态。
退票时,用户输入车厢号,座位号,先判断是不是在所有的车厢、座位号内,如果车厢号不在1-10内,或者座位号不在1-24内,就输出输入错误。然后判断标记k是否为2,如果k!=2,则向用户输出“输入错误”
四、
首先设置一个标记k,若标记k=1,代表此座位未被售出,当某座位票售出,则标记k=0,若座位被预定,标记k=为2。通过读取标记k的值。判断一张车票的售出情况。
查询,遍历整个单链表,判断标记k是否为0。设置一个计数标记sy,如果标记k=0,就让sy+1。同理,判断车票的销售,预定的情况也同样如此。
购票,用户输入要购买的车厢号,座位号,判断输入的号码是否正确后,遍历单链表,找到这个座位,让这个节点的标记k=0,然后向用户输出购买状态。
//车厢号输入值有限制
scanf("%d",&cx);
printf("请输入预定座位号:\n注意:输入值小于24\n");
//座位号输入值有限制
scanf("%d",&pos);
while (cx!=p->jie) //当车厢号不等于预置
{
p=p->next; //p的下一节点的指针域赋予p
}
while(pos!=p->seat) //当车厢号不等于预置
if(p->seat%6==0)printf("\n"); //每六个数据为一组,换行
printf(" ");
p=p->next; //节点p下一个指针的给p
}
}
void GOUPIAO(LinkList h) //购票
{
int pos,cx;; //定义车厢号和座位号
PNode p=h->next; //头节点下一指针域给p
for(i=0;i<2;i++)
{
for(j=1;j<=24;j++)
{
p=(PNode)malloc(sizeof(LNode)); //申请出内存
p->price=100; //将100赋予指针p所代表的值
p->k=1;
p->seat=j;
p->jie=i;
p->next=NULL ;
r->next=p ; //p的指针赋予r的下一节点的指针
每个链表节点的数据域包括“订票人身份证号,车厢号,座位号,价格,标记,下一个节点的信息”。
主要有四个功能:1,查询,用户可以查询车票的售出,预定状况。查看所有座位的预定,销售信息。并可了解余票的数,售出的票数,预定的票数。2,预定。用户选定一个车厢的一个座位进行预定。3,购票。用户选定一个车厢的一个座位进行购买,并进行支付。4,退票。用户回退自己购买的车票,且必须是已售票才能退。只要输入购买的车厢号,座位号,即可完成退票。