📄 dingpiao.cpp
字号:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX 50
typedef struct LNode
{
char name[10];
int number;
struct LNode *next;
}LNode;
typedef struct
{
LNode *head;
}List;
typedef struct QNode
{
char name[10];
int number;
struct QNode *next;
}QNode;
typedef struct
{
QNode *front;
QNode *rear;
}Queue;
typedef struct
{
int tticket;
int lticket;
List list;
Queue queue;
}Ticket;
typedef struct
{
char destination[10];
char flight[6];
int plane;
char week[10];
char time[11];
Ticket info;
}Line,LineList[MAX];
void print(LineList &L,int i)
{
printf(" 终点\t\t航班号\t飞机号\t 星期\t\t 时间\t\t 余票量\n");
printf("%s\t\t%s\t %d\t%s\t\t%s\t\t%d\n",L[i].destination,L[i].flight,L[i].plane,L[i].week,L[i].time,L[i].info.lticket);
}
void printlist(LineList &L,int i,int n)
{
LNode *p;
p=L[i].info.list.head;
print(L,i);
printf("\n订票信息:\n");
printf("姓名\t票数\n");
if(p==NULL)
printf("暂无订票信息\n");
else
while(p!=NULL)
{
printf("%s\t %d\n",p->name,p->number);
p=p->next;
}
}
void printqueue(LineList &L,int i,int n)
{
QNode *q;
q=L[i].info.queue.front;
print(L,i);
printf("\n预约信息:\n");
printf("姓名\t票数\n");
if(q==NULL)
printf("暂无预约信息\n\n");
else
while(q!=L[i].info.queue.rear->next)
{
printf("%s\t%d\n",q->name,q->number);
q=q->next;
}
}
void search(LineList &L,int n)
{
char des[10];
int i;
printf("输入终点:");
scanf("%s",des);
system("cls");
for(i=0;i<n;i++)
if(!strcmp(L[i].destination,des))
{
print(L,i);
break;
}
if(i==n)
printf("没有相关终点信息!\n");
}
void schedule(LineList &L,int i,int n)
{
char nam[10];
int num;
QNode *q1,*q2;
system("cls");
printqueue(L,i,n);
printf("预约\n");
printf("输入姓名和票数:");
scanf("%s%d",nam,&num);
q1=(QNode *)malloc(sizeof(QNode));
strcpy(q1->name,nam);
q1->number=num;
q1->next=NULL;
q2=L[i].info.queue.front;
if(q2==NULL)
{
L[i].info.queue.front=q1;
L[i].info.queue.rear=q1;
}
else
{
L[i].info.queue.rear->next=q1;
L[i].info.queue.rear=q1;
}
system("cls");
printqueue(L,i,n);
printf("\n预约成功。\n");
}
void book(LineList &L,int n)
{
char des[10],nam[10];
int num;
int i;
char c;
LNode *p1,*p2;
system("cls");
printf("\t\t\t\t所有航班信息\n");
printf(" 终点\t\t航班号\t飞机号\t 星期\t\t 时间\t\t 余票量\n");
for(i=0;i<n;i++)
printf("%s\t\t%s\t %d\t%s\t\t%s\t\t%d\n",L[i].destination,L[i].flight,L[i].plane,L[i].week,L[i].time,L[i].info.lticket);
printf("\n输入终点:");
scanf("%s",des);
system("cls");
for(i=0;i<n;i++)
if(!strcmp(L[i].destination,des))
break;
if(i==n)
{
printf("没有相关终点信息!\n");
return;
}
printlist(L,i,n);
printqueue(L,i,n);
if(L[i].info.lticket!=0)
{
printf("订票\n");
printf("输入姓名和票数:");
scanf("%s%d",nam,&num);
while(num>L[i].info.lticket)
{
printf("票数超过余票,是否转入预约(Y/N):");
scanf("\n%c",&c);
if(c=='y')
{
schedule(L,i,n);
return;
}
else
{
printf("请重新输入票数:");
scanf("%d",&num);
}
}
L[i].info.lticket-=num;
p1=(LNode *)malloc(sizeof(LNode));
strcpy(p1->name,nam);
p1->number=num;
p1->next=NULL;
p2=L[i].info.list.head;
if(p2==NULL)
L[i].info.list.head=p1;
else
{
while(p2->next!=NULL)
p2=p2->next;
p2->next=p1;
}
system("cls");
printlist(L,i,n);
printf("\n以订好,祝您旅途愉快。\n");
}
else
{
printf("余票数为0,是否转入预约(Y/N):");
scanf("\n%c",&c);
if(c=='y')
{
schedule(L,i,n);
return;
}
}
}
void quit(LineList &L,int n)
{
char des[10],nam[10];
int num;
int i;
FILE *fp;
LNode *p1,*p2;
QNode *q1,*q2;
system("cls");
if((fp=fopen("yuyue.txt","a"))==NULL)
{
printf("cannot open file!");
exit(0);
}
printf("\n\n输入终点:");
scanf("%s",des);
for(i=0;i<n&&strcmp(L[i].destination,des);i++){}
if(i==n)
{
printf("没有相关信息!\n");
exit(0);
}
printlist(L,i,n);
printqueue(L,i,n);
printf("输入姓名:");
scanf("%s",nam);
p1=L[i].info.list.head;
while(p1!=NULL)
if(strcmp(p1->name,nam))
{
p2=p1;
p1=p1->next;
}
else
{
printf("姓名\t票数\n");
printf("%s\t%d\n",p1->name,p1->number);
printf("输入退票数量:");
scanf("%d",&num);
while(num>p1->number)
{
printf("错误,重新输入:");
scanf("%d",&num);
}
if(num==p1->number)
if(p1==L[i].info.list.head)
L[i].info.list.head=p1->next;
else
p2->next=p1->next;
else
p1->number-=num;
L[i].info.lticket+=num;
q1=L[i].info.queue.front;
while(q1!=NULL)
{
if(L[i].info.lticket>=q1->number)
{
L[i].info.lticket-=q1->number;
if(q1==L[i].info.queue.front)
{
L[i].info.queue.front=q1->next;
if(q1==L[i].info.queue.rear)
L[i].info.queue.rear=NULL;
}
else
{
q2->next=q1->next;
if(q1==L[i].info.queue.rear)
L[i].info.queue.rear=q2;
}
p1=L[i].info.list.head;
while(p1->next!=NULL)
p1=p1->next;
p2=(LNode *)malloc(sizeof(LNode));
p2->next=NULL;
strcpy(p2->name,q1->name);
p2->number=q1->number;
p1->next=p2;
q1=q1->next;
}
else
{
q2=q1;
q1=q1->next;
}
if(L[i].info.lticket==0)
break;
}
system("cls");
printlist(L,i,n);
printqueue(L,i,n);
printf("\n退订完毕。\n");
fclose(fp);
break;
}
if(p1==NULL)
printf("没有订票信息!\n");
}
void makelist(LineList &L,int *n)
{
int a,i,j,t,r,l;
LNode *p1,*p2;
QNode *q1,*q2;
int todayweek,weekday;
char tdate[11]={"2008.01.08"};
todayweek=4;
char week[8][11]={"0","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
FILE *fp1,*fp2;
if((fp1=fopen("data.txt","r"))==NULL)
{
printf("cannot open file!");
exit(0);
}
fscanf(fp1,"%s%s%d%d\n",L[*n].destination,&L[*n].flight,&L[*n].plane,&weekday);
strcpy(L[*n].time,tdate);
a=weekday-todayweek;
if(a>=0)
L[*n].time[9]=L[*n].time[9]+a;
else
L[*n].time[9]=L[*n].time[9]+a+7;
if(L[*n].time[9]>'9')
{
L[*n].time[9]=L[*n].time[9]-10;
L[*n].time[8]=L[*n].time[8]+1;
}
strcpy(L[*n].week,week[weekday]);
L[*n].info.list.head=NULL;
L[*n].info.queue.front=NULL;
L[*n].info.queue.rear=NULL;
while(L[*n].plane!=0)
{
*n=*n+1;
fscanf(fp1,"%s%s%d%d\n",L[*n].destination,L[*n].flight,&L[*n].plane,&weekday);
strcpy(L[*n].time,tdate);
a=weekday-todayweek;
if(a>=0)
L[*n].time[9]=L[*n].time[9]+a;
else
L[*n].time[9]=L[*n].time[9]+a+7;
if(L[*n].time[9]>'9')
{
L[*n].time[9]=L[*n].time[9]-10;
L[*n].time[8]=L[*n].time[8]+1;
}
strcpy(L[*n].week,week[weekday]);
L[*n].info.list.head=NULL;
L[*n].info.queue.front=NULL;
L[*n].info.queue.rear=NULL;
}
fclose(fp1);
if((fp2=fopen("name.txt","r"))==NULL)
{
printf("cannot open file!");
exit(0);
}
for(i=0;i<*n;i++)
{
r=rand();
while(r<20||r>35)
r=rand();
L[i].info.tticket=r;
r=rand()%2;
if(r==0)
L[i].info.lticket=0;
else
{
t=rand();
while(t<=0||t>8)
t=rand();
L[i].info.lticket=r+t;
}
l=L[i].info.tticket-L[i].info.lticket;
r=rand();
while(r<20||r>50)
r=rand();
fseek(fp2,r,0);
while(l>0)
{
p1=(LNode *)malloc(sizeof(LNode));
r=rand()%5;
while(r==0||l-r<0)
r=rand()%5;
l=l-r;
p1->number=r;
p1->next=NULL;
r=rand()%8;
while(r<5)
r=rand()%8;
fgets(p1->name,r,fp2);
if(L[i].info.list.head==NULL)
{
L[i].info.list.head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
}
for(i=0;i<*n;i++)
if(L[i].info.lticket==0)
{
t=rand()%13;
while(t<5)
t=rand()%13;
for(j=0;j<t;j++)
{
r=rand();
while(r<20||r>50)
r=rand();
fseek(fp2,r,0);
q1=(QNode *)malloc(sizeof(QNode));
r=rand()%5;
while(r==0)
r=rand()%5;
q1->number=r;
q1->next=NULL;
r=rand()%8;
while(r<5)
r=rand()%8;
fgets(q1->name,r,fp2);
if(L[i].info.queue.front==NULL)
{
L[i].info.queue.front=q1;
q2=q1;
L[i].info.queue.rear=q1;
}
else
{
q2->next=q1;
q2=q1;
L[i].info.queue.rear=q2;
}
}
}
fclose(fp2);
}
void menu()
{
printf("航空订票系统\n");
printf("1: 查询航线\n");
printf("2: 订票业务\n");
printf("3: 退票业务\n");
printf("0: 退出\n");
printf(" 输入操作:");
}
void main()
{
LineList L;
int n=0,s;
makelist(L,&n);
menu();
scanf("%d",&s);
while(s!=0)
{
switch(s)
{
case 1: search(L,n);break;
case 2: book(L,n);break;
case 3: quit(L,n);break;
}
printf("\n\n\n");
menu();
scanf("%d",&s);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -