车票管理系统数据结构(车票管理系统流程图)
您好,今天小栢来为大家解答以上的问题。车票管理系统数据结构相信很多小伙伴还不知道,现在让我们一起来看看吧!
1、#include#include#include#include#include#define SIZE_view 50#define SIZE_line 100#define SIZE_way 300#define MAXNODE 30 //定义多的顶点数#define MAXCOST 1000//自己写的头文件//#include// //using namespace std;struct view_ /城市信息结构/{int id;char name[20];int code;char shortname[20];char LName[100];// 经过此车站的线名称} views[SIZE_view];struct line_ //线信息结构{int Lid;char LName[20];int start_id; //始发站idint end_id; //终点站idint dist; //线长度int sign;//通行标志}lines[SIZE_line];struct way_ //度的信息结构{int station1;int station2;int dist;}ways[SIZE_way];struct path_ //用于短路径的查询{int count;int path[SIZE_view];};int view_count,line_count,way_count;//用来存储文件中有多少条记录void reaiews(){int i;ifstream infile("views.txt",ios::in); //打开文件infile >>view_count ; //把文件中的记录赋值给view_countif(!infile) //打开文件失败{cerrexit(1);}//infile>>view_count; // 先读入文件个数for(i=0;i{infile>>views[i].id>>views[i].name>>views[i].code>>views[i].shortname>>views[i].LName;}//view_count=i;//给出原文件中车站的个数infile.close();coutfor(i=0;icout}void readways() //读文件ways.txt{int i;ifstream infile("ways.txt",ios::in); //打开文件infile>>way_count; ////把文件中的记录赋值给way_countif(!infile) //打开文件失败{cerrexit(1);}for(i=0;iinfile>>ways[i].station1>>ways[i].station2>>ways[i].dist;infile.close();//测试用,输出路段的信息coutfor(i=0;icout}void readlines() //读文件lines.txt{int i;ifstream infile("lines.txt",ios::in); //打开文件infile>>line_count; //把文件中的记录赋值给line_countif(!infile) //打开文件失败{cerrexit(1);}for(i=0;iinfile>>lines[i].Lid>>lines[i].LName>>lines[i].start_id>>lines[i].end_id>>lines[i].dist>>lines[i].sign;infile.close();/coutfor(i=0;icout/ //这里是输出文件中的信息}void search () //查询车站信息(所在的线){coutchar sta_name[20];cin>>sta_name; //输入要查询的名字coutifstream infile("views.txt ",ios::in); //读文件infile >>view_count ; //读出文件记录的个数if(!infile) //打开文件失败{cerrexit(1);}int i,mark;for(i=0;iinfile>>views[i].id>>views[i].name>>views[i].code>>views[i].shortname>>views[i].LName;infile.close();for(i=0;i{if(strcmp(sta_name,views [i].name)==0) //找到车站{coutcoutcoutbreak;}mark=i;}if(mark==( view_count -1)) //若没有找到,输出提示{cout}}void adiew(){coutcoutcin>>views[view_count].id;coutcin>>views[view_count].name;coutcin>>views[view_count].code;coutcin>>views[view_count].shortname;coutcin>>views[view_count].LName;ofstream outfile("views.txt",ios::app); //打开views文件,并且写入数据outfileif(!outfile) //文件打开失败{cerrexit(1);}outfile//在文件末尾添加view_count=view_count+1;outfile.close(); //关闭文件coutcout}void addway(){coutcoutcin>>ways[way_count].station1; // station1的idcoutcin>>ways[way_count].station2; //station2的idcoutcin>>ways[way_count].dist; //路段的长度ofstream outfile("ways.txt",ios::app); //打开way.txt文件outfileif(!outfile) //文件打开失败{cerrexit(1);}outfile//在文件末尾添加outfile.close(); //关闭文件coutway_count=way_count+1;cout}void addline(){coutcoutcin>>lines[line_count].Lid;coutcin>>lines[line_count].LName;coutcin>>lines[line_count].start_id;coutcin>>lines[line_count].end_id;coutcin>>lines[line_count].dist;coutcin>>lines[line_count].sign;ofstream outfile("lines.txt",ios::app); //打开文件outfile if(!outfile) //文件打开失败{cerrexit(1);}outfile//在文件末尾添加outfile.close(); //关闭文件coutline_count=line_count+1;cout}//-----------------------------------------------------------------------------------void floyed() //弗洛伊德(Floyed)算法{int i, j, k, m, start_num, end_num; //i,j用来表示起始点和终点int dist_list[SIZE_view][SIZE_view]; //定义了一个数组view_count=view_count+1;struct path_ path_list[SIZE_view][SIZE_view]; //定义了一个path_结构的变量,包含着count和path[]用来存储经过的路径for(i=1;ifor(j=1;jdist_list[i][j]=MAXCOST;for(int t=0;t{i=ways[t].station1;j=ways[t].station2;dist_list[i][j]=ways[t].dist;//把文件中的数据赋值给dist_list[i][j]=ways[t].dist;形式}for (i =0; i{for (j= 0; j{if (i == j){dist_list[i][j] = 0;continue;}dist_list[i][j] = -1;path_list[i][j].count = 0;for (k = 0; k{if (ways[k].station1 == i && ways[k].station2 == j) //把起始点和终点分别给予i,j{dist_list[i][j] = ways[k].dist;path_list[i][j].count = 2;path_list[i][j].path[0] = i;path_list[i][j].path[1] = j;break;}}}}for (k = 0; k{for (i = 0; i for (j = 0; j{if (i == k || j == k || i == j)continue;if (dist_list[i][k] == -1 || dist_list[k][j] == -1)continue;if ( (dist_list[i][j] == -1) ||((dist_list[i][j] != -1) &&(dist_list[i][k] + dist_list[k][j] {dist_list[i][j] = dist_list[i][k] + dist_list[k][j];// shortest[i][j]=shortest[i][k]+shortest[k][j];path_list[i][j].count = path_list[i][k].count + path_list[k][j].count - 1;// path[i][j]=k;for (m = 0; m path_list[i][j].path[m] = path_list[i][k].path[m];for (m = 0; m path_list[i][j].path[m+path_list[i][k].count] = path_list[k][j].path[m+1];}}}coutcoutfor (i = 0; i coutcoutcin>>start_num;coutcin>>end_num;coutcoutif (dist_list[start_num][end_num] == -1)couse{coutk = path_list[start_num][end_num].path[0]-1; //path_list[][]用来保存路径path[m]在这里表明是通过的那个车站的coutfor (m = 1; m {k = path_list[start_num][end_num].path[m]-1; //这里应该也是int型,k是经过的路径的idcout"}}cout}void main(){reaiews();readlines() ;readways();while(1){int menu;coutcoutcoutcoutcoutcoutcoutcoutcoutcoutcin>>menu;while(menu5){coutcin>>menu;}switch(menu){case 1:while(1){adiew();while (1){addway();coutchar con ;cin>>con;if(con=='y')addway();elsebreak;}coutchar con ;cin>>con;if(con=='y')adiew();elsebreak;}break;case 2:while(1){addline();coutchar con ;cin>>con;if(con=='y')addline();elsebreak;}break;case 3:while(1){search ();coutchar con ;cin>>con;if(con=='y')search ();elsebreak;}break;case 4:while(1){floyed();coutchar con ;cin>>con;if(con=='y')floyed();elsebreak;}break;case 5:{coutexit(1);}}}}我觉得你应该一项一项去查,这么多问题回答起来很累人的。
本文到这结束,希望上面文章对大家有所帮助。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。