汽⻋站⻋票管理系统C++

汽⻋站⻋票管理系统

系统概述

1.1项⽬来源

随着时代的进步,社会的发展,⼈们的⽣活形式与习惯也越来越多样化,出
⾏成为了⼈们⽣活中的⼀个重要组成部分,⽽汽⻋成为许多⼈出⾏选择的交
通⼯具。⾯对巨⼤数量的乘客的购票需要,汽⻋站就要选择使⽤先进的管理
⽅法来实现⽅便、快捷的售票、退票等⽅⾯的票务管理。随着计算机的普
及,信息处理量的逐渐扩⼤,⼿⼯处理⽅式远远不能满⾜⼈们管理活动的需
要,各种⼯作都逐渐由⼿⼯转为⾃动化,使许多复杂、繁琐、且需要很多⼈
⼒的⼯作变得简单。汽⻋站每天产⽣售票、退票等⾏为数量多,使得汽⻋站
售票管理的数据量⼤,⽽且速度要求要快,传统的⼈⼒⾏为适应,计算机应
⽤软件的使⽤则能很好地满⾜汽⻋站的这⼀需要,提⾼售票⼈员的⼯作效
率,节约相关管理成本。

1.2项⽬⽬标

本系统的任务⽬标是:实现⽅便、快速售票;是⽤⼾准确了解售票情况,提
供多种查询和统计功能;实现系统的安全性设置,使系统本⾝具备⼀定的维
护功能。

1.3项⽬价值

通过本系统的应⽤来提⾼售票⼈员的⼯作频率,节省售票所需时间。系统可
利⽤数据库⾃⾝的数据连接等功能使⽤⼾能够实现不同条件的查询,避免过
多的⼈⼒资源的利⽤⽽且可靠⾏⾼、成本低。

功能讲解

项⽬主窗⼝与次窗⼝如下所⽰:
在这里插入图片描述

⻋票的数据如下图所⽰:
在这里插入图片描述

本系统分别为管理员提供如下功能:

  1. 增加⻋次信息
  2. 查看所有⻋次信息
  3. ⻋辆信息查询
  4. 注销⻋次

同时针对管理员⾝份的特殊性, 为管理员添加了⾝份认证模块, 需要输⼊
正确的账号密码才能进⼊管理员窗⼝

本系统分别为顾客提供了如下功能:

  1. ⻋辆信息查询 (可以通过⻋次, 或者终点站查询)
  2. 购买⻋票(只有系统距发⻋时间⼤于10分钟才可购票)
  3. 退票(只有系统距发⻋时间⼤于10分钟才可退票)

同时在购票时会判断剩余⻋票是否⾜够, 如果不够, ⽆法进⾏购票, 在
买票后, 会将当⽇⽇志写⼊⽇志⽂件中

数据结构

本系统采⽤结构体存储⻋票信息, 如下所⽰:

typedef struct
{
 char no[10] = { '\0' }; / * 班次
 int hour; / * 发⻋时间*⼩时
 int minute; / * 发⻋时间 * 分钟
 char Starting_station[10] = { '\0' }; / * 始发站
 char Last_station[10] = { '\0' }; / * 终点站
 float time; / * ⾏⻋时⻓
 int fare; / * 票价
 int max_number; / * 最⼤载客量
 int sold_number; / * 以售票数
}Timetable;

调用关系图

在这里插入图片描述

程序源码

头⽂件:

head.h

#pragma once
#pragma warning (disable:4996)
#pragma warning (disable:5208)
#include<iostream>
#include<fstream>
#include<iomanip>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include <windows.h>
#include <ctime>
#define LEN sizeof(Timetable)
using namespace std;

function.h

#pragma once
/ * 定义结构体
typedef struct
{
 char no[10] = { '\0' }; / * 班次
 int hour; / * 发⻋时间*⼩时
 int minute; / * 发⻋时间 * 分钟
 char Starting_station[10] = { '\0' }; / * 始发站
 char Last_station[10] = { '\0' }; / * 终点站
 float time; / * ⾏⻋时⻓
 int fare; / * 票价
 int max_number; / * 最⼤载客量
 int sold_number; / * 以售票数
}Timetable;
//====================================================
======================================
/ * 主函数之间的函数声明
void AdminMode(Timetable* timetables, char* filename);
void PassagerMode(Timetable* timetables, char*
filename);
//====================================================
===========================================

/ * 窗⼝函数的声明
int MainWindowSelect();
int AdminWindowSelect();
int PassagerWindowSelect();
//====================================================
======================================================
=======
/ * 预处理和结束后处理的函数声明
void Signin(); / * 登录
int ReadFromFile(Timetable* timetables, int n, char*
filename); / * 从⽂件中读⼊
int WritetoFile(Timetable* timetables, int n, char*
filename); / * 将数据保存到⽂件中
void GenerateLogFileName(char* LogFileName); / * 根据当
天⽇期⽣成⽇志名
int InitializationPassagerMode(Timetable* timetables,
 char* LogFileName,
 char* filename); / * 初始化乘客模式,如果有⽇志,就读⽇
志,如果没有,就读取⻋次⽂件
void SortbyTime(Timetable* timetables, int n); / * 将
timetable⾥⾯的元素按照发⻋的时间进⾏排序
int Quit(); / * 退出程序
/ * 传⼊相应的⻋次号,判断是否停⽌售票和退票
int StopSevice(Timetable* timetables, int n, char*
no);
//====================================================
======================================================
===========
/ * 管理员的函数

int AddBus(Timetable* timetables, int n); / * 添加⻋次
void ShowTimeTable(Timetable* timetables, int n); / *
列出所有⻋次
void Query(Timetable* timetables, int n); / * 查询⻋次
int DelBus(Timetable* timetables, int n); / * 删除⻋次
//====================================================
===================================
/ * 乘客的函数
void TicketOrder(Timetable* timetables, int n); / * 订
票
void TicketDelete(Timetable* timetables, int n); / *
退票
/
======================================================
===================================
/ * 辅助的界⾯设计的函数
void Enter(); /输⼊回⻋
void Space(); /输⼊20个空格
void Star(); /输⼊星形
/
======================================================
=======================================
/ * 主要功能函数中间的辅助函数
/ * 选择查询的⽅式
int QueryChioce();
/ * 输出下标为i的timetables结构体⾥⾯的所有值
void OutPutBus(Timetable* timetables, int i);
/ * 输⼊⻋次号,返回下标
int find(Timetable* timetables, int n, char* no);
/ * 按终点站进⾏查询,返回终点站的数⽬,数组b[]返回终点站的下
标
int find(Timetable* timetables, int n, char*
Last_station, int* b);
/ * ⽣成⽇志⽂件
void BuildLogFile(char* LogFileName);
/ * 在每列前⾯显⽰每列信息名字
void BeforeOutPutBus();
/ * 输出下标为i的timetables结构体⾥⾯的所有值(管理员版本)
void OutPutBus_2(Timetable* timetables, int i);
/ * 在每列前⾯显⽰每列信息名字(管理员版本)
void BeforeOutPutBus_2();

BusStation.cpp

#include"head.h"
#include"function.h"

int main()
{

	char filename[20];

	strcpy(filename, "C:\\Users\\He\\Desktop\\bus.txt");

	int UserChoice;// * 用户的选择

	Timetable timetables[100];

	while (1)
	{
		switch (UserChoice = MainWindowSelect())
		{
		case 1: AdminMode(timetables, filename); break;

		case 2: PassagerMode(timetables, filename); break;

		case 3: if (Quit() != 1)
			continue;
		}


		if (UserChoice == 3)
			break;

	}

	return 0;
}


void AdminMode(Timetable* timetables, char* filename)// * 这里可能要改
{
	Signin();// * 登录,到时候要加回来

	int n = ReadFromFile(timetables, 0, filename);

	while (1)
	{
		system("cls");
		int AdminChoice = AdminWindowSelect();


		switch (AdminChoice)
		{
		case 1: n = AddBus(timetables, n);						// * 添加车次信息
			WritetoFile(timetables, n, filename);
			system("pause");
			break;

		case 2: ShowTimeTable(timetables, n);					// * 浏览时刻表
			system("pause");
			break;

		case 3: Query(timetables, n);							// * 车辆信息查询
			system("pause");
			break;

		case 4: n = DelBus(timetables, n);						// * 删除车辆信息
			system("pause");
			WritetoFile(timetables, n, filename);
			break;

		case 5: WritetoFile(timetables, n, filename);			// * 返回上级菜单
			return;

		}
	}

}


void PassagerMode(Timetable* timetables, char* filename)
{
	char LogFileName[200];

	GenerateLogFileName(LogFileName);// * 根据当天的日期生成日志名称

	int n = InitializationPassagerMode(timetables, LogFileName, filename);

	int PassagerChoice;

	while (1)
	{

		system("cls");

		switch (PassagerChoice = PassagerWindowSelect())
		{
		case 1: Query(timetables, n);					// * 查找车辆信息
			system("pause");
			break;

		case 2: TicketOrder(timetables, n);				// * 购买车票
			WritetoFile(timetables, n, LogFileName);
			system("pause");
			break;

		case 3: TicketDelete(timetables, n);				// * 退回车票
			WritetoFile(timetables, n, LogFileName);
			system("pause");
			break;

		case 4: WritetoFile(timetables, n, LogFileName);
			return;
		}
	}
}

passage.cpp

#include"head.h"
#include"function.h"


//  * 初始化乘客模式,如果有日志,就读日志,如果没有,就读取车次文件
int InitializationPassagerMode(Timetable* timetables, char* LogFileName, char* filename)
{
	int n;// * 统计车次数量

	int i; // * 将车次的售票量初始化为0的循环变量

	fstream file_log;// * 定义日志文件操作
	fstream file;// * 定义bus.txt的操作

	file_log.open(LogFileName, ios::in);

	if (file_log.fail())
	{
		// BuildLogFile(LogFileName);// * 这个函数有点没用了

		n = ReadFromFile(timetables, 0, filename);

		for (i = 0; i < n; i++)
		{
			timetables[i].sold_number = 0;
		}

		WritetoFile(timetables, n, LogFileName);

		return n;
	}

	file_log.close();

	n = ReadFromFile(timetables, 0, LogFileName);

	return n;
}

//  *  订票
void TicketOrder(Timetable* timetables, int n)
{
	char find_no[20];// * 要购买的车次

	int num;

	cout << "\n\n\n";
	Space();
	Space();
	cout << "请输入要购买的车次:";
	cin >> find_no;// * 输入要购买的车次


	// * 判断车次是否存在
	if (find(timetables, n, find_no) == -1)
	{
		Space();
		Space();
		cout << "车次不存在" << endl;
		return;
	}

	// * 判断无法购票的条件
	if (StopSevice(timetables, n, find_no))
	{
		Space();
		Space();
		cout << "无法购票!(即将发车或已经发车)" << endl;

		return;
	}

	Space();
	Space();
	cout << "请输入要购买数目:";

	cin >> num;// * 输入要购买数目

	if ((timetables[find(timetables, n, find_no)].max_number
		- timetables[find(timetables, n, find_no)].sold_number) < num)
	{
		Space();
		Space();
		cout << "余票不足!" << endl;

		return;
	}

	timetables[find(timetables, n, find_no)].sold_number += num;

}

// * 退票
void TicketDelete(Timetable* timetables, int n)
{
	char find_no[20];// * 要退票的车次

	int num;// * 退票数量

	cout << "\n\n\n";
	Space();
	Space();
	cout << "请输入要退票的车次:";
	cin >> find_no;// * 输入要退票的车次


	// * 判断车次是否存在
	if (find(timetables, n, find_no) == -1)
	{
		Space();
		Space();
		cout << "车次不存在" << endl;
		return;
	}

	// * 判断无法退票的条件
	if (StopSevice(timetables, n, find_no))
	{
		Space();
		Space();
		cout << "无法退票!(即将发车或已经发车)" << endl;

		return;
	}


	Space();
	Space();
	cout << "请输入要退票数目:";
	cin >> num;// * 输入要退票数目

	if (timetables[find(timetables, n, find_no)].sold_number < num)
	{

		Space();
		Space();
		cout << "输入退票数目有误!" << endl;

		return;
	}

	timetables[find(timetables, n, find_no)].sold_number -= num;

}

运行截图

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值