C++ 车票管理系统 - 售票、退票、查询
C++ 车票管理系统
这是一个用 C++ 编写的车票管理系统,可以实现录入车票信息、浏览车票信息、查询车票信息、售票、退票等功能。
代码如下:
#include <bits/stdc++.h>
using namespace std;
time_t t = time(NULL); // 设置当前时间
static int n = 0; // 总车次
void menu();// 主菜单
class bus // 车票车次类
{
public:
int hour; // 发车时间(时)
int minute; // 发车时间(分)
char start_station[20]; // 起始站
char end_station[20]; // 终点站
double runtime; // 行车时间
int busload; // 载客量
int ys; // 已售票
};
class sy // 管理系统类
{
private:
bus bs;
public:
void input();// 录入车次信息
void browse();// 浏览车次信息
void search_train();// 按车次查询
void search_station();// 按终点站查询
void sp();// 售票
void tp();// 退票
void display(int a);// 显示各车次信息
friend void save();// 保存数据
friend void read();// 初始化函数,读取'数据.txt'的数据
};
sy ticket[1000];
/* 将车次信息存储在文本文件数据.txt中 */
void save()
{
ofstream file("数据.txt", ios_base::out);// 写操作,写入文件
int i;
for( i=0; i<n; i++ )
{
file << i+1 << " ";
file << ticket[i].bs.hour << " ";
file << ticket[i].bs.minute << " ";
file << ticket[i].bs.start_station << " ";
file << ticket[i].bs.end_station << " ";
file << ticket[i].bs.runtime << " ";
file << ticket[i].bs.busload << " ";
file << ticket[i].bs.ys << endl;
}
file.close();// 关闭文件
cout << "信息已存入文件" << endl;
}
/* 录入车次信息 */
void sy::input()
{
cin >> ticket[n].bs.hour >> ticket[n].bs.minute;
cin >> ticket[n].bs.start_station >> ticket[n].bs.end_station;
cin >> ticket[n].bs.runtime >> ticket[n].bs.busload >> ticket[n].bs.ys;
n++;
save();
}
/* 浏览车次信息 */
void sy::browse()
{
tm *pt = localtime(&t);
cout << "当前时间: " << setw(2) << pt->tm_hour << ":";
cout << pt->tm_min << endl;
cout << "车次信息:" << endl;
cout << "班次号\t" << "发车时间 " << "起始站 " << "终点站 " << "行车时间 " << "载客量 " << "已售票 " << "状态" << endl;
int j;
for( j=0; j<n; j++ )
{
ticket[j].display(j+1);
cout << " ";
if( ticket[j].bs.hour < pt->tm_hour )
{
cout << "此班已发出" << endl;
}
else
{
if( ticket[j].bs.minute <= pt->tm_min && ticket[j].bs.hour == pt->tm_hour )
{
cout << "此班已发出" << endl;
}
else
{
cout << "此班未发出" << endl;
}
}
}
}
/* 按车次查询 */
void sy::search_train()
{
int s;
cout << "输入要查询的车次: ";
cin >> s;
cout << "班次号\t" << "发车时间 " << "起始站 " << "终点站 " << "行车时间 " << "载客量 " << "已售票" << endl;
cout << s << "\t" << ticket[s-1].bs.hour << ":" << ticket[s-1].bs.minute << "\t" << ticket[s-1].bs.start_station << "\t" << ticket[s-1].bs.end_station << "\t" << ticket[s-1].bs.runtime << "\t" << ticket[s-1].bs.busload << "\t" << ticket[s-1].bs.ys << endl;
}
/* 按终点站查询 */
void sy::search_station()
{
char s[20];
int flag = 0;
cout << "要查询的终点站: ";
cin >> s;
int j;
cout << "查询结果:" << endl;
cout << "班次号\t" << "发车时间 " << "起始站 " << "终点站 " << "行车时间 " << "载客量 " << "已售票" << endl;
for( j=0; j<n; j++ )
{
if( strcmp( s, ticket[j].bs.end_station ) == 0 )
{
cout << j+1 << "\t" << ticket[j].bs.hour << ":" << ticket[j].bs.minute << "\t" << ticket[j].bs.start_station << "\t" << ticket[j].bs.end_station << "\t" << ticket[j].bs.runtime << "\t" << ticket[j].bs.busload << "\t" << ticket[j].bs.ys << endl;
}
}
}
/* 售票 */
void sy::sp()
{
int flag = 0;
int a;
cout << "输入售票班次号: ";
cin >> a;
tm *pt = localtime(&t);
if( ticket[a-1].bs.ys<ticket[a-1].bs.busload )
{
if(ticket[a-1].bs.hour>pt->tm_hour)
{
flag = 1;
}
else
{
if(ticket[a-1].bs.hour==pt->tm_hour && ticket[a-1].bs.minute>pt->tm_min)
{
flag = 1;
}
}
}
if(flag==1)
{
cout << "售票成功" << endl;
ticket[a-1].bs.ys++;
}
else
{
cout << "票已售完" << endl;
}
}
/* 退票 */
void sy::tp()
{
int a;
cout << "退票的车次: ";
cin >> a;
tm *pt = localtime(&t);
int flag = 0;
if(ticket[a-1].bs.hour>pt->tm_hour)
{
flag = 1;
}
else
{
if(ticket[a-1].bs.hour==pt->tm_hour && ticket[a-1].bs.minute>pt->tm_min)
{
flag = 1;
}
}
if(flag==1)
{
cout << "退票成功" << endl;
ticket[a-1].bs.ys--;
}
else
{
cout << "退票失败" << endl;
}
}
/* 显示 */
void sy::display( int a )
{
cout << a << "\t" << bs.hour << ":";
if(bs.minute==0)
{
cout << "00";
}
else
{
cout << bs.minute;
}
cout << "\t " << " " << bs.start_station << "\t" << " " << bs.end_station
<< " " << bs.runtime << " " << bs.busload << " " << bs.ys;
}
/* 初始化函数,从数据.txt中读出信息 */
void read()
{
ifstream file( "数据.txt", ios_base::in );
while(!file.eof())
{
file >> ticket[n].bs.hour;
file >> ticket[n].bs.minute;
file >> ticket[n].bs.start_station;
file >> ticket[n].bs.end_station;
file >> ticket[n].bs.runtime;
file >> ticket[n].bs.busload;
file >> ticket[n].bs.ys;
n++;
}
file.close();
}
/*主菜单*/
void menu()
{
cout << "~~~~~~~~~~~~~~~~欢迎使用车票管理系统!~~~~~~~~~~~~~~~~" << endl;
cout << " =========================" << endl;
cout << " 1.录入车票信息 " << endl;
cout << " 2.浏览车票信息 " << endl;
cout << " 3.查询车票信息 " << endl;
cout << " 4.售票 " << endl;
cout << " 5.退票 " << endl;
cout << " 6.退出系统 " << endl;
}
int main()
{
menu();
int m;
int f;
int z = 1;
sy p;
while(z==1)
{
cout << "\n请选择: ";
cin >> m;
switch(m)
{
case 1: p.input();break;// 录入车票信息
case 2: p.browse();break;// 浏览车票信息
case 4: p.sp();break;// 售票
case 5: p.tp();break;// 退票
case 6: z=0;break;// 退出系统
case 3:
cout << "查询方式(按车次查询输入1,按终点站查询输入2):";
cin >> f;
if(f==1)
{
p.search_train();
}
if(f==2)
{
p.search_station();
}
}
}
return 0;
}
代码说明:
- 类定义:
bus: 定义了车票车次类,包含了发车时间、起始站、终点站、行车时间、载客量和已售票等信息。sy: 定义了管理系统类,包含了录入车次信息、浏览车次信息、查询车次信息、售票、退票等方法。
- 文件操作:
save(): 将车次信息保存到'数据.txt'文件中。read(): 从'数据.txt'文件中读取车次信息。
- 时间操作:
tm *pt = localtime(&t);: 将当前时间转换为本地时间,并将其存储在结构体指针 pt 中。cout << pt->tm_min << endl;: 输出当前时间的分钟数。
- 主菜单:
menu(): 显示主菜单,包括录入车票信息、浏览车票信息、查询车票信息、售票、退票和退出系统等选项。
- 主函数:
- 从主菜单中选择操作,并执行对应的方法。
使用方法:
- 编译并运行程序。
- 选择相应的操作,例如:
- 录入车票信息:输入车次号、发车时间、起始站、终点站、行车时间、载客量和已售票数。
- 浏览车票信息:显示所有车次信息,包括车次号、发车时间、起始站、终点站、行车时间、载客量和已售票数。
- 查询车票信息:可以按车次或终点站进行查询。
- 售票:输入车次号,进行售票操作。
- 退票:输入车次号,进行退票操作。
- 退出系统:退出程序。
注意:
- 运行程序时,需要确保'数据.txt'文件存在,否则程序将无法正常运行。
- 在程序运行过程中,所有数据都将保存在'数据.txt'文件中,如果需要清空数据,请手动删除'数据.txt'文件。
代码功能:
- 录入车次信息
- 浏览车次信息
- 按车次查询车次信息
- 按终点站查询车次信息
- 售票
- 退票
代码优点:
- 代码结构清晰,易于理解和维护。
- 功能完善,可以满足基本的车票管理需求。
- 使用了文件操作,可以保存车次信息,方便下次使用。
代码改进:
- 可以增加一些功能,例如:
- 支持用户登录和注册。
- 支持在线支付。
- 支持打印车票。
- 可以使用数据库来存储车次信息,提高数据管理效率。
- 可以使用图形界面,提高用户体验。
原文地址: https://www.cveoy.top/t/topic/qwJY 著作权归作者所有。请勿转载和采集!