数据结构订票系统.docx
- 文档编号:15150685
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:30
- 大小:34.92KB
数据结构订票系统.docx
《数据结构订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构订票系统.docx(30页珍藏版)》请在冰点文库上搜索。
数据结构订票系统
荆楚理工学院
《数据结构》课程设计
学院:
计算机工程学院班级:
计算机科学与技术
(1)班
学生姓名:
…..学号:
20094040101..
设计地点(单位)
设计题目:
订票系统
完成日期:
2011年01月4日
指导教师评语:
成绩(五级记分制):
教师签名:
目录
一、需求分析…………………………………………3
二、算法流程图…………………………………………3
三、详细设计……………………………………………4
四、源程序………………………………………………5
五、程序测试…………………………………………19
六、心得体会…………………………………………20
一、需求分析:
通过此系统可以实现如下功能:
1)录入航线信息
每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。
假设现在有3条航线,目的地分别是北京,上海,广州,飞机上可乘坐100人(即初始订票数为0,余票数为100),将这3条航线信息存入文件“airline.dat”中。
2)订票业务
客户信息包括姓名,航班号,座位号(初始为0),假设已有3个客户信息存入文件“customer.dat”中。
有新客户订票时,先输入客户的姓名和他提出的航班号,查询该航线的订票情况,若有余票,则为客户办理订票手续,分配给客户一个座位号,然后将新客户的信息添加到文件“customer.dat”中,并修改文件“airline.dat”中该航线的订票数和余票数。
若无余票,则输出客满信息。
进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。
3)退票业务
根据客户提出的航班号,办理退票,从文件“customer.dat”中删除该客户的信息,并修改文件“airline.dat”中相应航线的订票数和余票数。
4)修改航班信息:
当航班信息改变可以修改航班数据文件。
5)输出全部航线信息和全部客户信息。
6)退出系统。
二、算法流程图
三、详细设计:
所需抽象数据类型定义和一些函数的声明见设计概要。
这里只解释一下执行函数和一些比较复杂一点的算法。
航空订票系统:
1)、执行函数:
见voidair_main();
2)、定票函数:
statusbook(airlineconst*l,char*line_num,customer*c,char*name)//订票
{
//订票
airline*p=l;
customer*q=c->next;
p=l->next;
for(;q->next!
=NULL;q=q->next){}
//PR("%s\n",q->name);
for(;p!
=NULL;p=p->next)
{
if(strcmp(line_num,p->line_num)==0)
{
if(p->left>0)
{
PR("恭喜您!
订票成功!
\n");
PR("你的座位号是:
%d\n",(p->total-p->left+1));
insert_customer(&q,name,line_num,p->total-p->left+1);
p->left--;
returnOK;
}
elsePR("对不起,座位已满!
\n");
return0;
}
}
PR("对不起,没有这个航班号!
\n");
returnERROR;
}
定票的同时也同时了修改航线信息,并在修改后把修改后的信息储存到文件中去。
3)、退票函数:
statusdelete_cus(customer*h,airline*l,char*name)
{
//顾客退票
customer*p,*pr;
charline_num[8];
//qr=h;
pr=h;
p=pr->next;
//PR("开始删除\n");
while(p!
=NULL)
{
if(strcmp(name,p->name)==0)
{
strcpy(line_num,p->line_num);
l=modefy_airline(l,line_num);
pr->next=p->next;
free(p);
PR("顾客%s退票成功!
\n",p->name);
returnOK;
}
pr=pr->next;
p=pr->next;
}
PR("无此顾客,无法退票!
\n");
returnERROR;
}
在此函数执行后执行顾客信息修改和航线信息修改。
从而实现了退票功能。
四、源程序:
#include
#include
#include
#defineOK1
#defineTRUE1
#defineFALSE0
#defineERROR0
#defineOVERFLOW-2
#definePRprintf
typedefintstatus;
typedefstructairline{
charline_num[8];//航班号
charplane_num[8];//飞机号
charend_place[20];//目的的
inttotal;//座位总数
intleft;//剩余座位
structairline*next;//下一个结点
}airline;
typedefstructcustomer{
charname[9];//顾客名
charline_num[8];//航班号
intseat_num;//座位号
structcustomer*next;//下一个结点
}customer;
airline*init_airline(){//初始化链表
airline*l;
l=(airline*)malloc(sizeof(airline));
if(l==NULL){
exit(0);
}
l->next=NULL;
returnl;
}
customer*init_customer(){//初始化链表
customer*l;
l=(customer*)malloc(sizeof(customer));
if(l==NULL){
exit(0);
}
l->next=NULL;
returnl;
}
statusinsert_airline(airline**p,char*line_num,char*plane_num,char*end_place,inttotal,intleft){//airline链表插入操作
airline*q;
q=(airline*)malloc(sizeof(airline));
strcpy(q->line_num,line_num);
strcpy(q->plane_num,plane_num);
strcpy(q->end_place,end_place);
q->total=total;
q->left=left;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;
//PR("insert%d,%dissuccssed!
\n",e,bl);
returnOK;
}
statusinsert_customer(customer**p,char*name,char*line_num,intseat){//customer链表插入操作
customer*q;
q=(customer*)malloc(sizeof(customer));
/*{
PR("内存分配失败\n");
returnOVERFLOW;
}*/
strcpy(q->name,name);
strcpy(q->line_num,line_num);
q->seat_num=seat;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;
//PR("insert%d,%dissuccssed!
\n",e,bl);
returnOK;
}
airline*modefy_airline(airline*l,char*line_num)//修改airline链表中的数据
{
airline*p;
p=l->next;
for(;p!
=NULL;p=p->next)
{
if(strcmp(line_num,p->line_num)==0)
{
p->left++;
//PR("modefy%s\n",p->line_num);
returnl;
}
}
PR("没有这个航班,无法完成修改任务!
\n");
return0;
}
statusdelete_airline(airline*h,char*line_num)//删除航班
{
airline*p,*pr;
pr=h;
p=pr->next;
while(p!
=NULL)
{
if(strcmp(line_num,p->line_num)==0)
{
pr->next=p->next;
PR("删除%s航班\n",p->line_num);
returnOK;
}
pr=pr->next;
p=pr->next;
}
PR("无此航班,无法删除!
\n");
returnERROR;
}
statusdelete_customer(customer*h,char*line_num)//删除顾客
{
customer*p,*pr;
pr=h;
p=pr->next;
while(p!
=NULL)
{
if(strcmp(line_num,p->line_num)==0)
{
pr->next=p->next;
}
pr=pr->next;
p=pr->next;
}
//PR("无此航班,无法删除!
\n");
returnOK;
}
statusdelete_cus(customer*h,airline*l,char*name)//顾客退票
{
customer*p,*pr;
charline_num[8];
//qr=h;
pr=h;
p=pr->next;
//PR("开始删除\n");
while(p!
=NULL)
{
if(strcmp(name,p->name)==0)
{
strcpy(line_num,p->line_num);
l=modefy_airline(l,line_num);
pr->next=p->next;
PR("顾客%s退票成功!
\n",p->name);
returnOK;
}
pr=pr->next;
p=pr->next;
}
PR("无此顾客,无法退票!
\n");
returnERROR;
}
statussave_airline(airline*l)//保存airline.dat
{
FILE*fp_airline;
charch='#';
airline*p=l->next;
charfilename[]="c:
\\airline.dat";
if((fp_airline=fopen(filename,"wb"))==NULL)
{
printf("cannotopenfiletowrite:
%s\n",filename);
returnERROR;
}
for(;p!
=NULL;p=p->next)
{
//printf("%s,%s,%s,%d,%d\n",p->line_num,p->plane_num,p->end_place,p->total,p->left);
fprintf(fp_airline,"%s,%s,%s,%d,%d%c\n",p->line_num,p->plane_num,p->end_place,p->total,p->left,ch);
}
fclose(fp_airline);
returnOK;
}
statussave_customer(customer*l)//保存顾客信息customer.dat
{
FILE*fp_customer;
charch='#';
customer*p=l->next;
charfilename[]="c:
\\customer.dat";
if((fp_customer=fopen(filename,"wb"))==NULL)
{
printf("cannotopenfiletowrite:
%s\n",filename);
returnERROR;
}
for(;p!
=NULL;p=p->next)
{
//PR("%s,%s,%d\n",p->name,p->line_num,p->seat_num);
fprintf(fp_customer,"%s,%s,%d%c",p->name,p->line_num,p->seat_num,ch);
}
fclose(fp_customer);
returnOK;
}
intchangStrInt(char*ch)//把字符串转化为整型
{
inta=1,b=0,c=0,i;
for(i=strlen(ch)-1;i>=0;i--)
{
if(ch[i]<58&&ch[i]>47)
{
b=a*(ch[i]-48);
a=a*10;
c=c+b;
}
else
{
PR("%c不合法,无法将此字符串转化为整形!
\n",ch[i]);
return0;
}
//printf("thecis%d\n",c);
}
returnc;
}
statusinsert_air(airline*l,char*line_num,char*plane_num,char*end_place,inttotal,intleft){//airline链表插入操作
airline*q;
q=(airline*)malloc(sizeof(airline));
strcpy(q->line_num,line_num);
strcpy(q->plane_num,plane_num);
strcpy(q->end_place,end_place);
q->total=total;
q->left=left;
q->next=l->next;
l->next=q;
//PR("insert%d,%dissuccssed!
\n",e,bl);
returnOK;
}
statusinsert_cus(customer*l,char*name,char*line_num,intseat){//customer链表插入操作
customer*q;
q=(customer*)malloc(sizeof(customer));
strcpy(q->name,name);
strcpy(q->line_num,line_num);
q->seat_num=seat;
q->next=l->next;
l->next=q;
returnOK;
}
statusload_airline(airline*l)
{
FILE*fp_airline;
intflag=0,i=0;
charch;
charline_num[8];//航班号
charplane_num[8];//飞机号
charend_place[20];//目的的
chartotal_str[5];
charleft_str[5];
inttotal;//座位总数
intleft;//剩余座位
//airline*p=l;
charfilename[]="c:
\\airline.dat";
if((fp_airline=fopen(filename,"rb"))==NULL)
{
printf("cannotopenfiletoload:
%s\n",filename);
returnERROR;
}
while(!
feof(fp_airline))
{
ch=fgetc(fp_airline);
if(ch!
='#')
{
if(flag==0&&ch!
=',')
{
line_num[i]=ch;
i++;
}
elseif(flag==1&&ch!
=',')
{
plane_num[i]=ch;
i++;
}
elseif(flag==2&&ch!
=',')
{
end_place[i]=ch;
i++;
}
elseif(flag==3&&ch!
=',')
{
total_str[i]=ch;
i++;
}
elseif(flag==4&&ch!
=',')
{
left_str[i]=ch;
i++;
}
elseif(ch==',')
{
flag++;
i=0;
}
/*else
{
PR("错误\n");
returnERROR;
}*/
}
else
{
flag=0;
i=0;
total=changStrInt(total_str);
left=changStrInt(left_str);
PR("%8s%8s%8s%9d%9d\n",line_num,plane_num,end_place,total,left);
insert_air(l,line_num,plane_num,end_place,total,left);
}
}
fclose(fp_airline);
returnOK;
}
statusload_customer(customer*l)
{
FILE*fp_customer;
intflag=0,i=0;
charch;
charname[9];
charline_num[8];//航班号
charseat_num_str[5];
intseat_num;//座位
//customer*p=*l;
charfilename[50]="c:
\\customer.dat";
if((fp_customer=fopen(filename,"rb"))==NULL)
{
printf("cannotopenfiletoload:
%s\n",filename);
returnERROR;
}
while(!
feof(fp_customer))
{
ch=fgetc(fp_customer);
printf("%c\n",ch);
if(ch!
='#')
{
if(flag==0&&ch!
=',')
{
name[i]=ch;
i++;
}
elseif(flag==1&&ch!
=',')
{
line_num[i]=ch;
i++;
}
elseif(flag==2&&ch!
=',')
{
seat_num_str[i]=ch;
i++;
}
elseif(ch==',')
{
flag++;
i=0;
}
else
{
PR("错误\n");
returnERROR;
}
}
else
{
flag=0;
seat_num=changStrInt(seat_num_str);
PR("%10s%10s%d\n",name,line_num,seat_num);
insert_cus(l,name,line_num,seat_num);
//p=p->next;
}
}
fclose(fp_customer);
returnOK;
}
statuscreat_airline(airline**l)//创建airline单链表
{
airline*p=*l;
inti=0;
char*line_num[3]={"bjnc01","bjsh02","shgz03"};
char*plane_num[3]={"plane1","plane2","plane3"};
char*end_place[3]={"nc","sh","gz"};
inttotal[3]={100,100,100};
intleft[3]={51,50,78};
for(i=0;i<3;i++){
insert_airline(&p,line_num[i],plane_num[i],end_place[i],total[i],left[i]);
}
returnOK;
}
statuscreat_customer(customer**l)////创建customer单链表
{
customer*p=*l;
inti=0;
char*name[3]={"wunan","liang","hekan"};
char*line_num[3]={"bjnc01","bjsh02","sh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 订票 系统