火车票订票系统(DEVC++)

本文介绍了火车票订票系统的开发背景、需求分析和系统设计。系统目标包括显示火车车次信息、查询、订票、修改和保存等功能。通过预处理模块、主函数设计以及各个模块的具体实现,确保了用户能方便地查询和预订火车票,同时系统能够保存和更新相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.开发背景

火车票订票系统主要满足了用户对火车票信息的查询和订购需求,同时可以对火车车次信息和订票信息进行保存。

如何实现菜单的选择功能

如何将新输入的信息添加到存放火车票信息的链表中

如何输出满足条件的信息

如何将信息保存到指定的磁盘文件中

2.需求分析

火车订票系统为用户提供预定火车票服务,将火车车次详细信息进行显示,保存;同时提供火车的剩余票数,以供用户查询,决定是否预订;当预定成功后,提供保存用户订票信息的功能。

3.系统设计

3.1系统目标

显示火车车次信息及可供订票数

对输入车次或要到达的城市提供查询

输入要到达城市的车次信息,确定是否订票

可对输入的火车车次信息进行修改

显示火车车票信息

对火车车票信息及订票人的信息进行保存

3.2系统功能结构

3.3系统操作

在主界面上输入“1”,进入输入火车票信息界面,输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数。

在界面上输入“2”,可以查询火车票信息。查询方法:一是按照车次查询;二是按照想要到达的地方查询。

在界面上输入3,进入订票界面,按照提示输入想要到达的城市,会自动显示出终点站为输入城市的信息,根据提示决定是否订票,以及输入用户的个人信息。

在界面上输入4,进入修改界面,根据提示输入要修改的内容。

在界面上输入5,显示所有的火车票信息。

在界面输入6,进入保存界面,将输入火车票信息及订票人的信息存储在指定的磁盘文件中。

4.预处理模块

4.1预处理模块概述

为了提高程序的可读性,在预处理模块中做了充足的准备工作。在该模块中宏定义了输入、输出语句中的字符串,也使用了自定义结构体类型封装了其中存在的不同类型的零散数据。预处理模块使整个程序的结构简洁清晰,更容易理解。

4.2预处理模块实现

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dos.h>

#define HEADER1 "----------------------BOOK TICKET-----------------------\n"
#define HEADER2 "|  number  | start city | reach city | take off time | receivetime | price | ticketnumber |\n"
#define HEADER3 "|----------|------------|------------|---------------|-------------|-------|--------------|\n"
#define FORMAT "|  %-10s   |   %-10s    |   %-10s    |     %-10s     |    %-10s   |  %5d  |     %5d      |\n"
#define DATA p->data.num,p->data.startcity,p->data.reachcity,p->data.takeofftime,p->data.receivetime,p->data.price,p->data.ticketnum

/*定义存储火车票信息的结构体*/
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; /*订票数*/ 
};

/*定义火车票信息链表的节点结构*/
typedef struct node
{
	struct train data; /*声明train结构体类型的变量*/
	struct node*next;  
}Node,*Link;

/*订票人链表的节点结构*/
typedef struct Man
{
	struct man data;
	struct Man *next;
}book,*bookLink;

 typedef声明了新的类型名Node为node结构体类型,Link为node指针类型,同样也声明了book为Man结构体类型,bookLink为Man结构体的指针类型。

5.主函数设计

5.1主函数概述

在火车订票系统中main()函数中调用menu()函数实现了功能选择菜单的显示

main()函数同时完成了选择菜单的选择功能,即输入菜单中的提示数字,完成相应的功能

5.2技术分析

在main()函数中打开文件是为了将火车票信息和订票人信息保存到该文件,因此需先判断文件中是否有内容。

fopen()函数以读写的方式打开一个二进制文件,如果能够成功打开文件,则测试文件流是否到结尾,即文件中是否有数据。若文件中没有任何数据,则关闭文件;若文件中有数据,则构造链表,读取该磁盘文件中的数据。

保存火车票信息的train.txt文件

保存订票人信息的man.txt文件

5.3主函数实现 

在显示功能选择菜单的函数menu()中主要使用了puts()函数在控制台上输出文字或特殊字符。

main()函数主要应用switch多分支选择结构来实现对菜单中的功能进行调用。

6.输入模块设计

6.1输入模块概述

对火车车次,始发站,终点站,始发时间,到站时间,票价及所剩票数等信息进行输入及保存

为避免添加的车次重复,采用比较函数判断车次是否已经存在,若不存在,则将插入的信息根据提示输入,并插入链表中。

strcmp()比较函数的作用是比较字符串1和字符串2,即对两个字

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值