




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构与算法课程实验报告课程设计一:火车售票系统设计及实现姓名:cll 班级: 学号:一、实验内容: 火车售票系统在现实中的应用已经非常普遍,目前通常使用可视化的方法实现,例如采用C/S模式下的程序设计或者采用B/S模式下的程序设计,通常都具有较为友好的界面和较为完善的功能。火车售票系统的实现过程中,主要涉及到数据格式的设计,也就是数据结构的设计。通常在采用数据库的情况下,可以运用数据库的设计来实现。在没有采用数据库情况下需要,单独设计相应数据结构和算法。二、实验目的: 按给定需求,通过查找相关资料,完成火车售票系统设计及实现,在设计过程中充分运用数据结构与算法课程中所学知识,从而熟练地掌握和应用线性表、单链表等重要数据结构和常用算法。提前熟悉软件需求分析,软件测试等环节,运用相应程序设计语言实现该系统,从而进一步提高程序设计能力。三、问题描述(1)此系统可以实现售票、退票、车票剩余情况查询等功能。(2)每张车票包含车次、座位信息。在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。(3)退票时,必须是车站售出的车票才能退,否则视为无效票,不能退票。(4)演示程序以用户和计算机的对话方式进行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入程序中规定的运算命令;相应的输入数据(滤去输入中的非法字符)和运算结果显示在后。(5)由订票系统的主要功能使程序的命令包括:1)查询;2)订票;3)退票 4)退出订票系统四、问题的实现4.1所用的数据结构(包括所用数据结构的抽象数据类型定义和说明)typedef struct LNode/数据域char name10;/订票姓名int dnum;/订票数量char dj50;/证件编号int zhekou; /1代表折扣对象float pay;/付费struct LNode *next;/指针域int zuohao200;LNode,*LinkList;/构造单链表(已订票) typedef struct Ticketschar *endname;/终点站名char *hnum;/车次名int fnum;/票价float discut;/折扣int day;/日期int wholenum;/总票额 int lastnum;/余票量 int tuipiao100; /退票处理,记录退票的座位号 int tpcs;/记录目前退票次数int mcps;/记录卖出去的票数(包括退票)LinkList la;/已订票链表Tickets;/构造结构类型(火车票) typedef structstruct Tickets *elem;/存储空间的基址int length;int listsize;/当前分配的存储容量(以sizeof(Tickets)为单位)SqList;/构造顺序表4.2主要实现思路1、火车站的火车票采用顺序表表示。每趟火车出售的票用链表表示。2、查询:输入终点站信息,输出该趟火车的票价,日期,余票数等信息; 订票:输入终点站信息,确认有该趟车之后,输入该趟车的基本信息,之后输入购票数,系统查询是否有余票,确认之后,输入个人基本信息;系统查询是否有退票,若有退票则,先售出退票。插入新的结点。退票:输入终点站的信息,输入个人信息,1、若退出所有票,则删除该结点,若,只退部分票,则更改该结点的购票信息。退出:退出系统;【程序演示】输入2 订票,购买到温州的火车票十张,姓名:a;证件号:a;退票:输入3退票,输入终点站温州,姓名:a;证件号:a;退票之后,继续订票3张【实现代码】int InitList_L(LinkList *h)/初始化带头结点的单链表 *h = (LinkList)malloc(sizeof(LNode);/生成头结点if(!h)printf(初始化链表错误!n);return 0; (*h) - next = NULL;return 1;int Create_Sq(SqList *L)/初始化并创建顺序表 L-elem=(Tickets *)malloc(ListInitSize*sizeof(Tickets);if(!L-elem) printf(存储分配失败!);/ 存储分配失败 return 0; L-length=5;/赋值 L-listsize=ListInitSize;int j;for(j = 0; j length; j+) L-elemj.mcps=0;/初始化,记录买出去的票 L-elemj.tpcs=0;/记录退票数 int i;for(i = 0;i length; i+) InitList_L(&L-elemi.la); L-elem0.endname=北京; /终点站名 L-elem0.hnum=G2378;/车次名 L-elem0.day=1;/日期 L-elem0.fnum=346;/票价 L-elem0.discut=0.5; L-elem0.wholenum=L-elem0.lastnum=10; L-elem1.endname=温州; L-elem1.hnum=K351; L-elem1.day=2; L-elem1.fnum=254; L-elem1.discut=0.5; L-elem1.wholenum=L-elem1.lastnum=10; L-elem2.endname=合肥; L-elem2.hnum=G782B; L-elem2.day=3; L-elem2.fnum=224; L-elem2.discut=0.5; L-elem2.wholenum=L-elem2.lastnum=10; L-elem3.endname=武汉; L-elem3.hnum=D2903; L-elem3.day=4; L-elem3.fnum=200; L-elem3.discut=0.5; L-elem3.wholenum=L-elem3.lastnum=10; L-elem4.endname=厦门; L-elem4.hnum=T112; L-elem4.day=5; L-elem4.fnum=450; L-elem4.discut=0.5; L-elem4.wholenum=L-elem4.lastnum=10; return 1;/创建顺序表void Demand(SqList L) int n1; do char endstop100; printf(*查票窗口*n); printf(请输入终点站名:n);do gets(endstop); while(!endstop0);int i; for(i=0;i%sn,endstop); printf(tt车次:%sn,L.elemi.hnum); printf(tt日期:%d日n,L.elemi.day); printf(tt票价:%dn,L.elemi.fnum); printf(tt折扣价(学生/军人等5折):%fn,L.elemi.fnum*L.elemi.discut); printf(tt总票量:%dn,L.elemi.wholenum); printf(tt余票量:%dn,L.elemi.lastnum); break; if(i=L.length-1) printf(没有找到%s的车票!n,endstop); printf(1.返回主菜单;2.继续n); scanf(%d,&n1); while(n1=2);void GetTicket(SqList *L)/订票 int n2=2,zhekou;/n2=1,继续订票;n2=2,返回主菜单;n2=0,确定,即订票成功 int num; /订票数 float money; /存储应付的总票额 char endstop100; /记录终点站名 char name100; char ID100; /记录证件号 do printf(*订票窗口*n); printf(终点站名:); do gets(endstop); while(!endstop0);int i = 0;for(i=0;ilength;i+) if(strcmp(L-elemi.endname,endstop)=0) /有该趟火车 printf(tt杭州-%sn,endstop); printf(tt车次:%sn,L-elemi.hnum); printf(tt日期:%d日n,L-elemi.day); printf(tt票价:%dn,L-elemi.fnum); printf(tt折扣价(学生/军人等5折):%fn,L-elemi.fnum*L-elemi.discut); printf(tt总票量:%dn,L-elemi.wholenum); printf(tt余票量:%dn,L-elemi.lastnum); printf(请输入订票数:); scanf(%d,&num); if(L-elemi.lastnum = 0) printf(对不起,到%s的车票已卖完!n,endstop); printf(nt1.继续订票;2.返回主菜单;n); scanf(%d,&n2); else if(num L-elemi.lastnum) printf(对不起,到%s的车票只剩%d张。n,endstop); printf(n1.继续订票;2.返回主菜单;n); scanf(%d,&n2); else printf(购票请输入个人信息:n); printf(姓名:);dogets(name);while(!name0); printf(是折扣对象吗?若是,请输入相关证件号,不是请输入身份证号(1.是;0.不是)n); scanf(%d,&zhekou); while(zhekou != 1 & zhekou != 0) printf(不合法输入,请重输!n); scanf(%d,&zhekou);printf(证件号码:);/fflush(stdin); dogets(ID);while(!ID0); /输出订票信息,待客户确认 printf(t请核对您的订票信息:n); printf(t姓名:%sn,name); printf(t证件号码:%sn,ID); printf(t杭州-%s:n,endstop); printf(t车次:%sn,L-elemi.hnum); printf(t日期:12月%d日,L-elemi.day); /输出票价(两种情况) if(zhekou=1) printf(折扣价(学生/军人等5折):%fn,L-elemi.fnum*L-elemi.discut); money=L-elemi.fnum*L-elemi.discut*num;/money用于暂时存储应付的总票额 else printf(票价:%dn,L-elemi.fnum); money = L-elemi.fnum*num; printf(订票数:%dn,num); printf(座位号: ); /如果有退票,优先卖退票 int k=0; /k用于记录买到的票是退票的数目 int data100; /临时记录座位号,用于后面的保存 int j;/只用于for循环的参数,不保存数据; for(j=L-elemi.tpcs-1 ; j=0 ; j-)/只需要num 张就够了,L.elemi.jishu1为退票总数 printf(%dt,L-elemi.tuipiaoj); /退票的座位号 tuipioaj k+; /买到退票数目+1 if(k=num)break; /说明买的全部都是退票 /退票数目不够买票数目 if(k num)for(j=0;jelemi.mcps += 1; /卖出去票的数目+1(包括退票) 此时卖出的票数即为座位号 dataj=L-elemi.mcps; printf(%dt,L-elemi.mcps); printf(n总票额:%fn,money); printf(n 0.确认;1.取消;2.返回主菜单n); scanf(%d,&n2); if(n2=0) printf(订票成功!n); L-elemi.lastnum-=num; /更新余票的数目 /在链表中插入新结点 LinkList p,s; /已订票链表的指针类型 p = L-elemi.la;/第i趟车的已订票列表 (头结点) s = (LinkList)malloc(sizeof(LNode) ; /新的结点 if(!s) printf(内存分配失败!);else s-next=p-next;/在头部插入 p-next=s; s-dnum=num; /订票数量 s-pay=money; /票价 s-zhekou=zhekou; /折扣信息 strcpy(s-name,name); /姓名 strcpy(s-dj,ID); /证件号 /将座位号记入客户信息 int flag=0; for(j=L-elemi.tpcs-1 ; j=0 ; j-)/只需要num 张就够了,L.elemi.jishu1为可买退票的张数 s-zuohaoflag=L-elemi.tuipiaoj; flag+; k+; /买到退票数目+1 if(k=num)break; /说明买的全部都是退票 /退票数目不够买票数目 if(k num)for(j=0;jzuohaoflag=dataj;flag+; break; if(i=L-length-1) printf(没有到%s的车票!n,endstop); n2=2; while(n2=1);void ReturnTicket(SqList *L) int n3=2,k; /n3=1,继续退票;n3=2,返回主菜单;n3=0,确定,即退票成功,k记录要退的票的数目 LinkList p; char name100; char ID100; char endstop100; do printf(*退票窗口*n); printf(终点站:); do gets(endstop); while(!endstop0); int i; for(i=0;ilength-1;i+) if(strcmp(L-elemi.endname,endstop)=0) printf(姓名:); do gets(name);while(!name0); printf(证件号:); do gets(ID);while(!ID0); p = L-elemi.la; if(!p-next) printf(没有客户!); else p = p-next; while(!(strcmp(p-name,name)=0 & strcmp(p-dj,ID)=0) & p-next) p=p-next; if(strcmp(p-name,name)=0 & strcmp(p-dj,ID)=0) printf(您的车票信息如下:n); printf(t姓名:%sn,p-name);printf(t证件号码:%sn,p-dj); printf(t杭州-%sn,L-elemi.endname);printf(t车次:%sn,L-elemi.hnum);printf(t日期:12月%d日n,L-elemi.day); if(p-zhekou=0)/非折扣对象 printf(t票价:%dn,L-elemi.fnum); else/折扣对象 printf(t折扣价:%fn,L-elemi.fnum*L-elemi.discut); printf(t订票数:%dn,p-dnum); printf(t座位号为:); int flag; for(flag = 0;flagdnum;flag+) printf(%dt,p-zuohaoflag);printf(总票额:%fn,p-pay);printf(退几张?n);scanf(%d,&k);/k用来记录退票的张数 if(k p-dnum) printf(您只有%d票,请重新确认!n,p-dnum); printf(1.重新确定;2.返回主菜单n); scanf(%d,n3); else printf(0.确认;1.取消;2.返回主菜单n); scanf(%d,&n3); if(n3=0) printf(退票成功!n); int i1 = L-elemi.tpcs; L-elemi.tpcs+=k;/更新退票数 for(flag=p-dnum;flagp-dnum-k;flag-,i1+) L-elemi.tuipiaoi1 = p-zuohaoflag-1; L-elemi.lastnum+=k;/更新余票 if(k=p-dnum) /票全部退完的情况,删除链表中的结点 LinkList q = L-elemi.la; while(q-next!=p) q = q-next; q-next = p-next; free(p); /释放资源 n3=2; /返回主菜单 else if(p-pay = p-dnum*L-elemi.fnum) /判断是否是折扣票 p-pay-=L-elemi.fnum*k;else p-pay-=L-elemi.fnum*k*L-elemi.discut; p-dnum-=k; printf(你还有%d张票,p-dnum); n3=2; /if(n3=0) /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年祁阳市市直机关遴选考试真题
- 中华传统文化实践教育知到智慧树答案
- 中文文献资料检索知到智慧树答案
- 中西文化对比知到智慧树答案
- 2025标识标牌定制化产品研发与市场推广合同
- 2025年二手车深度检查与维修合同协议书
- 2025代销协议书-健康养生产品区域分销合同
- 2025版新型建材涂料粉刷施工合作协议书
- 2025年度新型防盗窗安装及保养服务合同范本
- 2025版农业科技园租赁合同
- 中学历史教师课程思政研修计划
- 2025年法宣试题及答案
- 2025年公租房入住合同范例
- 征兵业务培训
- Unit 6 Useful numbers Part C Project(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 危险废物处置服务协议
- 《观光农业概论》课件
- 派出所签订治安调解协议书范文
- 情境领导力培训课件
- DBJ41T 277-2023 装配式钢结构集成楼盖应用技术规程 河南省工程建设标准(住建厅版)
- 飞灰螯合物运输服务方案
评论
0/150
提交评论