第一篇:车站售票管理系统数据库课设
中文摘要
本文针对车站的售票实际情况,按照软件工程的结构化设计思想,经过项目的需求分析、概要设计、详细设计,以及编码实现和调试等步骤设计开发了车站售票系统。并运用E-R图和数据库逻辑结构、系统流程图、以及程序流程图,对该系统的数据需求、数据库、系统软件结构、系统流程、以及处理过程等进行了分析和设计。
工具软件利用VS2012开发工具和SQL Server 2012数据库来开发这个车站售票管理系统。该系统要解决的是车站售票工作所要解决的问题,可以满足车站售票的基本要求,包括票务管理、查询、报表打印、车次管理、账户管理、修改密码等六个方面的功能。该系统能运用到车站售票的工作中,根据用户的需求,设置其权限,并快捷方便的为用户提供服务。
目录 引言...........................................................................1 2概要设计....................................................................2
2.1.系统需求分析...................................................2 2.2.系统结构设计...................................................4 2.3.功能模块设计...................................................4 3 详细设计...................................................................8
3.1系统数据库设计...............................................8
3.1.1概念结构设计.........................................8 3.1.2逻辑结构设计.........................................8 3.2系统主要功能模块设计................................12 3.3各模块的主要算法对应的原代码................15 4 调试与运行结果及存在的主要问题.....................37 5课程设计小结..........................................................60 6 参考文献.................................................................61 引言
课程设计的目的:按照关系型数据库的基本原理,综合运用所学的基本知识,以小组为单位,设计开发一个小型的管理信息系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力,另一方面,使学生能深入理解和灵活掌握教学内容。
课程设计的要求:考察市长途汽车站、火车站售票业务,设计车站售票管理系统。要求:
①具有方便、快速的售票功能,包括车票的预订和退票功能,能够支持团体的预订票和退票。
②能准确地了解售票情况,提供多种查询和统计功能,如车次的查询、时刻表的查询等;
③能按情况所需实现对车次的更改、票价的变动及调度功能;
④完善的报表系统;
⑤具备一定的维护功能,如数据安全管理(含备份与恢复)、操作员管理、权限设置等;
该系统的开发环境为 vs2012 和sql server 2012 ,是基于c#以及sql server 数据库开发的一个车站售票管理系统。
我们小组有我以及同班同学严鑫剑,分工为:严鑫剑负责开发用户登录、票务管理、查询三个子模块,本人负责开发车次管理、账户管理、修改密码三个子模块。另外因为不知道如何具体在c#环境下运用触发器以及报表打印,所以系统中用到的触发器以及报表打印功能是我们两个共同完成的。
2概要设计
2.1.系统需求分析
本系统是严鑫剑与司房昭同学共同开发的,集车站售票退票,线路查询修改,车次管理,报表打印,账户管理等功能为一体的应用软件。车站售票管理系统,为车站快速便捷售票提供了一个较好的解决方案。
本系统具有以下功能:
1.具有方便、快速的售票功能,包括车票的预订和退票功能,能够支持团体的预订票和退票。
2.能准确地了解售票情况,提供多种查询和统计功能,如车次的查询、时刻表的查询等。
3.能按情况所需实现对车次的更改、票价的变动及调度功能。
4.完善的报表系统。
5.具备一定的维护功能,如数据安全管理(含备份与恢复)、操作员管理、权限设置等。
在开发过程中,按照软件工程的步骤,从设计到开发采用了面向对象的思想和技术,采用了SQL SERVER 2012数据库,使得本系统可以方便的和其他子系统进行数据交换。同时,注意从软件的图形应用界面上优化软件质量,使得本系统具有很强的可操作性。
1.开发的系统的一般描述
车站售票管理系统采用C/S体系结构,结合车站的实际需要,对票务管理和线路、车次信息进行高效有序的管理,提供丰富的管理和分析功能,用户界面友好,能满足车站售票管理的软件,提高车站工作效率。
本系统旨在车站管理人员与售票人员工作更加方便,以减轻工作人员的负担。快速的对信息进行管理,输入,输出,查找,修改,删除的操作,是大量的工作更加的具体化,直观化,合理化。
2.产品功能
开发的系统软件具有数据的更新,借阅的判定,数据的管理等功能。
3.用户特点
本软件的使用对象是车站管理员与售票员。可以方便的利用该软件进行车站售票的各种操作。
4.一般约束
(1)本系统作为C/S结构的一个应用系统,不可避免的要受到C/S结构的约束。在其实施的各个阶段都要服从它的一些规划,包括功能设计、系统配置和计划。
(2)硬件环境。
Intel Pentium 166MHz或以上;
内存:需要至少512MHZ;
网络容量:少于50人需16Mb/s的令版环网和10Mb/s可以勉强满足要求,建议100Mb/s的以太网或者更高。
设备需求:打印机。(3)软件环境
运行于Windows7及更高版本的操作系统之上。SQL Server2012数据库。5.假设和依据
本系统要求具有较高的可靠性和保密性。对于不同的用户给予不同的权限,对于各个用户的信息要安全稳定的存储。
本系统开发的时间为:2012年12月20日至2013年01月02日。
2.2.系统结构设计
本系统主要由六个模块构成分别为:用户登录,票务管理,查询,报表打印,修改密码,车次管理,账户管理。通过这个六个模块,可以实现对车票的出售与退订,车次的查询、修改、增加与删除,线路的查询、修改,增加与删除,用户信息修改等等。通过这下功能在本系统的实现,系统的使用者可以相当方便的对售票进行方便的管理。在权限方面,分为管理员与售票员,功能区分,管理效率提高。
车站售票管理系统结构图
车站售票管理系统票务管理查询功能报表打印修改密码车次管理账户管理用户登录购票功能退票功能团体购票团体退票车次查询线路查询打印设置页面设置打印预览打印功能修改车次修改票价车次录入车次删除账户添加账户修改账户删除
2.3.功能模块设计
本系统通过各个模块与数据库之间的调用,实现了售票管理所需的各个功能,方便使用。1.登录模块
鉴于车站售票的实际情况,对于本系统的使用者,设置为管理员与售票员两种,方便管理。系统管理员能享有查询,报表打印,修改用户密码,车次管理,账户管理五种功能。而售票员可以进行票务管理,查询,报表打印,修改密码四种操作。对于不同的用户,给予不同的权限,享有不同的操作。
2.票务管理
这是售票员用户特有的操作模块,主要负责车站的售票退票工作。为了满足人们购票需要,加入了团体购票与团体退票功能。
在售票过程中,首先要进行条件查询。在本系统中,则是依据出发站与到达站为查询依据,并显示查询结果。出入要乘坐的车次,选择购票。对于车票不足的车次则不能购买。在购买车票时,如选择的座位已售出,能提示不能购买,选择其他座位。选择正确的座位,则购票成功。
对于团体购票,同样的需要先进行查询,输入乘坐车次,对于车票,座位的各种情况给予判断,首先保证剩余的车票数量不小于售票数量才能进行团体售票。在进行团体售票的座位选择时,加入了一个循环,在完成团体订票以前,对于座位情况一直给予判定,直至车票购买完毕,循环结束。
退票功能首先需要查询车票所属车次,查询成功后,弹出输入座位号界面窗口,输入已经购买过的座位号,选择退票,则会成功退票。对于退票中的车次信息,座位信息都演进行判定,对于不存在的信息要给予提示,方面操作。
在使用团体退票功能时,也是需要输入所属车次,不同的是还需输入需要退票的数量,用来做循环。成功判定退票后,依次输入退票的座位号,直至退票完毕。在输入退票座位号是,如果未完成全部退票,就中断了操作,指挥进行已经输入座位号的退票操作,对于未输入的不会有影响,对剩余票数也是正常显示。
3.查询操作
在本系统中,包括了两种查询。一种为车次查询。输入正确 的车次,则会在Datagridview显示出关于本车次的详细信息,包括车次,始发站,终点站,价格,余票,限载人数具体信息,方便操作人员进行其他操作。另一种线路查询则需要输入起始站与终点站,则会出现所有这个路线所以车次的详细信息。对于不正确的信息都要给予错误报告。
4.报表打印 5.修改密码
为了保证用户的安全系,以及管理员的权限操作,可以进行密码修改。在修改时,需要输入用户名及其次用户的原密码才能进行密码修改操作。对于用户名不存在或密码错误都要进行报错。再确认新密码后可以修改成功。
6.车次管理
此模块为管理员特有模块,是为了可以是管理员根据实际情况对车次,票价进行改动,便于车站的系统管理。
鉴于管理员可能需要更改某个车次的路线,特加入了车次修改功能方便其操作。输入需要修改的车次,以及实际的始发站及终点站,如果车次存在,即可完成修改。对于不正常的输入要给予提示。
根据实际情况,车票价格不可能是一成不变的,所以加入改动票价功能是十分必要的,输入始发站与终点站和需要修改成的价格。如果输入的这条线路存在,则按照你输入的价格进行修改。如果输入线路不存在,则给予提示。
车次录入功能则是管理员管理车次最重要的一个功能,输入车次号,始发站,终点站,发车时间,价格,限载人数。如果输入数据没有问题则可以完成录入操作。
车次删除功能是为了管理员删除那些无用的车次信息而设定的操作。输入需要删除的车次,如果数据库信息里有输入的车次,则完成删除信息,如没有,则给予提示。
7.账户管理
此功能也是管理员特有操作。为了保证系统的安全性,以及 系统操作员权限的区分,此功能可以用来添加和删除用户,也可以修改账户的权限。对系统的安全性有所改善。
系统处理流程图
账户修改确认修改登录选择权限账户管理选择管理项账户添加录入修改账户删除用户名与密码判定口令文件修改成功或失败输入数据选择车票确认登陆个人售票团体售票车次查询票务管理功能选择查询选择查询条件车次、线路信息个人退票团体退票密码修改输入数据线路查询选择车票输入用户名密码车次管理录入修改口令文件判定用户车次修改改动票价车次录入车次删除数据显示修改成功或失败信息管理修改成功或失败口令文件 详细设计
3.1系统数据库设计
3.1.1概念结构设计
根据需求分析,E-R图表示的概念模型如下:
E-R图
3.1.2逻辑结构设计
由E-R图转换成为的关系模型如下: 用户表(用户名,密码,身份类型)
车次信息表(车次编号,起始站,终点站,出发时间,票价,余票,限载人数)
车票信息表(车次编号,座位号)用户表主码为用户名,每一个非主属性既不部分依赖于码,也不传递依赖于码,所以符合3NF。
车次信息表主码为车次编号,每一个非主属性既不部分依赖于码,也不传递依赖于码,所以符合3NF。
车票信息表主码为车次编号和座位号,每一个非主属性既不部分依赖于码,也不传递依赖于码,所以符合3NF。
按以上关系模式在sql server 2012中建立的表,如下所示:
用户信息表
车次信息表
车票信息表 建立外码,保持参照完整性。
Trainno表中的trainno 为主码,ticket表中seat,trainno 为主码,所以trainno 为ticket表的外码。
为了让ticket表中座位号更加规范化,所以添加check约束。
输入表达式为:(seat between ‘1’ and ‘99’)
触发器的应用:
为了更好的同步车票余票信息,为ticket表建立触发器gengxingjian,每当ticket表插入数据时,对应的车次余票减1。触发器gengxinjia每当有数据删除时,对于车次余票加1。建立gengxinjian触发器: Select *from ticket GO Create trigger gengxinjian on ticket after insert as begin
declare @trainno nvarchar(10);select @trainno=trainno from inserted
update Trainno set lastticket=lastticket-1 where trainno=@trainno end
建立gengxinjia触发器: Select*from ticket Go Create trigger gengxinjia on ticket after delete as begin
declare @trainno nvarchar(10);select @trainno=trainno from deleted
update Trainno set lastticket=lastticket+1 where trainno=@trainno end
3.2系统主要功能模块设计
对于本系统的使用者,设置为管理员与售票员两种,方便管理。系统管理员能享有查询,报表打印,修改用户密码,车次管理,账户管理五种功能。而售票员可以进行票务管理,查询,报表打印,修改密码四种操作。
登录模块流程图
登陆界面输入用户名密码选择用户类型管理员帐户售票员账户数据库判定用户名密码有误登陆成功
这是售票员用户特有的操作模块,主要负责车站的售票退票工作。为了满足人们购票需要,加入了团体购票与团体退票功能。
票务管理流程图
票务管理售票团体售票退票团体退票输入始发终点站输入退票车次退票车次票数显示车次输入座位号选择车次选择车次票数输入座位号判断座位存在判断座位空闲出售成功出退票成功
在本系统中,包括了两种查询。一种为车次查询。输入正确的车次,另一种线路查询则需要输入起始站与终点站。对于不正确的信息都要给予错误报告。
查询流程图
查询功能车次查询线路查询输入查询车次输入起始终点站判断是否存在判断线路存在显示车次显示所有车次 在修改时,需要输入用户名及其次用户的原密码才能进行密码修改操作。对于用户名不存在或密码错误都要进行报错。再确认新密码后可以修改成功。
修改密码流程图
修改密码输入用户名,原密码,新密码判断用户是否存在提示输入信息有误修改成功
此模块为管理员特有模块,包括车次修改,票价改动,车次删除,车次录入四个功能,方便管理员操作。
车次管理流程图
车次管理车次修改改动票价车次录入车次删除输入需要改动车次的新始发站终点站输入改动的始发站终点站及新票价输入新车次的各种详细信息输入需要删除的车次判断是否存在车次判断是否存在路线录入成功判断是否存在车次修改成功修改成功删除成功 此功能也是管理员特有操作,可以用来添加和删除用户,也可以修改账户的权限。对系统的安全性有所改善。
用户管理流程图
账户管理账户修改账户添加账户删除输入用户名输入用户名密码输入删除用户名选择用户类型选择用户类型判断用户存在判断用户存在完成添加完成删除完成修改
3.3各模块的主要算法对应的原代码
在系统原代码中含有大量的数据库连接,和关闭的代码,过于重复,故有时候会省略此部分代码。
1.登录模块
登录模块的主要算法是:把输入的数据与数据库中存放用户信息的用户表进行比对,如果一致,则登陆成功。登录功能主要的源代码为:
string sql = “select * from Login where username='” + textBox1.Text + “' and password='” + textBox2.Text + “'and type='”+ comboBox1.Text+“'”;try
{ DataSet ds = new sqlConnect().Getds(sql);if(ds.Tables[0].Rows.Count > 0){ string usertype;usertype = ds.Tables[0].Rows[0][2].ToString();MessageBox.Show(“登陆成功”, “登录”, MessageBoxButtons.OK, MessageBoxIcon.Information);Main main = new Main();main.Show();if(usertype == “售票员”){ main.account.Enabled = false;} if(usertype == “管理员”){ main.piaowu.Enabled = false;}
this.Hide();} else { MessageBox.Show(“用户名或密码错误,请重新输入!”, “登录”, MessageBoxButtons.OKCancel, MessageBoxIcon.Information);this.textBox1.Clear();this.textBox2.Clear();this.textBox1.Focus();} } main.trainmanagement.Enabled = false;2.查询模块
查询的算法就是把用户输入的数据当作查询条件,从数据库里面查询出相关信息。思路是一样的,所以在此写其中的线路查询源代码:
string sql = “ select trainno as 车次, starttime as 发车 时间 , price as 价格 , lastticket as 余票, number as 限载人数 from Trainno where 1=1”;DataSet ds = new DataSet();SqlDataAdapter da;SqlConnection conn = new SqlConnection(“Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;”);if(textBox2.Text.Equals(“")&& textBox3.Text.Equals(”“)){ MessageBox.Show(”请输入始发站或者终点站“);} else { try { if((textBox2.Text.Trim().Equals(”“))==false)sql +=”and start='“+textBox2.Text.Trim()+”'“;if((textBox3.Text.Trim().Equals(”“))== false)sql += ”and finish='“ + textBox3.Text.Trim()+ ”'“;
SqlCommand comm = new SqlCommand(sql, conn);da = new SqlDataAdapter(comm);da.Fill(ds);dataGridView2.DataSource = ds.Tables[0];} catch { MessageBox.Show(”查询信息失败!“);} finally { conn.Close();} } }
3.票务管理
票务管理的算法主要分为购票和退票两个主要的算法。购票算法中首先需要根据始发站与终点站,查询出可以到达的车次,再根据购票者的选择选择车次,再选择座位,至此购票完成。购票的算法: 1.查询的代码:
string sql = ” select trainno as 车次, starttime as 发车时间 , price as 价格 , lastticket as 余票, number as 限载人数 from Trainno where start='“ + textBox1.Text.Trim()+ ”' and finish='“ + textBox2.Text.Trim()+ ”'“;DataSet ds = new DataSet();SqlDataAdapter da;SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);if
(textBox1.Text.Equals(”“)||textBox2.Text.Equals(”“)){ MessageBox.Show(”请输入起始站和终点站“);} else { try
{ SqlCommand comm = new SqlCommand(sql, conn);da = new SqlDataAdapter(comm);da.Fill(ds);dataGridView1.DataSource = ds.Tables[0];} catch { MessageBox.Show(”查询信息失败!“);} finally { conn.Close();} } 2.接下来输入车次,如果是团体购票还需要输入数量,选择购买的时候,检查一下选择的车次余票是否大于或者等于需要购买的数量,如果输入的车次无效或者票数不足,应当进行提示。代码如下:
if((textBox7.Text.Trim().Equals(”“)|| textBox8.Text.Trim().Equals(”“))== false){ Int32 nu;object isnull;SqlConnection connnn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sqll = ” select lastticket from Trainno where trainno='“ + textBox7.Text.Trim()+ ”'“;SqlCommand cmddd;try { connnn.Open();cmddd = new SqlCommand(sqll, connnn);isnull =(object)cmddd.ExecuteScalar();nu = Convert.ToInt32(isnull);} finally { connnn.Close();} string num = textBox8.Text.Trim();Int32 temp = Convert.ToInt32(num);if(nu >= temp&& isnull!=null){ try { try {
MessageBox.Show(”选择班次成功,请选择座位!“);tuanmai tm = new
tuanmai(this.textBox7.Text.Trim(), textBox8.Text.Trim());tm.Show();} catch { MessageBox.Show(”购票失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} } catch { MessageBox.Show(”购票失败!“);} } else { MessageBox.Show(”购票失败,票数不足!或者输入车次错误,不存在此车次!“);} } else { MessageBox.Show(”未输入班次或者票的数量,购票失败!请重新输入!“);} 3.接下来是选座位,选择座位的时候,系统会显示该车次已经售出的票的座位号。如果用户输入的座位号大于限载量,或者小于0,或者已经售出,应当给出相关提示信息。如果座位号合法有 效,可以购买。则购买成功。购买成功后,在这里我们用到了上课学习到的触发器,每购买一张票成功,将售票的车次的余票数量减1。并且如果是团体购票,如果团体购票成功,将选择座位窗体关闭,防止无限买票。保证系统的正常运行。源代码如下: 选择座位:
SqlConnection connn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sqll = ” select * from ticket where trainno='“ + checi + ”' and seat='“ + textBox1.Text.Trim()+ ”'“;SqlCommand cmdd;try { connn.Open();cmdd = new SqlCommand(sqll, connn);number =(object)cmdd.ExecuteScalar();
} finally { connn.Close();}
if(number == null){ try {
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” insert into ticket(trainno,seat)values('“ + checi + ”','“ + textBox1.Text.Trim()+ ”')“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);cmd.ExecuteNonQuery();MessageBox.Show(”选择座位成功,购买成功!“);count++;if(count == amount){ MessageBox.Show(”购票完成!“);this.Close();}
} catch { MessageBox.Show(”选择座位失败,购买失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { conn.Close();}
} catch { MessageBox.Show(”选择座位失败,购买失败!“);} } else { MessageBox.Show(”选择座位失败,该座位已经卖出!“);} } else { MessageBox.Show(”座位号超出限载量,请重新输入座位号!“);textBox1.Clear();}
触发器的使用:在ticket表建立触发器,每当有数据插入表中,就更新相应车的的余票数量。触发器的代码为:
USE [ticket] GO
/****** Object: Trigger [dbo].[gengxinjian] Script Date: 2013/1/3 16:47:16 ******/ SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO
ALTER trigger [dbo].[gengxinjian] on [dbo].[ticket] after insert as begin
declare @trainno nvarchar(10);select @trainno=trainno from inserted
update Trainno set lastticket=lastticket-1 where trainno=@trainno end
2.退票的算法
首先输入需要退票的车次,如果是团体退票还需要输入退票速来。如果车次无效,应该给出提示信息。如果有效,则输入退票的座位号。如果输入的座位号不合法,如次座位未售出,超出限载量等,应当给出相关提示信息。如果合法,则将其从车票信 息表中删除。退票的时候,我们也使用到了触发器,每当有信息从车票信息表中删除,就更新相应的车次的余票。源代码如下:
int zuowei = Convert.ToInt32(textBox1.Text.Trim());int shuliang;SqlConnection con = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sqlll = ” select number from Trainno where trainno='“ + checi + ”'“;SqlCommand cmddd;try { con.Open();cmddd = new SqlCommand(sqlll, con);shuliang =(int)cmddd.ExecuteScalar();} finally { con.Close();} if(zuowei > 0 && zuowei <= shuliang){ object number;SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” select * from ticket where trainno='“ + checi + ”' and seat='“ + textBox1.Text.Trim()+ ”'“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);number =(object)cmd.ExecuteScalar();} finally { conn.Close();} if(number!= null){ SqlConnection connn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sqll = ” delete from ticket where trainno='“ + checi + ”' and seat='“ + textBox1.Text.Trim()+ ”'“;SqlCommand cmdd;try { connn.Open();cmdd = new SqlCommand(sqll, connn);cmdd.ExecuteNonQuery();MessageBox.Show(”退票成功!“);count++;if(count == amount){ MessageBox.Show(”退票完成!“);this.Close();} } catch { MessageBox.Show(”退票失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { connn.Close();} } else { MessageBox.Show(”该车次尚未出售此座位,请重新输入!“);} } else { MessageBox.Show(”座位号超出限载量,请重新输入座位号!“);textBox1.Clear();} 触发器的代码:
USE [ticket] GO
/****** Object: Trigger [dbo].[gengxingjia] Script Date: 2013/1/3 16:46:31 ******/ SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO
ALTER trigger [dbo].[gengxingjia] on [dbo].[ticket] after delete as begin
declare @trainno nvarchar(10);select @trainno=trainno from deleted
update Trainno set lastticket=lastticket+1 where trainno=@trainno end 4.报表打印
查询相关信息,然后再加上打印功能,完成了报表打印的功能。因为之前有连接数据库,查询相关信息的代码。在这里以后,不在重复写此类相关代码,只写相关关键性代码。查询相关源代码:
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ”select trainno as 车次, start as 始发站, finish as 终点站,starttime as 发车时间, price as 价格,(number-lastticket)*price as 当次班车所售出票的总价 from Trainno Where trainno like '“ + textBox1.Text + ”%'“;SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);DataSet da = new DataSet();adapter.Fill(da);dataGridView1.DataSource = da.Tables[0].DefaultView;5.修改密码
修改密码的算法:根据输入的信息,与数据库中的数据,进行校验。如果正确,则修改密码。如果不正确,则给出相关提示信息。相关源代码:
object isnull;SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);SqlCommand cmd;string updatestr;updatestr = ”update login set password = '“ + textBox3.Text + ”' where username = '“ + textBox1.Text + ”' and password ='“ + textBox2.Text + ”'“;if(this.textBox3.Text.Equals(this.textBox4.Text)){ try { conn.Open();cmd = new SqlCommand(updatestr, conn);isnull= cmd.ExecuteScalar();if(isnull!= null){ MessageBox.Show(”密码修改成功!“, ”密码修改“, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();} else { MessageBox.Show(”密码修改失败,输入了无效的用户名,请重新输入!“);} } catch { MessageBox.Show(”密码修改失败,原密码输入错误!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { conn.Close();} }
else { MessageBox.Show(”两次输入的新密码不一致!“, ”错误“, MessageBoxButtons.OK, MessageBoxIcon.Warning);this.textBox3.Clear();this.textBox4.Clear();} 6.车次管理
车次管理包括车次修改、车次录入、车次删除、票价修改。1.车次修改的算法:
输入车次编号,以及修改的相关信息。如果车次编号无效,要给出相关的提示信息。关键性源代码如下:
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” update Trainno set start='“ + textBox2.Text.Trim()+ ”', finish='“ + textBox3.Text.Trim()+ ”'where trainno='“ + textBox1.Text.Trim()+ ”'“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);isnull = cmd.ExecuteNonQuery();if(isnull == 1)
MessageBox.Show(”车次更改成功!“);else { MessageBox.Show(”车次更改失败,输入了无效的车次,请重新输入!“);} 2.车次录入
输入车次录入的相关信息,系统进行校验,如果合法则添加到数据库。关键性源代码:
try {
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” insert into Trainno(trainno,start,finish,starttime,price,lastticket,number)values('“ + textBox7.Text.Trim()+ ”','“ + textBox8.Text.Trim()+ ”','“ + textBox9.Text.Trim()+ ”','“ + textBox10.Text.Trim()+ ”','“ + textBox11.Text.Trim()+ ”','“ + textBox12.Text.Trim()+ ”','“ + textBox12.Text.Trim()+ ”')“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);cmd.ExecuteNonQuery();MessageBox.Show(”录入成功!“);textBox7.Clear();textBox8.Clear();textBox9.Clear();textBox10.Clear();textBox11.Clear();textBox12.Clear();} catch { MessageBox.Show(”录入失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { conn.Close();} } catch { MessageBox.Show(”录入失败!“);} 3.车次删除
根据输入的车次信息,系统进行校验,如果存在,则删除成功。如果不存在,给出提示信息,输入了无效信息。关键性源代码:
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” delete from Trainno where trainno='“ + textBox13.Text.Trim()+ ”'“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);isnull = cmd.ExecuteNonQuery();if(isnull == 1){ MessageBox.Show(”删除车次成功!“);textBox1.Clear();} else { MessageBox.Show(”删除失败,输入了无效的车次号“);} 4.票价修改
票价修改的算法:根据输入的信息,系统校验,看是否存在该线路。如果存在,进行票价修改。给出修改成功信息,否则错误提示信息。关键性源代码:
try {
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” update Trainno set price='“ + textBox6.Text.Trim()+ ”' where start='“ + textBox4.Text.Trim()+ ”'and finish='“ + textBox5.Text.Trim()+ ”'“;SqlCommand cmd;try
{ conn.Open();cmd = new SqlCommand(sql, conn);isnull = cmd.ExecuteNonQuery();if(isnull == 1)MessageBox.Show(”改价成功!“);else
MessageBox.Show(”输入起始站或者终点站有误,不存在此线路!“);
} catch { MessageBox.Show(”改价失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { conn.Close();}
} catch { MessageBox.Show(”改价失败!“);} 7.账户管理
账户管理包括账户修改、账户添加、账户删除。1.账户修改
根据输入的账户信息,进行系统校验。如果存在则修改账户 信息,否则给出失败提示信息。关键性源代码:
int isnull;if(textBox1.Text.Equals(”“)||
comboBox1.Text.Equals(”“)){ MessageBox.Show(”请输入需要修改的的帐户信息“);} else { try { SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” update login set type='“ + comboBox1.Text.Trim()+ ”' where username='“ + textBox1.Text.Trim()+ ”'“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);isnull = cmd.ExecuteNonQuery();if(isnull ==1){ MessageBox.Show(”修改成功!“);textBox1.Clear();} else { MessageBox.Show(”修改失败,输入了无效的帐户“);} } catch { MessageBox.Show(”修改失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);}
finally { conn.Close();}
} catch { MessageBox.Show(”修改失败!“);} } 2.账户添加
根据输入的相关信息,系统进行校验,如果不存在同名的用户,则进行添加。否则给出相关错误提示信息。关键性源代码:
if(textBox3.Text.Equals(”“)|| textBox2.Text.Equals(”“)||comboBox2.Text.Equals(”“)){ MessageBox.Show(”请输入需要添加的的帐户信息“);} else { try {
SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);string sql = ” insert into login(username,password,type)values('“ + textBox1.Text.Trim()+”','“+textBox2.Text.Trim()+”','“+comboBox2.Text.Trim()+”')“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();MessageBox.Show(”添加帐户成功!“);textBox1.Clear();} catch { MessageBox.Show(”添加帐户失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { conn.Close();} } catch { MessageBox.Show(”添加帐户失败!“);} } 3.账户删除
根据输入的信息,系统进行校验,如果存在此用户,则删除。否则给出相关错误提示,如:账户名无效等。关键性源代码:
int isnull;if(textBox4.Text.Equals(”“)){ MessageBox.Show(”请输入需要删除的的帐户名“);} else { try { SqlConnection conn = new SqlConnection(”Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;“);
string sql = ” delete from login where username='“ + textBox1.Text.Trim()+ ”'“;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);isnull = cmd.ExecuteNonQuery();if(isnull ==1){ MessageBox.Show(”删除帐户成功!“);textBox1.Clear();} else { MessageBox.Show(”删除帐户失败,输入了无效的帐户“);}
} catch { MessageBox.Show(”删除帐户失败!“, ”错误“, MessageBoxButtons.RetryCancel, MessageBoxIcon.Information);} finally { conn.Close();} } catch { MessageBox.Show(”删除帐户失败!");} }
4 调试与运行结果及存在的主要问题
1.登录
2.查询 车次查询
线路查询
3.票务管理 售票
(1)售票查询
38(2)输入购买车次
(3)购买车次有误
39(4)选择座位成功
(5)座位冲突无法售出
退票
(1)输入退票车次
(2)输入无效车次
(3)输入座位号,成功退票
(4)座位未出售,退票失败
团体售票
(1)团体购票查询
(2)团体购票车次不存在
(3)团体购票车次成功
(3)团体第一次出售
(4)团体第二次出售
(5)团体购票完成
团体退票
(1)输入退票车次与退票数量
(2)输入无效车次
46(3)团体退票第一次退票
(4)团体退票第二次退票
47(5)团体退票完成
(6)团体退票座位未出售
第二篇:车站售票管理系统心得体会
对于此次数据库课程设计我感慨颇多,收获颇多。从拿到题目到分析设计再到完成整个编程,从理论到实践,在整整两个星期的日子里,把理论用于实践,在实践过程中,以前所学过的知识都得到了更深层次的理解,同时也学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学到的理论知识与实践相结合起来,从理论中得出结论,将结论辅助与理论,才能真正学到知识并写出有用的程序,所以提高自己的实际动手能力和独立思考的能力是十分重要的。在设计的过程中遇到很多的问题,可以说得是困难重重,由于对以前所学过的知识理解得不够深刻,掌握得不够牢固。导致自己在程序设计过程中经常出错,致使程序无法运行或无法实现要求的步骤。还有很多是些小问题,这都是由于我粗心大意而造成的,所以我认识到设计程序一定要仔细,容不得丝毫的马虎和粗心大意。当然还有其他的问题,尤其是关于文件的操作,是我们最大的问题,不过,经过卫凡老师的讲解和改错之后,也开始懂得设计和运用了。
在本次课程设计中,我认识到了团队的重要性,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。我很清楚的知道团结协作的力量是伟大的,如果是我一个人孤军奋战的话,肯定不能在规定时间内完成这次课程设计的要求内容,因此我很怀念这两个星期的合作,想起我们一起查阅资料,一起讨论设计程序的思路,成功的时候一起分享喜悦,失败的时候互相鼓励,我坚信,在这两个星期的时间里面,我们的友情和团结精神在历练中经受住了考验,变的更加顽强,我们是一个集体的思想已经深入人心!
经过一个星期的实践学习,使我们对VB和ACCESS有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我们也发现我们的好多不足之处,最主要是自己在DMI窗体使用上不够熟悉,通过实践,使我们在这个方面的认识有所提高。
其次,经过查找资料,调查研究,获取需求以及在这些基础上做出的系统分析。总的来说,这个系统的设计考虑了大部分要考虑的因素,一些影响不大的因素就没有考虑在内,系统的需求分析中占相当一部分比例的用例规格说明采用表格的方式,直观,便于理解,不过需求分析在整体的格式多样性上有所欠缺,这在以后的设计中要吸取教训。通过这次的课程设计,我们不但学到了很多东西,也把原来学的东西理解的更透彻了,特别是把原来学的不同科目的东西结合起来了,收获很大。
第三篇:航空售票系统数据库分析表
flight
1.用户表:user
用户编号:userid int 自动增长 主键 用户名 username varchar(20)密码
password varchar(20)类型
usertype varchar(10)登录时间 logintime datetime 2.航空公司表 company
公司编号 companyid int 自动增长 主键 航空公司名称 companyname varchar(50)3.机场表 airport
机场编号:airportid int 自动增长 主键 机场代码:airportcode varchar(20)机场名称:airportname varchar(50)4.航班信息表 flight
航班编号:flightid nt 自动增长 主键 航班代号:flightcode varchar(20)所属航空公司:company int 日期:flightdate datetime 起飞时间:flytime datetime 到达时间:landtime datetime 起飞机场:flyairport int 到达机场:landairport int 头等舱价格:firstprice money 公务舱价格:secondprice money 经济舱价格:thirdprice money 机型:planetype varchar(20)
第四篇:铁路网上售票系统数据库设计
目 录
《数据库课程设计》论文...............................................................................................................................铁路网上售票系统项目开发背景:.....................................................................................................1 铁路网上售票系统的总目标是:.........................................................................................................1 项目开发的意义:.................................................................................................................................1 1.需求分析...................................................................................................................................................2 1.1 需求分析阶段目标和任务..............................................................................................................2 1.1.1 需求分析阶段目标...............................................................................................................2 1.1.2 需求分析阶段任务...............................................................................................................2 1.2 需求分析成果..................................................................................................................................3 1.2.1 流程图...................................................................................................................................4 1.2.2 数据字典...............................................................................................................................5 2.数据库结构设计.......................................................................................................................................5 2.1 概念设计..........................................................................................................................................5 2.1.1 分E-R图建立......................................................................................................................6 2.1.2 全局/整体E-R图.................................................................................................................6 2.2 逻辑设计..........................................................................................................................................6 2.2.1 建立关系模式.......................................................................................................................7 2.2.2 关系模式规范化处理...........................................................................................................7 2.2.3 用户子模式建立...................................................................................................................7 2.2.4 关系模式逻辑结构定义.......................................................................................................6 3. 数据库物理设计.....................................................................................................................................6 3.1 物理设计阶段目标和任务..............................................................................................................6 3.2数据存储方面...................................................................................................................................6 3.2.1 建立索引的原则...................................................................................................................6 3.2.2 建立索引...............................................................................................................................7 3.2.3 系统功能模块图...................................................................................................................7 4.数据库实施与测试...................................................................................................................................7 4.1 数据库实施......................................................................................................................................7 4.1.1 数据库及数据库对象建立...................................................................................................7 4.1.2 数据入库.............................................................................................................................10 4.2 数据库测试....................................................................................................................................10 5.总结.........................................................................................................................................................10 6.附录.........................................................................................................................................................11 附录1:................................................................................................................................................11 附录2....................................................................................................................................................15 附录3:................................................................................................................................................18
铁路网上售票系统项目开发背景:
信息时代的到来,互联网对于企业和事业单位的运营和发展日益重要,网上交易也逐渐被人们认可,并成为未来交易的发展方向。铁路售票系统也不例外。
铁路网上售票系统是铁路旅游服务信息系统的一个重要组成部分,为旅客提供优质便捷的服务。为了提高铁路客运的售票效率,丰富铁路客运的营销手段,火车站售票总站及其下属代售点可以通过公用的互联网资源,实现网上的售票,查询及管理工作。
铁路网上售票系统的总目标是:
在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的铁路网上售票系统,为企业的决策层提供准确、精细、迅速的车票销售信息。
项目开发的意义:
信息时代已经来临,信息处理的利器——计算机应用于火车站售票的日常管理为火车站售票的现代化带来了从未有过的动力和机遇,为火车站票务管理领域的飞速发展提供了无限潜力。采用计算机管理信息系统已成为火车站票务管理科学化和现代化的重要标志,给火车站票务带来了明显的经济效益和社会效益。计算机已经成为人们生活不可或缺的一部分。
然而,随着旅游业的逐渐的成熟发达,铁路客运量大幅度的提高,各大省市的列车都显著的增加,这些都对列车票务管理系统提出了更高的要求,所以要不断的完善更新列车票务管理系统,提高列车售票系统的工作效率。列车在我国的人员流动、物资运输中占据着举足轻重的地位。火车的特殊性及可能经过多个城市,每个城市的车站可以出售此火车的车票。而且同一车站可能有多辆车经过。许多希望以最快的方式选择自己想来乘坐的那一趟列车。所以以人工的方式是不可能实现这种功能的。一种可行的方案是基于客户端服务器的体系结构。服务器为数据库系统,存储所有必要的信息。客户端通过连接到服务的应用程序快速、准确地完成相应的工作,通过网上订购,可以达到高效、便捷的购票。铁路网上售票系统的实施,将会在一定程度上促进铁路客运生产力和生产关系的变革,增强市场竞争能力,提高铁路部门的工作效率,提升管理水平,减少劳动强度,方便广大旅客购票,有一定的社会和经济效益。
1.需求分析
主要包括需求分析阶段目标、任务和成果。
1.1 需求分析阶段目标和任务 1.1.1 需求分析阶段目标
(1)了解目前铁路网上售票流程和注意事项,通过具体调查了解客户需求并总结业务流程。
(2)与指导老师沟通交流该项目的可行性,征求老师意见,修改不合理的地方,为以后的设计打下基础。
1.1.2 需求分析阶段任务
随着旅游业的逐渐的成熟发达,铁路客运量大幅度的提高,各大省市的列车都显著的增加,这些都对列车票务管理系统提出了更高的要求,所以要不断的完善更新列车票务管理系统,提高列车售票系统的工作效率。随着科学的不断进步,计算机应用已经遍布整个社会的每个角落。目前社会正处于健保发展方兴未艾的时代,各火车站莫不兢兢业业地改善本身的体制或管理方式,以适应健保越来越严格的规范。列车在我国的人员流动、物资运输中占据着举足轻重的地位。全国有大量的人员通过搭乘火车到达目的地。而与火车的特殊性及可能经过多个城市,每个城市的车站可以出售此火车的车票。而且同一车站可能有多辆车经过。许多希望以最快的方式选择自己想来乘坐的那一趟列车。所以以人工的方式和单纯的列车票务管理系统都不可能实现这种功能的。一种可行的方案是通过网上订购,可以达到高效、便捷的购票。铁路网上售票系统的实施,将会在一定程度上促进铁路客运生产力和生产关系的变革,增强市场竞争能力,提高铁路部门的工作效率,提升管理水平,减少劳动强度,方便广大旅客购票,有一定的社会和经济效益。
(1)处理对象
系统要处理的对象主要包括票存系统基本信息、票务人员基本信息、客户基本信息、订票单基本信息、退票单基本信息、车票基本信息、车票销售记录基本信息。(详细的信息见于数据查询表)2
(2)功能要求
系统要实现的主要功能:
①查询:可以通过起点站与终点站在进行查询,也可根据具体的车次输入进行查询,同时每次查询都会显示车次号,点击即可显示该趟列车所进过站点的详细信息,其中包括所到达每个站的到达时间与出发时间。
②客户注册、登录:由于要进行网上订购车票,用户需注册,填写有关信息,由由票务人员负责送车票到客户手中。
③订票业务:本系统为网上订票,用户经过查询车次信息、票务信息,找到自己所需的车票通过所关联的账户进行订购。
⑤更新功能:该系统随时跟据车辆的变化情况进行更新,增加车辆时可以在系统中插入该车的详细信息,同时也能根据需要修改某趟车经过的站点与发车时间,当某趟车停止、开行时可以删除该趟车的信息。同时包括对列车信息、站点信息、订票记录等的更新功能。
⑥车票配送:客户在订购了车票之后,管理人员通过后台管理订票记录,然后根据客户的要求由票务人员及时为其配送车票。
(3)安全性和完整性要求
安全性先通过视图机制,该系统创建了很多视图,不同用户只能访问系统授权的视图,这样可以提供系统数据一定程度上的安全性,也可以通过用户授权机制,根据用户被授权的级别来分配用户权限,从而达到更高层次的安全保密功能。
完整性要求主要用来限制各基本表中信息的真实性和可靠性,满足参照完整性、实体完整性、用户自定义完整性的要求。
1.2 需求分析成果 1.2.1 流程图
铁路网上售票系统业务流程图如下图1.1—图1.3:
(1)客户注册及登录流程图:
反馈不批准注册处理反馈登录失败处理客户填写注册信息提交服务器客户填写登录信息提交服务器注册成功处理登录成功反馈图1.1 注册登录流程图
(2)订票业务流程图:
即时退票请求即时退票理由递交票务人员开出填写车票信息提交即时退票单支付客户登录服务器录入票款送达呈现相关车票列出已购车票填写订票单提交提出交付票务人员递交售票单开出图1.2 订票业务流程图
(3)退票业务流程图:
反馈不同意退票不同意返还客户登录服务器票款填写退票申请单提交提出票务人员递交退票单开出图1.3 退票业务流程图铁路网上售票系统数据流程图如下图1.4—图1.7:(1)顶层数据流程图:
E1客户订票单、退票申请单售票单、退票单P0订票、退票S1图1.4 顶层数据流程图票存系统
(2)第一层数据流程图:
铁路网上售票系统E2服务器车票清单E1客户订票单售票单P1订票P3查验查验清单S1票存系统 退票申请单退票单P2退票图1.5 第一层数据流程图
(3)第二层数据流程图—订票:
P1E1客户F1 订票单F2 售票单P1.1售票S1票存系统 S2流水账F3 即时退票单P1.2即时退票图1.6 第二层数据流程图——订票
1.2.2 数据查询
包含数据项、数据结构、数据流、处理逻辑、数据存储定义(详见附录1)。
2.数据库结构设计
主要包括概念设计和逻辑设计两个部分。
2.1 概念设计
概念设计阶段主要是将需求缝隙阶段得到的用户需求抽象为信息结构即概念模型的过程,它是整个数据库设计的关键,设计概念结构通常有四类方法:自顶向下、自底向上、逐步扩张、混合策略。
2.1.1 分E-R图建立
参照业务流程图和数据流程图,分别画出分E-R图,如图2.1至2.4所示。(1)根据图1.2抽象出的进货分E-R图:
订票数量n送票日期送票时间1客户送票票务人员图2.1 车票配送E-R图
(2)根据图1.6抽象出的销售分E-R图:
客户1订票n订票单1转换1n车票图2.2 客户订票E-R图
(3)根据图1.7抽象出的存储分E-R图:
客户1退票n退票单1转换2n车票图2.3 客户退票E-R图
(4)根据图1.4抽象出的存储分E-R图:
出入账金额记录时间记录日期1n出入账类型记录数量车票记录图2.4 售票记录E-R图票存系统
各E-R图中的实体属性如下图2.5至图2.10:
(1)车票及其属性:
车票编号车次座位类型座位编号图2.5 车票及其属性车票出发站目的站发车时间到站时间车票价格
(2)客户及其属性:
客户身份证号客户名客户电话客户客户地址登录ID客户银行卡号登录密码图2.6 客户及其属性
(3)票务人员及其属性:
票务人员编号票务人员票务人员工作地点票务人员姓名图2.7 票务人员及其属性
(4)票存系统及其属性:
票存分系统编号票存系统票存分系统地址图2.8 票存系统及其属性
(5)订票单及其属性:
订票日期订票单号订票手续费订票时间订票数量订票单图2.9 订票单及其属性
2.1.2 全局/整体E-R图
根据各分E-R图合并整体E-R图,具体方法是将4个E-R图中相同的实体,进行合并,消除属性冲突、命名冲突、结构冲突之后得到总E-R图如图2.11所示。
记录1车票n转换11订票单n票存系统nn转换2订票1n11退票单退票客户n票务人员1送票图2.11 全局E-R图
2.2 逻辑设计
概念设计阶段是独立于任何一种数据模型的,而逻辑设计阶段则与现实结合起来,逻辑设计的任务就是将概念设计阶段设计好的基本E-R图转换为与项目所支持的数据模型相符合的逻辑结构。具体任务包括将E-R图转换成关系模型、模型优化、数据库模式定义、用户模式设计。
2.2.1 建立关系模式
E-R图向关系模型的转换遵循如下规则,一个实体型转换为一个关系模式,实体的属性就是关系的属性,实体的码就是关系的码。
对于实体间的联系则有不同的情况:一个1:1联系可以转换为一个独立关系模式,也可以与任意一端关系模式合并;一个1:N联系可以转换为一个独立关系模式,也可以与n端实对应的关系模式合并;一个M:N联系转换为一个独立关系模式,具有相同码的关系模式可以合并。
根据以上原则,对于该系统的E-R图进行转换,从而得到本E-R图向关系模型的转换如下:
票存系统(票存分系统编号、票存分系统地址)
票务人员(票务人员编号、票务人员姓名、票务人员工作地点)
客户(客户身份证号、客户名、客户银行卡号、客户电话、客户地址、登录ID、登录密码、票务人员编号)
订票单(订票单号、订票日期、订票时间、订票数量、订票手续费、客户身份证号)
车票(车票编号、车票价格、车次、座位类型、座位编号、出发站、目的站、发车时间、到站时间、订票单号、退票单号)
记录(车票编号、出入账类型、票存分系统编号、记录日期、记录时间、出入账金额)
2.2.2 关系模式规范化处理
以上关系模式中的各实体和联系之间不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF。
2.2.3 用户子模式建立
用户子模式的建立如表2.1所示。
表2.1用户子模式
编号 V-01 V-02 V-03 V-05 用户子模式名称 Ticket_view Customer_view Book_view Record_view
定义 车票信息视图 客户信息视图 订票单信息视图 记录信息视图
作用
方便用户查询车票信息 方便票务人员查询客户信息 方便票务人员查询订票信息 方便票务人员查询记录信息
2.2.4 关系模式逻辑结构定义
详细的逻辑结构定义见附录2。
3. 数据库物理设计
3.1 物理设计阶段目标和任务
数据库的物理设计是为逻辑数据模型选取一个最合适应用需求的物理结构的过程,在这个阶段中需要完成的任务是:
(1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构;(2)对物理结构进行评价,评价的重点是时间和空间效率。
3.2数据存储方面 3.2.1 建立索引的原则
建立索引一般有以下三个原则:
(1)如果一个或一组属性经常在查询条件中出现,则考虑在这个属性上建立索引。
(2)如果一个经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引。
(3)如果一个或一组属性经常在连接操作的连接条件中出现,则考虑在这个属性上建立索引。
3.2.2 建立索引
根据系统和用户的的需要,由于客户信息、车票信息、订票单编号、退票单编号等属性查询操作比较平凡,所以对其所在表建立唯一索引,索引见表3.1。
表3.1索引表
所在表名 客户信息表 车票信息表
索引名称 Customer_index Ticket_index
索引类型 唯一 唯一
建立引用的基项 Cno Tno 3.2.3 系统功能模块图
系统基本功能模块图如3.1所示。
铁路网上售票系统客户信息管理车票信息管理订票信息管理退票信息管理车票存储管理车票销售统计管理图3.1 功能模块图
4.数据库实施与测试
主要包括数据库实施和测试两个部分。
4.1 数据库实施
4.1.1 数据库及数据库对象建立
主要包括:数据库、基本表、视图、索引、触发器以及存储过程。详细DDL语句以及相关代码,见附录3。
(1)建立索引:
create unique index Customer_index onCustomer(Cno);create unique index Ticket_index on Ticket(Tno);create unique index Book_index on Book(Bno);create unique index Dishonour_index on Dishonour(Dno)(2)创建的视图如表4.1所示
表4.1视图表 视图编号 V-01 V-02 V-03 V-04 V-05 视图名称 Ticket_view Customer_view Book_view
定义 车票信息视图 客户信息视图 订票单信息视图
作用
方便用户查询车票信息 方便票务人员查询客户信息 方便票务人员查询订票信息 方便票务人员查询退票信息 方便票务人员查询记录信息 Dishonour_view 退票单信息视图 Record_view
记录信息视图
(3)创建的存储过程如表4.2所示:
表4.2存储过程表
编号 N-01 N-02 N-03 N-04 N-05 N-06 N-07 N-08 N-09 N-10 存储过程名称 Ms_Insert Ts_Insert C_Insert B_Insert D_Insert T_Insert R_Insert B_Delete D_Delete R_Delete
作用
向票存系统基本信息表中插入一个元组 向票务人员基本信息表中插入一个元组 向客户基本信息表中插入一个元组 向订票单基本信息表中插入一个元组 向退票单基本信息表中插入一个元组 向车票基本信息表中插入一个元组 向记录基本信息表中插入一个元组 从订票单基本信息表中删除一个元组 从退票单基本信息表中删除一个元组 从记录基本信息表中删除一个元组
(4)创建的触发器如表4.3所示:
表4.3触发器表
编号 T-01 T-02 T-03 T-04 T-05 T-06 触发器名
delete_TicketStaff delete_Customer delete_Book delete_Dishonour delete_Ticket DoNotDishonour
作用
删除票务人员信息级联删除客户信息 删除客户信息级联删除客户订票及退票信息 删除订票信息级联删除车票信息 删除退票信息级联删除车票信息 删除车票信息级联删除记录信息 车票价格低于2元不予退票
4.1.2 数据入库
系统包括7张基本表,在Excel中录入数据,然后使用SQL Server 2000数据导入功能,直接将数据导入到相应的基本表中。
4.2 数据库测试
主要内容是对建立的数据库及数据库对象进行测试,详细的测试情况见附录3。
5.总结
通过这次课程设计的感触很多。第一感觉就是理论和实践的差距远远大于人的想象;课堂上觉得很简单的东西,真到了要做的时候,会发现很难。在这次实习之前我感觉数据库就像一种语言一样,学会它的语法就应该可以了,不过现在才明白数据库重点在于设计,设计的过程才是最有价值,最有意义也是最难的。
通过这次实习,我收获了很多。首先是在需求分析阶段,这个阶段的任务可以说是整个数据库设计任务量最大的阶段,我花了大量时间在业务流程图和数据流程图的创建上,不断的修改,不断的和指导老师交流。在这个过程中真切的了解了业务的分析的重要性。在概念设计阶段,主要的任务就是抽象出E-R图。然后就是逻辑设计阶段了,这个阶段是要把让我头疼的E-R图转换为关系模式,这一阶段我花费的时间相对较少。经过不断的尝试和修改,很快就完成了逻辑结构的设计,得到了该建立的表。这个时候到了数据库实施阶段了,以前我认为创建基本表、视图、存储过程、触发器是数据的重点,现在看来这些都是皮毛,这些都是数据库设计过程中最简单最基础的问题。真正需要能力和时间的是前面的需求分析、概念设计、逻辑设计阶段,把实际问题抽象成计算机能够实现解决的问题才是最重要的,这是数据库可以实施的必要条件。
这次课程设计的任务,我完成的不是很好,有些方面还没有实现其功能。人无完人我知道我做出的系统不是很全面,即便如此,我还是从其中学到了很多技巧。在以后的学习中,我会多实践,多练习,书本上知识的学习毕竟没有实践来的有效,在此,我要感谢我的指导老师这么久对我的指点。
6.附录
附录1:
数据查询表:
(1)数据项如表6.1所示。
表6.1 数据项
数据项编号 I1 I2 I3 I4 I5 I6 数据项名数据项含义
称 Tno Tprice 车票编号 车票价格
车票的编号 车票的售价 某次列车的编号 包括硬座、软卧、无座Tstype Tpno Tsta 座位类型
等
座位编号 出发站
出发
车票上所示乘客要到达I7 Tdes 目的站 的地方
YYYY:MM:DD I8 Tstatime 发车时间
列车从该站出发的时间
datetime
hh:mm YYYY:MM:DD I9 I10 I11 I12 I13 I14 I15 Tdestime 到站时间 Bno Bdate Btime Bqua Bpou Sno 订票单号 订票日期 订票时间 订票数量 订票手续费
外费用
售票单号
销售火车票单据的编号
char
列车终到目的站的时间 订购火车票单据的编号 订购火车票的日期 订购火车票的时间 一次性订购的数量 订购火车票所支付的额
int
datetime char datetime datetime int
hh:mm
YYYY:MM:DD hh:mm 1-50
char
车厢号和座位编号 车票上所示乘客从何处
char
char
char
char int char
简述
类型
(位)60 8
宽度
取值范围
Trainno 车次
数据项编号 I16 数据项名数据项含义
称
开出销售火车票单据的Sdate 开售单日期
日期
开出销售火车票单据的datetime
简述
类型
宽度
取值范围
(位)
YYYY:MM:DD I17 I37 I38 Stime Cname Cno 开售单时间
时间
客户名 客户身份证
客户的身份证号码
号 客户银行卡
客户的姓名
datetime char char
20
hh:mm I39 I40 I41 I42 Ccano 号
Cphone Cadd Cid 客户电话 客户地址 登录ID
客户的银行卡号码 客户的电话号码 客户的住址
客户办理网上业务的名
char char char char 12 30 14
称
客户办理网上业务的名I43 Cpwd 登录密码
称对应的密码
票务人员编I44 Tsno 号 票务人员姓I45 Tsname 名 票务人员工I46 Tsadd 作地点 票存分系统I47 Msno 编号
票存系统分系统的编号
char
票务人员所在的工作地
char
各车站票务人员的姓名
char
各车站票务人员的编号
char
char
(2)数据结构如表6.2所示。
表6.2 数据结构 DS01 客户信息
I38 客户身份证号
I37 客户姓名 I39 客户银行卡号
I40 客户电话 I41 客户地址 I42 登录ID I43 登录密码
DS02 车票信息
I1 车票编号
I3 车次 I4 座位类型 I5 座位编号 I6 出发站 I7 目的站
I2 车票价格
DS03 票务人员信息
I8 发车时间 I9 到站时间
I44 票务人员编号 I45 票务人员姓名 I46 票务人员工作地点
DS04 订票单的数据结构
I10 订票单号
I37 客户姓名 I38 客户身份证号 I39 客户银行卡号 I40 客户电话 I41 客户地址 I3 车次 I4 座位类型 I6 出发站 I7 目的站
I2 车票价格 I13 订票数量 I14 订票手续费
DS05 售票单的数据结构
I15 售票单号
I8 发车时间 I9 到站时间 I11 订票日期 I12 订票时间
I3 车次 I37 客户姓名 I38 客户电话 I41 客户地址 I18 领票人姓名 I19 领票人身份证号 I44 票务人员编号 I45 票务人员姓名 I13 订票数量 I21 交款金额
I16 开售单日期 I17 开售单时间 I20 交款日期
(3)数据流如表6.3所示。
表6.3数据流
数据流简述
名称
客户网上欲订票单 订购火车票的单据 服务器开出售票单 销售火车票的单据 业务人员开即时退出的即时退票单
票的单据 客户向服务退票申器申请退票请单 的单据 服务器不同未通过意客户退票单
申请的单据 服务器拒绝拒绝退客户退票的票单
单据 服务器同意审理模通过单 客户退票申
块
请的单据 服务器开出退票单 的客户退票的单据 服务器
客户
I37+I38+I39+I6+I7+I
2180份/
+I31+I35+I36+I8+I33+
天
I34+I44+I45
天 1800份/
块 票存模
I1+I2+I31+I29+I30
天
天
180份/
1800份/服务器
客户
I29+I30
天
天
I37+I38+I1+I2+I31+
20份/
200份/
块 审理模
服务器
I29+I30
天
天
I37+I38+I1+I2+I31+
20份/
200份/客户
块
I31+I29+I30
天
天
审理模
I37+I38+I39+I1+I2+
200份/
2000份/
员
I24 票务人
服务器 I2+I25+I26+I27+I23+
天
天 服务器
客户 客户 来源
去向
I37+I38+I39+I40+I41+
1000份
服务器 I3+I4+I6+I7+I2+I13+
/天
I14+I8+I9+I11+I12 I3+I37+I38+I39+I18+
1000份
I19+I13+I21+I16+I17+
/天
I20+I44+I45 I37+I38+I1+I44+I45+
10份/
100份//天 10000份/天 10000份数据流
数据流
数据流组成
量
量
数据流
高峰流(4)处理逻辑如表6.4所示。
表6.4处理逻辑
处理逻辑处理
处理逻辑简述 输入的数据流
处理
输出的数据流
编号 名称
服务器向F1 订票单,来P1.1 售票 客户销售源于客户发出火车票 的订票单据
F7 通过单,来服务器的录入源于服务器退P2.2 火车票销系统 票审理系统开售记录
出的同意单据
附录2 基本表的建立:
1.创建铁路网上售票系统 create database RTSO
2.创建票存系统基本信息表: create table MemorySystem(Msno char(14)primary key, Msadd char(20)unique not null)
3.创建票务人员基本信息表: create table TicketStaff(Tsno char(14)primary key, Tsname char(10)not null, Tsadd char(20)not null)
根据客户订单信
息,向客户开出售
票单销售火车票并
进行登记记录
根据通过单将退票
信息录入系统以作
记录
F2 售票单,向客户售票发
出的售票单据;S1 票存系
统、S2 流水账,每次售票
都要有详细记录 S1 票存系统、S2 流水账,每次退票都要有详细记录
频率
1000
次/
天
180
次/天
4.创建客户基本信息表: create table Customer(Cno char(20)primary key, Cname char(10)not null, Ccano char(20), Cphone char(12)not null, Cadd char(30)not null, Cid char(14)not null, Cpwd char(20)not null, Tsno char(14)not null, foreign key(Tsno)references TicketStaff(Tsno))
5.创建订票单基本信息表: create table Book(Bno char(14)primary key, Bdate datetime not null, Btime datetime not null, Bqua int check(Bqua>0 and Bqua<51)not null, Bpou int not null, Cno char(20)not null, foreign key(Cno)references Customer(Cno))
6.创建车票基本信息表: create table Ticket(Tno char(60)primary key, Tprice int not null,Trainno char(8)not null, Tstype char(8)not null, Tpno char(8)not null, Tsta char(20)not null, Tdes char(20)not null, Tstatime datetime not null, Tdestime datetime not null, Bno char(14)not null, Dno char(14), foreign key(Bno)references Book(Bno), foreign key(Dno)references Dishonour(Dno))
7.创建售票记录基本信息表: create table Record(Tno char(60)not null, Rsty char(6)not null, Msno char(14)not null, Rdate datetime not null, Rtime datetime not null, Ramo int check(Ramo<100001)not null, primary key(Tno,Rsty), foreign key(Tno)references Ticket(Tno), foreign key(Msno)references MemorySystem(Msno))附录3
导入数据
use RTSO
--向表中导入数据
insert into MemorySystem(Msno, Msadd)values('001','海口火车站')insert into MemorySystem(Msno, Msadd)values('003','三亚火车站')
select*from MemorySystem
insert into TicketStaff(Tsno,Tsname,Tsadd)values('112','李一','海口火车站')insert into TicketStaff(Tsno,Tsname,Tsadd)values('115','李二','三亚火车站')
insert into Customer(Cno,Cname, Ccano,Cphone,Cadd,Cid,Cpwd,Tsno)
values('***900 ','陶羽爱','***8923','***','海甸岛三西路','asdf123','123456','112')insert into Customer(Cno,Cname, Ccano,Cphone,Cadd,Cid,Cpwd,Tsno)values('***270 ','单康枫','***7245','***','广州
','qwer321','123456','115')
数据查询
use RTSO--从TicketStaff中查询员工号为的信息
select *from TicketStaff where Tsno='112'
删除数据
use RTSO
--从Customer中删除姓名为‘陶羽爱’的所有信息 delete from Customer where Cname='陶羽爱'
第五篇:航空售票管理系统
#include
typedef struct node//定义信息结构体 {
char num[10];// 航班号
int hour;//起飞时间小时
int minitues;//起飞时间分钟
char start[10];//起始
char end[10];//终点
float prize;//经济舱票价
int last;//剩余座位 }FLIGHT;
typedef struct Order//订单信息 {
char name[10];//乘客姓名
char num[10];//航班号
int count;//订票数量 }Order;
class flight//定义类 {
private: FLIGHT stu[N];//每个元素对应一条信息
Order psg[N];//订单
int len;//航班总数
int lenp;//订票者总数 public:
flight();
~flight();void input();//录入信息
void show();//浏览
void sall();//售票
void back();//退票
void search();// 信息查询
void search2();// 信息查询(起点终点)
char menu();//菜单
};
flight stud;
char filename[]=“flight.txt”;
flight::flight(){}//构造函数 flight::~flight(){}//析构函数
bool CheckTime(int h1,int m1,int h2,int m2)//判断两个时间前后
{ if(h1
return true;else if(h1==h2){
if(m1 return true; else return false;} else return false;} void flight::show()//浏览 { system(“cls”);//清屏 cout<<“ 所有航班信息如下:”< 起飞时间 起点 终点 经济舱票价 剩余座位 备注”< for(int i=0;i printf(“%-10s%-2.2d:%-2.2d %-10s%-10s%-12.2f%-10d”,stu[i].num,stu[i].hour,stu[i].minitues,stu[i].start,stu[i].end,stu[i].prize,stu[i].last); time_t t; struct tm *tm; t=time(NULL);//获取当前系统时间 tm=localtime(&t); if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true)//如果起飞时间在当前时间之前 输出此次航班已发出 cout<<“此次航班已发出”< else cout< } cout<<“_______________________________________________________________________________”< void flight::back()//退票 { char name[20]; char s[20]; system(“cls”);//清屏 cout<<“请输入退票的航班编号:”;cin>>s; for(int i=0;i if(strcmp(stud.stu[i].num,s)==0) break;//存在 结束循环 if(i==stud.len)//这二者相等说明查找完所有信息也没找到输入信息,说明输入航班编号不存在{ cout<<“对不起!没有你输入航班编号的相关信息。n”; system(“pause”);//任意键继续 return;} time_t t; struct tm *tm; t=time(NULL);//获取当前系统时间 tm=localtime(&t);if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true) { cout<<“对不起!该航班已经起飞。不能退票。n”; system(“pause”);//任意键继续 return;} int j=i; cout<<“请输入您的姓名:”;cin>>name;for(i=0;i if(strcmp(stud.psg[i].name,name)==0 && strcmp(stud.psg[i].num,s)==0)//查询这个名字是否相同 { stud.stu[j].last+=stud.psg[i].count;//退票 stud.psg[i]=stud.psg[stud.lenp-1];///删除这个订单 stud.lenp--;//订单数减一 cout<<“退票成功!n”; system(“pause”);//任意键继续 return; } } cout<<“对不起!您没有定该航班的票。n”; system(“pause”);//任意键继续 } void flight::sall()//售票 { char s[20]; system(“cls”);//清屏 cout<<“请输入要购买的航班编号:”;cin>>s; for(int i=0;i if(strcmp(stud.stu[i].num,s)==0) break;//存在 结束循环 if(i==stud.len)//这二者相等说明查找完所有信息也没找到输入信息,说明输入航班编号不存在{ cout<<“对不起!没有你输入航班编号的相关信息。n”; system(“pause”);//任意键继续 return;} if(stud.stu[i].last<=0)//没有票了 { cout<<“对不起!该航班票已售完。n”; system(“pause”);//任意键继续 return;} time_t t; struct tm *tm; t=time(NULL);//获取当前系统时间 tm=localtime(&t);if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true) { cout<<“对不起!该航班已经起飞。n”; system(“pause”);//任意键继续 return;} int j=i;i=stud.lenp;strcpy(stud.psg[i].num,stud.stu[i].num);cout<<“请输入购票数量:”;cin>>stud.psg[i].count; while(stud.psg[i].count>stud.stu[i].last){ cout<<“余票不足,请重新输入:”; cin>>stud.psg[i].count; } cout<<“请输入您的姓名:”;cin>>stud.psg[i].name; stud.stu[j].last-=stud.psg[i].count;//剩余票数 stud.lenp++;cout<<“购票成功!n”;system(“pause”);//任意键继续 } void flight::input()//录入信息 { system(“cls”);//清屏 for(int i=stud.len;i { cout<<“请输入航班号:”; cin>>stud.stu[i].num; cout<<“请输入起飞时间(格式: 12:30):”; char ch; cin>>stud.stu[i].hour>>ch>>stud.stu[i].minitues; cout<<“请输入起点:”; cin>>stud.stu[i].start; cout<<“请输入终点:”; cin>>stud.stu[i].end; cout<<“请输入经济舱票价:”; cin>>stud.stu[i].prize; cout<<“请输入剩余座位:”; cin>>stud.stu[i].last; stud.len++;//个数加1 cout<<“一条航班信息录入完成,是否继续录入?(y/n):”; while(1) { cin>>ch; if(ch=='y' || ch=='Y' || ch=='n' || ch=='N') break; else cout<<“输入错误请重新输入:”; } if(ch=='n' || ch=='N') break; } } void flight::search()// 信息查询 { char s[20]; system(“cls”);//清屏 cout<<“请输入要查询的航班编号:”;cin>>s; for(int i=0;i if(strcmp(stud.stu[i].num,s)==0) break;//存在 结束循环 if(i==stud.len)//这二者相等说明查找完所有信息也没找到输入信息,说明输入航班编号不存在{ cout<<“对不起!没有你输入航班编号的相关信息。n”; system(“pause”);//任意键继续 return;} cout<<“ 查询结果如下:”< 起飞时间 起点 终点 经济舱票价 剩余座位 备注”< printf(“%-10s%-2.2d:%-2.2d %-10s%-10s%-12.2f%-10d”,stu[i].num,stu[i].hour,stu[i].minitues,stu[i].start,stu[i].end,stu[i].prize,stu[i].last); time_t t; struct tm *tm; t=time(NULL);//获取当前系统时间 tm=localtime(&t); if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true)//如果起飞时间在当前时间之前 输出此次航班已发出 cout<<“此次航班已发出”< else cout< cout<<“_______________________________________________________________________________”< void flight::search2()// 信息查询(按线路){ char s1[20],s2[20]; system(“cls”);//清屏 cout<<“请输入要查询的线路起点:”;cin>>s1; cout<<“请输入要查询的线路终点:”;cin>>s2; for(int i=0;i if(strcmp(stud.stu[i].start,s1)==0 && strcmp(stud.stu[i].end,s2)==0) break;//存在 结束循环 if(i==stud.len)//这二者相等说明查找完所有信息也没找到输入信息,说明输入航班编号不存在{ cout<<“对不起!没有你输入线路的相关信息。n”; system(“pause”);//任意键继续 return;} cout<<“ 查询结果如下:”< 起飞时间 起点 终点 经济舱票价 剩余座位 备注”< for(i=0;i if(strcmp(stud.stu[i].start,s1)==0 && strcmp(stud.stu[i].end,s2)==0) { printf(“%-10s%-2.2d:%-2.2d %-10s%-10s%-12.2f%-10d”,stu[i].num,stu[i].hour,stu[i].minitues,stu[i].start,stu[i].end,stu[i].prize,stu[i].last); time_t t; struct tm *tm; t=time(NULL);//获取当前系统时间 tm=localtime(&t); if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true)//如果起飞时间在当前时间之前 输出此次航班已发出 cout<<“此次航班已发出”< else cout< } cout<<“_______________________________________________________________________________”< char flight::menu()//菜单 { char c; system(“cls”);//清屏 cout<<“nnnn ╔═══════════════════════════╗n”;cout<<“ ║ 1、录入航班信息 ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 2、浏览航班信息 ║n”;cout<<“ ╠═══════════════════════════╣n”; cout<<“ ║ 3、查询路线(按编号) ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 4、查询路线(按线路) ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 5、售票 ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 6、退票 ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 0、退出系统 ║n”; cout<<“ ╚═══════════════════════════╝n”;cout<<“ 请选择:”; cin>>c; return c;} int main(){ while(1) { char ch; ch=stud.menu();//获取选择 switch(ch) { case '1': stud.input();break;//录入航班信息 case '2': stud.show();break;//浏览航班信息 case '3': stud.search();break;// 查询路线 case '4': stud.search2();break;// 查询路线(按线路) case '5': stud.sall();break;// 售票 case '6': stud.back(); break;// 退票 case '0': exit(0);//退出 } } return 0;}