订票咨询管理系统

设计编制一个订票管理系统,考虑旅客不同的要求。例如,选择不同的交通工具,希望在旅途中的时间尽可能地短,期望旅费尽可能省,或要求中转次数最少等。为旅客提供两种或三种最优决策。车票基本信息包括:车次、出发站、终点站、额定票数、已订票人数、金额、座位号、发车时间、到站时间等。

基本功能与技术要求

1、 数据文件管理功能:创建新文件、打开文件、保存文件。

2、计算与统计功能:完成记录中相关数据的最优计算与分析;

1)能够打开已存在的数据表文件,根据出发站和到达站计算需要多长时间才能到达及需要多少旅费及中转次数。

2)分析提供旅客最佳选择方案。

3、记录管理功能:记录的管理采用链表或者指针数组实现。

1)输入/添加/插入记录,并保存到数据文件中。

2)查询、显示记录,根据用户要求按所给发车时间、票数、金额等记录关键字排序,查询一个或多个相关联记录的各项信息。

3)修改记录:能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。

4)删除记录:能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具备逻辑删除(具有恢复功能)和物理删除功能,并对新的数据表信息进行文件保存。

 

一.需求分析

考虑旅客的不同需求,比如乘坐不同的交通工具,有什么紧急的事情要求时间尽可能短,或则为零追去舒适度而去选择尽可能少的中转,或则考虑经济能力选择所需费用最少的等,根据旅客的不同需求为他们推荐最适合他们的出行路线。

二.总体设计

流程图为:

三.详细设计

1.模块总览

void IO_read();//将文件中内容读出来

void ex_pre();//建图

void IO_write();//把建好的图写到line.txt文件里

void Init();//初始化航班和车次

void function1();//录入与删除信息

void function2();//浏览所有信息

void function3();//用户咨询(包括购买票的操作)

void show_all();//显示当前所有航班及车次的信息

void change_plane();//修改航班

void change_train();//修改车次

void add_plane();//增加航班

void add_train();//增加车次

void del_plane();//删除航班(包括物理删除和逻辑删除)

void del_train();//删除车次(包括物理删除和逻辑删除)

int min_money(string s,string t);//起点到终点的最小费用及其路线

int min_trans(string s,string t);//起点到终点的最少中转次数用及其路线

int min_time(string s,string t);//起点到终点的最小时间用及其路线

void reset_del();//恢复被逻辑删除的航班或车次

  1. 模块说明

void IO_write(); 这个函数主要调用C++输出流将指定文件里面的内容读出,然后赋值给相应的变量,从而实现后面的操作。

void IO_read(); 这个函数也是使用C++输入流将内容写到指定文建中,然后保存,方便用户查询。

void ex_pre();这个函数是用从文件中读出的航班以及车次信息建立一张有向网络图。

(a). 其中对于城市的处理采用map<string,int>将每个城市映射为一个数字,然后再后面查询时,只要将起点在,终点线映射数字后,只要求对应网上的数字之间的信息即可。

(b).对于城市数量,将他放在set<string>(具有自动去重的功能)容器里面,这样方便查询城市相关信息。

void Init();这个函数是对交通网络的初始化,就是当你需从文件里面读入的时候,可以自己创建一张交通网路,里面可以添加航班,车次(包含 班次,起点,终点,起始时间,终止时间,价格,额定票数,已售票数,并将该信息创建为网络图存到相应文件里面。

void function1();这是一个界面里面有 录入与删除信息的选项供用户选择。

void function2();这是一个界面会有选项显示当前所有信息

void function3();用户咨询界面里面有查询航班,车次选项,以及给出起点,终点,以及想要的出行方式,然后会转入到对应程序里面。

void show_all();这个函数是用来显示当前所有航班及车次的信息。

int min_money(string s,string t);计算起点到终点的最小费用及其路线,用Dijkstra(堆优化),来实现。

int min_trans(string s,string t);//起点到终点的最少中转次数用及其路线,用

Dijkstra(堆优化),来实现。

int min_time(string s,string t);起点到终点的最小时间用及其路线,用深度优先搜索来搜索最短时间,并记录路径。

void change_plane();修改航班,这里面会有增加和删除航班的操作,然后根据选择转到对应的程序里面。

void change_train();修改车次,这里面会有增加和删除车次的操作,然后根据选择转到对应的程序里面。

void add_plane();增加航班,当用户选择这个操作后,会会转入到这个程序。这个程序会让你将将要增加的航班的班次,起点,终点,起始时间,终止时间,费用。

void add_train();增加车次,当用户选择这个操作后,会会转入到这个程序。这个程序会让你将将要增加的火车的班次,起点,终点,起始时间,终止时间,费用。

void del_plane();//删除航班(包括物理删除和逻辑删除)。对于物理删除:我们将管理员输入的类型及其班次对应的一条线路从文件里面删除,逻辑删除:则是对相应的线路打标记,并不删除,只是当前不可以用。

void del_train();//删除车次(包括物理删除和逻辑删除) 。对于物理删除:我们将管理员输入的类型及其班次对应的一条线路从文件里面删除,逻辑删除:则是对相应的线路打标记,并不删除,只是当前不可以用。

void reset_del();恢复被逻辑删除的航班或车次,就是讲管理员输入类型班次的线路的标记取消,也就恢复了。

参考代码:

 #include<iostream>
#include<cstring>
#include<string>
#include<fstream>
#include<algorithm>
#include<queue>
#include<list>
#include<stack>
#include<set>
#include<vector>
#include<map>
#include<ctime>
using namespace std;
string admin="";
const int size=1e3+;
const int inf=0x3f3f3f3f;
typedef pair<int,int> pii;
vector<string> roar;//记录路线
bool vis[size][size]; struct transfor{
string no;// 班次
string beg;// 起点
string ed;// 终点
int tk;// 票数
int num;// 已售票数
int money;// 价格
int beg_tim;//起始时间
int end_tim;//终止时间
string typp;//飞机或火车
bool flag;//标记是否逻辑删除
};
vector<transfor> Edge[size];//
vector<pii> val[][size];// 存费用 /中转次数
vector<transfor> total;//存储所有航线和车次
set<string> point;//存储城市(具有自动去重的能力)
map<string,int> pointno;//将城市映射为数字 struct Node{
int id,w;
Node(int id,int w):id(id),w(w){}
friend bool operator<(Node a,Node b)
{
return a.w<b.w;
}
};
priority_queue<Node> q;//用堆优化dijkstra
int dis[size];
pair<string,string> pre[size];
typedef pair<string,string> pss;
vector<string> T;
int ans=inf; void ex_pre();//建图
void IO_read();//从文件中拿出来
void ex_pre();//建图
void IO_write();//把图写到txt里 void Init();//初始化航班和车次
void function1();//录入与删除信息
void function2();//浏览列车信息
void function3();//用户咨询 void show_all();//显示所有信息
void change_plane();//修改航班
void change_train();//修改车次
void del_plane();//删除航班
void del_train();//删除车次
void add_plane();//增加航班
void add_train();//增加车次 int min_money(string s,string t);//最小费用
int min_trans(string s,string t);//最少中转次数
int dfs(int s,int t,int bt);
void reset_del(); int main()
{
total.clear();IO_read();ex_pre();//把文件中内容读取出来
cout<<"\n\n\n\n\n\n";
cout<<" ---------------------------------------------------"<<endl;
cout<<" | 1:录入与删除信息(需管理员权限) 2:浏览所有信息 |"<<endl;
cout<<" | 3:用户咨询 0:退出 |"<<endl;
cout<<" ---------------------------------------------------"<<endl;
cout<<"\n\n\n";
cout<<" 请输入选择操作号码:";
int my_choice;
cin>>my_choice;
if(my_choice==) return ;
while(true)
{
if(my_choice==) function1();
else if(my_choice==) function2();
else if(my_choice==) function3();
system("cls");
cout<<"\n\n\n\n\n\n";
cout<<" ---------------------------------------------------"<<endl;
cout<<" | 1:录入与删除信息(需管理员权限) 2:浏览所有信息 |"<<endl;
cout<<" | 3:用户咨询 0:退出 |"<<endl;
cout<<" ---------------------------------------------------"<<endl;
cout<<"\n\n\n";
cout<<" 请输入选择操作号码:";
cin>>my_choice;
if(my_choice==) break;
}
return ;
} void function1()//录入与删除信息
{
system("cls");
cout<<"\n\n **欢迎进入录入与删除信息系统**\n\n\n"<<endl;
cout<<"请输入密码:";string admin_mima,ch;
while(cin>>admin_mima)
{
if(admin_mima!=admin)
{
cout<<" 密码错误!!!"<<endl;
cout<<" 是否继续?yes/no:";
cin>>ch;
if(ch=="no") return ;
}
if(admin_mima==admin) break;
}
system("cls");
cout<<" **欢迎进入录入与删除信息系统**\n\n\n"<<endl;
cout<<" 0:初始化航班和车次"<<endl;
cout<<" 1:增加/删除航班 "<<endl;
cout<<" 2:增加/删除车次 "<<endl;
cout<<" 3:恢复删除的航班/车次"<<endl;
cout<<" 4:返回上一界面"<<endl;
cout<<"\n\n\n 请输入你的选择: ";
int Choice;
cin>>Choice;
if(Choice==) return ;
else if(Choice==) Init();
else if(Choice==) change_plane();////
else if(Choice==) change_train();////
else if(Choice==) reset_del();
} void function2()//浏览所有信息
{
system("cls");
cout<<"\n\n **所有航班及车次如下**\n\n"<<endl;
show_all();
cout<<" 请输入1返回.";
int str;
cin>>str;
} void function3()//用户咨询
{
system("cls");
cout<<"\n\n 请输入您需要乘坐的交通工具"<<endl;
cout<<" 1: 飞机 "<<endl;
cout<<" 2: 火车 "<<endl;
cout<<" 3: 返回 "<<endl;
int choice_type;
cin>>choice_type;
if(choice_type==) return ;
string Start,End;
cout<<endl;
cout<<" 请输入起点: ";
cin>>Start;
cout<<" 请输入终点: ";
cin>>End;
system("cls");
cout<<"\n\n\n\n\n\n";
cout<<" 请选择您的意愿\n\n"<<endl;
cout<<" 1:费用最少"<<endl;
cout<<" 2:中转最少"<<endl;
cout<<" 请输入你的选择: ";
int cho;
cin>>cho; if(cho==)
{
int Minmoney;
Minmoney=min_money(Start,End);//////
if(Minmoney>=inf)
{
cout<<" 抱歉!没有您需要的类型"<<endl;
cout<<"输入1返回: ";int sssv;
cin>>sssv;
return ;
}
cout<<" 最少费用为: "<<Minmoney<<endl;
cout<<" 费用最少的推荐为:";
vector<string>::iterator it;
vector<transfor>::iterator itt;
for(it=roar.begin();it!=roar.end();++it) cout<<(*it)<<" ";//依次输出路径
cout<<endl;
cout<<" 是否购买?yes/no: ";
string isbuy;
cin>>isbuy;
if(isbuy=="no") return ;
else if(isbuy=="yes")
{
for(it=roar.begin();it!=roar.end();++it)
{
for(itt=total.begin();itt!=total.end();++itt) ///////////
{
if((*itt).tk<=(*itt).num) { cout<<"无票"<<endl;return ;}
if((*itt).no==(*it) && (*itt).tk>(*itt).num) (*itt).num++;
}
}
ex_pre();IO_write();////跟新
cout<<" **购买成功!!!**"<<endl;
cout<<"输入1返回: ";int sssv;
cin>>sssv;
}
}
else if(cho==)
{
int times=min_trans(Start,End);//////
if(times>=inf)
{
cout<<" 抱歉!没有您需要的类型"<<endl;
cout<<"输入1返回: ";int sssv;
cin>>sssv;
return ;
}
cout<<" 中转次数最少为: "<<times<<endl;
cout<<" 中转次数最少的推荐为:";
vector<string>::iterator it;
vector<transfor>::iterator itt;
for(it=roar.begin(); it!=roar.end() ;++it ) cout<<(*it)<<" ";
cout<<endl;
cout<<" 是否购买?yes/no: ";
string isbuy;
cin>>isbuy;
if(isbuy=="no") return ;
else if(isbuy=="yes")
{
for(it=roar.begin();it!=roar.end();++it)
{
for(itt=total.begin();itt!=total.end();++itt) if((*itt).no==(*it)) (*itt).num++;
}
ex_pre();IO_write();////////////
cout<<" **购买成功!!!**"<<endl;
cout<<"输入1返回: ";int sssv;
cin>>sssv;
}
}
}
/////////////function1()管理员的操作
void Init()//初始化航班和车次
{
system("cls");
cout<<"\n\n\n 欢迎来到初始化航班和车次界面\n\n"<<endl;
total.clear();//初始化清空所有航线/班次
transfor tran;
while(true)
{
string choice;
int t1,t2;
cout<<" 是否输入航班?yes/no: ";
cin>>choice;
if(choice=="no") break;
tran.typp="plane";tran.flag=false;//这条航线标记为false(即为可以用)
cout<<" 请输入航班编号:";
cin>>tran.no;
cout<<" 请输入航班起始时间:";
cin>>tran.beg_tim;
cout<<" 请输入航班终止时间:";
cin>>tran.end_tim;
cout<<" 请输入航班起始地点:";
cin>>tran.beg;
cout<<" 请输入航班终止地点:";
cin>>tran.ed;
cout<<" 请输入航班费用:";
cin>>tran.money;
cout<<" 请输入航班额定票数:";
cin>>tran.tk;
cout<<" 请输入航班已售票数:";
cin>>tran.num;
point.insert(tran.beg);
point.insert(tran.ed);
total.push_back(tran);
}
while(true)
{
string choice;
int t1,t2;
cout<<" 是否输入车次?yes/no: ";
cin>>choice;
if(choice=="no") break;
tran.typp="train"; tran.flag=false;
cout<<" 请输入车次编号:";
cin>>tran.no;
cout<<" 请输入车次起始时间:";
cin>>tran.beg_tim;
cout<<" 请输入车次终止时间:";
cin>>tran.end_tim;
cout<<" 请输入车次起始地点:";
cin>>tran.beg;
cout<<" 请输入车次终止地点:";
cin>>tran.ed;
cout<<" 请输入车次费用:";
cin>>tran.money;
cout<<" 请输入车次额定票数:";
cin>>tran.tk;
cout<<" 请输入车次已售票数:";
cin>>tran.num;
//tran.beg_tim.outbecome(t1);//////
//tran.end_tim.outbecome(t2);//////
point.insert(tran.beg);
point.insert(tran.ed);
total.push_back(tran);
}
ex_pre();//建图
IO_write();//把图写进文件里面
} void change_plane()//修改航班
{
system("cls");
cout<<"\n\n\n 请选择操作:\n"<<endl;
cout<<" 1:增加航班"<<endl;
cout<<" 2:删除航班"<<endl;
int choice;
cin>>choice;
switch(choice)
{
case :add_plane();break;
case :del_plane();break;
} }
void change_train()//修改车次
{
system("cls");
cout<<"\n\n\n";
cout<<" 1:增加车次"<<endl;
cout<<" 2:删除车次"<<endl;
int choice;
cin>>choice;
switch(choice)
{
case :add_train();break;
case :del_train();break;
}
}
void del_plane()//删除航班
{
system("cls");
cout<<"\n\n\n 欢迎来到删除航班的界面\n\n"<<endl;
//while(true)
//{
cout<<" 请选择要进行的操作\n"<<endl;
cout<<" 1:逻辑删除 2:物理删除\n"<<endl;
int choice;
cin>>choice;
if(choice==)//逻辑删除:只是打个标记,并没有真正从文件里面删除
{
cout<<" 输入要删除的航班的编号:";
string str;bool temp=false;
cin>>str;//vrctor total
for(auto i=total.begin();i!=total.end();++i)
{
if((*i).no==str&&(*i).typp=="plane")
{
(*i).flag=true;
temp=true;
break;
}
i++;
}
if(!temp) cout<<" 没有此编号的航班!!!"<<endl;
}
else if(choice==)//物理删除
{
cout<<" 输入要删除的航班的编号:";
string str;bool temp=false;
cin>>str;//vrctor total
vector<transfor>::iterator it=total.begin();
//cout<<" al "<<total.size()<<endl;
while(it!=total.end())
{
if((*it).no==str&&(*it).typp=="plane")
{
total.erase(it);//删除total里面的航班
temp=true;
break;
}
it++;
}
//cout<<" al "<<total.size()<<endl;
if(!temp) {cout<<"没有此航班!!!"<<endl;}
}
ex_pre();//从新构图
IO_write();//吧图从新存在line.txt里面
//}
}
void del_train()//删除车次
{ system("cls");
cout<<"\n\n\n 欢迎来到删除车次的界面\n\n"<<endl;
//while(true)
//{
cout<<" 请选择要进行的操作\n"<<endl;
cout<<" 1:逻辑删除 2:物理删除\n"<<endl;
int choice;
cin>>choice;
if(choice==)//逻辑删除:只是打个标记,并没有真正从文件里面删除
{
cout<<" 输入要删除的车次的编号:";
string str;bool temp=false;
cin>>str;//vrctor total
for(auto i=total.begin();i!=total.end();++i)
{
if((*i).no==str&&(*i).typp=="train")
{
(*i).flag=true;
temp=true;
break;
}
i++;
}
if(!temp) cout<<" 没有此编号的车次!!!"<<endl;
}
else if(choice==)//物理删除
{
cout<<" 输入要删除的车次的编号:";
string str;bool temp=false;
cin>>str;//vrctor total
vector<transfor>::iterator it=total.begin();
while(it!=total.end())
{
if((*it).no==str&&(*it).typp=="train")
{
total.erase(it);//删除total里面的车次
temp=true;
break;
}
it++;
}
if(!temp) {cout<<"没有此车次!!!"<<endl;}
}
ex_pre();//从新构图
IO_write();//吧图从新存在line.txt里面
//}
}
void add_train()//增加车次
{
system("cls");
cout<<"\n\n\n 欢迎来到增加车次的界面\n\n"<<endl;
transfor tran;
while(true)
{
string choice;
int t1,t2;
tran.typp="train"; tran.flag=false;
cout<<" 请输入车次编号:";
cin>>tran.no;
cout<<" 请输入车次起始时间:";
cin>>tran.beg_tim;
cout<<" 请输入车次终止时间:";
cin>>tran.end_tim;
cout<<" 请输入车次起始地点:";
cin>>tran.beg;
cout<<" 请输入车次终止地点:";
cin>>tran.ed;
cout<<" 请输入车次费用:";
cin>>tran.money;
cout<<" 请输入车次额定票数:";
cin>>tran.tk;
cout<<" 请输入车次已售票数:";
cin>>tran.num;
//tran.beg_tim.outbecome(t1);//////
//tran.end_tim.outbecome(t2);//////
point.insert(tran.beg);
point.insert(tran.ed);
total.push_back(tran);
cout<<" 是否输入车次?yes/no";
cin>>choice;
if(choice=="no") break;
}
ex_pre();
IO_write();
}
void add_plane()//增加航班
{
system("cls");
cout<<"\n\n\n 欢迎来到增加航班的界面\n\n"<<endl;
transfor tran;
while(true)
{
string choice;
int t1,t2;
tran.typp="plane";tran.flag=false;//这条航线标记为false(即为可以用)
cout<<" 请输入航班编号:";
cin>>tran.no;
cout<<" 请输入航班起始时间:";
cin>>tran.beg_tim;
cout<<" 请输入航班终止时间:";
cin>>tran.end_tim;
cout<<" 请输入航班起始地点:";
cin>>tran.beg;
cout<<" 请输入航班终止地点:";
cin>>tran.ed;
cout<<" 请输入航班费用:";
cin>>tran.money;
cout<<" 请输入航班额定票数:";
cin>>tran.tk;
cout<<" 请输入航班已售票数:";
cin>>tran.num;
//tran.beg_tim.outbecome(t1);//////
//tran.end_tim.outbecome(t2);//////
point.insert(tran.beg);
point.insert(tran.ed);
total.push_back(tran);
cout<<" 是否输入航班?yes/no";
cin>>choice;
if(choice=="no") break;
}
ex_pre();
IO_write();
} void reset_del()///恢复逻辑删除内容
{
system("cls");
string typ,number;bool tempp=false;
cout<<" 请输入要恢复的类型(plane/train): ";
cin>>typ;
cout<<" 请输入要恢复的的编号: ";
cin>>number;
vector<transfor>::iterator it=total.begin();
while(it!=total.end())
{
if((*it).no==number && (*it).flag)
{
tempp=true;(*it).flag=;//取消标记
break;
}
it++;
}
if(!tempp) cout<<" 没有找到相应逻辑删除的班次!!!"<<endl;
else cout<<" **恢复成功!!!**"<<endl;
ex_pre();
IO_write();
}
////////////////////////////////////////////
int min_money(string s,string t)//最小费用
{
int beg=pointno[s],end=pointno[t];
memset(dis,inf,sizeof(dis));
while(!q.empty()) q.pop();
dis[beg]=;
q.push(Node(beg,));
while(!q.empty())
{
Node S=q.top();
q.pop();
int id=S.id;
if(dis[id]!=S.w) continue;
for(int i=;i<Edge[id].size();i++)
{
if(dis[pointno[Edge[id][i].ed]]>dis[id]+Edge[id][i].money&&!Edge[id][i].flag)
{
dis[pointno[Edge[id][i].ed]]=dis[id]+Edge[id][i].money;
q.push(Node(pointno[Edge[id][i].ed],dis[pointno[Edge[id][i].ed]]));
pre[pointno[Edge[id][i].ed]]=pss(Edge[id][i].beg,Edge[id][i].no); }
}
}
roar.clear();
for(int i=end;i!=beg;i=pointno[pre[i].first]) roar.push_back(pre[i].second);//路径存入全局vector roar中 return dis[end];//最少费用直接返回
}
/*
int dfs(int s,int t,int bt)
{
//cout<<s<<' '<<t<<endl;
int temp_ans=inf;
if(s==t)
{
if(bt<ans)
T.clear();
return bt;
}
for(int j=0;j<Edge[s].size();j++)
{
if(!vis[s][j]&&Edge[s][j].beg_tim>=bt)
{
vis[s][j]=1;
int temp=dfs(pointno[Edge[s][j].beg],pointno[Edge[s][j].ed],Edge[s][j].end_tim);
temp_ans=min(temp_ans,temp);
if(temp<ans)
{
T.push_back(Edge[s][j].no);
ans=temp;
}
} }
//return temp_ans;
return temp_ans;
}
int min_time(string s,string t)//最小时间
{
int beg=pointno[s],end=pointno[t];
ans=inf;
int ans=inf;
for(int i=0;i<Edge[beg].size();i++)
{
memset(vis,0,sizeof(vis));
int temp=dfs(pointno[Edge[beg][i].ed],end,Edge[beg][i].end_tim)-Edge[beg][i].beg_tim;
// cout<<temp<<' '<<Edge[beg][i].beg_tim<<endl;
if(ans>temp)
{
ans=temp;
roar.swap(T);//释放多余空间
}
}
return ans;
}
*/
int min_trans(string s,string t)//最少中转次数
{
int beg=pointno[s],end=pointno[t];
memset(dis,inf,sizeof(dis));
while(!q.empty()) q.pop();
dis[beg]=;
q.push(Node(beg,));
while(!q.empty())
{
Node S=q.top();
q.pop();
int id=S.id;
if(dis[id]!=S.w) continue;
for(int i=;i<Edge[id].size();i++)
{
if(dis[pointno[Edge[id][i].ed]]>dis[id]+&&!Edge[id][i].flag)
{
dis[pointno[Edge[id][i].ed]]=dis[id]+;
q.push(Node(pointno[Edge[id][i].ed],dis[pointno[Edge[id][i].ed]]));
pre[pointno[Edge[id][i].ed]]=pss(Edge[id][i].beg,Edge[id][i].no);//记录前面一条边的信息 }
}
}
roar.clear();//清空
for(int i=end;i!=beg;i=pointno[pre[i].first]) roar.push_back(pre[i].second);//路径存入全局vector roar中 return dis[end]-;//最少中转直接返回
} void show_all()//显示所有的信息
{
fstream file;
file.open("line.txt",ios::in);
transfor edge;
int t1,t2;
while(file>>edge.typp>>edge.no>>edge.beg>>edge.ed>>edge.beg_tim>>edge.end_tim>>edge.tk>>edge.num>>edge.money>>edge.flag)
{
////////////////////////////////////////////////////////////////////
if(!edge.flag)
{
cout<<edge.typp<<" "<<edge.no<<" "<<edge.beg<<"到"<<edge.ed<<" 额定票数:"<<edge.tk<<" ";
cout<<"已售票数:"<<edge.num<<" 价格:"<<edge.money<<"元 "<<endl;
}
/////////////////////////////////////////////////////////////////////
}
file.close();
} void ex_pre()//建图
{
int no=;
for(auto i=point.begin();i!=point.end();i++,no++)//point里面是点
{
pointno[(*i)]=no;
Edge[no].clear();
val[][no].clear();
val[][no].clear();
}
for(int i=;i<total.size();i++)
{
Edge[pointno[total[i].beg]].push_back(total[i]);//点映射
val[][pointno[total[i].beg]].push_back(pii(total[i].money,pointno[total[i].ed]));
val[][pointno[total[i].beg]].push_back(pii(,pointno[total[i].ed]));
}
}
void IO_write()//把图写到txt里
{
fstream file;
file.open("line.txt",ios::out);
string temp;
for(int i=;i<size;i++)//离散化后从1开始
{
for(int j=;j<Edge[i].size();j++)
{
file<<Edge[i][j].typp<<' '<<Edge[i][j].no<<' '<<Edge[i][j].beg<<' '<<Edge[i][j].ed<<' '<<Edge[i][j].beg_tim<<' '<<Edge[i][j].end_tim<<' '<<Edge[i][j].tk<<' '<<Edge[i][j].num<<' '<<Edge[i][j].money<<' '<<Edge[i][j].flag<<endl;
}
}
file.close();
} void IO_read()//从文件中拿出来
{
fstream file;
file.open("line.txt",ios::in);
transfor edge;
while(file>>edge.typp>>edge.no>>edge.beg>>edge.ed>>edge.beg_tim>>edge.end_tim>>edge.tk>>edge.num>>edge.money>>edge.flag)
{
point.insert(edge.beg);
point.insert(edge.ed);
total.push_back(edge);
}
file.close();
}

C++与数据结构课程设计---定票咨询系统的更多相关文章

  1. 数据结构课程设计四则运算表达式求值(C语言版)

    本系统为四则运算表达式求值系统,用于带小括号的一定范围内正负数的四则运算标准(中缀)表达式的求值.注意事项:    1.请保证输入的四则表达式的合法性.输入的中缀表达式中只能含有英文符号"+ ...

  2. 学生信息管理系统(cocos2d引擎)——数据结构课程设计

    老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create("&qu ...

  3. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  4. 课程设计之(struts2+Hibernate)航空订票系统

    1.题目 课程设计之航空订票系统 为某家机票预订服务商开发一个机票预订和查询管理系统.该系统中的航班和机票信息由多家航空公司负责提供.客户通过上网方式查询航班时间表.机票可用信息.机票折扣信息,可以远 ...

  5. 课程设计 --- 黑白棋中的 AI

    原文链接:https://www.dreamwings.cn/reversi/3013.html 到了考试周了佯,可是偏偏这个时候迎来了很多很多的课程设计,幸好教授把C语言的课程设计提前发出了,不然都 ...

  6. Java课程设计---团队博客

    课设题目:购物车系统 题目要求: 1.先建立一个文本文件,定义出自己想要的商品.//也可用数据库以商品编号:商品名称:商品品牌:价格作为文件的内容,中间要求用分号或者分割 2.编写程序,定义一个商品类 ...

  7. 201521123110 java课程设计

    一.需求分析 功能要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语.保留用户测试成绩,做出成绩排行榜.排行榜存放到文件中. 二.本组课题及本人任务 • ...

  8. 课程设计小组报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的 ...

  9. 《基于Cortex-M4的ucOS-III的应用》课程设计 结题报告

    <基于Cortex-M4的ucOS-III的应用>课程设计 结题报告 小组成员姓名:20155211 解雪莹 20155217 杨笛 20155227 辜彦霖 指导教师:娄嘉鹏 一.设计方 ...

随机推荐

  1. centos6的JDK安装

    1. 通过如下命令查看当前操作系统是否存在JDK rpm -qa | grep java 如果出现以下内容说明你的操作系统存在jdk 2.那么依次通过如下命令进行删除它 rpm -e - -nodep ...

  2. 4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)

    你好,我是彤哥,本篇是netty系列的第四篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使 ...

  3. 微服务架构 - Jimu(积木) 升级 1.0.0 支持 .Net Core 3.0

    如果不知道 Jimu(积木) 是啥,请移步 .Net Core 分布式微服务框架介绍 - Jimu 这次升级除了支持 .Net Core 3.0 还新增部分功能,如 REST, 链路跟踪等,以下为详细 ...

  4. 《JAVA 程序员面试宝典(第四版)》之JAVA程序设计基础概念(1)类型转换

      问题主题:类型转换   书页号码:37页 题目: 讨论点:答案不是D,应该是B 理由:看下面在编译器输入的结果 知识扩展:装箱与拆箱, == 与 equals 区别 之前也老是听说什么装箱.拆箱之 ...

  5. mysql基础之约束

    约束的目的: 1.约束保证数据的完整性和一致性. 2.约束分为表级约束 和 列级 约束.(针对约束字段的数目的多少来确定的) 3.约束类型包括 not null (非空约束) primary key( ...

  6. opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)

    ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...

  7. 业务领域建模Domain Modeling

    我的工程实践选题为ESP32低功耗的实现,本项目基于ESP32嵌入式开发平台.下文将以需求为基础,对该项目进行领域建模. 一.概念介绍 1.业务建模 1.1 概念介绍 业务建模(Business Mo ...

  8. jQuery简单面试题

    干货 | jQuery经典面试题及答案精选 面试题来啦! 毫无疑问,JavaScript是一门如此有用,但总是被低估的一门语言. 在 jQuery 粉墨登场之前,我们曾经会写出冗长的JavaScrip ...

  9. python容器类型元组的操作

    元组:使用小括号进行表示一组元素,其元素与元素之间使用逗号隔开:注意:元组的的值是不可修改的: 1.元组值得增加:元组是不可以直接增加值的,但是可以通过+进行拼接 # 声明一个元组: tuple1 = ...

  10. PHP抓取远程图片教程(包含不带后缀图片)

    之前做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理.所以,后来将各种情况结合起来,封装成一个类,分享出来. 创建项目 作为演示,我们在www根目录创建项目 ...