淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 数据库原理及应用设计课程设计 姓 名: 学 号: 专业班级: 系 (院): 设计时间: 设计地点: 指导教师评语: 签名: 年 月 日 成绩: <<数据库原理及应用>>课程设计报告 第 2 页,共 22 页
一、概述
1、项目背景:随着市场经济的不断飞速发展,交通道路环境的不断改善,人们的出行次数不断增多,人口流动频繁,数量不断加大,车站信息量迅猛增长,车站售票管理系统在人们的日常生活中发挥着越来越重要的作用。本系统实现了线路信息,汽车信息,票务信息的查询和管理,满足人们的需求。
2、编写目的:掌握数据库设计原理及相关软件的使用。实现方便、快速售票;是用户准确了解售票情况,提供多种查询和统计功能;实现系统的安全性设置,使系统本身具有一定的维护功能。
3、软件定义:车站售票管理系统,主要用于车站日常的票务处理。 4、开发环境:Visual Studio2008,SQL SERVER2000
二、需求分析
车站售票管理系统员工管理模块汽车管理模块线路管理模块车票管理模块票务信息管理模块员工信息添加员工信息修改员工信息删除员工信息查询汽车信息添加汽车信息修改汽车信息删除汽车信息查询线路信息添加线路信息修改线路信息删除线路信息查询车票信息查询删除车票添加车票查询车票信息购买预订车票/ 功能模块图
1,员工管理模块:
员工有两种身份,售票员和系统管理员。系统管理员可以进行系统用户的添加,密码的修改操作,汽车,线路,车票信息的更新等,售票员可以查询以上信息和购买车票等。 2,线路信息管理模块:
系统管理员可以在线路信息管理模块对车站线路信息进行管理。管理员首先建立线路信息数据库,输入原始的线路信息,当有新的线路需要添加或者需要对已有的线路信息进行修改,删除的时候,管理员就可以进行相应的操作。管理员也可以通过本模块查询到所有需要查询的线路的详细信息。 3,汽车信息管理模块:
系统管理员可以在汽车信息管理模块实现对汽车信息的管理。管理员首先应该建立汽车信息数据库,输入原始的数据信息,当有新的汽车信息的时候或者管理员需要修改某个汽车的相关信息以及想要删除某个汽车信息的时候,就可以完成相应的操作。管理员也可以在整个数据库中查询相关汽车信息。 4,车票信息管理模块:
系统管理员可以在车票管理模块实现对车票信息的管理。管理员根据相应的汽车信息和线路信息来设
<<数据库原理及应用>>课程设计报告 第 3 页,共 22 页
置相应的车票详细信息。管理员还可以对某条线路的车票信息进行修改,删除和查询操作。 5,车票订购信息模块
用户可以通过查询时间,线路和汽车信息,来确定自己要买什么时间,什么路线,什么型号的汽车的车票,并形成表单。
程序分为登陆界面,主界面,线路信息管理界面,汽车信息管理界面,车票信息管理界面,票务信息
管理界面,员工管理界面这几个主体界面。使用时应先知道管理员或员工帐号和密码,登陆进入系统主菜单界面,里面包括线路信息,汽车信息,车票信息,票务信息,帮助,退出程序菜单选项。
三、系统设计
(一)数据流图:
系统管理员 汽车,路线等信息汽车,线路等信息车站售票管理系统购票信息售票信息售票员 顶层数据流图
购票信息查询可供票处理买票车票车票记录售票记录车票信息信息处理汽车记录线路记录读入汽车信息信息处理站点信息站点记录
1层车票数据流图
<<数据库原理及应用>>课程设计报告 第 4 页,共 22 页
已售车票报表打印查看已售车票情况打印售票报表查看查询查询出售票售票员售票显示发车时刻发车时刻表信息处理汽车表线路表发车修改决定线路变更决定提取站点修改增,删,改增,删,改系统管理员增,删,改增,删,改人员变更
汽车变更站点修改站点表决定员工表 <<数据库原理及应用>>课程设计报告 第 5 页,共 22 页
(二)数据字典:
1, 数据项 编号 数据项名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Uno UserName Password UserIdentiey Cno Coachnumber Ctype Ctime Cnum Ctv Ccondition Coachholder Lno Ldepart Larrival Ltime Tno Price SoldTicket LastTicket Tdate Ttime Ptime Seat Cityno CityName 数据项含义说明 用户编号 姓名 密码 身份 汽车编号 车牌号 汽车型号 购买时间 座位数量 有无电视 有无空调 负责人 线路编号 起始城市 到达城市 路程时间 车票编号 车票价格 已卖票数 剩余票数 出发日期 出发时间 购买时间 座位号 站点编号 站点名称 数据类型 整型 nvarchar nvarchar nvarchar 整型 nvarchar nvarchar datetime 整型 char char nvarchar 整型 nvarchar nvarchar datetime 整型 整型 整型 整型 datetime datetime datetime 整型 char 整型 nvarchar 长度 4 20 20 20 4 20 20 8 4 10 10 20 4 20 20 8 4 4 4 4 8 8 8 4 10 4 20 与其他数据项的关系 User表主键 Coach表主键 Line表主键 Ticket表主键 City表主键 是否可以为空 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 不 ReserveORBuy 预定或购买 2, 数据结构 编号 1 2 3 4 5 6 数据结构名 员工 汽车 线路 车票 购票 站点 属 性 员工编号,姓名,密码,身份 汽车编号,汽车型号,车牌号,购买时间,座位数量,有无电视,有无空调,负责人 线路编号,起始城市,到达城市,路程时间 车票编号,线路编号,汽车编号,车票价格,已卖票数,剩余票数,出发日期,出发时间 车票编号,购买日期,预定或购买,座位号 站点编号,站点名称 <<数据库原理及应用>>课程设计报告 第 6 页,共 22 页 3, 数据流
编号 1 2 3 4 5 6 7 8 9 10 11 12
数据流名 变更汽车信息 查询汽车信息 变更站点信息 变更线路信息 查询线路信息 变更车票信息 查询车票信息 预定车票 购买车票 查询购买情况 更改用户 员工信息 输 入 变更信息 汽车编号/汽车型号/车牌号/有无电视/有无空调/负责人 变更信息 变更信息 线路编号/起始城市,到达城市 变更信息 车票编号/起始城市,到达城市/汽车型号/出发日期,出发时间 车票编号,购买日期,预定或购买 车票编号,购买日期,预定或购买 变更信息 用户输入电脑的用户名、密码 输 出 汽车记录 汽车记录 站点记录 线路记录 线路记录 车票记录 车票记录 预订记录 购买记录 用户记录 系统主菜单 车票编号/起始城市,到达城市/汽车型号 购买记录 4, 数据存储 数据存储名 用户信息 汽车信息 线路信息 车票信息 预定车票信息 购买车票信息
输入数据流 变更用户信息 变更汽车信息 变更线路信息 变更车票信息 车票信息 车票信息 输出数据流 查询用户信息 查询汽车信息 查询线路信息 查询车票信息 预订记录 购买记录 说 明 部 分 5、处理过程 处理过程名 查询 购买/预定 更新 用户权限认证
输入数据流 已知汽车/线路/车票信息 车票信息+购票时间+座位号 变更信息 用户名,密码,身份 输出数据流 所需信息 无 再次查询信息 系统主菜单 处理操作 用户登录 <<数据库原理及应用>>课程设计报告 第 7 页,共 22 页
(三)E-R图
姓名密码员工编号售票员身份预定或购买购买日期m购买座位号车票编号出发时间n车票价格剩余票数出发日期已卖票数负责人包含p车票m包含座位数量1汽车型号m到达城市1线路编号汽车有无电视车牌号管理路程时间n线路起始城市汽车编号m有无空调管理购买时间p系统管理员nm管理身份员工编号姓名密码站点站点编号站点名称
<<数据库原理及应用>>课程设计报告 第 8 页,共 22 页
(四)关系模型:
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车票信息表:
<<数据库原理及应用>>课程设计报告 第 9 页,共 22 页
4,Coach汽车信息表:
5,Purchase车票购买表:
6,Line线路表 :
(二)主要界面及代码 1,登录界面:
<<数据库原理及应用>>课程设计报告 第 10 页,共 22 页
登录操作代码:
(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
<<数据库原理及应用>>课程设计报告 第 11 页,共 22 页
2,系统主界面
3,员工管理界面:
修改/删除操作代码: (1) try
{
SqlCommandBuilder scb = new SqlCommandBuilder(sd); sd.Update(ds, \"a\"); ds.AcceptChanges();
MessageBox.Show(\"修改成功!\"); }
catch (Exception ex) {
<<数据库原理及应用>>课程设计报告 第 12 页,共 22 页
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(\"添加成功!\");
<<数据库原理及应用>>课程设计报告 第 13 页,共 22 页
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)
<<数据库原理及应用>>课程设计报告 第 14 页,共 22 页
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); } }
<<数据库原理及应用>>课程设计报告 第 15 页,共 22 页
6,车票信息管理界面:
7,车票信息管理中,选择汽车和路线界面:
<<数据库原理及应用>>课程设计报告 第 16 页,共 22 页
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
<<数据库原理及应用>>课程设计报告 第 17 页,共 22 页
) */ 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;
<<数据库原理及应用>>课程设计报告 第 18 页,共 22 页
}
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 */
<<数据库原理及应用>>课程设计报告 第 19 页,共 22 页
BEGIN
insert into Purchase(Tno,Ptime,ReserveORBuy,Seat) values (@tno,@datetime1,'预订',@seat) END
9,站点管理界面 10,购买成功界面
数据库连接类代码: /// /// SqlCE数据库保持连接类 ///
public class SqlHelper {
public SqlConnection sqlconn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; ///
string connStr = \"Data Source=(local);Initial Catalog=Coach;Integrated Security=True\"; sqlconn = new SqlConnection(connStr); }
<<数据库原理及应用>>课程设计报告 第 20 页,共 22 页
private SqlConnection GetConn() {
if (sqlconn.State == ConnectionState.Closed) {
sqlconn.Open(); }
return sqlconn; }
///
/// 数据库连接字符串 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(); } }
/// /// 执行不返回结果的SQL语句。比如:Insert,Delete,Update ///
/// 要执行的SQL语句 ///
SqlCommand cmd = this.sqlconn.CreateCommand(); cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text; return (cmd.ExecuteNonQuery()); }
/// /// 执行带参数的增删改SQL语句或存储过程 ///
/// 增删改SQL语句或存储过程 /// 命令类型 ///
public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) {
int res;
<<数据库原理及应用>>课程设计报告 第 21 页,共 22 页
using (cmd = new SqlCommand(cmdText, GetConn())) {
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); }
return res; }
/// /// 执行返回SqlCeDataReader结果集的SQL语句。比如:Select ///
/// 要执行的SQL语句 ///
public SqlDataReader ExecuteReader(string cmdText, CommandType ct) {
SqlDataReader reader; try {
cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); }
catch (Exception e2) {
throw new Exception(e2.Message.ToString()); }
return reader; }
/// /// 执行带参数的查询SQL语句或存储过程 ///
/// 查询SQL语句或存储过程 /// 参数集合 /// 命令类型 ///
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) {
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) {
dt.Load(sdr);
<<数据库原理及应用>>课程设计报告 第 22 页,共 22 页
}
return dt; }
}
五、课程设计心得体会
这次课程设计使我巩固了数据库和C#的知识,通过实践,我学到了很多课本上学不到的知识。在这次车站售票管理系统的开发过程中,我也遇到了许多的问题,例如:数据库连接错误,学习写存储过程,数据如何绑定等等,经过认真思考并在老师和同学的帮助下我顺利完成了本次设计。
首先我需要对车站售票管理系统进行系统分析:如需求分析和开发工具选择,功能分配等等。考虑要实现整个程序大致需要的几个模块画数据流图和数据字典。然后在概念模型设计中,将各局部应用涉及的数据分别从数据字典中抽取出来,参照数据流图,标定各局部应用中的实体、实体的属性,标识实体的码,确定实体之间的联系及其类型,设计E-R图。在逻辑结构设计阶段,把概念结构设计阶段设计好的基本E-R图转换为关系模型。接着进行数据库的建立还有代码的书写:这是一个至关重要而且需要反复修改的环节,在此环节中又发现总体设计和模块思想会存在很多问题,需要不断改进。如何实现各模块功能,达到预期效果也将是一项繁复的工作。最后还要进行测试系统,发现所有可能出现的问题。
虽然以前用C#做过网站,但通过这次课程设计,使我更加熟悉地掌握了C#及VS的运用,帮助我熟悉了更多连接数据库及与数据库有关方面的操作,从中学到了许多解决实际问题的经验。
参考文献
[1] 数据库系统原理与应用教程 李春葆 清华大学出版社
[2] 数据库系统原理与应用—SQL Server 2000 夏冰冰 国防工业出版社 [3] 数据库技术及应用 范剑波 浙江大学出版社
[4] 数据库技术与应用实践教程--SQL SERVER 严辉,刘卫国 清华大学出版社 [5] 数据库原理及应用 钱雪忠 北京邮电大学出版社 [6] 数据库技术与联机分析处理 王珊 北京科学出版社 [7] 数据库系统概论 王珊,萨师煊 高等教育出版社
[8] 数据库系统概论学习指导与习题解答 王珊,朱青 高等教育出版社 [9] 数据库技术及应用 苗雪兰 机械工业出版社 [10] 数据库系统概论 聂瑞华 高等教育出版社
[11] 数据库技术及应用实验指导与习题解答 苗雪兰 机械工业出版社 [12] 数据库系统教程(第二版) 施伯乐,丁宝康,汪卫 高等教育出版社 [13] 数据库基础与应用 王珊,李盛恩 人民邮电出版社
[14] 数据库系统原理(第2版) 李建中,王珊 电子工业出版社
[15] 数据库系统导论(第7版) C.J.Date,孟小峰,王珊翻译 机械工业出版社
因篇幅问题不能全部显示,请点此查看更多更全内容