火车票售票管理系统(那个我也想要一个数据库设计事例,就是火车售票管理SQL)

本文目录
那个我也想要一个数据库设计事例,就是火车售票管理SQL
目录
概述: 5
1. 需求分析 5
1.1 用户需求: 5
1.2 业务流程分析: 6
1.3 信息需求分析 6
1.4 功能需求分析: 7
2. (数据库)概念(模型)设计 8
2.1构思ERD的四条原则及根据这些原则相应得出的实体、联系及其属性: 9
2.2、系统具体E-R图: 9
3. (数据库)逻辑(模型)设计 10
3.1 一般逻辑模型设计: 10
3.2 具体逻辑模型设计: 11
4. 数据库物理设计与数据库保护设计 12
5. 处理功能设计 12
5.1 主控模块设计: 12
5.2 子模块设计: 13
6. 数据库应用系统的实现 14
6.1 数据库及其表结构的建立: 14
6.2 创建表的相关视图: 16
6.3 各表关系图, 16
6.4 数据输入:利用系统录入数据,如下图为各表内容: 17
6.5 模块实现: 18
7. 数据库应用系统运行 26
7.1 写出系统操作使用的简要说明。 26
7.2 按使用说明运行系统并打印出运行结果。 26
7.3 系统评价: 27
报告内容
概述:
随着国民经济快速发展, 人们出行、交通越来越频繁, 对服务的快捷、便利性要求也越来越高。从而对客运行业的建设与管理提出了更高的要求。为适应和推动客运行业的发展, 各种交通公司和部门开始广泛采用使用日趋成熟的计算机技术和数据库技术来实现票务信息的现代化管理,具有手工管理所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本底等。这些优点能够极大地提高信息管理和业务管理的效率。
本学生火车订票系统正是通过数据库存储信息实现高效率管理。该实验设计首先进行需求分析,然后在需求文档的指导下实现系统的功能,如操作员的信息管理功能及普通学生的火车信息查询、订票、退票等功能,最终实现的是学生购得一张自己满意的票券,同时力求通过数据库系统及计算机在其中的运用达到提高工作效率,节约人力资源的效果。
1. 需求分析
1.1 用户需求:
(一)、问题描述:
学生火车票定票系统
(1)背景:一年两次的火车票订票管理
(2)主要实现以下功能:
1)学生基本信息的管理,尤其是所在地
2)学生购票的基本信息,尤其是价钱和车票目的地
3)购票以后的分发管理
4)退票的管理
5)信息的统计和查询
6)操作员管理
(二)、目的及现状:
1)、实验目的:
数据库设计就是要使学生采用本课程中学习的数据库设计方法,运用其基本思路与主要图表工具完成一个自己所了解的业务的数据库应用系统信息需求分析与数据库的概念设计、逻辑设计、物理设计以及处理功能设计,用自己熟悉的数据库管理系统、程序设计语言及其相关开发工具实现该系统,并运行、评价、改进之;在此基础上严格按本大纲所附报告提纲撰写课程设计报告。通过本设计进一步弄懂数据库系统及其相关的基本概念,理解数据库系统的系统结构、主要特点,掌握数据库设计的原理、方法及其基本过程,初步具备数据库应用设计的能力,初步形成运用数据库应用系统解决管理决策中的实际问题的基本素质。
2)、现状和系统要求:
在传统模式下利用人工进行火车订票业务,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,给各相关部门工作人员带来了很大困难,严重影响了他们的工作效率。运用计算机技术和数据库技术来实现票务信息的现代化管理,具有手工管理所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本底等。这些优点能够极大地提高信息管理和业务管理的效率。
在本系统中,系统用户共有两种, 并根据用户权限的不同而实现不同的功能,如操作员
拥有添加、修改、删除某火车相关信息及修改自己的个人信息的功能。学生有对车票信息、、哪一车次哪天还剩余多少张票和自己所订票券的查询功能,订票功能及退票功能。系统利用计算机和数据库的高效率大大减轻了学校票点工作人员的劳动强度, 提高了各部门的工作效率。
1.2 业务流程分析:
(一)、描述系统的业务流程:
本系统共有两种用户, 根据用户权限的不同而实现不同的功能。
操作员的权限最大,他进入系统必须先登录。操作员可以添加、修改、删除某车票的相关信息,可以修改自己的个人信息;查询、删除学生的订票情况,确认学生是否已付款取票等。
学生可以按目的地的车次对车票信息进行查询,可以订票,订票时须录入自己的信息及所选择的车次,系统将检查该车次票数是否已订完或不足,若已订完或不足则提示错误信息并返回到订票界面,订票成功后将生成订票单。学生还可以对自己所订的票券即订票单进行查询,以及查询哪一车次哪天还剩余多少张票。用户付款和取票可在学校票点完成。
(二)、初步业务流程图:
1.3 信息需求分析
1.3.1 资料收集
1.3.2 事项分析:
在本火车票订票系统中,各资料的基本数据项列举如下:
学生资料:学号,姓名,密码,所在学院,专业,班级,电话,目的城市
车票基本信息:车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数
车次详细信息:ID号,车次号,途径站,票价,
订票单信息:订单号,订票人学号,订单时间,付款取票与否
订票具体信息:ID号,订单号,所得车次号,目的城市,订票数,总票价,取票时间
订票点信息:票点号,票点主任的员工号,联系电话,所在校区
操作员资料:员工号,票点号,密码,姓名,性别,电话
1.4 功能需求分析:
(一)、完善业务流程图:
(二)、功能层次图:
本系统共有两种用户, 根据用户权限的不同而实现不同的功能,如操作员查询、添加、修改、删除某火车相关信息及查询、修改自己的个人信息的功能。学生对车票信息、、哪一车次哪天还剩余多少张票和订票功能以及对自己所订票券的查询功能、退票功能。
2. (数据库)概念(模型)设计
2.1构思ERD的四条原则及根据这些原则相应得出的实体、联系及其属性:
① 原则1 (确定实体):能独立存在的事物,例如人、物、事、地、团体、机构、活动、事项等等,在其有多个由基本项描述的特性需要关注时,就应把它作为实体。
在本系统中,实体主要有学生、操作员、车票信息、车票详细信息表、订票单,订票详细信息表,订票点。
②原则2 (确定联系):两个或多个实体间的关联与结合,如主管,从属,组成,占有,作用,配合,协同等等,当需要予以关注时,应作为联系。实体间的联系可分为一对一、一对多、多对多等三类,在确定联系时还要确定其类型。
在本系统中,学生、车票信息、订票单和订票详细信息表之间存在“订购”的联系,一个车票信息可以被多个学生购买,而一个学生只可以购买多个车次所属的一到两张车票,它们之间的联系是一对多的“购买”联系,同时一次登录无论订多少车次只生成一张订票单。订票点和操作员之间存在“隶属”的联系,它们之间的联系是一对多的“隶属”联系;车票信息和车票详细信息表之间存在“包含”与被包含的关系;订票单和订票详细信息表之间也存在“包含”与被包含的关系。
③原则3 (确定属性):实体的属性是实体的本质特征。实体应有标识属性(能把不同个体区分开来的属性组),并指定其中一个作为主标识。联系的属性是联系的结果或状态。
从这条原则可得到实体和联系的属性如下:
学生(学号,姓名,密码,所在学院,专业,班级,电话,目的城市)
车票基本信息(车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数)
车次详细信息(ID号,车次号,途径站,票价)
订票单信息(订单号,订票人学号,订单时间,付款取票与否)
订票具体信息(ID号,订单号,所得车次号,目的城市,订票数,总票价,取票时间)
订票点(票点号,票点主任的员工号,所在校区,电话)
操作员(员工号,票点号,密码,姓名,性别,电话)
④原则4(一事一地):信息分析中得到的基本项要在且仅在实体联系图中的一个地方作为属性出现。
根据以上的分析,可以画出本系统的原始ERD的基本结构。如
2.2、系统具体E-R图:
3. (数据库)逻辑(模型)设计
3.1 一般逻辑模型设计:
(一)、由ERD导出一般关系模型的四条原则:
原则1(实体转换为关系模式):ERD中每个独立的实体转换为一个关系模式,实体的属性组成关系的属性,实体的主标识转换成关系的主码。
原则2(从实体及其主从联系转换为关系模式):ERD中一个从实体及其主从联系转换为一个关系,从实体的属性及其主实体关系的属性组成的属性,其主实体关系的主码,在主从关系联系为一对多联系时还要加上可把同一主实体个体所对应的从实体个体区分开来的,从实体的一组属性,作为该关系的主码。对子类实体可作类似一对一联系的从实体的转换。
原则3(一对多联系在关系模式中的表示):ERD中的一个一对多联系通过在其“多”实体关系上增加“1”实体关系的主码(作为外码)和联系本身的属性来表示。
原则4(多对多联系转换为关系):ERD中的一个多对多联系转换为一个关系,其被联系实体关系的主码和该联系本身的属性一起组成的属性,被联系关系的主码组成该关系的复合主码。
(二)、数据库初步构思的关系框架:
通过ERD转换为一般关系模型四条原则分析,得到须在数据库中进行存储的一般关系模型如下(带下划线的为主码,带#的为外键):
学生(学号,姓名,密码,所在学院,专业,班级,电话,目的城市)
车票基本信息(车次号,出发站,开车时间,到达站,到达时间,车票种类,余票数)
车次详细信息(ID号,车次号#,途径站,票价)
订票单信息(订单号,订票人学号#,订单时间,付款取票与否)
订票具体信息(ID号,订单号#,所得车次号#,目的城市,订票数,总票价,取票时间)
订票点(票点号,票点主任的员工号#,所在校区)
操作员(员工号,密码,姓名,性别,电话)
3.2 具体逻辑模型设计:
(1)、Student表:用来保存学生信息:
项名 类型 长度 小数位 值域 主键 外键 空键
学号 字符 12 是 非空
姓名 字符 20 非空
密码 字符 12 非空
学院 字符 40 非空
专业 字符 30 非空
班级 数据 4 0 》0 非空
电话 字符 12 非空
目的城市 字符 30 非空
(2)、Ticket表:用来保存车票信息表
项名 类型 长度 小数位 值域 主键 外键 空键
车次号 字符 20 是 非空
出发站 字符 30 非空
开车时间 日期 8 非空
到达站 字符 30 非空
到达时间 日期 8 非空
车票种类 字符 20 非空
余票数 数据 8 0 》0 非空
(3)、Citysite表:用来保存车票详细信息表:
项名 类型 长度 小数位 值域 主键 外键 空键
ID号 整数,自动编号 8 是 非空
车次号 字符 20 是 非空
途径城市 字符 30 非空
票价 decimal 非空
(4)、Ticketsite表:用来保存订票点表:
项名 类型 长度 小数位 值域 主键 外键 空键
票点号 整数,自动编号 8 0 是 非空
票点主任员工号 整数,自动编号 8 0 是 非空
联系电话 字符 12 非空
所在校区 字符 40 非空
(5)、Admin表:用来保存操作员表:
项名 类型 长度 小数位 值域 主键 外键 空键
员工号 整数,自动编号 8 0 是 非空
用户名 字符 20 非空
密码 字符 12 非空
姓名 字符 20 非空
性别 字符 4 非空
电话 字符 12 非空
(6)、Book表:用来保存订单表:
项名 类型 长度 小数位 值域 主键 外键 空键
订单号 整数,自动编号 8 0 是 非空
学号 字符 是 非空
订单时间 字符 非空
付款取票与否 整数 2 0 非空
(7)、Ticket表:用来保存取票单表:
项名 类型 长度 小数位 值域 主键 外键 空键
ID号 整数,自动编号 8 0 是 非空
取票号 字符 8 0 是 非空
车次号 字符 是 非空
目的城市 字符 非空
订票数 数据 8 0 》0 非空
总票价 Decimal 非空
取票时间 日期 8 非空
4. 数据库物理设计与数据库保护设计
根据表的结构关系,本系统采用SQL Server 2000数据库。SQL Server 2000是微软公司关系型数据库产品,它是在由MS SQL Server 7.0建立的坚固基础之上产生的。客户的需求极大的推动了该产的革新,SQL Server2000在易用性、可缩放性和可靠性,以及数据仓库等诸多方面有了很大的增强。这使得SQL Server 2000在很多数据库产品发展最快的应用领域(如电子商务、移动计算、分支自动化、商业级应用和数据交换中心等)中成为领先者
在数据库中创建表的同时须创建相关的索引。索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。本数据库表较为简单,且每个表中定义主键约束或者唯一性键约束,已经间接创建了索引,故无需再创建索引。
5. 处理功能设计
5.1 主控模块设计:
(1)、登录系统模块:
在登录窗体界面中,你可以输入代码和密码,选择你的身份(操作员或系统管理员),确认后就可进入主界面窗体。如果你是学生,且还没注册,可以在此窗体界面上点击“注册”,在注册界面输入所要求的项,确定后重新返回登录界面,用你刚注册的账号登录进入主界面。
在主界面中包含上述模块图的几部分,根据身份,即是用户或者管理员,对应权限不同,分为不同的主界面,即用户主界面和管理员主界面。
(2)、系统设置模块图:
用户:在此模块用户可以查询、修改自身注册信息以及退出登录,退出系统后将返回登录界面。
管理员模块:在此模块管理员除了拥有用户的各项设置外还可以注册新的管理员,但为了安全起见,此功能只有当登录人是票点主任时才可执行。
5.2 子模块设计:
5.2.1、管理员模块
1、车票信息管理模块:在此模块,管理员可以执行车票信息录入、查询、删除和修改功能,不过删除和修改功能须当该车次没有被预订的情况下才可执行。
2、订票管理模块:在此模块,管理员可以查询所有订单情况、已付款取票和未付款取票的订单情况,还可以按学号查询某学生的订票情况以及各种统计信息,并在学生来付款取票时执行“付款”操作。另外还可以在订单已付款或学生取消订单时删除订单。
5.2.2、用户模块:
1、订票管理模块:在此模块,用户可以查询车票信息和自身订票情况。查询车票情况分为按车次、按目的地、按起始站—目的站查询,当查询到自身所想要的车票时即可订票,但注意预定票的目的地须与学生家乡所在城市相符,否则系统不允许订票;查询自身订票情况包括订单信息及金额统计,还须注意订票信息上要求的取票期限,订票人须在规定期限内去所在校区的票点付款取票,逾期票点工作人员将不予处理。
2、用户小贴士模块:在这里,用户将了解本订票系统的订票流程及相关规定及用户订票后付款取票地点的信息等。
6. 数据库应用系统的实现
6.1 数据库及其表结构的建立:
利用SQLServer企业管理器创建数据库Tickets,然后创建表:
1、学生表Book
create table Student
(Sno varchar(12) primary key, Sname varchar(20) not null,
Ssex varchar(4) not null, Spw varchar(12) not null, //密码
Sadm varchar(40) not null, //学院
Sdept varchar(30) not null, Sclass numeric(4) not null,
Stel varchar(12) not null, //电话
Semail varchar(50) not null, Shcity varchar(30) not null //所在地
);
2、车票信息表Ticket
create table Ticket
(Tno varchar(20) primary key, //车次号
Startcity varchar(30) not null, Starttime varchar(20) not null,
Endcity varchar(100) not null, Endtime varchar(20) not null,
Ttype varchar(20) CHECK (Ttype IN(’硬座’,’软座’,’硬卧’,’软卧’)),
Tickets int not null //票数
);
3、车次站次信息表Citysite
create table Citysite
(Cityno numeric(8) identity(1,1), //票点号
Tno varchar(20), City varchar(100),
Tprice decimal not null, //票价
primary key (Cityno,Tno),
foreign key (Tno) references Ticket(Tno) on delete cascade
)
4、订票单表Book
create table Book
(Bno numeric(8) identity(1,1) primary key, Sno varchar(12),
Maketime datetime not null, judge int,
foreign key (Sno) references Student(Sno),);
5、订票详细信息表Bookno
create table Bookno
(ID numeric(8) identity(1,1) primary key,
Bno numeric(8), Tno varchar(20), City varchar(100),
Booktime varchar(20) not null, Ticketnums int not null,
Price decimal not null, //票价
Pickdate datetime not null, foreign key (Tno) references Ticket(Tno),
foreign key (Bno) references Book(Bno));
6、操作员表Operater
create table Operater
(Adname varchar(20) primary key, //登录用户名
Adpw varchar(12) not null, //登录密码
Opname varchar(20) not null, //员工真实姓名
Opsex varchar(4) not null, Optel varchar(12) not null,
Opemail varchar(50) not null);
7、订票点表Ticketsite
create table Ticketsite
(Siteno numeric(8) primary key identity, //票点号
Adname varchar(20), // 票点主任登录名
Sitetel varchar(12) not null, Siteaddr varchar(40),
foreign key (Adname) references Operater(Adname));
//为安全起见,学校各校区订票点内容的添加要以直接输入数据库的方式进行
insert into Ticketsite(Adname,Sitetel,Siteaddr) values(’linyp’,’870432’,’龙洞校区行政楼205’)
insert into Ticketsite(Adname,Sitetel,Siteaddr) values(’admin’,’87084432’,’大学城校区E区205’)
6.2 创建表的相关视图:
1、创建V_Book视图,得到对于某种车票的订票人数和订票张数
create view V_Book(Tno,stu_no,sumticket)
as
select Tno,count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno group by Tno
2、创建W_Book视图,得到对于所有订票学生的人数和订票总张数
create view W_Book(stu_nums,sumtickets)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno
3、创建P_Book视图,得到对于已付款取票的人数和车票总张数
create view P_Book(cout_no,cout_nums)
as select count(distinct Sno),sum(Ticketnums) from Bookno,Book
where Bookno.Bno=Book.Bno and judge=1
4、创建M_Book视图, 得到对于某一订票的总金额
create view M_Book(Allprice)
as select sum(Tprice*Ticketnums) from Book,Bookno,Citysite
where Bookno.Bno=Book.Bno and Bookno.Tno=Citysite.Tno and Bookno.City=Citysite.City
6.3 各表关系图,
易知表Ticket与表Citysite之间是父表与子表的关系:
表Book与表Bookno之间也是父表与子表的关系:
它们之间都是父表对子表的一对多的关系。
根据表之间的结构关系图,可以得出各表的完整性约束条件如下图:
表名 主键列名 外键
外键列名 参照表
Student Sno 无
Ticket Tno 无
Citysite Cityno Tno Ticket
Book Bno Sno Student
Bookno ID Bno,Tno Book,Ticket
Operater Adname 无
Ticketsite Siteno Adname Operater
6.4 数据输入:利用系统录入数据,如下图为各表内容:
6.5 模块实现:
本次系统设计我前台采用JSP技术,后台采用SQL Server 2000,操作系统采用Windows XP。
JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
数据结构课程设计 铁路票务管理系统
#include《fstream》
#include《iostream》
#include《string》
#include《stdio.h》
#include《iomanip》
#define SIZE_view 50
#define SIZE_line 100
#define SIZE_way 300
#define MAXNODE 30 //定义最多的顶点数
#define MAXCOST 1000
//自己写的头文件
//#include《addview.h》// //
using namespace std;
struct view_info /*城市信息结构*/
{
int id;
char name;
int code;
char shortname;
char LName;// 经过此车站的铁路线名称
} views[SIZE_view];
struct line_info //铁路线信息结构
{
int Lid;
char LName;
int start_id; //始发站id
int end_id; //终点站id
int dist; //铁路线长度
int sign;//通行标志
}lines[SIZE_line];
struct way_info //铁路度的信息结构
{
int station1;
int station2;
int dist;
}ways[SIZE_way];
struct path_info //用于最短路径的查询
{
int count;
int path[SIZE_view];
};
int view_count,line_count,way_count;//用来存储文件中有多少条记录
void readviews()
{
int i;
ifstream infile(“views.txt“,ios::in); //打开文件
infile 》》view_count ; //把文件中的记录赋值给view_count
if(!infile) //打开文件失败
{
cerr《《“open error!“《《endl;
exit(1);
}
//infile》》view_count; // 先读入文件个数
for(i=0;i《view_count;i++)
{
infile》》views[i].id》》views[i].name》》views[i].code》》views[i].shortname》》views[i].LName;
}
//view_count=i;//给出原文件中车站的个数
infile.close();
cout《《“ “《《“id“《《“ “《《“name“《《“ “《《“code“《《“ “《《“shortname“《《“ “《《“LName“《《endl;
for(i=0;i《view_count;i++)
cout《《“ “《《views[i].id《《“ “《《views[i].name《《“ “《《views[i].code
《《“ “《《views[i].shortname《《“ “《《views[i].LName《《endl;
}
void readways() //读文件ways.txt
{
int i;
ifstream infile(“ways.txt“,ios::in); //打开文件
infile》》way_count; ////把文件中的记录赋值给way_count
if(!infile) //打开文件失败
{
cerr《《“open error!“《《endl;
exit(1);
}
for(i=0;i《way_count;i++)
infile》》ways[i].station1》》ways[i].station2》》ways[i].dist;
infile.close();
//测试用,输出路段的信息
cout《《“ “《《“station1“《《“ “《《“station2“《《“ “《《“dist“《《endl;
for(i=0;i《way_count;i++)
cout《《“ “《《ways[i].station1《《“ “《《ways[i].station2《《“ “《《ways[i].dist《《endl ;
}
void readlines() //读文件lines.txt
{
int i;
ifstream infile(“lines.txt“,ios::in); //打开文件
infile》》line_count; //把文件中的记录赋值给line_count
if(!infile) //打开文件失败
{
cerr《《“open error!“《《endl;
exit(1);
}
for(i=0;i《line_count;i++)
infile》》lines[i].Lid》》lines[i].LName》》lines[i].start_id》》lines[i].end_id》》lines[i].dist》》lines[i].sign;
infile.close();
/*
cout《《“ “《《“Lid“《《“ “《《“LName“《《“ “《《“start_id“《《“ “《《“end_id“《《“ “《《“dist“《《“ “《《“sign“《《endl;
for(i=0;i《view_count;i++)
cout《《“ “《《lines[i].Lid《《“ “《《lines[i].LName《《“ “《《lines[i].start_id
《《“ “《《lines[i].end_id《《“ “《《lines[i].dist《《“ “《《lines[i].sign《《endl;
*/ //这里是输出文件中的信息
}
void search () //查询车站信息(所在的铁路线)
{
cout《《“please enter the station name:“;
char sta_name;
cin》》sta_name; //输入要查询的名字
cout《《endl;
ifstream infile(“views.txt “,ios::in); //读文件
infile 》》view_count ; //读出文件记录的个数
if(!infile) //打开文件失败
{
cerr《《“open error!“《《endl;
exit(1);
}
int i,mark;
for(i=0;i《view_count;i++)
infile》》views[i].id》》views[i].name》》views[i].code》》views[i].shortname》》views[i].LName;
infile.close();
for(i=0;i《 view_count;i++)
{
if(strcmp(sta_name,views [i].name)==0) //找到车站
{
cout《《“the station’s informations is:\n“《《endl;
cout《《“ “《《“id“《《“ “《《“name“《《“ “《《“code“《《“ “《《“shortname“《《“ “《《“LName“《《endl;
cout《《“ “《《views[i].id《《“ “《《 views[i].name《《“ “《《 views [i].code
《《“ “《《 views [i].shortname《《“ “《《 views [i].LName 《《endl;
break;
}
mark=i;
}
if(mark==( view_count -1)) //若没有找到,输出提示
{
cout《《“sorry,the station is not in here“《《endl;
}
}
void addview()
{
cout《《“please enter the new view’s informations:“《《endl; //输入新车站信息
cout《《“id:“;
cin》》views[view_count].id;
cout《《“name:“;
cin》》views[view_count].name;
cout《《“code:“;
cin》》views[view_count].code;
cout《《“shortname:“;
cin》》views[view_count].shortname;
cout《《“LName:“;
cin》》views[view_count].LName;
ofstream outfile(“views.txt“,ios::app); //打开views文件,并且写入数据
outfile《《view_count《《endl;
if(!outfile) //文件打开失败
{
cerr《《“open error!“《《endl;
exit(1);
}
outfile《《views[view_count].id《《“ “《《views[view_count].name《《“ “《《views[view_count].code
《《“ “ 《《views[view_count].shortname《《“ “《《views[view_count].LName《《endl;
//在文件末尾添加
view_count=view_count+1;
outfile.close(); //关闭文件
cout《《“successfully! the new station is added“《《endl;
cout《《“now station number is:“《《view_count《《endl;
}
void addway()
{
cout《《“please enter the new way’s informations:“《《endl; //输入新车站信息
cout《《“station1:“;
cin》》ways[way_count].station1; // station1的id
cout《《“station2:“;
cin》》ways[way_count].station2; //station2的id
cout《《“dist:“;
cin》》ways[way_count].dist; //路段的长度
ofstream outfile(“ways.txt“,ios::app); //打开way.txt文件
outfile《《way_count《《endl;
if(!outfile) //文件打开失败
{
cerr《《“open error!“《《endl;
exit(1);
}
outfile《《ways[way_count].station1《《“ “《《ways[way_count].station2《《“ “《《ways[way_count].dist;
//在文件末尾添加
outfile.close(); //关闭文件
cout《《“successfully! the new station is added“《《endl;
way_count=way_count+1;
cout《《“now station number is:“《《view_count《《endl;
}
void addline()
{
cout《《“please enter the new line’s informations:“《《endl; //输入新铁路线信息
cout《《“Lid:“;
cin》》lines[line_count].Lid;
cout《《“LName:“;
cin》》lines[line_count].LName;
cout《《“start_id:“;
cin》》lines[line_count].start_id;
cout《《“end_id:“;
cin》》lines[line_count].end_id;
cout《《“dist:“;
cin》》lines[line_count].dist;
cout《《“sign:“;
cin》》lines[line_count].sign;
ofstream outfile(“lines.txt“,ios::app); //打开文件
outfile 《《line_count 《《 endl;
if(!outfile) //文件打开失败
{
cerr《《“open error!“《《endl;
exit(1);
}
outfile《《lines[line_count].Lid《《“ “《《lines[line_count].LName《《“ “《《lines[line_count].start_id
《《“ “ 《《lines[line_count].end_id《《“ “《《lines[line_count].dist《《lines[line_count].sign《《endl;
//在文件末尾添加
outfile.close(); //关闭文件
cout《《“successfully! the new line is added“《《endl;
line_count=line_count+1;
cout《《“now line number is:“《《line_count《《endl;
}
//-----------------------------------------------------------------------------------
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_info path_list[SIZE_view][SIZE_view]; //定义了一个path_info结构的变量,包含着count和path用来存储经过的路径
for(i=1;i《=view_count;i++) //这里开始读文件,先让所有的线都为最大值
for(j=1;j《=view_count;j++)
dist_list[i][j]=MAXCOST;
for(int t=0;t《=way_count;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《 view_count; i++)
{
for (j= 0; j《view_count; 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《 way_count; 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 = i;
path_list[i][j].path = j;
break;
}
}
}
}
for (k = 0; k《= view_count-1; k++)
{
for (i = 0; i 《 view_count; i++)
for (j = 0; j《 view_count; 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][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][k].count; m++)
path_list[i][j].path[m] = path_list[i][k].path[m];
for (m = 0; m 《 path_list[k][j].count; m++)
path_list[i][j].path[m+path_list[i][k].count] = path_list[k][j].path[m+1];
}
}
}
cout《《“ Floyed table:\n“;
cout《《“ All views in the school:\n“;
for (i = 0; i 《 view_count-1; i++)
cout《《“ “《《i+1《《“:“《《views[i].name《《endl;
cout《《“ Please input the start number: “;
cin》》start_num;
cout《《“ Please input the end number: “;
cin》》end_num;
cout《《endl《《endl;
cout《《“From“《《views[start_num-1].name《《“to“《《views[end_num-1].name;
if (dist_list[start_num][end_num] == -1)
cout《《“no way.“《《endl;
else
{
cout《《“distance is “《《dist_list[start_num][end_num]《《“, and path is :“;//dist_list用来表示两点间的长度
k = path_list[start_num][end_num].path-1; //path_list用来保存路径path[m]在这里表明是通过的那个车站的
cout《《views[k].name;
for (m = 1; m 《 path_list[start_num][end_num].count; m++)
{
k = path_list[start_num][end_num].path[m]-1; //这里应该也是int型,k是经过的路径的id
cout《《“-》“《《views[k].name;
}
}
cout《《endl《《endl;
}
void main()
{
readviews();
readlines() ;
readways();
while(1)
{
int menu;
cout《《endl《《endl《《endl《《endl;
cout《《“ 全国铁路运输网最佳经由系统 “《《endl;
cout《《“**********************************************************“《《endl;
cout《《“ 1:增加车站信息 “《《endl;
cout《《“ 2:增加铁路线信息 “《《endl;
cout《《“ 3:查询车站信息 “《《endl;
cout《《“ 4:查询最短路径 “《《endl;
cout《《“ 5:退出界面 “《《endl;
cout《《“**********************************************************“《《endl;
cout《《“输入要进行的操作的代码(1--5):“《《endl;
cin》》menu;
while(menu《1||menu》5)
{
cout《《“error!please enter again:“;
cin》》menu;
}
switch(menu)
{
case 1:
while(1)
{
addview();
while (1)
{
addway();
cout《《“do you want to continue (y/n) “《《endl;
char con ;
cin》》con;
if(con==’y’)
addway();
else
break;
}
cout《《“do you want to continue (y/n) “《《endl;
char con ;
cin》》con;
if(con==’y’)
addview();
else
break;
}
break;
case 2:
while(1)
{
addline();
cout《《“do you want to continue (y/n) “《《endl;
char con ;
cin》》con;
if(con==’y’)
addline();
else
break;
}
break;
case 3:
while(1)
{
search ();
cout《《“do you want to continue (y/n) “《《endl;
char con ;
cin》》con;
if(con==’y’)
search ();
else
break;
}
break;
case 4:
while(1)
{
floyed();
cout《《“do you want to continue (y/n) “《《endl;
char con ;
cin》》con;
if(con==’y’)
floyed();
else
break;
}
break;
case 5:
{
cout《《“谢谢使用,再见!“《《endl;
exit(1);
}
}
}
}

更多文章:
turtles歌曲(哪位大神有turtles(乌龟组合)的<谢谢>的歌词中文翻译 感激不尽)
2026年10月11日 10:00
金山铁路22号线(请问现在轨道交通22号线金山铁路是个什么情况据说9月28日就开通了啊~~~)
2026年10月11日 09:10
repercussions(都是余波,repercussions和aftermath有什么区别啊)
2026年10月11日 09:00
dropdownlist 绑定(DropDownList 绑定所有项 并 显示指定项)
2026年10月11日 08:50
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40





