资源描述
车站售票管理系统
- 7 -
2020年4月19日
文档仅供参考
扬州大学
YANGZHOU UNIVERSITY
程序设计——
车站售票信息管理系统
学院: ________信息工程学院_________
班级: _________软件1303班_________
姓名: _____ __ 邵周灿 ___
学号:
一、概述
1、项目背景:随着市场经济的不断飞速发展,交通道路环境的不断改进,人们的出行次数不断增多,人口流动频繁,数量不断加大,车站信息量迅猛增长,车站售票管理系统在人们的日常生活中发挥着越来越重要的作用。本系统实现了线路信息,汽车信息,票务信息的查询和管理,满足人们的需求。
2、编写目的:掌握数据库设计原理及相关软件的使用。实现方便、快速售票;是用户准确了解售票情况,提供多种查询和统计功能;实现系统的安全性设置,使系统本身具有一定的维护功能。
3、软件定义:车站售票管理系统,主要用于车站日常的票务处理。
4、开发环境:Visual Studio ,SQL SERVER
二、需求分析
功能模块图
1,员工管理模块:
员工有两种身份,售票员和系统管理员。系统管理员能够进行系统用户的添加,密码的修改操作,汽车,线路,车票信息的更新等,售票员能够查询以上信息和购买车票等。
2,线路信息管理模块:
系统管理员能够在线路信息管理模块对车站线路信息进行管理。管理员首先建立线路信息数据库,输入原始的线路信息,当有新的线路需要添加或者需要对已有的线路信息进行修改,删除的时候,管理员就能够进行相应的操作。管理员也能够经过本模块查询到所有需要查询的线路的详细信息。
3,汽车信息管理模块:
系统管理员能够在汽车信息管理模块实现对汽车信息的管理。管理员首先应该建立汽车信息数据库,输入原始的数据信息,当有新的汽车信息的时候或者管理员需要修改某个汽车的相关信息以及想要删除某个汽车信息的时候,就能够完成相应的操作。管理员也能够在整个数据库中查询相关汽车信息。
4,车票信息管理模块:
系统管理员能够在车票管理模块实现对车票信息的管理。管理员根据相应的汽车信息和线路信息来设置相应的车票详细信息。管理员还能够对某条线路的车票信息进行修改,删除和查询操作。
5,车票订购信息模块
用户能够经过查询时间,线路和汽车信息,来确定自己要买什么时间,什么路线,什么型号的汽车的车票,并形成表单。
程序分为登陆界面,主界面,线路信息管理界面,汽车信息管理界面,车票信息管理界面,票务信息管理界面,员工管理界面这几个主体界面。使用时应先知道管理员或员工帐号和密码,登陆进入系统主菜单界面,里面包括线路信息,汽车信息,车票信息,票务信息,帮助,退出程序菜单选项。
三、系统设计
(一)数据流图:
顶层数据流图
1层车票数据流图
(二)数据字典:
1, 数据项
编号
数据项名
数据项含义说明
数据类型
长度
与其它数据项的关系
是否能够为空
1
Uno
用户编号
整型
4
User表主键
不
2
UserName
姓名
nvarchar
20
不
3
Password
密码
nvarchar
20
不
4
UserIdentiey
身份
nvarchar
20
不
5
Cno
汽车编号
整型
4
Coach表主键
不
6
Coachnumber
车牌号
nvarchar
20
不
7
Ctype
汽车型号
nvarchar
20
8
Ctime
购买时间
datetime
8
9
Cnum
座位数量
整型
4
不
10
Ctv
有无电视
char
10
11
Ccondition
有无空调
char
10
12
Coachholder
负责人
nvarchar
20
不
13
Lno
线路编号
整型
4
Line表主键
不
14
Ldepart
起始城市
nvarchar
20
不
15
Larrival
到达城市
nvarchar
20
不
16
Ltime
路程时间
datetime
8
17
Tno
车票编号
整型
4
Ticket表主键
不
18
Price
车票价格
整型
4
不
19
SoldTicket
已卖票数
整型
4
不
20
LastTicket
剩余票数
整型
4
不
21
Tdate
出发日期
datetime
8
不
22
Ttime
出发时间
datetime
8
不
23
Ptime
购买时间
datetime
8
24
Seat
座位号
整型
4
不
25
ReserveORBuy
预定或购买
char
10
不
26
Cityno
站点编号
整型
4
City表主键
不
27
CityName
站点名称
nvarchar
20
不
2, 数据结构
编号
数据结构名
属 性
1
员工
员工编号,姓名,密码,身份
2
汽车
汽车编号,汽车型号,车牌号,购买时间,座位数量,有无电视,有无空调,负责人
3
线路
线路编号,起始城市,到达城市,路程时间
4
车票
车票编号,线路编号,汽车编号,车票价格,已卖票数,剩余票数,出发日期,出发时间
5
购票
车票编号,购买日期,预定或购买,座位号
6
站点
站点编号,站点名称
3, 数据流
编号
数据流名
输 入
输 出
1
变更汽车信息
变更信息
汽车记录
2
查询汽车信息
汽车编号/汽车型号/车牌号/有无电视/有无空调/负责人
汽车记录
3
变更站点信息
变更信息
站点记录
4
变更线路信息
变更信息
线路记录
5
查询线路信息
线路编号/起始城市,到达城市
线路记录
6
变更车票信息
变更信息
车票记录
7
查询车票信息
车票编号/起始城市,到达城市/汽车型号/出发日期,出发时间
车票记录
8
预定车票
车票编号,购买日期,预定或购买
预订记录
9
购买车票
车票编号,购买日期,预定或购买
购买记录
10
查询购买情况
车票编号/起始城市,到达城市/汽车型号
购买记录
11
更改用户
变更信息
用户记录
12
员工信息
用户输入电脑的用户名、密码
系统主菜单
4, 数据存储
数据存储名
输入数据流
输出数据流
说 明 部 分
用户信息
变更用户信息
查询用户信息
汽车信息
变更汽车信息
查询汽车信息
线路信息
变更线路信息
查询线路信息
车票信息
变更车票信息
查询车票信息
预定车票信息
车票信息
预订记录
购买车票信息
车票信息
购买记录
5、 处理过程
处理过程名
输入数据流
输出数据流
处理操作
查询
已知汽车/线路/车票信息
所需信息
购买/预定
车票信息+购票时间+座位号
无
更新
变更信息
再次查询信息
用户权限认证
用户名,密码,身份
系统主菜单
用户登录
(三)E-R图
(四)关系模型:
1,User员工表(员工编号Uno,姓名UserName,密码Password,身份UserIdentiey)
2,Coach汽车信息表(汽车编号Cno,汽车型号Ctype,车牌号Coachnumber,购买时间Ctime,座位数量Cnum,有无电视Ctv,有无空调Ccondition,负责人Coachholder)
3,Line线路信息表(线路编号Lno,起始城市Ldepart,到达城市Larrival,路程时间Ltime)
4,Ticket车票信息表(车票编号Tno,线路编号Lno,汽车编号Cno,车票价格Price,已卖票数SoldTicket,剩余票数LastTicket,出发日期Tdate,出发时间Ttime)
5,Purchase车票购买表(车票编号Tno,购买日期Ptime,预定或购买ReserveORBuy,座位号Seat)
6,City站点表(站点编号Cityno,站点名称CityName)
四、系统实现
(一)数据库设计:
1,City站点表:
2,Userinfo员工表:
3,Ticket车票信息表:
4,Coach汽车信息表:
5,Purchase车票购买表:
6,Line线路表 :
(二)主要界面及代码
1,登录界面:
登录操作代码:
(1)SqlHelper helper = new SqlHelper();
SqlDataReader rdr;
(2)if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(identity))
{
MessageBox.Show("姓名,密码,身份框均不能为空!");
}
rdr = helper.ExecuteReader("dbo.SelectUserinfo", CommandType.StoredProcedure);
while (rdr.Read())
{
if (rdr["UserName"].ToString() == name && rdr["Password"].ToString() == password && rdr["UserIdentity"].ToString() == identity)
{
this.Hide();
string iden = rdr["UserIdentity"].ToString();
MainForm main = new MainForm(iden);
main.ShowDialog();
rdr.Close();
return;
}
}
MessageBox.Show("错误的姓名或密码或与身份不匹配,请重新输入!");
rdr.Close();
(3)存储过程:
ALTER PROCEDURE dbo.SelectUserinfo
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */
BEGIN
select * from Userinfo
END
2,系统主界面
3,员工管理界面:
修改/删除操作代码:
(1) try
{
SqlCommandBuilder scb = new SqlCommandBuilder(sd);
sd.Update(ds, "a");
ds.AcceptChanges();
MessageBox.Show("修改成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
(2) try
{
SqlCommandBuilder scb = new SqlCommandBuilder(sd);
int a = dataGridView1.CurrentRow.Index;
ds.Tables[0].Rows[a].Delete();
sd.Update(ds, "a");
ds.AcceptChanges();
MessageBox.Show("删除成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
4,汽车信息管理界面:
添加操作代码:
(1)DAL.CoachDAO coach = new Coach.DAL.CoachDAO();
SqlHelper helper = new SqlHelper();
(2) if (string.IsNullOrEmpty(coachnumber) || string.IsNullOrEmpty(seatnumber1) || string.IsNullOrEmpty(coachholder))
{ MessageBox.Show("车牌号,座位数量,负责人均不能为空!");
}
else
{
if (coach.Add(coachtype,coachnumber,date2,seatnumber,ishavetv,ishavecon,coachholder))
MessageBox.Show("添加成功!");
else
MessageBox.Show("添加失败!");
}
(3)实体类CoachDAO.cs中:
public bool Add(string coachtype,string coachnumber,DateTime date2, int seatnumber,string ishavetv,string ishavecon,string coachholder)
{
bool flag = false;
DataTable dt = new DataTable();
string cmdText = "dbo.AddCoach";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@coachtype",coachtype),
new SqlParameter("@coachnumber",coachnumber),
new SqlParameter("@date2",date2),
new SqlParameter("@seatnumber",seatnumber),
new SqlParameter("@ishavetv",ishavetv),
new SqlParameter("@ishavecon",ishavecon),
new SqlParameter("@coachholder",coachholder)
};
int res = helper.ExecuteNonQuery(cmdText, paras, CommandType.StoredProcedure);
if (res > 0)
{
flag = true;
}
return flag;
}
(4)存储过程:
ALTER PROCEDURE dbo.AddCoach
@coachtype nvarchar(20),
@coachnumber nvarchar(20),
@date2 datetime,
@seatnumber int,
@ishavetv char(10),
@ishavecon char(10),
@coachholder nvarchar(20)
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */
BEGIN
insert into Coach (Ctype,Coachnumber,Ctime,Cnum,Ctv,Ccondition,Coachholder) values (@coachtype,@coachnumber,@date2,@seatnumber,@ishavetv,@ishavecon,@coachholder)
END
5,线路信息管理界面:
搜索操作代码:
(1) SqlHelper helper = new SqlHelper();
SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Coach;Integrated Security=True");
SqlDataAdapter sd; //定义一个数据适配器
DataSet ds; //定义一个数据集
(2) string str1 = "select Lno as 编号,Ldepart as 起始城市,Larrival as 到达城市,convert(varchar(10),Ltime,108) as 路程时间 from Line where Lno =" + lineid + "";
dataBind(str1);
(3) private void dataBind(string str)
{
try
{
sd = new SqlDataAdapter(str, conn);
ds = new DataSet();
sd.Fill(ds, "a");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "a";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
6,车票信息管理界面:
7,车票信息管理中,选择汽车和路线界面:
8,票务管理界面 :
查询操作代码:
(1) DAL.PurchaseDAO purchase = new Coach.DAL.PurchaseDAO();
SqlHelper helper = new SqlHelper();
(2) dataGridView1.DataSource = purchase.Select1(departcity,arrivalcity,date2);
(3) 实体类PurchaseDAO.cs中:
public DataTable Select1(string departcity, string arrivalcity, DateTime date2)
{
DataTable dt = new DataTable();
string cmdText = "dbo.SelectPurchase";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@departcity",departcity),
new SqlParameter("@arrivalcity",arrivalcity),
new SqlParameter("@date2",date2)
};
dt = helper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
(4) 存储过程
ALTER PROCEDURE dbo.SelectPurchase
@departcity nvarchar(20),
@arrivalcity nvarchar(20),
@date2 datetime
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */
BEGIN
select Ldepart as 起始城市,Larrival as 到达城市,convert(varchar(10),Tdate,120) as 出发日期,convert(varchar(10),Ttime,108) as 出发时间,Ctype as 车型,Coachnumber as 车牌号,Ctv as 有无电视,Ccondition as 有无空调,Price as 票价,Cnum as 总票数,LastTicket as 剩余票数from Coach,Line,Ticket where Coach.Cno = Ticket.Cno and Line.Lno = Ticket.Lno and Ldepart = @departcity and Larrival = @arrivalcity and Tdate = @date2
END
预订/购买操作代码:
(1)tno = purchase.Yuding(depart, arrival, coachnum);
(2)实体类PurchaseDAO.cs中
public int Yuding(string depart, string arrival, string coachnum)
{
int tno;
DataTable dt = new DataTable();
string cmdText = "dbo.SelectTno";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@depart",depart),
new SqlParameter("@arrival",arrival),
new SqlParameter("@coachnum",coachnum)
};
dt = helper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
tno = Convert.ToInt32(dt.Rows[0]["Tno"]);
return tno;
}
(3) if (purchase.UpdateTicket(tno) && purchase.AddG(tno, datetime2, seat))
MessageBox.Show("购买成功!您购买的票为:\n" + depart + "---" + arrival + "\n" + "出发时间:" + date + "_" + time + "\n" + "车牌号:" + coachnum + "\n" + "座位号:" + seat);
else
MessageBox.Show("购买失败!");
(4)public bool UpdateTicket(int tno)
{
bool flag = false;
string cmdText = "dbo.UpdateTicket";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@tno",tno)
};
int res = helper.ExecuteNonQuery(cmdText, paras, CommandType.StoredProcedure);
if (res > 0)
{
flag = true;
}
return flag;
}
(5)public bool AddG(int tno, DateTime datetime2, string seat)
{
bool flag = false;
string cmdText = "dbo.AddPurchaseYG";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@tno",tno),
new SqlParameter("@datetime2",datetime2),
new SqlParameter("@seat",seat)
};
int res = helper.ExecuteNonQuery(cmdText, paras, CommandType.StoredProcedure);
if (res > 0)
{
flag = true;
}
return flag;
}
(6)存储过程
ALTER PROCEDURE dbo.UpdateTicket
@tno int
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */
BEGIN
update Ticket set SoldTicket = SoldTicket+1,LastTicket = LastTicket-1 where Tno = @tno
END
(7)ALTER PROCEDURE dbo.AddPurchase
@tno int,
@datetime1 datetime,
@seat nvarchar(20)
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */
BEGIN
insert into Purchase(Tno,Ptime,ReserveORBuy,Seat) values (@tno,@datetime1,'预订',@seat)
END
9,站点管理界面 10,购买成功界面
数据库连接类代码:
/// <summary>
/// SqlCE数据库保持连接类
/// </summary>
public class SqlHelper
{
public SqlConnection sqlconn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
/// <summary>
/// 构造函数
/// </summary>
public SqlHelper()
{
string connStr = "Data Source=(local);Initial Catalog=Coach;Integrated Security=True";
sqlconn = new SqlConnection(connStr);
}
private SqlConnection GetConn()
{
if (sqlconn.State == ConnectionState.Closed)
{
sqlconn.Open();
}
return sqlconn;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="fSqlceConnString">数据库连接字符串</param>
public SqlHelper(String fSqlceConnString)
{
string connStr = "Data Source=(local);Initial Catalog=Coach;Integrated Security=True";
sqlconn = new SqlConnection(connStr);
this.sqlconn = new SqlConnection(fSqlceConnString);
if (sqlconn.State == ConnectionState.Closed)
{
sqlconn.Open();
}
}
/// <summary>
/// 执行不返回结果的SQL语句。比如:Insert,Delete,Update
/// </summary>
/// <param name="cmdText">要执行的SQL语句</param>
/// <returns>返回影响记录的条数</returns>
public int ExecuteNonQuery(String cmdText)
{
SqlCommand cmd = this.sqlconn.CreateCommand();
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
return (cmd.ExecuteNonQuery());
}
/// <summary>
/// 执行带参数的增删改SQL语句或存储过程
/// </summary>
/// <param name="cmdText">增删改SQL语句或存储过程</param>
/// <param name="ct">命令类型<
展开阅读全文