火车订票系统c语言.docx
- 文档编号:10767223
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:47
- 大小:695.48KB
火车订票系统c语言.docx
《火车订票系统c语言.docx》由会员分享,可在线阅读,更多相关《火车订票系统c语言.docx(47页珍藏版)》请在冰豆网上搜索。
火车订票系统c语言
课程设计(论文)任务书
学院 专业 班
一、课程设计(论文)题目
二、课程设计(论文)工作自2011年12月27日至2011年12月31日。
三、课程设计(论文)地点:
创新大楼实训中心3楼
四、课程设计(论文)内容要求:
1.本课程设计的目的
1)使学生增进对数据结构各理论知识的熟练程度,
2)加强算法设计的能力,为以后的数据库原理等课程的学习打下良好基
础。
,
2.课程设计的任务及要求
□题目一:
运动会分数统计
□要求:
(要求参考《数据结构题集》P79)
□题目二:
停车场管理
要求:
(要求参考《数据结构题集》P96)
□题目三:
车厢调度
要求:
(要求参考《数据结构题集》P98)
□题目四:
算术表达式求值演示
要求:
(要求参考《数据结构题集》P99)。
□题目五:
银行业务模拟
要求:
(要求参考《数据结构题集》P100)。
□题目六:
航空客运订票系统
要求:
(要求参考《数据结构题集》P101)
□题目七:
电梯模拟
要求:
(要求参考《数据结构题集》P102)
□题目八:
迷宫问题
要求:
(要求参考《数据结构题集》P105)
□题目九:
火车订票系统
要求:
功能实现订票子系统、售票子系统、退票子系统、统计子系统、查询子
系统、生成数据子系统
□题目十:
教学计划编制问题
要求:
(要求参考《数据结构题集》P150)
□题目十一:
校园导游咨询
要求:
(要求参考《数据结构题集》P151)
□题目十二:
表达式类型的实现
要求:
(要求参考《数据结构题集》P152)
□题目十三:
全国交通咨询模拟
要求:
(要求参考《数据结构题集》P153)
□题目十四:
超市管理系统
要求:
实现对超市的各业务的管理(例如:
货物的管理、价目的管理等)
□题目十五:
职工工资管理系统
要求:
实现对职工工资的管理编辑。
3)课程设计论文编写要求
1)详细清晰地描述个人的课程设计工作;
2)要按照本模板的规格打印誊写课程报告;
3)课设报告包括目录、内容提要、正文、课程设计体会、参考文献、附
录等;
4)课程报告装订按学校的统一要求完成
4)评分标准:
1)完成原理分析:
20分;
2)完成设计过程:
40分;
3)完成代码分析:
20分。
4)个人创新工作:
20分。
学生签名:
2011年12月27日
课程设计(论文)评审意见
(1)原理分析(20分):
优( )、良( )、中( )、一般( )、差( );
(2)设计分析 (20分):
优( )、良( )、中( )、一般( )、差( );
(3)程序流程 (20分):
优( )、良( )、中( )、一般( )、差( );
(4)代码分析 (20分):
优( )、良( )、中( )、一般( )、差( );
(5)个人创新 (20分):
优( )、良( )、中( )、一般( )、差( );
(6)格式规范性及考勤是否降等级:
是( )、否( )
评阅人:
职称:
讲师
2011年12月31日
目录
目录-1-
正文-1-
一、需求分析(小三,黑体)-1-
二、个人工作-3-
三、概要设计-4-
四、源程序-5-
五、程序结果-28-
课程设计体会-34-
正文
一、需求分析(小三,黑体)
1.用户需求
1-1问题描述
主要实现功能:
1)列车管理
2)乘客信息管理
3)票数管理及显示
4)候补乘客名单
5)订票乘客名单
6)退票管理菜单
7)列车查询
1-2目的及系统要求
1)目的:
数据结构课设就是要使学生学会灵活应用所学数据结构知识,运用其基本思路及主要图标工具完成一个自己所了解的业务。
用自己熟悉的数据库管理系统与程序语言及其相关开发工具实现该系统。
在此基础上,严格按照本大纲所附报告提纲撰写课设报告,通过本设计进一步弄懂数据结构及相关的基本概念。
2)系统要求
该系统能够进行列车管理,增加列车号、乘车区间,修改列车运行时间;订票功能,客户通过输入自己的姓名、身份证来订票;退票功能,输入姓名来查找是否买票,然后退票;记录及显示乘客信息;查询某列车是否还有票。
列车信息:
车次、乘车区间、发车时间、最大载客量。
乘客信息:
姓名、所订车车次、订票数、座位等级、乘车区间、身份证号码。
2.业务流程分析
该系统首先要建立列车信息,由管理员建立列车信息,然后乘客可以进行订票!
乘客可通过查询列车信息决定是否要定该列车的票,如果要就进行订票,如果没有票了,可以选择是否成为候补乘客,一旦有一定票乘客退票,就可成为订票乘客。
已订票乘客可以通过乘客信息来查询自己是否订票成功,候补乘客也可以查询自己是否成为候补乘客;如果已订票乘客不想要票,就可以退票。
二、个人工作
在这次课设中,我学会了灵活运用指针,用链表这样的线性结构来存数据。
增强了用数据结构知识来解决一些生活中的问题的能力,在写这个系统的过程中,也遇到了许多问题,但在不断的学习与询问中都一一解决。
三、概要设计
1.列车信息图表
2.乘客信息图表
3.火车票订票系统菜单
四、源程序
1.各部分函数及功能:
(1)头文件:
#include
#include
#include
#include
#include
#include
#definemax60
#defineNULL0
(2)用数据结构定义乘客信息和列车信息两个类:
typedefstructcustomer
{//乘客信息
charname[10];//姓名
intamount;//订票数
charrank;//火车票种类:
硬座、软座、硬卧、软卧
intidcard;//身份证号码
structcustomer*next;//指向下一乘客结点
}customer;
typedefstructrailway
{//列车信息
chardes_name[10];//乘车区间
charrailway_no[6];//列车次
chartime[10];//时间
intcustomer_a;//乘员定额
intfree_a;//剩余票数
intprice[4];//各种车票的价格
customer*custname;//以订票乘客名单
customer*replname;//候补乘客名单
structrailway*next;//指向下列车结点
}railway,*prailway;
(3)全局变量定义:
intcustomer_c=0;//所有列车的订票乘客总数
railway*head;//列车头结点
railway*p2;//列车结点指针
customer*custp1[max];//各列车乘客结点指针
customer*replp1[max];//各列车候补结点指针
intIsempty=1;//是否有订票乘客
intIsreplace=1;//是否有候补乘客
customer*prior;//满足要求的订票乘客的前节点,以作删除操作
intshouldsave=0;
(4)询问是否继续函数,用于各个菜单之间,当一项操作完之后进行询问:
charContinue()//询问是否继续函数
{charanswer;
while
(1)
{printf("\n\t您是否想继续(Y/N)?
");scanf("%s",&answer);
system("cls");
if(answer=='y'||answer=='Y')return'y';
elseif(answer=='n'||answer=='N')return'n';
elseprintf("\n\t输入有误,请重新输入!
");}
}
(5)操作出错函数,当某一操作出错时显示“对不起,您的操作有误!
”:
voiderrormess()//操作出错函数
{printf("\n\t对不起,您的操作有误!
");getch();}
(6)核对列车号是否为一,用于管理员管理时,检查列车是否唯一,增加新列车时可以避免使用同一车次:
intfind_railway(prailwayl,char*key)//核对列车号是否唯一
{intflag=0;railway*p1;p1=l;
if(p1==p2)returnflag;
while(p1!
=p2&&p1!
=NULL)
{if(strcmp(p1->railway_no,key)==0)
{flag=1;break;}
p1=p1->next;}
returnflag;
}
(7)列车查找函数,客户可以通过此函数查看所有列车的信息,方便乘客订票:
intfind_railway(prailwayl,char*key,prailway&p2,int&railway_no)//列车号查找函数
{intflag=0;railway*p1;p1=l;
while(p1!
=NULL)
{if(strcmp(p1->railway_no,key)==0)
{flag=1;p2=p1;break;}
p1=p1->next;
if(p1!
=NULL)railway_no++;}
returnflag;
}
(8)乘车区间查找函数,乘客可以通过此函数查找列车,查看是否还有票:
voiddes_name_search()//乘车区间查找
{railway*p1=head;chardesname[50];
if(head==NULL)
{printf("\n\t没有您要查找的乘车区间!
");getch();
return;}
printf("\n\t请输入乘车区间:
");scanf("%s",&desname);
printf("\n\t您所查询的乘车区间信息:
");
printf("\n__________________________________________________________________________________\n");
while(p1!
=NULL)
{if(strcmp(p1->des_name,desname)==0)
{printf("车次乘车区间时间总票额剩余票数硬座票价软座票价硬卧票价软卧票价\n");
printf("\n%-9s%-9s%-9s%-9d%-9d%-9d%-9d%-9d%-9d",p1->railway_no,p1->des_name,p1->time,p1->customer_a,p1->free_a,p1->price[0],p1->price[1],p1->price[2],p1->price[3]);}
p1=p1->next;
}printf("\n__________________________________________________________________________________\n");
Continue();
}
(9)列车增加函数,用于管理员管理列车增加列车:
voidrailway_add()//列车增加函数
{railway*p1;
while
(1)
{if(head==NULL)
{p1=p2=newrailway;head=p2;
}
else
{p1=newrailway;p2->next=p1;p2=p1;
}
printf("\n\t添加新的列车号!
\n");
printf("\n\t请输入乘车区间:
");
scanf("%s",&p2->des_name);
while
(1)
{printf("\n\t请输入--列车号:
");scanf("%s",&p2->railway_no);
if(find_railway(head,p2->railway_no))printf("\n\t列车号已存在!
\n");
elsebreak;
}
printf("\n\t请输入----时间:
");scanf("%s",&p2->time);
printf("\n\t请输入座位数量:
");scanf("%d",&p2->customer_a);
printf("\n\t请输入硬座价格:
");scanf("%d",&p2->price[0]);
printf("\n\t请输入软座价格:
");scanf("%d",&p2->price[1]);
printf("\n\t请输入硬卧价格:
");scanf("%d",&p2->price[2]);
printf("\n\t请输入软卧价格:
");scanf("%d",&p2->price[3]);
p2->free_a=p2->customer_a;p2->custname=NULL;
p2->replname=NULL;shouldsave=1;
if(Continue()=='n')
{p2->next=NULL;return;}
}
}
(10)判断列车是否存在函数,乘客订票时可以通过此函数查看是否有此列车:
intempty_railway()//判断列车是否存在
{if(head==NULL)
{system("cls");
printf("\n\t对不起,此列车不存在,按任意键返回!
");getch();
return1;
}
elsereturn0;
}
(11)列车管理菜单,管理列车信息可以增加列车,查看列车信息,用乘车区间查看等:
voidrailwaymanage()//列车管理
{charc;system("cls");
while
(1)
{printf("\n\t\t\t\t列车管理菜单");
printf("\n__________________________________________________________________________________\n\n");
printf("\t\t\t\t1.添加新的列车号\n");
printf("\t\t\t\t2.查看列车号\n");
printf("\t\t\t\t3.查看乘车区间\n");
printf("\t\t\t\t4.返回主菜单\n");
printf("\n__________________________________________________________________________________\n");
printf("\t请选择您要的服务:
");scanf("%s",&c);
switch(c)
{case'1':
railway_add();break;
case'2':
railway_see();break;
case'3':
des_name_search();break;
case'4':
return;}
}
}
(12)订票及订票乘客信息,乘客订票,输入信息:
voidbooking()//订票乘客信息
{intticket_c,idcard,i,flag=0;intrailway_no=0;railway*p1;customer*p2;
customer*p3;charanswer[7];chartemp,c;inttag=0;intIsrepl=0;
if(empty_railway())return;
while
(1)
{printf("\n\t现在您可以订票了!
");
flag=0;railway_no=0;tag=0;
printf("\n\t请输入列车号:
");scanf("%s",&answer);
if(find_railway(head,answer,p1,railway_no))
{while
(1)
{printf("\n\t请输入您想要订购的票的数量:
");
scanf("%d",&ticket_c);
if(ticket_c==0)
{printf("\n\t请在此输入列车号:
");getch();}
elsebreak;
}if(p1->free_a>=ticket_c)
{customer_c++;flag=1;Isrepl=1;
if(p1->custname==NULL)
{custp1[railway_no]=p2=newcustomer;
p1->custname=custp1[railway_no];}
else
{p2=newcustomer;custp1[railway_no]->next=p2;
custp1[railway_no]=p2;}
Isempty=0;custp1[railway_no]->amount=ticket_c;
idcard=p1->customer_a-p1->free_a+1;
custp1[railway_no]->idcard=idcard;
p1->free_a-=ticket_c;printf("\n\t请输入您的姓名:
");
scanf("%s",&custp1[railway_no]->name);
while
(1)
{printf("\n\t请输入票种:
");scanf("%s",&custp1[railway_no]->rank);
if(!
(custp1[railway_no]->rank>='1'&&custp1[railway_no]->rank<='3'))
{printf("\n\t输入有误,请重新输入");getch();}
elsebreak;
}
printf("\n\t输入您的id信息:
");scanf("%d",&custp1[railway_no]->idcard);
if(ticket_c<10)printf("\n\t");elseprintf("\n\t");
printf("\n\t恭喜您订票成功!
\n");
for(i=0;i {printf("\n\t您所预定的座位号是%d",idcard++); if(i%10==0)printf("\n\t");} printf("\n"); } elseif(p1->free_a==0) {printf("\n\t对不起,票已售完! \n");Isrepl=0;} else {printf("\n\t对不起,当前没有多余的票! \n");Isrepl=0;} if(! Isrepl) { printf("\n\t您是否想成为后部乘客(Y/N)? ");scanf("%s",&temp); if(temp=='y'||temp=='Y') {if(p1->replname==NULL) {replp1[railway_no]=p3=newcustomer; p1->replname=replp1[railway_no];} else {p3=newcustomer;replp1[railway_no]->next=p3; replp1[railway_no]=p3;} Isreplace=0;tag=1; replp1[railway_no]->amount=ticket_c; printf("\n\t请输入您的姓名: ");scanf("%s",&replp1[railway_no]->name); replp1[railway_no]->idcard=idcard; replp1[railway_no]->amount=ticket_c; while (1) { printf("\n\t请输入车票种类: ");scanf("%s",&replp1[railway_no]->rank); printf("\n\t请输入您的ID信息: ");scanf("%d",&replp1[railway_no]->idcard); if(! (replp1[railway_no]->rank>='1'&&replp1[railway_no]->rank<='3')) {printf("\n\t输入有误,请重新输入: ");getch();} elsebreak; } printf("\n\t没有剩余座位! \n");shouldsave=1; } } } elseprintf("\n\t对不起,没有此列车! \n"); if(flag) custp1[railway_no]->next=NULL; if(tag) {replp1[railway_no]->next=NULL; printf("\n\t您已经成功排入后部订票队列中! \n");} printf("\n\t是否退出菜单? : (Y/N)");scanf("%s",&c); if(c=='y')return; } } (13)显示订票乘客信息: voiddisplay_reserve()//显示订票乘客信息 {system("cls");railway*p1;customer*p2;p1=head; if(empty_railway())return; printf("\n\t\t\t订票信息"); if(Isempty) {printf("\n\t对不起,没有订票乘客信息! \n");getch(); return;} printf("\n__________________________________________________________________________________\n"); printf("姓名车次订票数乘车区间票类身份证号码\n"); while(p1! =NULL) {if(p1->custname! =N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火车 订票 系统 语言