一个简单的火车票售票管理系统
火车票管理系统
实训报告题目:火车票管理系统院系:专业:姓名:学号:指导教师:日期:火车票管理系统本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和链表的各种基本操作。
本程序中涉及结构体、链表、文件等方面的知识。
通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用链表存储结构实现对火车票信息管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义用所学过的C语言知识(文件,结构体,函数,数组等)编写一个火车票管理系统。
使其有以下功能。
1.输入火车票的信息,包括火车车次号、出发城市、到站城市、出发时间、到站时间、票价等。
2.可以搜索到火车票的信息。
3.可以修改火车票的信息。
4.可以查看以及预定火车票。
5.最后可将火车票的纪录保存到文件。
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计2.1 总体设计先定义一个结构体,然后采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,最后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
图2.1 火车票管理系统2.2 详细设计 2.2.1数据结构设计火车票管理系统重点设计(1)struct train {char num[10];/*列车号*/char startcity[10];/*出发城市*/ char reachcity[10];/*目的城市*/ char takeofftime[10];/*发车时间*/ char receivetime[10];/*到达时间*/ int price;/*票价*/int ticketnum ;/*票数*/ };/*订票人的信息*/ struct man {char num[10];/*ID*/ char name[10];/*姓名*/int bookNum ;/*订的票数*/ };(2)/*定义火车信息链表的结点结构*/ typedef struct node进入主界面返回系统模块系统信息输入模块信息输入 火车票预订模块信息模块信息查看模块 信息信息修改模块预定 信息输出模块信息信息保存模块{struct train data ;struct node * next ;}Node,*Link ;/*定义订票人链表的结点结构*/typedef struct Man{struct man data ;struct Man *next ;}book,*bookLink ;这样就定义了一个存储火车信息的结构体,data为struct 结构类型的数据,为struct函数接下来定义火车信息链表的结点结构。
火车票管理系统
火车票管理系统火车票管理系统文档⒈引言本文档旨在介绍火车票管理系统的功能、设计和使用方法。
该系统是为了方便用户购买、查询和管理火车票而开发的,使用户能够更加便捷地进行出行安排。
⒉系统概述⑴系统功能火车票管理系统提供以下主要功能:- 用户注册与登录:用户可以注册新账号,并使用注册信息登录系统。
- 车次查询与预订:用户可以根据出发地、目的地和出发日期等条件查询火车车次,并进行车票预订。
- 车票购买与支付:用户可以选择预订的车票进行购买,并使用合适的支付方式完成支付。
- 车票退订与退款:用户在一定时间范围内可以取消已购的车票,并申请退款。
- 车票改签:用户在一定时间范围内可以申请对已购车票的改签。
- 个人信息管理:用户可以查看、修改个人信息,并查看自己的购票记录。
- 管理员功能:管理员可以管理系统的用户信息、车次信息和订单信息。
⑵用户角色本系统包含以下几种用户角色:- 普通用户:可以进行车次查询、预订和购票等操作。
- 管理员:可以管理系统的用户信息、车次信息和订单信息。
⒊系统设计⑴系统架构火车票管理系统的架构如下图所示:(插入系统架构图)⑵数据库设计系统的核心数据结构包括以下表:- 用户表:保存用户的注册信息和个人信息。
- 车次表:保存火车车次的相关信息,如车次号、起始站、终点站、票价等。
- 订单表:保存用户购买和预订的车票订单信息。
⑶页面设计系统的主要页面包括以下几个:- 登录页:用户输入账号和密码进行登录。
- 注册页:用户填写注册信息进行账号注册。
- 车次查询页:用户输入查询条件进行车次查询。
- 车次详情页:展示选择的车次的具体信息和预订功能。
- 购票页:用户选择座位类型和支付方式进行购票。
- 个人中心页:用户查看个人信息和购票记录,进行车票退订和改签等操作。
- 管理员页面:管理员管理用户信息、车次信息和订单信息。
⒋使用方法⑴用户注册与登录用户可以通过注册页进行账号注册,填写必要的信息后提交注册申请。
火车票售票管理系统 (3)
火车票售票管理系统介绍火车票售票管理系统是一个用于管理火车票售票、订单管理和客户信息的软件系统。
该系统提供了一个方便快捷的平台,使用户能够在线浏览、预订和购买火车票,并对订单进行管理和查询。
功能1. 火车票查询用户可以通过系统提供的火车票查询功能查找目标日期和路线的火车票。
用户可以输入出发地、目的地和日期等信息来查找合适的火车票。
查询结果包括列车的发车时间、到达时间、车次、票价和余票数量等。
2. 火车票预订用户可以查看到的火车票信息后进行预订。
用户需要输入乘车人的信息,并选择座位类型和票数进行预订。
系统会根据用户的选择自动生成订单号,并提供支付链接进行付款。
3. 订单管理用户可以在系统中管理自己的订单。
用户可以查看订单详情,包括订单号、乘车人信息、座位类型、票价和支付状态等。
用户还可以取消未支付的订单,并根据需要重新预订。
4. 客户信息管理系统提供了客户信息管理功能,用户可以在系统中维护个人信息。
用户可以修改个人信息,包括姓名、性别、手机号码和电子邮箱等。
用户也可以查看自己的历史订单和购票记录。
5. 系统管理系统管理员可以对火车票售票管理系统进行管理。
管理员可以管理火车票信息,包括添加新的火车车次、修改票价和调整余票数量等。
管理员还可以管理用户信息,包括添加新用户、修改用户信息和删除用户等。
架构火车票售票管理系统的架构包括前端和后端两部分。
前端前端使用HTML、CSS和JavaScript编写,采用响应式设计,能够在不同终端设备上良好地展示。
前端实现了用户界面和交互逻辑,包括火车票查询、预订、订单管理和客户信息管理等功能。
后端后端使用Java编程语言开发,采用Spring框架和Spring Boot技术,实现了业务逻辑和数据交互。
后端处理用户请求,调用相应的服务进行数据处理和查询,并将结果返回给前端。
数据库设计火车票售票管理系统使用关系型数据库存储数据。
数据库中包括以下主要表:用户表存储用户的个人信息,包括用户ID、姓名、性别、手机号码和电子邮箱等。
火车票售票系统C语言大作业,基于C语言实现简单的12306火车售票系统
⽕车票售票系统C语⾔⼤作业,基于C语⾔实现简单的12306⽕车售票系统程序设计要求⽤C语⾔写⼀个简单的⽕车售票系统,主要实现的功能为:录⼊班次信息浏览班次信息按班次号查询按终点站查询按余票数量排序保存售票退票更新班次信息退出系统所有的班次信息保存在number.dat⽂件中,排序过后的保存在sort.dat中(.dat是⼀种⼆进制⽂件)。
在编写的过程中我觉得在判断⽕车的状态⽐较值得深究。
这⾥假设⽕车主要有四种状态:1.未发车2.已发车3.停⽌检票4.停⽌退票在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进⾏⼤⼩⽐较,主要采⽤if判断各种情况。
其中atime代表的是发车时间的整型数,btime代表的是系统时间的整型数,具体实现如下:if(atime<=btime) //已经发车return 1;if(((atime-btime<=30)&&(atime-btime>5)&&(atime/100==btime/100))||(((atime%100+(60-btime%100))<=30)&&(atime%100+(60-btime%100))>5&&(atime/100-btime/100==1))) //距发车半⼩时以内,停⽌退票,%表⽰取余return 2;if(((atime-btime<=5)&&(atime/100==btime/100))||((atime%100+(60-btime%100)&&(atime/100-btime/100==1))<=5)) //距发车前五分钟内停⽌检票return 3;return 0; //可以办理购退票在判断退票时如果两个时间的⼩时数是⼀样的,则它们的分钟数如果相差在30之内即半⼩时之内或者发车时间的⼩时和系统时间的⼩时相差⼀个1,并且发车时间的分钟数⼩于30,系统时间的分钟⼤于30,则它们之间也就相差在30之内,此时代表停⽌退票。
火车票管理系统
火车票管理系统火车票管理系统是一款基于网络技术和信息管理技术的管理系统,它可以对火车票的销售和管理进行全面的控制和监督。
目前,火车票管理系统已经被广泛地应用于火车票售卖、系统自动调度、车站售票、售票员管理、旅客管理等方面。
1. 系统概述火车票管理系统是一种基于现代网络技术和信息管理技术的高效、灵活、安全、完整的软件系统,它由火车票售卖、系统调度、售票员管理、旅客管理等模块组成。
该系统能够提供安全、准确、高效的售票服务,保证了火车票售卖的正常运作。
2. 功能介绍2.1 火车票售卖管理火车票售卖管理是该系统的核心模块。
在这个模块中,用户可以进行火车票查询、购票、退票、改签等功能。
用户可以输入出发地、目的地和乘车日期等信息查询车票。
如果有余票,乘客可以通过本系统在线购票。
如果乘客需要退票或更改,也可以在线操作,在规定的时间内取消或改签订单。
2.2 系统自动调度模块系统自动调度模块利用网络技术和信息管理技术自动安排日程安排和行程规划。
通过该模块,系统可以将不同地域、不同出发时间、不同的乘客等信息进行分析和计算,自动调度出合适的车次和座位,避免了人工计算所带来的时间和人为成本。
2.3 车站售票管理车站售票管理是该系统的重要组成部分。
在该模块中,车站售票员可以对售票、退票、改签、延误等问题进行处理,保证了每个乘客的行程顺利进行。
2.4 售票员管理售票员管理是该系统的另一个重要组成部分。
在该模块中,可以对售票员的信息进行管理,包括姓名、工号、部门、权限等。
通过该模块可以保证系统的稳定性、安全性、高效性等方面的优良表现。
2.5 旅客管理旅客管理是一个基于用户信息的管理模块。
用户通过本系统时必须进行身份认证,通过系统为其建立个人档案,包括姓名、身份证号码、联系方式等信息。
在旅行过程中,系统会根据乘客的行程记录其乘车信息、购票人数等信息,以便于车站售票员进行快捷查找,将其与票据信息进行核对,确保车站和车上护照的总透明。
火车票预订系统
火车票预订系统
火车票预订系统是一个通过互联网进行火车票预订和购买
的系统。
它允许用户在电脑或手机上方便地查看火车票信息、选择座位、支付订单,并获得电子车票。
以下是一个
普遍的火车票预订系统的功能:
1. 火车票查询:用户可以根据出发地、目的地、日期等信
息查询火车票的可用性。
2. 车次选择:系统显示查询结果,并提供票价、出发时间、到达时间等信息,用户可以选择适合的车次。
3. 座位选择:用户可以查看火车车厢的座位布局图,选择
适合的座位。
4. 乘客信息:用户需要提供乘客的姓名、身份证号码等信息。
5. 支付:用户可以通过多种支付方式支付订单,如支付宝、微信支付、银联支付等。
6. 订单确认:用户确认订单后,系统生成订单号,并发送
确认信息到用户的手机或电子邮箱。
7. 电子车票:用户可以在系统上查看和下载电子车票,也
可以选择短信或电子邮件接收电子车票信息。
8. 订单管理:系统允许用户在个人账户中查看和管理订单
信息,包括修改座位、取消订单等操作。
9. 退票和改签:用户可以申请退票或改签,系统根据规定
的退票和改签规则进行处理。
10. 客户服务:系统提供在线客服和客服电话等渠道进行咨询和投诉。
以上只是火车票预订系统的一些基本功能,实际的系统可能还包括其他功能和特点,以满足用户的需求。
火车票订票管理系统初步设计软件设计
南京农业大学软件设计报告设计题目:火车票订票管理系统初步设计一摘要每年都会有买票高峰期,为了人们更方便的购买火车票,铁路部也努力地改进购票系统。
这是我对订购火车票系统的一些简单设计。
通过设计一个简单的火车票订购管理数据库系统,实现购票,查找购票者信息,查询余票信息,退出系统等功能.这只是理论设计,包含关系表以及预想界面图但不包含具体软件的实现及测试。
关键字:订购火车票火车票管理系统数据库设计二引言课题背景及意义:火车站市场的管理问题,是值得我们重视的一个问题,订票是客运业务中的一个最基本的业务,它虽然只是火车站业务的一小部分,但是它涉及到管理与客户服务等多方面,因此网上订票可以缓解订票高峰时期的客运压力,并为用户提供方便快捷的订票服务。
这次设计通过火车票管理数据库系统的设计,用visio 2007、SQL Server2000pencil等绘图软件,给需求分析,逻辑架构,数据库设计,关系表,物理设计等流程的数据库进行建立,并设想出合理的用户使用界面,给火车票管理员提供理论参考。
三系统结构分析需求分析:(1)管理员在已注册的情况下,输入账号和密码进行登录,登陆后界面会显示管理员的权限:查看用户信息,查看用户所购车票,删除用户所购车票,修改用户信息,添加用户,删除,添加车票信息等。
(2)购票者:输入始发地,目的地,日期进行查询,购票者的属性有姓名,用户名,身份证号,联系方式等。
车票的属性有始发地,目的地,发车时间,价格,票种,首先,数据库设计要能体现系统的需求,准确表达数据间的关系;其次,保证数据的准确性和一致性,通过外码、非空、限制、唯一索引等保证数据的健壮。
在此火车票订票管理系统中系统的功能结构划分如下:订票管理系统功能模块示意图三数据库设计概念结构设计:根据系统功能设计得出系统的信息,画出E-R图。
这个系统是由铁路部管理员使用的,所以首先由管理员通过账号和密码进行登录(1)管理员E—R图:(2)总E-R图N逻辑设计阶段:根据以上的关系,我得到以下的数据表:预期功能界面图总结:这就是我的火车票订票系统设计,只是简单设计了一下,还有很多不足,有待以后改善.。
C语言编写车票管理系统(2024)
引言概述:车票管理系统是一种用于管理车票信息,包括购票、退票、查询票务等功能的软件系统。
本文将以C语言为编程语言,详细阐述如何编写一个车票管理系统。
该系统可以方便管理者对车票信息进行操作,同时也提供给用户便捷的购票和查询功能。
正文内容:一、数据库设计1.1数据库表的建立1.2表中字段的设置1.3数据库的连接与操作1.4数据库的备份与恢复1.5数据库的维护与优化二、用户管理2.1用户注册2.2用户登录2.3用户信息修改2.4用户权限管理2.5用户数据备份与恢复三、车票管理3.1车票添加3.2车票查询3.3车票修改3.4车票删除3.5车票排序和筛选四、订单管理4.1订单4.2订单查询4.3订单修改4.4订单删除4.5订单统计和报表五、支付管理5.1支付方式的选择5.2支付状态的更新5.3支付记录的查询5.4退款管理5.5支付安全性保证总结:通过本文详细的阐述,我们了解到了如何使用C语言编写一个车票管理系统。
在系统的开发过程中,数据库设计、用户管理、车票管理、订单管理和支付管理等方面都需要详细考虑。
通过对每个模块的分析和设计,能够使系统更加高效、安全和易用。
在实际开发中,我们还需要根据具体需求进行对系统的优化和完善,保证系统能够满足用户的需求,并且能够稳定运行。
希望本文对您有所帮助,能够指导您在C语言中编写车票管理系统的开发过程。
引言概述:C语言编写车票管理系统是一个涉及到计算机编程技术的项目,旨在帮助车票销售员和管理员更好地管理和控制车票的销售与出票过程。
本文将详细介绍该系统的设计和实现过程,包括系统的功能需求、系统的结构设计、关键代码的实现以及系统的优化与改进。
正文内容:1.功能需求车票管理系统的功能需求包括但不限于:车票销售、车票查询、座位管理、车票退换等。
具体的系统功能要求涉及到对车票信息的录入、查询、修改和删除,车票的座位分配和座位的查询,以及对车票销售记录的统计和报表等功能。
1.1车票销售功能实现车票销售功能是车票管理系统的核心功能之一。
火车票务管理系统(C语言)
火车票务管理系统一、课题内容和要求设计目标:设计一个火车票务管理系统,用C语言实现。
对该系统的要求如下:需求描述:1.系统功能(1)火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价。
数据存入数据文件hchsk.dat或hchsk.txt中。
(2)火车时刻信息查询。
按照车次查询按终点查询按起点查询按终点和日期查询(3)统计按终点统计每日的车次数按起点统计每日的车次数2. 系统主界面应有以下功能选项录入火车时刻信息查询火车时刻信息统计火车车次退出注:建议用VC环境开发用户界面。
结果形式:提交程序设计报告和可演示的系统软件二、需求分析系统主界面应有以下功能选项1.录入火车时刻信息2.查询火车时刻信息3.统计火车车次4.退出(1)火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价。
数据存入数据文件hchsk.dat或hchsk.txt中。
(2)火车时刻信息查询。
按照车次查询按终点查询按起点查询按终点和日期查询(3)统计按终点统计每日的车次数按起点统计每日的车次数二、概要设计void SearchTrainNum();//按照车次查询void SearchToPlace();//按终点查询void SearchFromPlace();//按起点查询void SearchToPlaceAndDate();//按终点和日期查询void CountToPlace();//按终点统计每日的车次数void CountFromPlace();//按起点统计每日的车次数三、详细设计程序的源代码与注释#include<stdio.h>#include<string.h>#include<stdlib.h>void SearchTrainNum();void SearchToPlace();void SearchFromPlace();void SearchToPlaceAndDate();void CountToPlace();void CountFromPlace();void Star();struct TRAIN{char trainNum[10];char date[30];char fromPlace[20];char toPlace[20];char inTime[30];char outTime[30];double price;};struct TRAIN train[30];int main(){int request;char ch='Y';int i=0;double myprice;FILE *fp;repeat:Star();printf("火车管理系统界面\n");printf("1.录入火车时刻信息.\n");printf("2.查询火车时刻信息.\n");printf("3.统计火车车次.\n");printf("4.退出.\n");Star();printf("\n");printf("请输入:");scanf("%d",&request);switch(request) //利用case分支结构{case 1:{ fp=fopen(".\\train.rec","wb"); //利用文件与流if(!fp){printf("File can not be opened\n");exit(1);}do{printf("Enter车次日期起点终点开车时间到达时间票价\n>>> ");scanf("%s%s%s%s%s%s%lf",train[i].trainNum,train[i].date,train[i].fromPlace ,train[i].toPlace,train[i].inTime,train[i].outTime,&myprice);train[i].price=myprice;fwrite(&train[i],sizeof(struct TRAIN),1,fp);i++;printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');fclose(fp);printf("返回主界面吗?(Y返回)");getchar();scanf("%c",&ch);if(ch=='Y'){printf("\n\n");goto repeat;}}break;case 2:{ printf("\n\n");printf(">>>>>火车时刻信息查询<<<<<\n");printf("1.按车次查询.\n");printf("2.按终点查询.\n");printf("3.按起点查询.\n");printf("4.按终点和日期查询.\n");printf("5.退出.\n");printf("请输入:");scanf("%d",&request);switch(request){case 1: SearchTrainNum(); break; case 2: SearchToPlace(); break;case 3: SearchFromPlace(); break; case 4: SearchToPlaceAndDate(); break; case 5: exit(0); break;}printf("返回主界面吗?(Y返回)");getchar();scanf("%c",&ch);if(ch=='Y'){printf("\n\n");goto repeat;}} break;case 3:{printf("\n\n");printf(">>>>>火车车次统计系统<<<<<\n");printf("1.按终点统计每日的车次数.\n");printf("2.按起点统计每日的车次数.\n");printf("3.退出.\n");printf("请输入:");scanf("%d",&request);switch(request){case 1: CountToPlace(); break;case 2: CountFromPlace(); break;case 3: exit(0); break;}printf("返回主界面吗?(Y返回)");getchar();scanf("%c",&ch);if(ch=='Y'){printf("\n\n");goto repeat;}} break;case 4:{Star();printf("欢迎下次使用,拜拜~~\n"); Star();}exit(0); break;default:printf("Incorrect num entered.");printf("Enter a new num.\n");break;}return 0;}void SearchTrainNum(){FILE *fp1;char num[20];char ch;int i=0;fp1=fopen(".\\train.rec","r+");if(!fp1){printf("File can not be opened\n");exit(1);}do{rewind(fp1); //文件指针的操作,到文件头部函数printf("输入你要查找的车次号.\n>>>");scanf("%s",num);while(!feof(fp1)){fread(&train[i],sizeof(struct TRAIN),1,fp1);if(strcmp(num,train[i].trainNum)==0){printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date, train[i].fromPlace,train[i].toPlace,train[i].inTime,train[i].outTime,train[i].price);printf("\n");}i++;}printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');printf("\n");fclose(fp1);}void SearchToPlace(){FILE *fp2;char num[20];char ch;int i=0;fp2=fopen(".\\train.rec","r+");if(!fp2){printf("File can not be opened\n");exit(1);}do{rewind(fp2);printf("输入你要查询的终点.\n>>>");scanf("%s",num);while(!feof(fp2)){fread(&train[i],sizeof(struct TRAIN),1,fp2);if(strcmp(num,train[i].toPlace)==0){printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date, train[i].fromPlace,train[i].toPlace,train[i].inTime,train[i].outTime,train[i].price);printf("\n");}i++;}printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');printf("\n");fclose(fp2);}void SearchFromPlace(){FILE *fp3;char num[20];char ch;int i=0;fp3=fopen(".\\train.rec","r+");if(!fp3){printf("File can not be opened\n");exit(1);}do{rewind(fp3);printf("输入你要查询的起点.\n>>>");scanf("%s",num);while(!feof(fp3)){fread(&train[i],sizeof(struct TRAIN),1,fp3);if(strcmp(num,train[i].fromPlace)==0){printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date,tra in[i].fromPlace,train[i].toPlace,train[i].inTime,train[i].outTime,train[i].price);printf("\n");}i++;}printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');printf("\n");fclose(fp3);}void SearchToPlaceAndDate(){FILE *fp4;char num[20];char num1[20];char ch;int i=0;fp4=fopen(".\\train.rec","r+");if(!fp4){printf("File can not be opened\n");exit(1);}do{rewind(fp4);printf("输入你要查询的终点与日期.\n>>>");scanf("%s",num);scanf("%s",num1);while(!feof(fp4)){fread(&train[i],sizeof(struct TRAIN),1,fp4);if((strcmp(num,train[i].toPlace)==0)&&(strcmp(num1,train[i].date)==0)) {printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date, train[i].fromPlace,train[i].toPlace,train[i].inTime,train[i].outTime,train[i].price); printf("\n");}i++;}printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');printf("\n");fclose(fp4);}void CountToPlace(){FILE *fp5;char num[20];char ch;int i=0;int j=0;fp5=fopen(".\\train.rec","r+");if(!fp5){printf("File can not be opened\n");exit(1);}do{rewind(fp5);printf("输入你(要统计的车次数的)终点.\n>>>");scanf("%s",num);j=0;while(!feof(fp5)){fread(&train[i],sizeof(struct TRAIN),1,fp5);if(strcmp(num,train[i].toPlace)==0){j++;}i++;}printf("当日终点%s的车次数:%d",num,j);printf("\n");printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');fclose(fp5);}void CountFromPlace(){FILE *fp6;char num[20];char ch;int i=0;int j=0;fp6=fopen(".\\train.rec","r+");if(!fp6){printf("File can not be opened\n");exit(1);}do{rewind(fp6);printf("输入你(要统计的车次数的)起点.\n>>>");scanf("%s",num);j=0;while(!feof(fp6)){fread(&train[i],sizeof(struct TRAIN),1,fp6);if(strcmp(num,train[i].fromPlace)==0){j++;}i++;}printf("当日起点%s的车次数:%d",num,j);printf("\n");printf("continue(Y/N)(N to end)?");getchar();scanf("%c",&ch);}while(ch!='N');fclose(fp6);}void Star(){int i;for(i=0;i<20;i++){printf("*");}printf("\n");}四、测试数据及其结果分析(如图)1.火车时刻信息录入2.火车时刻信息查询。
火车票售票管理系统
火车票售票管理系统火车票售票管理系统一、引言火车票售票管理系统是一个用于管理火车票售卖、退票、改签等业务的软件系统。
本文档旨在提供详细的系统需求、设计和实现细节,以便开发人员能够准确理解和实现系统功能。
二、系统概述本系统旨在为用户提供方便、快捷的火车票售卖服务。
主要功能包括火车车次查询、座位选择、订票、支付、退票、改签等。
系统通过使用现代化的技术手段,提供用户友好的界面和高效的服务流程,实现火车票售卖过程的自动化和优化。
三、功能需求1:用户注册与登录a:新用户可以通过注册页面创建自己的账号,并提供必要的个人信息。
b:用户可以使用注册时的账号和密码登录系统。
2:火车车次查询a:用户可以根据出发地和目的地查询相关的火车车次。
b:系统返回查询结果,包括车次、出发时间、到达时间、座位类型和票价等信息。
3:座位选择a:用户在选择火车车次后,可以查看该车次所有车厢的座位布局。
b:用户可以选择座位类型和具体座位号。
c:座位选择支持实时更新,显示已被选中的座位。
4:订票a:用户在选择座位后,可以提交订单。
b:订单包括用户信息、车次信息、座位信息和订单金额。
c:系统应将订单信息保存到数据库中,并返回订单号供用户查询和支付。
5:支付a:用户可以选择不同的支付方式进行支付。
b:系统应与第三方支付平台进行接口对接,并实现支付功能。
c:用户支付成功后,系统应更新订单状态并电子票。
6:退票a:用户可以在规定时间内申请退票。
b:系统应验证退票条件,并进行相应的退款操作。
7:改签a:用户可以在规定时间内申请改签。
b:系统应验证改签条件,并进行相应的改签操作。
四、非功能需求1:用户友好性a:界面简洁明了,操作流程简单易懂。
b:提供输入错误的提示和容错机制。
2:性能要求a:系统应能够支持大量用户同时访问和操作。
b:响应时间应尽量缩短,提高用户体验。
3:安全性a:用户信息和订单信息应存储在安全的数据库中,防止数据泄露。
b:传输数据要使用加密技术,保障通讯安全性。
火车票订票管理系统
火车票订票管理系统一、绪论随着国民收入水平提高,外出旅游、探亲等需求的不断增加,铁路作为我国主要的交通方式之一,也引起了越来越多的关注。
火车票订票管理系统是一款集售票、查询、退票、改签、客服等功能于一体的软件,为人们提供方便快捷的服务。
本文就火车票订票管理系统进行详细的介绍。
二、需求分析随着互联网的普及,手机APP的出现,人们越来越习惯了使用互联网进行各种活动,包括买火车票。
为了满足人们的需求,火车票订票管理系统应当具备以下功能:1. 售票功能:用户可以通过系统在线订购火车票,选择座位类型,并通过支付宝、微信等方式支付。
2. 查询功能:用户可以查询火车车次、车票价格、余票情况等信息。
3. 退票功能:用户可以在指定时间范围内在线申请退票,并进行退款操作。
4. 改签功能:用户可以在线更改已购车票的座位、车次等信息。
5. 客服功能:用户可以通过火车票订票管理系统与客服取得联系,获得相应的支持。
以上功能是火车票订票管理系统的基本要求,还应具备一些高级功能,如优惠券、折扣、积分等。
三、系统架构火车票订票管理系统是一个大型的软件系统,需要配合多种技术,包括前端开发技术、后端开发技术及数据库开发技术,以达到系统的高效稳定运行。
1. 前端技术:HTML、CSS、JavaScript等。
2. 后端技术:JAVA、PHP等。
3. 数据库技术: MySQL、Oracle等。
系统架构示意图:四、系统设计1. 数据库设计本系统采用MySQL数据库进行开发。
采用的数据库表如下:(1)用户表(user):包含用户ID、用户名、密码、手机号、邮箱、积分等字段。
(2)车站表(station):包含车站ID、车站名称、所属区域等字段。
(3)车次表(train):包含车次ID、起始站、结束站、发车时间、到达时间、所需时间等字段。
(4)座位表(seat):包含座位ID、座位名称、价格等字段。
(5)订单表(order):包含订单ID、用户ID、车次ID、座位ID、状态、时间等字段。
一个简单的火车票售票管理系统
1 / 18()#include<stdio.h> #include<malloc.h> #define MAX 100 #define N 50typedef struct time //时间类型{int x,y,z;//分别对应年,月,日}TIME;int id;//购票人证件号TIME date;//购票日期}CNODE;typedef struct tnode //车次信息类型{char data;//车次编号struct tnode *lchild,*rchild; CNODE *head; }TNODE;void create();//按车次建立二叉排序树void insert(int );//增加新的车次(二叉排序树的插入)void del();//取消车次(二叉排序树节点删除)void inorder(TNODE *);//中序遍历车次二叉排序树(仅显示车次信息)voidinorder_all(TNODE *);//中序遍历车次二叉排序树(显示车次及售票信息)voidpreorder(TNODE *);//先序遍历车次二叉排序树(仅显示车次信息)TNODE*search();//按车次编号搜索CNODE *insert_c(CNODE *);//插入新的售票信息(单张)2 / 18CNODE *insert_c_more(CNODE *);//插入新的售票信息(批量)CNODE *del_c(CNODE *,CNODE *);//退票处理(删除售票信息)CNODE *search_c(CNODE *,int);//按票号查询void search_c_id(CNODE *,int);//按购票人证件号搜索(限定某车次)void search_c_id_all(TNODE *,int);//按购票人证件号搜索(所有车次)void search_date(CNODE *,TIME);//按购票日期搜索(限定某车次)void search_date_all(TNODE *,TIME);//按购票日期搜索(所有车次)void print_c(CNODE *);//输出售票纪录(单张)void print_c_all(CNODE *);//输出售票纪录(批量)TNODE *root=NULL; void main(){int i,func,no,ok; TNODE *t; CNODE *c; TIME d; printf(\n\n\n);for(i=0;i<15;i++) printf(=); printf(列车售票信息管理系统);for(i=0;i<15;i++) printf(=); printf(\n); printf(\t1.车次信息管理\n); printf(\t2.售票记录管理\n);3 / 18printf(\t3.售票记录查询\n); printf(\t4.售票记录一览\n); printf(\t5.退出系统\n);for(i=0;i<N;i++) printf(=); printf(\n请选择您所需要的功能: ); fflush(stdin); scanf(%d,&func); switch(func){ case 1:printf(\n\n车次信息管理>>>>\n); for(i=0;i<N;i++) printf(=);printf(\n\t 1.增加新的车次); printf(\n\t 2.取消车次); printf(\n\t 3.返回上级菜单\n);4 / 18for(i=0;i<N;i++) printf(=); printf(\n请选择您所需要的功能: ); fflush(stdin); scanf(%d,&func); switch(func){ case 1: create(); printf(\n售票信息更新成功!\n\n); break;case 2:del();break; case 3:main();break; default:printf(\n[错误]功能号输入有误!请重新输入!);}break; case 2: printf(\n\n售票记录管理>>>>\n); for(i=0;i<N;i++) printf(=);printf(\n\t1.增加新的售票记录); printf(\n\t2.退票);5 / 18printf(\n\t3.返回上级菜单\n); for(i=0;i<N;i++) printf(=); printf(\n请选择您所需要的功能: );fflush(stdin); scanf(%d,&func); switch(func){ case 1: t=search();if(t!=NULL) t->head=insert_c_more(t->head); break; case 2:t=search();printf(需要退票的票号: );scanf(%d,&no);t->head=del_c(t->head,search_c(t->head,no)); break;case 3:main();break; default:6 / 18printf(\n[错误]功能号输入有误!请重新输入!);}break; case 3:printf(\n\n售票记录查询>>>>\n); for(i=0;i<N;i++) printf(=);printf(\n\t 1.按票号搜索); printf(\n\t2.按购票者证件号搜索); printf(\n\t3.按购票日期搜索); printf(\n\t4.返回上级菜单\n); for(i=0;i<N;i++) printf(=); printf(\n请选择您所需要的功能: );fflush(stdin); scanf(%d,&func); switch(func){ case 1: t=search();if(t!=NULL){7 / 18printf(\n请输入您所要查询的票号: );scanf(%d,&no); c=search_c(t->head,no);if(c==NULL)printf([错误]没有该票号的纪录!该票还未售出或为废票!自动返回上级菜单\n...);}break; case 2:printf(\n请输入您所要查询的购票者证件号: );scanf(%d,&no); search_c_id_all(root,no);printf(搜索完毕!自动返回上级菜单\n...); break; case 3: do{ printf(\n请输入您所要查询的日期(格式: yy-mm-dd): );scanf(%d-%d-%d,&d.x,&d.y,&d.z); if(d.y<13&&d.y>0){8 / 18if(d.y==1||d.y==3||d.y==5||d.y==7||d.y==8||d.y==10||d.y==12)if( d.z<32&&d.z>0) ok=1;else if(d.z==2)if(d.z<30&&d.z>0) ok=1; elseif(d.z<31&&d.z>0) ok=1;}else ok=0;if(!ok) printf(\n[错误]日期输入有误!请重新输入!); }while(!ok); printf(\n指定车次吗?(1->是,0->否): );scanf(%d,&ok);if(ok) search_date(search()->head,d); else search_date_all(root,d); break;case 4:main();break; default:printf(\n[错误]功能号输入有误!自动返回上级菜单\n...);}break;case 4: printf(\n\n售票记录一览>>>>\n);for(i=0;i<N;i++) printf(=); printf(\n\t 1.仅浏览车次); printf(\n\t9 / 182.指定车次已售票记录); printf(\n\t3.所有车次已售票记录); printf(\n\t4.测试:先序遍历车次); printf(\n\t5.返回上级菜单\n); for(i=0;i<N;i++) printf(=); printf(\n请选择您所需要的功能: );fflush(stdin); scanf(%d,&func); switch(func){ case 1:printf(\n+++仅浏览车次\n);if(root==NULL) printf([错误]无车次纪录!);else{inorder(root);printf(\n);} break; case 2:printf(\n+++指定车次已售票记录\n);10 / 18t=search(); if(t!=NULL){ print_c_all(t->head); printf(\n);}break; case 3:printf(\n+++所有车次已售票记录\n); if(root==NULL) printf([错误]无车次纪录!); else{inorder_all(root);printf(\n);} break; case 4: printf(\n+++测试:先序遍历车次\n);if(root==NULL) printf([错误]无车次纪录!);else{preorder(root);printf(\n);} break;case 5:main();break; default:printf(\n[错误]功能号输入有误!自动返回上级菜单\n...);}break;case 5:exit (0); default:printf(\n[错误]功能号输入有误!请重新输入!);}main();}void11 / 18inorder_all(TNODE *ptr){if(ptr!=NULL){inorder_all(ptr->lchild); printf(%d: \n,ptr->data); print_c_all(ptr->head); printf(\n); inorder_all(ptr->rchild);}}void inorder(TNODE *ptr){if(ptr!=NULL){inorder(ptr->lchild);printf(%d\t,ptr->data); inorder(ptr->rchild);}}void preorder(TNODE*ptr){if(ptr!=NULL){printf(%d\t ,ptr->data);preorder(ptr->lchild);preorder(ptr->rchild);}} void print_c(CNODE *tkt){ if(tkt!=NULL) printf(\t%d\t%d\t%d-%d-%d\n,tkt->no,tkt->id,tkt->date.x,tkt->date. y,tkt->date.z);}void print_c_all(CNODE *head){int i=0,j=0;if(head==NULL){printf(\n记录为空!\n);return;} for(i=0;i<N;i++) printf(=);printf(\nNO\t票号\t购票者证件号\t购票日期(年-月-日)\n);for(i=0;i<N;i++) printf(-); for(j=0;head!=NULL;j++){12 / 18printf(\n%d,j); print_c(head);head=head->next;}printf(\n); for(i=0;i<N;i++) printf(-); printf(\n总计%d条记录\n,j); for(i=0;i<N;i++) printf(=); printf(\n);}void create(){int n,i; int k[MAX];printf(\n您所希望增加车次的数量: );scanf(%d,&n); for(i=0;i<n;i++){printf(新增第%d列车次: ,i+1);scanf(%d,&k[i]);}for(i=0;i<n;i++)insert(k[i]);}void insert(int m){TNODE *p1,*p2;if(root==NULL){root=(TNODE *)malloc(sizeof(TNODE));root->data=m;root->lchild=root->rchild=NULL; root->head=NULL;}else {p1=root; while(m!=p1->data){if((m<p1->data)&&(p1->lchild!=NULL))p1=p1->lchild;else if((m>p1->data)&&(p1->rchild!=NULL))p1=p1->rchild;13 / 18else if((m<p1->data)&&(p1->lchild==NULL)){p2=(TNODE*)malloc(sizeof(TNODE)); p2->data=m;p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->lchild=p2; return;}else if((m>p1->data)&&(p1->rchild==NULL)){p2=(TNODE *)malloc(sizeof(TNODE)); p2->data=m;p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->rchild=p2; return;}}printf(\n[错误]未能成功增加车次%d,车次号%d已存在!,m,m);}}TNODE *search(){int key; TNODE *p; p=root;printf(\n输入您所要查找的车次编号: );scanf(%d,&key);while(p!=NULL&&p->data!=key){14 / 18if(key<p->data){p=p->lchild;}else if(key>p->data){p=p->rchild;}}if(p==NULL) printf(\n该车次不存在!);return(p);}void del(){int key;TNODE *p1,*p2,*p3,*temp; p1=p2=root; p3=temp=NULL;printf(\n请输入您想要取消的车次编号:);scanf(%d,&key);while(p2!=NULL&&p2->data!=key){ if(key<p2->data){p1=p2;p2=p2-> lchild;}elseif(key>p2->data){p1=p2;p2=p1->rchild;}}if(p2==NULL){printf(\n[错误]该车次不存在!返回上级菜单\n...);return;}else if(p2->lchild==NULL&&p2->rchild==NULL){if(p1->lchild==p2)p1->lchild=NULL;if(p1->rchild==p2) p1->rchild=NULL; temp=p2;if(root==p2){temp=root;root=NULL;}}else{ if(p2->rchild==NULL){ temp=p2->lchil d; p2->data=temp->data;15 / 18p2->lchild=temp->lchild;p2->rchild=temp->rchild;}elseif(p2->lchild==NULL){ temp=p2->rchild; p2->data=temp->data;p2->lchild=temp->lchild; p2->rchild=temp->rchild;}else{ p3=p2; temp=p2->lchild;while(temp->rchild!=NULL){p3=temp;temp=temp->rchild;}p2->data=temp->data;if(p3==p2) p3->lchild=temp->lchild; else p3->rchild=temp->lchild;}}free(temp);printf(车次%d已取消!\n\n,key);}CNODE *insert_c(CNODE*head){CNODE *k,*p;k=(CNODE *)malloc(sizeof(CNODE)); do{printf(\n车票编号: );scanf(%d,&k->no); p=search_c(head,k->no);if(p!=NULL) printf(\n[错误]该票已被购买!请重新选择!\n);16 / 18}while(p!=NULL); printf(购票者证件号: );scanf(%d,&k->id); printf(购票日期(格式: yy-mm-dd): );scanf(%d-%d-%d,&k->date.x,&k->date.y,&k->date.z); k->next=head; head=k;return(head);}CNODE *insert_c_more(CNODE *head){ int n,i; printf(\n请输入批量新增售票记录数: );fflush(stdin); scanf(%d,&n);for(i=0;i<n;i++) head=insert_c(head); printf(\n售票记录更新成功!\n);return(head);}CNODE *search_c(CNODE *head,int id){ CNODE*temp,*s; s=temp=head;17 / 18while(temp!=NULL&&temp->id!=id){s=temp;temp=temp->next;} print_c(temp);if(temp!=NULL) return(s);else return NULL;}void search_c_id(CNODE *head,int id){ CNODE *s,*head_s; s=head_s=NULL;if(head==NULL) printf(无该证件号纪录!\n);while(head!=NULL){ if(head->id==id){s=(CNODE *)malloc(sizeof(CNODE));s->no=head->no;s->id=head->id;s->date=head->date;s->next=head_s;head_s=s;}head=head->next;}print_c_all(head_s);p rintf(\n);}void search_c_id_all(TNODE *ptr,int id){if(ptr!=NULL){search_c_id_all(ptr->lchild,id); printf(\n车次: %d\n,ptr->data); search_c_id(ptr->head,id); search_c_id_all(ptr->rchild,id);}} void search_date(CNODE *head,TIME t){ CNODE *s,*head_s;s=head_s=NULL;18 / 18while(head!=NULL){ if(t.x==head->date.x) if(t.y==head->date.y)if(t.z==head->date.z){s=(CNODE *)malloc(sizeof(CNODE));s->no=head->no;s->id=head->id;s->date=head->date;s->next=head_s;head_s=s;}head=head->next;}print_c_all(head_s);p rintf(\n);}void search_date_all(TNODE *ptr,TIME t){if(ptr!=NULL){search_date_all(ptr->lchild,t); printf(\n车次: %d\n,ptr->data);search_date(ptr->head,t); search_date_all(ptr->rchild,t);}} CNODE *del_c(CNODE *head,CNODE *p){ CNODE *temp;if(p==NULL) printf([错误]该票未售出或为废票!返回上级菜单\n...);else if(p==head){head=NULL;free(p);}else{temp=p->next; p->next=temp->next; free(temp);}return(head);}。
车站售票管理系统
车站售票管理系统1. 简介车站售票管理系统是一个用于管理车站售票和乘客信息的软件系统。
它具备售票、查询、打印车票等功能,使车站工作人员能够高效地管理售票过程。
2. 功能2.1 售票功能•输入乘客信息:包括姓名、身份证号码、车票类型等;•输入车票信息:包括车次、座位号、出发地、目的地、票价等;•生成车票:根据乘客信息和车票信息生成唯一的车票号码;•支付:处理乘客支付的费用。
2.2 查询功能•查询车次:根据出发地、目的地和日期查询可用的车次信息;•查询余票:根据车次和日期查询该车次的余票数量;•查询订单:根据乘客信息查询该乘客的购票记录。
2.3 打印功能•打印车票:将乘客购票信息打印在实体车票上;•打印订单:将乘客购票信息打印在纸质或电子订单上。
3. 数据库设计车站售票管理系统的数据库设计如下:3.1 乘客表字段类型描述id Integer主键,自增长姓名String乘客姓名身份证号码String乘客身份证号码车票类型String乘客购买的车票类型3.2 车票表字段类型描述id Integer主键,自增长车次String车票对应的车次座位号String车票对应的座位号出发地String车票的出发地点目的地String车票的目的地票价Float车票的价格车票号码String车票的唯一编码乘客id Integer购票乘客的id3.3 订单表字段类型描述id Integer主键,自增长订单号String订单的唯一编码乘客id Integer购票乘客的id车票id Integer购票对应的车票id支付状态String订单的支付状态4. 系统流程4.1 售票流程1.输入乘客信息;2.输入车票信息;3.生成车票号码;4.处理支付;5.生成订单。
4.2 查询流程1.输入查询条件(车次、日期等);2.查询可用车次信息;3.查询余票数量;4.查询订单。
4.3 打印流程1.输入打印类型(车票、订单);2.打印对应类型的文档。
火车票售票系统c语言设计
火车票售票系统的设计可以使用C语言来实现。
下面是一个简单的示例,展示了如何设计一个基本的火车票售票系统:```c#include <stdio.h>#include <stdlib.h>#define MAX_SEATS 100typedef struct {int seat_number;char passenger_name[50];} Ticket;Ticket tickets[MAX_SEATS];int total_tickets = 0;void displayMenu() {printf("\n=== 火车票售票系统 ===\n");printf("1. 购买票\n");printf("2. 查询票\n");printf("3. 取消票\n");printf("4. 退出\n");printf("=====================\n");printf("请输入选项: ");}void buyTicket() {if (total_tickets >= MAX_SEATS) {printf("对不起,票已售完。
\n");return;}Ticket ticket;printf("请输入座位号: ");scanf("%d", &ticket.seat_number);// 检查座位号是否已经被购买for (int i = 0; i < total_tickets; i++) {if (tickets[i].seat_number == ticket.seat_number) {printf("对不起,该座位已被购买。
\n");return;}}printf("请输入乘客姓名: ");scanf("%s", ticket.passenger_name);tickets[total_tickets++] = ticket;printf("购票成功!\n");}void queryTicket() {int seat_number;printf("请输入座位号: ");scanf("%d", &seat_number);for (int i = 0; i < total_tickets; i++) {if (tickets[i].seat_number == seat_number) {printf("座位号: %d\n", tickets[i].seat_number);printf("乘客姓名: %s\n", tickets[i].passenger_name); return;}}printf("对不起,该座位未被购买。
火车票售票管理系统
火车票售票管理系统引言随着人民生活水平的不断提高,旅游成为人们生活中重要的组成部分。
因此,火车作为人们交通出行的主要方式之一,其重要性也逐渐凸显。
然而,随着人流量的增加,火车票的售卖情况也变得愈加复杂,为了解决这一问题,本文将设计一个火车票售票管理系统,达到管理购票、退票、改签这些功能,来提高火车票售卖的效率以及用户的购票体验。
系统分析1.需求分析(1)功能性需求:该系统需包含以下功能:登录、购票、退票、改签、统计报表等功能。
(2)性能需求:系统应尽可能实现网站稳定性,保证高并发下的响应速度。
(3)安全性需求:系统需要具备用户信息加密、安全性检测等功能,保护用户信息不被恶意盗用。
(4)易用性需求:系统需要界面美观、简洁明了,在使用中容易上手,避免出现用户操作困难而放弃使用的情况。
(5)可扩展需求:系统应具备可扩展性,以便于更改代码,增强系统的可扩展能力。
2.实现技术(1)前端:采用HTML、CSS、JavaScript实现,界面美观、易于操作。
(2)后端:采用node.js进行开发,使用MySQL作为关系型数据库进行数据存储管理。
3.数据流程图(1)高层次数据流程图(2)低层次数据流程图系统设计1.系统架构该系统采用模块化的架构设计,由后端和前端构成。
(1)后端:系统的后端采用node.js作为主要开发工具,通过调用路由、控制器、数据模型三个核心处理请求。
(2)前端:系统的前端使用HTML、CSS、JavaScript等技术实现交互功能,同时通过AJAX异步刷新数据保证界面实时性。
2.系统模块设计(1)用户模块:实现用户的注册、登录、通知检索等功能。
(2)车次模块:实现车次的展示、查询、历史记录等功能。
(3)订单模块:实现订单的生成、修改、退票等功能。
(4)统计报表模块:实现系统数据的统计和分析处理,包括用户流量、订单量等数据信息。
系统实现1.数据库设计(1)用户表UserID:用户唯一标识。
UserName:用户姓名。
火车订票管理系统
学号11~15 选题三:火车票订票管理系统1.基本要求:为方便管理火车票购买信息,编写一个火车票订票管理系统软件。
系统记录必须包括订票人姓名、订票人身份证号、始发站、终到站、票价、席别、订票时间等。
2.基本管理功能:[1]添加:增加一条订票人的记录到管理系统中。
[2]查询:根据订票人身份证查找订票人的相关信息并显示,若找不到也要给出相应提示。
[3]修改:在管理系统中修改订票人的订票记录。
[4]保存:将所有订票信息保存在一个文件中(数据库文件或普通的文本文件)。
[5]读取:从文件中读取已保存了数据。
[6]删除:从管理系统中删除一条记录。
[7]恢复:能恢复被删除的记录。
[8]统计:(A) 统计每天订票张数和总车票金额;(B) 统计单价在100元以下、100~400元之间和400元以上的票数总张数及总金额;(C) 以表格形式打印所有订票信息。
源代码:#include <iostream>#include <fstream>#include <string>#include <iomanip>using namespace std;int d;//用于选择(按1继续,按2退出,按他其他报错待完善)int x=1;//用于脱出while循环string sfz;//身份证号码,用户输入可用到class ticket{public:string ID;string name;string Sstation;string Tstation;float price;string seat;string time;ticket *next;ticket(string I,string n,string S, string T,float p, string s,string t){ID=I;name=n;Sstation=S;Tstation=T;price=p;seat=s;time=t;}void display();};void ticket::display(){cout<<left;cout<<"|"<<setw(18)<<ID<<"|"<<setw(8)<<name<<"|"<<setw(8)<<Sstation<<"|"<<setw( 8)<<Tstation<<"|"<<setw(6)<<price<<"|"<<setw(6)<<seat<<"|"<<setw(10)<<time<<"|" <<endl;}void menu(){cout<<endl;cout<<endl;cout<<" ************欢迎使用 ************"<<endl;cout<<endl;cout<<" **请输入选项前的编号**"<<endl;cout<<endl;cout<<"**************************************************************"<<endl;cout<<" * 1.添加车票信息*"<<endl;cout<<" * 2.查询车票信息*"<<endl;cout<<" * 3.修改车票信息*"<<endl;cout<<" * 4.删除车票信息*"<<endl;cout<<" * 5.恢复车票信息*"<<endl;cout<<" * 6.显示车票信息*"<<endl;cout<<" * 7.统计车票信息*"<<endl;cout<<" * 8.保存车票信息*"<<endl;cout<<" * 9.读取车票信息*"<<endl;cout<<" * 0.离开*"<<endl;cout<<"**************************************************************"<<endl;}ticket *head=NULL,*del=NULL,*p0,*p1,*p2,*p3,*p4;//head数据链表头指针,p0,p1,p2添加函数专用,避免发生错误int check(string b)//身份证号码作为功能基本辨别数据,应该有一个函数专门检查其是否重复,0 表示重复,1 表示不重复{ticket *ch;ch=head;int che=1;while(ch!=NULL){if(ch->ID==b){che=0;ch=NULL;}else {ch=ch->next;}}return che;}int check1(string b)// sbl{ticket *ch;ch=del;int che=1;while(ch!=NULL){if(ch->ID==b){che=0;ch=NULL;}else {ch=ch->next;}}return che;}int add() //将订票数据保存在一个基础链表中{system("cls");float price;string name,ID,Sstation,Tstation,seat,time;if(head==NULL) //以下为链表为空的情况{cout<<"=============开始输入订票信息============="<<endl;//*票价考虑报错cout<<"请输入订票人身份证号码:";cin>>ID;cout<<"请输入订票人姓名:";cin>>name;cout<<"请输入始发站:";cin>>Sstation;cout<<"请输入终点站:";cin>>Tstation;cout<<"请输入票价:";cin>>price;cout<<"请输入席别:";cin>>seat;cout<<"请输入订票时间(年月日以“-”隔开):";cin>>time;head=p1=p2=new ticket(ID,name,Sstation,Tstation,price,seat,time); x=1;while(x){system("cls");cout<<"按1继续输入,按2退出-》";cin>>d;if(d==1){system("cls");p1->next=NULL;cout<<"=============开始输入订票信息============="<<endl;cout<<"请输入订票人身份证号码:";cin>>ID;if(check(ID)==0){cout<<"身份证号码重复!"<<endl;system("pause");return 0;}cout<<"请输入订票人姓名:";cin>>name;cout<<"请输入始发站:";cin>>Sstation;cout<<"请输入终点站:";cin>>Tstation;cout<<"请输入票价:";cin>>price;cout<<"请输入席别:";cin>>seat;cout<<"请输入订票时间(年月日以“-”隔开):";cin>>time;p1=new ticket(ID,name,Sstation,Tstation,price,seat,time);p2->next=p1;p2=p1;}else if(d==2){p1->next=NULL;x=0;}else {cout<<"非法输入!"<<endl;system("pause");}}} //以上为链表为空的情况else //以下为链表已有数据,往末尾添加{p3=head;while(p3->next!=NULL){p3=p3->next;}x=1;while(x){system("cls");cout<<"=============开始输入订票信息============="<<endl; cout<<"请输入订票人身份证号码:";cin>>ID;if(check(ID)==0){cout<<"身份证号码重复!"<<endl;system("pause");return 0;}cout<<"请输入订票人姓名:";cin>>name;cout<<"请输入始发站:";cin>>Sstation;cout<<"请输入终点站:";cin>>Tstation;cout<<"请输入票价:";cin>>price;cout<<"请输入席别:";cin>>seat;cout<<"请输入订票时间(年月日以“-”隔开):";cin>>time;p0=new ticket(ID,name,Sstation,Tstation,price,seat,time); p3->next=p0;p3=p0;system("cls");cout<<"按1继续输入,按2退出-》";cin>>d;if(d==1){x=1;p3->next=NULL;}else if(d==2){p3->next=NULL;x=0;}else{cout<<"非法输入!"<<endl;system("pause");}}} //以上为链表已有数据,往末尾添加return 1;}ticket *search1(string a)//查询函数1,用于输入身份证号码返回一个指针,可在其他部分被使用{ticket *cha1;cha1=head;x=1;while(x){if(cha1==NULL){x=0;}else if(cha1->ID==a) {x=0;}else {cha1=cha1->next;}}return cha1;}ticket *search_1(string a)//改查1后面都得改,嗯,就这样了(~ ̄▽ ̄)~{ticket *cha1;cha1=del;x=1;while(x){if(cha1==NULL){x=0;}else if(cha1->ID==a) {x=0;}else {cha1=cha1->next;}}return cha1;}ticket *search2(string b)//查询函数2,返回所要查询结点的前一个结点的指针,在删除部分使用{ticket *cha2,*cha3;cha2=cha3=head;x=1;while(x){if(cha2->next==NULL){x=0;}else if(cha2->ID==b){x=0;}else {cha3=cha2;cha2=cha2->next;}}return cha3;}ticket *search_2(string b)// -_-{ticket *cha2,*cha3;cha2=cha3=del;x=1;while(x){if(cha2->next==NULL){x=0;}else if(cha2->ID==b){x=0;}else {cha3=cha2;cha2=cha2->next;}}return cha3;}void search() //用于用户查询功能(目前只能查询一次,然后退出,待完善){system("cls");cout<<"请输入身份证号码:";cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<"无相关信息!"<<endl;system("pause");}else {cout<<left;cout<<"|"<<setw(18)<<"身份证号码"<<"|"<<setw(8)<<"姓名"<<"|"<<setw(8)<<"始发站"<<"|"<<setw(8)<<"终点站"<<"|"<<setw(6)<<"票价"<<"|"<<setw(6)<<"席别"<<"|"<<setw(10)<<"订票时间"<<"|"<<endl;cout<<"------------------------------------------------------------------------"<<endl;p3->display();system("pause");}}void display1() //{system("cls");ticket *dis;cout<<left;cout<<"|"<<setw(18)<<"身份证号码"<<"|"<<setw(8)<<"姓名"<<"|"<<setw(8)<<"始发站"<<"|"<<setw(8)<<"终点站"<<"|"<<setw(6)<<"票价"<<"|"<<setw(6)<<"席别"<<"|"<<setw(10)<<"订票时间"<<"|"<<endl;cout<<"------------------------------------------------------------------------"<<endl;dis=head;if(head!=0)do{dis->display();dis=dis->next;}while(dis!=NULL);}void modify()//修改函数,用于修改数据(目前只可以修改单个订票信息,待完善) {system("cls");display1();cout<<"请输入要修改信息的身份证号码:";cin>>sfz;p3=search1(sfz);if(p3==NULL) {cout<<"无相关信息!"<<endl;system("pause");}else {x=1;while(x){system("cls");cout<<"1.身份证号码 2.姓名 3.始发站 4.终点站 5.票价 6.席别 7.时间"<<endl;cout<<"请输入要修改的选项前的编号:";cin>>d;if(d==1){hui2: cout<<"请输入身份证号码:";cin>>sfz;if(check(sfz)==0){cout<<"身份证号码重复!"<<endl;goto hui2;}p3->ID=sfz;}else if(d==2){cout<<"请输入姓名:";cin>>p3->name;}else if(d==3){cout<<"请输入始发站:";cin>>p3->Sstation;}else if(d==4){cout<<"请输入终点站:";cin>>p3->Tstation;}else if(d==5){cout<<"请输入票价:";cin>>p3->price;}else if(d==6){cout<<"请输入席别:";cin>>p3->seat;}else if(d==7){cout<<"请输入时间:";cin>>p3->time;}else {cout<<"非法输入!"<<endl;system("pause");}hui1: cout<<"按1继续输入,按2退出-》";int d1;cin>>d1;if(d1==1){x=1;}else if(d1==2){x=0;}else {cout<<"非法输入!"<<endl;system("pause");goto hui1;} }}}void Darea(ticket *c)//将删除信息储存在另一链表中{if(del==NULL){del=c;del->next=NULL;}else {ticket *Dar;Dar=del;while(Dar->next!=NULL){Dar=Dar->next;}Dar->next=c;Dar=c;Dar->next=NULL;}}void Delete()//删除函数将要删除的订票信息移出链表,并将所有删除信息结成另一链表,供恢复使用{system("cls");display1();cout<<"请输入要删除订票信息的身份证号码:";cin>>sfz;p3=search1(sfz);p4=search2(sfz);if(p3==NULL){cout<<"无相关信息!"<<endl;system("pause");}else if(p3!=NULL&&p3==head){head=head->next;Darea(p3);cout<<"删除成功!"<<endl;system("pause");}else if(p3->next==NULL){p4->next=NULL;Darea(p3);cout<<"删除成功!"<<endl;system("pause");}else {p4->next=p3->next;Darea(p3);cout<<"删除成功!"<<endl;system("pause");}}void Rdel(string sfz)//将已经恢复的订票信息从Darea中移除{p3=search_1(sfz);p4=search_2(sfz);if(p3==del){del=del->next;}else if(p3->next==NULL){p4->next=NULL;}else {p4->next=p3->next;}}void recover()//恢复函数,用于将已经删除的订票信息恢复{system("cls");ticket *r1,*r2,*r3;if(del==NULL){cout<<"无可恢复订票信息!"<<endl;system("pause");}else {cout<<left;cout<<"|"<<setw(18)<<"身份证号码"<<"|"<<setw(8)<<"姓名"<<"|"<<setw(8)<<"始发站"<<"|"<<setw(8)<<"终点站"<<"|"<<setw(6)<<"票价"<<"|"<<setw(6)<<"席别"<<"|"<<setw(10)<<"订票时间"<<"|"<<endl;cout<<"------------------------------------------------------------------------"<<endl;r1=del;if(del!=0)do{r1->display();r1=r1->next;}while(r1!=NULL);hui3: cout<<"请输入要恢复的订票信息的身份证号码:";cin>>sfz;if(check1(sfz)==1){cout<<"非法输入!"<<endl;system("pause");goto hui3;} r2=head;while(r2->next!=NULL){r2=r2->next;}r3=search_1(sfz);r2->next=r3;r3->next=NULL;Rdel(sfz);cout<<"成功恢复!"<<endl;system("pause");}}void display() //显示基础链表中的所有订票信息{system("cls");ticket *dis;cout<<left;cout<<"|"<<setw(18)<<"身份证号码"<<"|"<<setw(8)<<"姓名"<<"|"<<setw(8)<<"始发站"<<"|"<<setw(8)<<"终点站"<<"|"<<setw(6)<<"票价"<<"|"<<setw(6)<<"席别"<<"|"<<setw(10)<<"订票时间"<<"|"<<endl;cout<<"------------------------------------------------------------------------"<<endl;dis=head;if(head!=0)do{dis->display();dis=dis->next;}while(dis!=NULL);system("pause");}void count()//统计部分{system("cls");if(head==NULL){cout<<"无可统计信息!"<<endl;system("pause");}else{int n=0,n1=0,n2=0,n3=0;float i,m=0,m1=0,m2=0,m3=0;p3=head;while(p3!=NULL){i=p3->price;n=n+1;m=m+i;if(i<100){n1=n1+1;m1=m1+i;}if(i>=100&&i<=400){n2=n2+1;m2=m2+i;}if(i>400){n3=n3+1;m3=m3+i;}p3=p3->next;}cout<<left;cout<<"|"<<setw(30)<<" "<<"|"<<setw(8)<<"票数"<<"|"<<setw(8)<<"金额"<<"|"<<endl;cout<<"--------------------------------------------------"<<endl;cout<<"|"<<setw(30)<<"单价100元以下"<<"|"<<setw(8)<<n1<<"|"<<setw(8)<<m1<<"|"<<endl;cout<<"|"<<setw(30)<<"单价100元~400元(包括100,400元)"<<"|"<<setw(8)<<n2<<"|"<<setw(8)<<m2<<"|"<<endl;cout<<"|"<<setw(30)<<"单价400元以上"<<"|"<<setw(8)<<n3<<"|"<<setw(8)<<m3<<"|"<<endl;cout<<"|"<<setw(30)<<"总计"<<"|"<<setw(8)<<n<<"|"<<setw(8)<<m<<"|"<<endl;system("pause");}}void save()//保存函数{system("cls");string filename,filename1;ofstream file;cout<<"请输入文件名:";cin>>filename1;filename1=filename1+".txt";filename="C:\\Program Files (x86)\\Microsoft Visual Studio\\MyProjects\\火车票订票管理系统\\savedata\\"+filename1;//此处路径根据需要自行更改/*file.open(filename.c_str(),ios::in);//功能失败部分待完善if(!file) {d=1;}else {d=2;}file.close();if(d==1){file.open(filename.c_str(),ios::out);p1=head;x=1;while(x){if(p1!=NULL){file<<p1->ID<<p1->name<<p1->Sstation<<p1->Tstation<<p1->price<<p1->seat<<p1->t ime<<endl;p1=p1->next;}else {x=0;}}file.close();cout<<"保存成功"<<endl;system("pause");}if(d==2){ */ int i;// cout<<"文件已存在!"<<endl;hui:cout<<"按1覆盖,按2输入数据到文件末尾:";cin>>i;if(i==1){file.open(filename.c_str(),ios::out);p3=head;x=1;while(x){if(p3!=NULL){file<<p3->ID<<endl<<p3->name<<endl<<p3->Sstation<<endl<<p3->Tstation<<endl<<p3 ->price<<endl<<p3->seat<<endl<<p3->time<<endl;p3=p3->next;}else {x=0;}}file.close();cout<<"保存成功"<<endl;system("pause");}else if(i==2){file.open(filename.c_str(),ios::app);p3=head;x=1;while(x){if(p3!=NULL){file<<p3->ID<<endl<<p3->name<<endl<<p3->Sstation<<endl<<p3->Tstation<<endl<<p3 ->price<<endl<<p3->seat<<endl<<p3->time<<endl;p3=p3->next;}else {x=0;}}file.close();cout<<"保存成功"<<endl;system("pause");}else {cout<<"非法输入!";goto hui;}//}}int load()//读取函数{system("cls");int i=0,ii=0,j=0;ifstream infile;string filename,filename1;cout<<"请输入文件名:";cin>>filename1;filename1=filename1+".txt";filename="C:\\Program Files (x86)\\Microsoft Visual Studio\\MyProjects\\火车票订票管理系统\\savedata\\"+filename1;//此处路径根据需要自行更改infile.open(filename.c_str(),ios::in);if(!infile){cerr<<"读取失败!"<<endl;system("pause");return -1;}string a[1000];//能力有限,不会动态大小,只能这样了(+﹏+)~ while(!infile.eof()){getline(infile,a[i],'\n');i++;}ticket *L1,*L2;float f;for(ii=0;ii<i-7;ii=ii+7){if(head==NULL){f=atof(a[ii+4].c_str());head=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); head->next=NULL;}else{L1=head;while(L1->next!=NULL){L1=L1->next;}f=atof(a[ii+4].c_str());L2=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); L1->next=L2;L1=L2;L1->next=NULL;}}infile.close();cout<<"读取成功"<<endl;system("pause");return 1;}void select() //选择功能分支{system("cls");menu();cin>>d;if(d==1) {add();select();}if(d==2) {search();select();}if(d==3) {modify();select();}if(d==4) {Delete();select();}if(d==5) {recover();select();}if(d==6) {display();select();}if(d==7) {count();select();}if(d==8) {save();select();}if(d==9) {load();select();}else if(d==0){ticket *ex1,*ex2,*ex3,*ex4;ex1=head;while(ex1!=NULL){ex2=ex1;ex1=ex1->next;delete ex2;}ex3=del;while(ex3!=NULL){ex4=ex3;ex3=ex3->next;delete ex4;}cout<<"离开!"<<endl;exit(0);}else {cout<<"错误!"<<endl;system("pause");select();}}int main(){head=NULL;select();return 0;}//较多bug,比如,如果先恢复第一个会导致后面的数据全部丢失,时间能力有限,实在抱歉->_<-.。
火车票订票管理系统2024
引言:火车票订票管理系统是应用于火车票订票业务的一种信息化管理系统。
随着火车旅行的日益普及,订票需求不断增加,传统的手工订票方式已不适应快速和高效的需求。
火车票订票管理系统应运而生,它通过计算机网络和数据库技术,实现了订票、退票、改签等功能,并对车票的发售情况进行实时监控和统计分析。
本文将从系统的背景、系统功能、系统设计、系统实施和运维等五个大点来详细阐述火车票订票管理系统的运行原理和实施过程。
概述:火车票订票管理系统是将计算机技术应用于火车票订票业务的信息化管理系统。
它能够提供全天候不间断的订票服务,并确保不同时间段的订票请求能够得到及时和准确的处理。
系统主要分为前台和后台两个部分,前台负责接收用户的订票请求,后台则负责处理这些请求并与火车站的核心系统进行数据交互。
通过引入互联网和数据库技术,火车票订票管理系统为用户和火车站间的订票流程搭建起了一个高效、便捷和安全的桥梁。
正文内容:一、系统背景1. 火车票订票的需求与挑战a. 火车旅行的普及和火车票需求量的增加b. 传统手工订票方式的问题和局限性2. 火车票订票管理系统的出现和意义a. 系统的快速和高效处理能力b. 方便用户在线订票、退票和改签c. 提供实时监控和统计分析功能二、系统功能1. 用户服务功能a. 在线查询和订购火车票b. 退票和改签服务c. 用户账户管理和支付功能2. 系统管理功能a. 用户信息管理b. 火车票信息管理c. 销售统计和财务管理三、系统设计1. 系统架构设计a. 分层结构:前台和后台的划分b. 数据库设计:车票、用户和订单的数据结构2. 技术选型和实施方案a. 前台技术:HTML、CSS和JavaScriptb. 后台技术:Java或.NET等c. 数据库选择与优化3. 系统安全和可靠性设计a. 用户身份验证和权限管理b. 数据备份和故障恢复机制c. 系统性能优化和负载均衡四、系统实施1. 需求调研和需求分析a. 火车站和用户的需求分析b. 系统功能需求的确定2. 系统开发和测试a. 前台界面设计和开发b. 后台逻辑和数据库开发3. 系统上线和运行a. 用户培训和用户手册编写b. 系统上线和运维五、系统运维1. 故障排除和维护a. 系统日志和错误记录分析b. 定期检查和更新系统版本2. 系统性能优化a. 系统监控和性能测试b. 资源分配和调优总结:火车票订票管理系统是一种应用于火车票订票业务的信息化管理系统,它通过计算机技术的应用,提供了全天候不间断的订票服务,方便了用户的出行需求。
火车票售票管理系统 (2)
火车票售票管理系统简介火车票售票管理系统是一个方便快捷地管理火车票售票信息的系统。
该系统旨在简化售票流程,提高工作效率,同时为用户提供便捷的购票服务。
功能票务管理•添加车次信息:管理员可以添加火车班次的相关信息,包括起点站、终点站、发车时间以及票价。
•查看车次信息:管理员和用户可以查看系统中的所有火车班次信息。
•修改车次信息:管理员可以修改已添加的车次信息,如发车时间、票价等。
•删除车次信息:管理员可以删除不再使用的车次信息。
售票管理•票务查询:用户可以根据出发地、目的地和时间查询可用的火车班次。
•选择座位:用户在选定火车班次后,可以选择自己喜欢的座位。
•购票支付:用户可以选择在线支付或线下支付购买火车票。
•确认购票:用户完成支付后,系统会生成一张电子车票,并提供给用户确认。
•取票服务:用户可以选择提前取票或在车站取票,方便快捷。
售后服务•退票管理:用户可以办理退票申请,并根据规定的退票规则进行退款。
•延误通知:系统可以及时通知用户火车的延误信息,以便用户合理安排行程。
技术要求•开发语言:系统可以使用Java、Python或其他一些常见的编程语言进行开发。
•数据库:使用MySQL或其他关系型数据库存储火车班次信息、购票信息等。
•前端设计:采用响应式设计,确保系统可以在各种终端设备上正常运行。
•安全性保护:系统需要保证用户的个人信息和支付信息的安全性。
•数据备份与恢复:系统需要具备数据备份和恢复的功能,以防止数据丢失。
开发计划•需求分析阶段:明确系统所需的功能和技术要求,编写需求文档。
•设计阶段:绘制系统的架构图,设计数据库结构,编写设计文档。
•开发阶段:根据设计文档进行开发,包括前端和后端开发。
•测试阶段:对系统进行功能和性能测试,修复bug 并优化系统性能。
•部署阶段:将系统部署到服务器上,并进行测试以确保系统正常运行。
•上线发布阶段:发布系统到真实环境,提供给用户使用。
总结火车票售票管理系统提供了一种高效、便捷的方式来管理火车票售票信息。
IMC电子票务管理系PPT
IMC电子票务管理系统简介 3
➢ “IMC电子票”是可以票务管理部门及消费者真正放 心和信赖的实名制票务系统。所有存入“IMC电子票” 内的信息,全部都用IMC技术进行加密,没有“IMC 电子票”检票设备,无法查验电子票内信息。电子票 内的信息只有授权管理人员和持票人本人才可以使用 IMC指定的设备查验,但不能修改任何信息。修改电 子票内信息必须经过特别授权的人员,使用指定的设 办理一个IMC电子票卡就可以了,因为丢失 的电子票只有持票人才能使用,检到或偷卡的人无法 查阅或更改卡内的密文图信息。
12
• 投资人可投资金额可申请做为项目方公司的股东,按规 定获得一定比例的股份,长期按股份分红受益。
• 投资人可只做投资,10年为限。 3年内可收回全部投资 本金,每年可以获得投资金额的10%回报。领取回报的 时间,从项目盈利当年起算。
11
欢迎您投资,参与开发IMC 电子票务系统项目。为保证国家 和人民的安全贡献一份力量!
IMC电子票务管理系统简介 1
➢ “IMC电子票”是一种安全可靠,成本低,简单易用的 实名制票务管理系统。“IMC电子票”采用最新的IMC加 密技术(此技术已在中国和美国申请了专利),确保 “IMC电子票”系统安全,任何骇客和犯罪分子面对此 系统将无计可施。
➢ 任何需要使用门票进入的场所,如飞机、火车、轮船、 影剧院、公园、体育场馆、展览会所及其他重要场所, 都可以使用“IMC电子票”票务系统。
➢ “IMC电子票”可以彻底杜绝目前社会上因为票务产生 的各种犯罪和非法行为,如倒卖车票、内外勾结贩卖车 票、黄牛票等等,从而使得票务部门与消费者的利益得 到可靠的保证。
1
IMC电子票务管理系统简介 2
➢ “IMC电子票”系统可以向售票公司/单位,提供一个可靠 安全的票务数据库系统。从而使得票务监管部门/人员, 可以及时监控全部票务发售情况,并发布指令纠正票务 销售的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个简单的火车票售票管理系统(原创)#include<stdio.h>#include<malloc.h>#define MAX 100#define N 50typedef struct time //时间类型{int x,y,z; //分别对应年,月,日}TIME;typedef struct cnode //票信息类型{int no; //票号int id; //购票人证件号TIME date; //购票日期struct cnode *next;}CNODE;typedef struct tnode //车次信息类型{char data; //车次编号struct tnode *lchild,*rchild;CNODE *head;}TNODE;void create(); //按车次建立二叉排序树void insert(int ); //增加新的车次(二叉排序树的插入)void del(); //取消车次(二叉排序树节点删除)void inorder(TNODE *); //中序遍历车次二叉排序树(仅显示车次信息)void inorder_all(TNODE *); //中序遍历车次二叉排序树(显示车次及售票信息)void preorder(TNODE *); //先序遍历车次二叉排序树(仅显示车次信息)TNODE *search(); //按车次编号搜索CNODE *insert_c(CNODE *); //插入新的售票信息(单张)CNODE *insert_c_more(CNODE *); //插入新的售票信息(批量)CNODE *del_c(CNODE *,CNODE *); //退票处理(删除售票信息)CNODE *search_c(CNODE *,int); //按票号查询void search_c_id(CNODE *,int); //按购票人证件号搜索(限定某车次)void search_c_id_all(TNODE *,int); //按购票人证件号搜索(所有车次)void search_date(CNODE *,TIME); //按购票日期搜索(限定某车次)void search_date_all(TNODE *,TIME); //按购票日期搜索(所有车次)void print_c(CNODE *); //输出售票纪录(单张)void print_c_all(CNODE *); //输出售票纪录(批量)TNODE *root=NULL;void main(){int i,func,no,ok;TNODE *t;CNODE *c;TIME d;printf("\n\n\n");for(i=0;i<15;i++) printf("=");printf("列车售票信息管理系统");for(i=0;i<15;i++) printf("=");printf("\n");printf("\t1.车次信息管理\n");printf("\t2.售票记录管理\n");printf("\t3.售票记录查询\n");printf("\t4.售票记录一览\n");printf("\t5.退出系统\n");for(i=0;i<N;i++) printf("=");printf("\n请选择您所需要的功能:");fflush(stdin);scanf("%d",&func);switch(func){case 1:printf("\n\n车次信息管理>>>>\n");for(i=0;i<N;i++) printf("=");printf("\n\t1.增加新的车次");printf("\n\t2.取消车次");printf("\n\t3.返回上级菜单\n");for(i=0;i<N;i++) printf("=");printf("\n请选择您所需要的功能:");fflush(stdin);scanf("%d",&func);switch(func){case 1:create();printf("\n售票信息更新成功!\n\n");break;case 2:del();break;case 3:main();break;default:printf("\n[错误]功能号输入有误!请重新输入!");}break;case 2:printf("\n\n售票记录管理>>>>\n");for(i=0;i<N;i++) printf("=");printf("\n\t1.增加新的售票记录");printf("\n\t2.退票");printf("\n\t3.返回上级菜单\n");for(i=0;i<N;i++) printf("=");printf("\n请选择您所需要的功能:");fflush(stdin);scanf("%d",&func);switch(func){case 1:t=search();if(t!=NULL) t->head=insert_c_more(t->head);break;case 2:t=search();printf("需要退票的票号:");scanf("%d",&no);t->head=del_c(t->head,search_c(t->head,no));break;case 3:main();break;default:printf("\n[错误]功能号输入有误!请重新输入!");}break;case 3:printf("\n\n售票记录查询>>>>\n");for(i=0;i<N;i++) printf("=");printf("\n\t1.按票号搜索");printf("\n\t2.按购票者证件号搜索");printf("\n\t3.按购票日期搜索");printf("\n\t4.返回上级菜单\n");for(i=0;i<N;i++) printf("=");printf("\n请选择您所需要的功能:");fflush(stdin);scanf("%d",&func);switch(func){case 1:t=search();if(t!=NULL){printf("\n请输入您所要查询的票号:");scanf("%d",&no);c=search_c(t->head,no);if(c==NULL) printf("[错误]没有该票号的纪录!该票还未售出或为废票!自动返回上级菜单\n...");}break;case 2:printf("\n请输入您所要查询的购票者证件号:");scanf("%d",&no);search_c_id_all(root,no);printf("搜索完毕!自动返回上级菜单\n...");break;case 3:do{printf("\n请输入您所要查询的日期(格式: yy-mm-dd):");scanf("%d-%d-%d",&d.x,&d.y,&d.z);if(d.y<13&&d.y>0){if(d.y==1||d.y==3||d.y==5||d.y==7||d.y==8||d.y==10||d.y==12)if(d.z<32&&d.z>0) ok=1;else if(d.z==2)if(d.z<30&&d.z>0) ok=1;elseif(d.z<31&&d.z>0) ok=1;}else ok=0;if(!ok) printf("\n[错误]日期输入有误!请重新输入!");}while(!ok);printf("\n指定车次吗?(1->是,0->否):");scanf("%d",&ok);if(ok) search_date(search()->head,d);else search_date_all(root,d);break;case 4:main();break;default:printf("\n[错误]功能号输入有误!自动返回上级菜单\n...");}break;case 4:printf("\n\n售票记录一览>>>>\n");for(i=0;i<N;i++) printf("=");printf("\n\t1.仅浏览车次");printf("\n\t2.指定车次已售票记录");printf("\n\t3.所有车次已售票记录");printf("\n\t4.测试:先序遍历车次");printf("\n\t5.返回上级菜单\n");for(i=0;i<N;i++) printf("=");printf("\n请选择您所需要的功能:");fflush(stdin);scanf("%d",&func);switch(func){case 1:printf("\n+++仅浏览车次\n");if(root==NULL) printf("[错误]无车次纪录!");else{inorder(root);printf("\n");}break;case 2:printf("\n+++指定车次已售票记录\n");t=search();if(t!=NULL){print_c_all(t->head);printf("\n");}break;case 3:printf("\n+++所有车次已售票记录\n");if(root==NULL) printf("[错误]无车次纪录!");else{inorder_all(root);printf("\n");}break;case 4:printf("\n+++测试:先序遍历车次\n");if(root==NULL) printf("[错误]无车次纪录!");else{preorder(root);printf("\n");}break;case 5:main();break;default:printf("\n[错误]功能号输入有误!自动返回上级菜单\n...");}break;case 5:exit(0);default:printf("\n[错误]功能号输入有误!请重新输入!");}main();}void inorder_all(TNODE *ptr){if(ptr!=NULL){inorder_all(ptr->lchild);printf("%d:\n",ptr->data);print_c_all(ptr->head);printf("\n");inorder_all(ptr->rchild);}}void inorder(TNODE *ptr){if(ptr!=NULL){inorder(ptr->lchild);printf("%d\t",ptr->data);inorder(ptr->rchild);}}void preorder(TNODE *ptr){if(ptr!=NULL){printf("%d\t ",ptr->data);preorder(ptr->lchild);preorder(ptr->rchild);}}void print_c(CNODE *tkt){if(tkt!=NULL)printf("\t%d\t%d\t%d-%d-%d\n",tkt->no,tkt->id,tkt->date.x,tkt->date.y,tkt->date.z); }void print_c_all(CNODE *head){int i=0,j=0;if(head==NULL){printf("\n记录为空!\n");return;}for(i=0;i<N;i++) printf("=");printf("\nNO\t票号\t购票者证件号\t购票日期(年-月-日)\n");for(i=0;i<N;i++) printf("-");for(j=0;head!=NULL;j++){printf("\n%d",j);print_c(head);head=head->next;}printf("\n");for(i=0;i<N;i++) printf("-");printf("\n总计%d 条记录\n",j);for(i=0;i<N;i++) printf("=");printf("\n");}void create(){int n,i;int k[MAX];printf("\n您所希望增加车次的数量:");scanf("%d",&n);for(i=0;i<n;i++){printf("新增第%d列车次:",i+1);scanf("%d",&k[i]);}for(i=0;i<n;i++)insert(k[i]);}void insert(int m){TNODE *p1,*p2;if(root==NULL){root=(TNODE *)malloc(sizeof(TNODE));root->data=m;root->lchild=root->rchild=NULL;root->head=NULL;}else{p1=root;while(m!=p1->data){if((m<p1->data)&&(p1->lchild!=NULL)) p1=p1->lchild;else if((m>p1->data)&&(p1->rchild!=NULL)) p1=p1->rchild;else if((m<p1->data)&&(p1->lchild==NULL)){p2=(TNODE *)malloc(sizeof(TNODE));p2->data=m;p2->lchild=p2->rchild=NULL;p2->head=NULL;p1->lchild=p2;return;}else if((m>p1->data)&&(p1->rchild==NULL)){p2=(TNODE *)malloc(sizeof(TNODE));p2->data=m;p2->lchild=p2->rchild=NULL;p2->head=NULL;p1->rchild=p2;return;}}printf("\n[错误]未能成功增加车次%d,车次号%d 已存在!",m,m);}}TNODE *search(){int key;TNODE *p;p=root;printf("\n输入您所要查找的车次编号:");scanf("%d",&key);while(p!=NULL&&p->data!=key){if(key<p->data){p=p->lchild;}else if(key>p->data){p=p->rchild;}}if(p==NULL) printf("\n该车次不存在!");return(p);}void del(){int key;TNODE *p1,*p2,*p3,*temp;p1=p2=root;p3=temp=NULL;printf("\n请输入您想要取消的车次编号:");scanf("%d",&key);while(p2!=NULL&&p2->data!=key){if(key<p2->data){p1=p2;p2=p2->lchild;}else if(key>p2->data){p1=p2;p2=p1->rchild;}}if(p2==NULL){printf("\n[错误]该车次不存在!返回上级菜单\n...");return;} else if(p2->lchild==NULL&&p2->rchild==NULL){if(p1->lchild==p2) p1->lchild=NULL;if(p1->rchild==p2) p1->rchild=NULL;temp=p2;if(root==p2) {temp=root;root=NULL;}}else{if(p2->rchild==NULL){temp=p2->lchild;p2->data=temp->data;p2->lchild=temp->lchild;p2->rchild=temp->rchild;}else if(p2->lchild==NULL){temp=p2->rchild;p2->data=temp->data;p2->lchild=temp->lchild;p2->rchild=temp->rchild;}else{p3=p2;temp=p2->lchild;while(temp->rchild!=NULL){p3=temp;temp=temp->rchild;}p2->data=temp->data;if(p3==p2) p3->lchild=temp->lchild;else p3->rchild=temp->lchild;}}free(temp);printf("车次%d 已取消!\n\n",key);}CNODE *insert_c(CNODE *head){CNODE *k,*p;k=(CNODE *)malloc(sizeof(CNODE));do{printf("\n车票编号:");scanf("%d",&k->no);p=search_c(head,k->no);if(p!=NULL) printf("\n[错误]该票已被购买!请重新选择!\n");}while(p!=NULL);printf("购票者证件号:");scanf("%d",&k->id);printf("购票日期(格式:yy-mm-dd):");scanf("%d-%d-%d",&k->date.x,&k->date.y,&k->date.z);k->next=head;head=k;return(head);}CNODE *insert_c_more(CNODE *head){int n,i;printf("\n请输入批量新增售票记录数:");fflush(stdin);scanf("%d",&n);for(i=0;i<n;i++) head=insert_c(head);printf("\n售票记录更新成功!\n");return(head);}CNODE *search_c(CNODE *head,int id){CNODE *temp,*s;s=temp=head;while(temp!=NULL&&temp->id!=id){s=temp;temp=temp->next;} print_c(temp);if(temp!=NULL) return(s);else return NULL;}void search_c_id(CNODE *head,int id){CNODE *s,*head_s;s=head_s=NULL;if(head==NULL) printf("无该证件号纪录!\n");while(head!=NULL){if(head->id==id){s=(CNODE *)malloc(sizeof(CNODE));s->no=head->no;s->id=head->id;s->date=head->date;s->next=head_s;head_s=s;}head=head->next;}print_c_all(head_s);printf("\n");}void search_c_id_all(TNODE *ptr,int id){if(ptr!=NULL){search_c_id_all(ptr->lchild,id);printf("\n车次:%d\n",ptr->data);search_c_id(ptr->head,id);search_c_id_all(ptr->rchild,id);}}void search_date(CNODE *head,TIME t){CNODE *s,*head_s;s=head_s=NULL;while(head!=NULL){if(t.x==head->date.x)if(t.y==head->date.y)if(t.z==head->date.z){s=(CNODE *)malloc(sizeof(CNODE));s->no=head->no;s->id=head->id;s->date=head->date;s->next=head_s;head_s=s;}head=head->next;}print_c_all(head_s);printf("\n");}void search_date_all(TNODE *ptr,TIME t){if(ptr!=NULL){search_date_all(ptr->lchild,t);printf("\n车次:%d\n",ptr->data);search_date(ptr->head,t);search_date_all(ptr->rchild,t);}}CNODE *del_c(CNODE *head,CNODE *p){CNODE *temp;if(p==NULL) printf("[错误]该票未售出或为废票!返回上级菜单\n...");else if(p==head){head=NULL;free(p);}else{temp=p->next;p->next=temp->next;free(temp);}return(head);}。