其他分享
首页 > 其他分享> > c语言车票管理系统

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)正常退出。上述所有操作正常完成后,则可以继续下一步,如果不能正常完成,则显示错误报告。

系统总务流程

图1车票管理系统功能区

   

图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