地铁订票系统(数据结构课设)
1.数据库大作业设计目的与要求
参考图中郑州地铁一号线部分线路图设计一个地铁订票系统
图一
订票管理系统应实现地铁站的插入、删除、修改、查询、排序以及票价查询等工作,请设计一个计算 机系统,实现上述功能。
(1)使用合适的数据结构存储地铁站数据并将示意图中的数据存入你选择的数据结构中。
(2)由于地铁还在不断扩建,请实现地铁站的更新、删除与插入功能。
(3)用户购票时只需输入上车站与下车站,由系统自动计算出票价(两站之内 2 元,三到四站 3 元,
以此类推)。
(4)输出用户票价的同时输出用户经过的地铁站。
(5)使用合适的查找算法,依据用户的输入实现地铁站点查询功能。
(6)记录每个地铁站的人流量总数,在管理员查询时,使用至少 3 种排序算法按照人流量从大到小的 顺序列出站点名称
2.输入与输出要求
要求用户输入需要的服务,输入地铁站入站口与出站口,如果想要享受管理员服务就得输入管理员密码才能继续操作。要求用户输入自己所需要的服务之后,自动进行下一栏操作,在用户购票完毕之后自动打出用户的行驶路线及其所需要的票价。如果是管理员的话,就要用三种不同的排序方法来输出每个站点的人流量。
3.思路以及数据结构与算法描述
由于要实现插入和删除功能,那么我所选择的是一个链表结构体,然后在这个链表结构上面进行操作。首先搭建具体的架构,也就是不同的功能模块,然后在把功能模块一个一个的去实现,而且还实现了模块之间的可拆卸。模块与模块之间互不影响。数据结构主要是链表,此外还有类,结构体模块。而算法主要有直接插入排序算法,折半插入排序算法,冒泡排序算法,遍历算法。
使用了stl标准模板库
(算法这一块我做的不是太好,由于刚入门数据结构时候做的,一些无法直接实现的功能我走了弯路,仅供大家参考学习)
说明
凡标题前面带 * 号的即为可拆卸模块,拆卸掉之后不影响程序的正常运行,只不过少了相应功能。
4.源码分析
1.头文件包含
#include<iostream>
#include<string>
#include<list>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
using namespace std;
主函数入口
case11 对于与菜单中的选项11,功能为修改管理员密码,我把它嵌入到主函数里面了。
//主函数入口
int main() {
list<station> important;
fundationStation(important);
string goveror="1234567";
int flag=1;
while(flag)
{
ofstream document;//把数据记录到本地文件
document.open("document.txt",ios::out);
document<<"站点代号 "<<"站点名称 \t "<<"已售票数 "<<"将接待人数"<<endl;
for(list<station>::iterator dit=important.begin();dit!=important.end();dit++)
{
document<<(*dit).stationNumber<<"\t"<<setw(20)<<left<<(*dit).stationName<<setw(5)<<right<<(*dit).saleTicket<<setw(10)<<right<<(*dit).comers<<endl;
}
document.close();
showMenu();
cout<<"请输入您的选择:"<<endl;
int yourawnser;
while(1) {
cin>>yourawnser;
if(yourawnser>=0&&yourawnser<=11) {
break;
} else {
cout<<"请正确输入:"<<endl;
}
}
switch(yourawnser) {
case 1://购票
{
buyTicket(important);
system("pause");
system("cls");
}
break;
case 2://站点查询
findStation(important);
system("pause");
system("cls");
break;
case 3://票价查询
findPrice(important);
system("pause");
system("cls");
break;
case 4://站点排序
listStation(important);
system("pause");
system("cls");
break;
case 5: { //新建地铁站(面向管理员)
cout<<"请输入管理员密码:"<<endl;
string mima;
cin>>mima;
if(mima==goveror)
{
cout<<"密码正确!"<<endl;
string name;
int position;
cout<<"输入新建地铁站名称:"<<endl;
cin>>name;
cout<<"将在何处新建站点:"<<endl;
cout<<"例:在1,2站点之间新建站点请输入2\t"<<endl;
cout<<"在1站之前新建站点请输入1\t"<<endl;
cout<<"在最后一站(例如5)之后新建站点请输入最后一站序号加一(例如6)"<<endl;
cin>>position;
createStation(name,position,important);//创建地铁站
}
else{
cout<<"密码错误!"<<endl;
}
system("pause");
system("cls");
}
break;
case 6: { //修改地铁站(面向管理员)
cout<<"请输入管理员密码:"<<en