飞机订票系统c语言常见错误,编写C语言:飞机订票系统

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

wukong828

2013.06.16

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:46%    等级:12

已帮助:10888人

#include

#include

#include

//#include

#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 airline

{

char ter_name[10]; /* 站点名 */

char air_num[10]; /* 航班号 */

char plane_num[10]; /* 飞机号 */

char date[7]; /* 飞行日期 */

int tkt_amt; /* 乘员定额 */

int tkt_sur; /* 余票量 */

linklist *order;

linkqueue wait;

}lineinfo;

struct airline *start;

struct airline air[MAXSIZE]={

{"beijing", "1", "B8571", "SUN", 3, 1},

{"shanghai","2","S1002","MON",2,5},

{"london","3","L1003","FRI",1,3}

};;

void display(struct airline *info)

{

printf("%8s\t%3s\t%s\t%4s\t\%d\t\%d\t\n",info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_amt,info->tkt_sur);

}

/* 浏览航线信息函数 */

void list()

{

struct airline *info;

int i = 0;

info = start;

printf("终点站名\t航班号\t飞机号\t飞行日期" "乘员定额" "余票量\n");

while(i < MAXSIZE){

display(info);

info++;

i++;

}

printf("\n\n");

}

void search()

{

struct airline *info,*find();

char name[10];

int i=0;

info=start;

printf("请输入终点站名:");

scanf("%s",name);

while(i

{

if(!strcmp(name,info->ter_name)) break;

info++;

i++;

}

if(i>=MAXSIZE)

printf("对不起,该航线未找到!\n");

else

{

printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");

display(info);

}

}

struct airline *find()

{

struct airline *info;

char number[10];

int i=0;

info=start;

printf("请输入航班号:");

scanf("%s",number);

while(i

{

if(!strcmp(number,info->air_num)) return info;

info++;

i++;

}

printf("对不起,该航线末找到!\n");

return NULL;

}

/* 浏览已订票客户信息 */

void prtlink()

{

linklist *p;

struct airline *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("该航线没有客户信息!!\n");

}

linklist *insertlink(linklist *head,int amount,char name[],int grade)

{ linklist *p1,*new1;

p1=head;

new1=(linklist *)malloc(sizeof(linklist));

if(!new1) {printf("\nOut of memory!!\n");return NULL;}

strcpy(new1->name,name);

new1->ord_amt=amount;

new1->grade=grade;

new1->next=NULL;

if(head==NULL)

{head=new1;new1->next=NULL;}

else

head=new1;

new1->next=p1;

return head;

}

linkqueue appendqueue(linkqueue q,char name[],int amount)

{ qptr new1;

new1=(qptr)malloc(sizeof(qnode));

strcpy(new1->name,name);

new1->req_amt=amount;

new1->next=NULL;

if(q.front==NULL)

q.front=new1;

else

q.rear->next=new1;

q.rear=new1;

return q;

}

void order()

{ struct airline *info;

int amount,grade;

char name[10];

info=start;

if(!(info=find())) return;

printf("请输入你订票所需要的数量:");

scanf("%d",&amount);

if(amount>info->tkt_amt)

{ printf("\n对不起,您输入的票的数量已经超过乘员定额!");

return;

}

if(amount<=info->tkt_sur)

{

int i;

printf("请输入您的姓名(订票客户):");

scanf("%s",name);

printf("请输入%s票的舱位等级:",name);

scanf("%d",&grade);

info->order=insertlink(info->order,amount,name,grade);

for(i=0;i

printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1);

info->tkt_sur-=amount;

printf("\n祝您乘坐愉快!\n");

}

else

{ char r;

printf("\n已经没有更多的票,您需要排队等候吗?(Y/N)");

//r=getch();

//printf("%c",r);

scanf ( "回车继续等待%c", &r );

if(r=='Y'||r=='y')

{ printf("\n请输入您的姓名(排队订票客户):");

scanf("%s",name);

info->wait=appendqueue(info->wait,name,amount);

printf("\n注册成功!\n");

}

else printf("\n欢迎您下次再次订购!\n");

}

}

void return_tkt()

{ struct airline *info;

qnode *t,*back,*f,*r;

int grade;

linklist *p1,*p2,*head;

char cusname[10];

if(!(info=find())) return;

head=info->order;

p1=head;

printf("请输入你的姓名(退票客户):");

scanf("%s",cusname);

while(p1!=NULL) {

if(!strcmp(cusname,p1->name)) break;

p2=p1;p1=p1->next;

}

if(p1==NULL){ printf("对不起,你没有订过票!\n");return;}

else

{

if(p1==head) head=p1->next;

else p2->next=p1->next;

info->tkt_sur+=p1->ord_amt;

grade=p1->grade;

printf("%s成功退票!\n",p1->name);

free(p1);

}

info->order=head;

f=(info->wait).front;

r=(info->wait).rear;

t=f;

while(t)

{

if((info->tkt_sur = info->wait.front->req_amt))

{

int i;

info->wait.front=t->next;

printf("%s订票成功!\n",t->name);

for(i=0;ireq_amt;i++)

printf("%s的座位号是:%d\n",t->name,(info->tkt_sur)-i);

info->tkt_sur-=t->req_amt;

info->order=insertlink(info->order,t->req_amt,t->name,grade);

free(t);

break;

}

back=t;t=t->next;

if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)

{ int i;

back->next=t->next;

printf("%s订票成功!\n",t->name);

for(i=0;ireq_amt;i++)

printf("'s seat number is:%d\n",t->name,(info->tkt_sur)-i);

info->tkt_sur-=t->req_amt;

info->order=insertlink(info->order,t->req_amt,t->name,grade);

free(t);break;

}

if(f==r) break;

}

}

void sort_tkt()

{

int j;

struct airline t,*info,*p,*q;

p=info=air;

for(p=info;(p+1)->tkt_sur;p++)

for(q=p+1;q->tkt_sur;q++)

{

if(p->tkt_surtkt_sur)

{

t=*p;

*p=*q;

*q=t;

}

}

printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");

for(j=0;j

{

display(info);

info++;

}

}

int menu_select()

{

int c;

char s[20];

printf("\n\t\t 航空客运订票系统(by zjhxmjl)\n");

printf(" ******************************************\n");

printf(" ** 1.浏览航线信息 **\n");

printf(" ** 2.浏览已订票客户信息 **\n");

printf(" ** 3.查询航线 **\n");

printf(" ** 4.办理订票业务 **\n");

printf(" ** 5.办理退票业务 **\n");

printf(" ** 6.查看剩余票数并排序 **\n");

printf(" ** 0.退出系统 **\n");

printf(" *******************************************\n");

do

{

printf("请选择:");

scanf("%s",s);

c = atoi(s); /* atoi将字符串转换为整型 */

}while(c < 0||c > 7);

return c;

}

int main()

{

start = air;

for(;;)

{

switch(menu_select())

{

case 1:list();break;

case 2:prtlink();break;

case 3:search();break;

case 4:order();break;

case 5:return_tkt();break;

case 6:sort_tkt();break;

case 0:printf("\n欢迎使用本系统,再见!\n");exit(0);

}

printf("\nPress any key to continue!\n");

getchar();

}

return 0;

}

61分享举报

本实验课题主要是要解决数据在文件的读取,航班信息用文件保存,因而要提供文件的输入输出操作;航班信息浏览功能要提供现实操作;要查询的航线需要提供查找功能;存储客户信息和客户订票信息,并能浏览和查询客户订票信息;另外要提供键盘式选择菜单以实现功能选择。此实验需要在CodeBlocks等C语言编译平台上完成同时本实验要求所写的程序可以流畅的在编译平台上运行。首先为用户提供一个菜单,展示各个选项的功能,用户可输入一个选项(数字),执行相应的功能,通过运用switch语句对用户输入的数字进行处理判断出用户想要执行的操作。一共有9个选项,第3个和第6选项没有使用函数,其他模块分别对应着一个函数。 航班信息的写入(定义FILE *fp指针),先将将航班次数写入文件,以结构体数组的形式来保存键盘上输入的每条航线相应的信息。然后再用fprintf函数的格式写入方式将数组的数据写入文档。 客户信息的写入(定义FILE *fp指针),先将将客户人数写入文件,以结构体数组的形式来保存键盘上输入的每位客户相应的信息。然后再用fprintf函数的格式写入方式将数组的数据写入文档。 航班信息的读取,先定义结构体数组,从文件读取航班的航班号、起始终点站等信息写入到结构体数组fly,在用fscanf函数的格式读取方式将文档相应的数据保存在相应的结构体数组里定义的变量。 用户信息的读取,先定义结构体数组,从文件读取用户的证件号姓名等信息写入到结构体数组cus,在用fscanf函数的格式读取方式将文档相应的数据保存在相应的结构体数组里定义的变量。 浏览的功能,是按不同的要求分别将航班信息和客户信息排序出来,然后按排好的序输出出来。 查询显示等功能,可以通过读取得到的结构体数组,进行重写文档,打印等方式实现功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值