c语言车票管理系统
作者:互联网
1.能够录入班次信息,可不定时增加数据。
2.浏览信息,显示所有班次状态(如当前时间大于发车时间,显示“此班已发出”)。
3.查询路线(1.班次号查询。2.终点站查询)。
4.售票功能,已订票人数小于额定人数且当前时间小于发车时间时,可订票成功,已订票人数加一。
5.退票功能,当前时间小于发车时间,可退票成功,已订票人数减一。
问题分析
本课程的学习目标是完成车票管理系统,要求实现添加数据、浏览信息、查询路线、售票、退票功能、保存数据、退出系统的实现。
首先,建立菜单分别对应相应的功能区,通过输入一个整数或字符跳转到需要的功能区;便可以用switch()函数来实现。
各功能区的实现如下:
(1)实现信息的录入lu()和保存write()。信息录入首先声明录入车票信息的数据类型和名称,车票信息包括班次、发车时间、起点站、终点站、行车时间、额定数量、已订票人数。其中,班次、发车时间、行车时间、额定数量、已订票人数是整数型,起点站、终点站是字符型,通过使用结构体struct Buses存放一组不同类型的数据,由于行车时间分为时分秒,所以另建struct Time存放行车时间。通过文件保存数据(能够把信息永久保存下来需要把数据存放在文件中,采用二进制文件)建立两个二进制文件分别保存车票信息和车辆的数量H(由于班次号的不确定用静态变量H记录车辆数)。系统启动后,在数据文件中读入数据,在操作时保存内存,在退出时或者保存时,将内存的数据保存在文件中。(一开始想把录入和保存功能合成一个功能,但是后面的售票退票需要再次保存已预定的人数,因此将两种函数分为两个功能区)。
(2)实现信息的浏览liulan()和查询chaxun()。信息浏览要从文件中读出数据,通过read()读出并浏览录入的数据,用函数int bijiaotime1()比较当前时间和发车时间,如果已经发车则显示“此班已发出”。用switch函数分别表示按班次查询和按终点站查询,用for()遍历结构体,判断查询的班次/终点站是否存在,如果存在,则显示数据,不存在,输出“车辆不存在”。
(3)退、售票功能stpiao()。用switch函数分别表示售票功能sp()和退票功能tp(),实现该功能先要解决车辆班次存在和是否发车(查询信息可实现chaxun())、是否有空位(比较额定车票和已预订车票int number_book())的问题。如果能购票,则已经该班次定票人数加一,退票则减一。
(4)退出系统tuichu()。exit(0)正常退出。上述所有操作正常完成后,则可以继续下一步,如果不能正常完成,则显示错误报告。
系统总务流程
图2 车票浏览流程 图3 查询路线流程
图4 售票、退票流程 图5售票的详细流程(同理可得退票流程)
数据操作命令下录入数据、浏览信息、查询信息、售、退票功能、保存数据分别编码为字符1、2、3、4、5。退出系统命令的编码为字符0。
存储结构设计
根据系统要求,系统中需要保存的数据信息,其结构如下:
数据项名称 | 数据项系统表示 | 数据类型 | 数据长度 |
班次 | number | int | 2 |
发车时间 | time | struct Time | |
起点站 | start | char | 30 |
终点站 | end | char | 30 |
行车时间 | time_cost | int | 2 |
额定载量 | carr_number | int | 2 |
已预订人数 | book_number | int | 2 |
为了实现程序的操作,采用结构体保存车辆信息,先声明一个struct Buses的结构体,结构体中嵌入struct Time记录发车时间,其成员是车辆的基本信息,通过对指针、文件的数据结构的操作,实现对车辆的录入,存储、浏览等操作,系统还会建立h.dat和h1.dat记录车辆数据信息和车数,结构体定义如下:
struct Time {
int hour;
int min;
int sec;
};
struct Buses//属性
{
int number;//班次
struct Time time;//发车时间
char start[30];//起点站
char end[30];//终点站
int time_cost;//行车时间
int carry_number;//额定载量
int book_number;//已预订人数
};
功能模块与函数
系统的功能函数:
序号 | 功能描述 | 类别 | 函数 |
1 | 录入信息 | 数据处理 | void lu() |
2 | 浏览查询信息 | 输入输出 | void lc() |
3 | 主菜单 | 输入输出 | int caidan() |
4 | 售/退票 | 数据处理 | void stpiao() |
5 | 数据保存 | 文件访问 | void baocun () |
6 | 退出系统 | 文件访问 | void tuichu() |
7 | 读出数据 | 文件访问 | int read() |
viod lu() void baocun();录入和保存功能函数,当录入信息后,数据暂时保存在内存中,通过调用保存功能函数,将数据存放在h.dat文档中。
Void lc();浏览和查询功能函数,用switch函数做出选择:1.浏览信息,2.查找信息,浏览信息可将所有车辆信息全部显示出来,查询信息用switch函数分为1.按班次查询,2.按终点站查询。
Void caidan();显示车票管理系统的所有功能区,用switch跳转到相应的功能函数。
Void read();将h.dat文件的数据读出。
int bijiaotime();调用系统时间函数与发车时间比较,如果发车时间大于系统时间,则显示“未发车”,并返回1,如果小于,则显示“已发车”,返回0。
void bancichaxun();按班次查询,for循环遍历函数,如果输入的班次值等于文件中存放的班次值,则显示该班次信息,否则输出“该班次不存在”。
void zhongdianchaxun();按终点查询,for循环遍历函数,用strcmp()比较字符串内容是否相等,如果相等,strcmp()函数将返回1,如果输入的终点站等于文件中存放的终点站,则显示该班次信息,否则输出“该班次不存在”。
int number_book();比较额定车票和已预订车票,for循环遍历函数,如果额定车票大于已预订车票,则返回1,否则返回0。
int sp();售票功能函数,输入需要购买的车票班次,调用int bijiaotime1()和int number_book()判断是否能够买票,如果满足买票条件则显示“购票成功”,已订票人数加一,否则显示“购票失败”。
int tp();退票功能函数,与购票功能同理。
文件结构设计
序号 | 文件 | 说明 |
1 | main.cpp | 主函数定义 |
2 | Sc.cpp | 数据处理函数定义 |
3 | Sc.h | 数据处理函数声明 |
4 | Sj.cpp | 输入输出函数定义 |
5 | Sj.h | 输入输出函数声明 |
6 | Wj.cpp | 文件访问函数定义 |
7 | Wj.h | 文件访问函数声明 |
8 | Lu.h | 声明结构体 |
根据要求将文件分为四大部分,分别表示主函数、输入输出、数据处理和文件访问。
Main.c中包括main()主函数、caidan()和退出系统tuichu()。输入输出中,将信息录入void lu(),浏览和查询void lc()放在一起。把需要进行比较,售退车票stpiao()等算法的函数放在数据处理中。将保存baocun1()和读入read()两个文件操作放在文件访问中。
模块的实现、测试
1.主控模块
1.读入数据
2.打印菜单
3.输入命令编码n
4.根据命令处理分支
4.1 n==1
4.1.1 录入信息
4.1.2 保存数据
4.2 n==2
4.2.1 浏览信息
4.2.2查询数据
4.3.2.1 班次查询
4.3.2.2 终点查询
4.3 n==3
4.3.1 售票功能
4.3.2 退票功能
4.4 n==4
4.4.1 读出数据
4.6 n==5
4.6.1 保存数据
4.7 n==0
4.7.1 退出系统
(1)打印菜单
根据功能区的划分,菜单分为1.录入信息,2.浏览、查询信息,3.售、退票功能,4.读出数据,5.保存信息,0.退出系统。
代码如下:
测试结果:
(2)录入和保存信息
按1进入录入信息功能区,用for()循环将结构体数据按照各自类型进行输入,输入完毕后,按5进行文件访问,将数据存储到h.dat二进制文档中。
部分代码如下:
测试结果:
(3)浏览和查询
按2进入此功能区,用switch表示按1浏览信息,按2查询信息,继续按1进入浏览,输出相应结果,按2进入查询,在查询函数中,用switch表示按1班次查询,按2终点查询,继续按1进入班次查询,输出相应结果,按2进入终点站查询,输出相应结果。
部分代码:
测试结果:
(4)售退票功能
按3进入此功能区,用switch表示按1售票,按2退票,继续按1进入售票功能,输入需要购买的班次,查看是否可以购买,如果能,则显示成功,否则失败。按2进入退票功能,与售票执行同理。
部分代码:
测试结果:
实践心得
通过本次c语言课程设计,使我更熟悉结构体的用法,明白怎么把不同的功能程序结合起来(通过switch函数将其他函数串联在一起,输入字符调用不同的函数),把上学期不懂文件访问部分的知识运用起来,学会怎么把数据保存在文件中和把文件中的数据读出来。
思考:车票管理系统中录入信息、保存信息是管理端,售票退票是客户端,所以两者可以通过不同的菜单界面进行处理,在进入完成某一项功能后,可以增加选项是否返回菜单,或者继续。
不足:查询和售票方面的联系不足,如:在查询到车辆已经发车后,售票时要再次重复此代码块。没有添加删除功能,在实际中,不能将已发车或者录入错误的车辆信息删除掉。
完整文档和代码请看:https://download.csdn.net/download/weixin_52078305/19857834?spm=1001.2014.3001.5501
标签:班次,语言,管理系统,int,退票,信息,查询,车票,函数 来源: https://blog.csdn.net/weixin_52078305/article/details/118274953