车站售票管理系统数据库课设.docx
《车站售票管理系统数据库课设.docx》由会员分享,可在线阅读,更多相关《车站售票管理系统数据库课设.docx(51页珍藏版)》请在冰豆网上搜索。
车站售票管理系统数据库课设
中文摘要
本文针对车站的售票实际情况,按照软件工程的结构化设计思想,经过项目的需求分析、概要设计、详细设计,以及编码实现和调试等步骤设计开发了车站售票系统。
并运用E-R图和数据库逻辑结构、系统流程图、以及程序流程图,对该系统的数据需求、数据库、系统软件结构、系统流程、以及处理过程等进行了分析和设计。
工具软件利用VS2012开发工具和SQLServer2012数据库来开发这个车站售票管理系统。
该系统要解决的是车站售票工作所要解决的问题,可以满足车站售票的基本要求,包括票务管理、查询、报表打印、车次管理、账户管理、修改密码等六个方面的功能。
该系统能运用到车站售票的工作中,根据用户的需求,设置其权限,并快捷方便的为用户提供服务。
1引言 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调试与运行结果及存在的主要问题 38
5课程设计小结 61
6参考文献 62
1引言
课程设计的目的:
按照关系型数据库的基本原理,综合运用所学的基本知识,以小组为单位,设计开发一个小型的管理信息系统。
通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力,另一方面,使学生能深入理解和灵活掌握教学内容。
课程设计的要求:
考察市长途汽车站、火车站售票业务,设计车站售票管理系统。
要求:
①具有方便、快速的售票功能,包括车票的预订和退票功能,能够支持团体的预订票和退票。
②能准确地了解售票情况,提供多种查询和统计功能,如车次的查询、时刻表的查询等;
③能按情况所需实现对车次的更改、票价的变动及调度功能;
④完善的报表系统;
⑤具备一定的维护功能,如数据安全管理(含备份与恢复)、操作员管理、权限设置等;
该系统的开发环境为vs2012和sqlserver2012,是基于c#以及sqlserver数据库开发的一个车站售票管理系统。
我们小组有我以及同班同学严鑫剑,分工为:
严鑫剑负责开发用户登录、票务管理、查询三个子模块,本人负责开发车次管理、账户管理、修改密码三个子模块。
另外因为不知道如何具体在c#环境下运用触发器以及报表打印,所以系统中用到的触发器以及报表打印功能是我们两个共同完成的。
2概要设计
2.1.系统需求分析
本系统是严鑫剑与司房昭同学共同开发的,集车站售票退票,线路查询修改,车次管理,报表打印,账户管理等功能为一体的应用软件。
车站售票管理系统,为车站快速便捷售票提供了一个较好的解决方案。
本系统具有以下功能:
1.具有方便、快速的售票功能,包括车票的预订和退票功能,能够支持团体的预订票和退票。
2.能准确地了解售票情况,提供多种查询和统计功能,如车次的查询、时刻表的查询等。
3.能按情况所需实现对车次的更改、票价的变动及调度功能。
4.完善的报表系统。
5.具备一定的维护功能,如数据安全管理(含备份与恢复)、操作员管理、权限设置等。
在开发过程中,按照软件工程的步骤,从设计到开发采用了面向对象的思想和技术,采用了SQLSERVER2012数据库,使得本系统可以方便的和其他子系统进行数据交换。
同时,注意从软件的图形应用界面上优化软件质量,使得本系统具有很强的可操作性。
1. 开发的系统的一般描述
车站售票管理系统采用C/S体系结构,结合车站的实际需要,对票务管理和线路、车次信息进行高效有序的管理,提供丰富的管理和分析功能,用户界面友好,能满足车站售票管理的软件,提高车站工作效率。
本系统旨在车站管理人员与售票人员工作更加方便,以减轻工作人员的负担。
快速的对信息进行管理,输入,输出,查找,修改,删除的操作,是大量的工作更加的具体化,直观化,合理化。
2. 产品功能
开发的系统软件具有数据的更新,借阅的判定,数据的管理等功能。
3. 用户特点
本软件的使用对象是车站管理员与售票员。
可以方便的利用该软件进行车站售票的各种操作。
4. 一般约束
(1)本系统作为C/S结构的一个应用系统,不可避免的要受到C/S结构的约束。
在其实施的各个阶段都要服从它的一些规划,包括功能设计、系统配置和计划。
(2)硬件环境。
IntelPentium166MHz或以上;
内存:
需要至少512MHZ;
网络容量:
少于50人需16Mb/s的令版环网和10Mb/s可以勉强满足要求,建议100Mb/s的以太网或者更高。
设备需求:
打印机。
(3)软件环境
运行于Windows7及更高版本的操作系统之上。
SQLServer2012数据库。
5. 假设和依据
本系统要求具有较高的可靠性和保密性。
对于不同的用户给予不同的权限,对于各个用户的信息要安全稳定的存储。
本系统开发的时间为:
2012年12月20日至2013年01月02日。
2.2.系统结构设计
本系统主要由六个模块构成分别为:
用户登录,票务管理,查询,报表打印,修改密码,车次管理,账户管理。
通过这个六个模块,可以实现对车票的出售与退订,车次的查询、修改、增加与删除,线路的查询、修改,增加与删除,用户信息修改等等。
通过这下功能在本系统的实现,系统的使用者可以相当方便的对售票进行方便的管理。
在权限方面,分为管理员与售票员,功能区分,管理效率提高。
车站售票管理系统结构图
2.3.功能模块设计
本系统通过各个模块与数据库之间的调用,实现了售票管理所需的各个功能,方便使用。
1.登录模块
鉴于车站售票的实际情况,对于本系统的使用者,设置为管理员与售票员两种,方便管理。
系统管理员能享有查询,报表打印,修改用户密码,车次管理,账户管理五种功能。
而售票员可以进行票务管理,查询,报表打印,修改密码四种操作。
对于不同的用户,给予不同的权限,享有不同的操作。
2.票务管理
这是售票员用户特有的操作模块,主要负责车站的售票退票工作。
为了满足人们购票需要,加入了团体购票与团体退票功能。
在售票过程中,首先要进行条件查询。
在本系统中,则是依据出发站与到达站为查询依据,并显示查询结果。
出入要乘坐的车次,选择购票。
对于车票不足的车次则不能购买。
在购买车票时,如选择的座位已售出,能提示不能购买,选择其他座位。
选择正确的座位,则购票成功。
对于团体购票,同样的需要先进行查询,输入乘坐车次,对于车票,座位的各种情况给予判断,首先保证剩余的车票数量不小于售票数量才能进行团体售票。
在进行团体售票的座位选择时,加入了一个循环,在完成团体订票以前,对于座位情况一直给予判定,直至车票购买完毕,循环结束。
退票功能首先需要查询车票所属车次,查询成功后,弹出输入座位号界面窗口,输入已经购买过的座位号,选择退票,则会成功退票。
对于退票中的车次信息,座位信息都演进行判定,对于不存在的信息要给予提示,方面操作。
在使用团体退票功能时,也是需要输入所属车次,不同的是还需输入需要退票的数量,用来做循环。
成功判定退票后,依次输入退票的座位号,直至退票完毕。
在输入退票座位号是,如果未完成全部退票,就中断了操作,指挥进行已经输入座位号的退票操作,对于未输入的不会有影响,对剩余票数也是正常显示。
3.查询操作
在本系统中,包括了两种查询。
一种为车次查询。
输入正确的车次,则会在Datagridview显示出关于本车次的详细信息,包括车次,始发站,终点站,价格,余票,限载人数具体信息,方便操作人员进行其他操作。
另一种线路查询则需要输入起始站与终点站,则会出现所有这个路线所以车次的详细信息。
对于不正确的信息都要给予错误报告。
4.报表打印
5.修改密码
为了保证用户的安全系,以及管理员的权限操作,可以进行密码修改。
在修改时,需要输入用户名及其次用户的原密码才能进行密码修改操作。
对于用户名不存在或密码错误都要进行报错。
再确认新密码后可以修改成功。
6.车次管理
此模块为管理员特有模块,是为了可以是管理员根据实际情况对车次,票价进行改动,便于车站的系统管理。
鉴于管理员可能需要更改某个车次的路线,特加入了车次修改功能方便其操作。
输入需要修改的车次,以及实际的始发站及终点站,如果车次存在,即可完成修改。
对于不正常的输入要给予提示。
根据实际情况,车票价格不可能是一成不变的,所以加入改动票价功能是十分必要的,输入始发站与终点站和需要修改成的价格。
如果输入的这条线路存在,则按照你输入的价格进行修改。
如果输入线路不存在,则给予提示。
车次录入功能则是管理员管理车次最重要的一个功能,输入车次号,始发站,终点站,发车时间,价格,限载人数。
如果输入数据没有问题则可以完成录入操作。
车次删除功能是为了管理员删除那些无用的车次信息而设定的操作。
输入需要删除的车次,如果数据库信息里有输入的车次,则完成删除信息,如没有,则给予提示。
7.账户管理
此功能也是管理员特有操作。
为了保证系统的安全性,以及系统操作员权限的区分,此功能可以用来添加和删除用户,也可以修改账户的权限。
对系统的安全性有所改善。
系统处理流程图
3详细设计
3.1系统数据库设计
3.1.1概念结构设计
根据需求分析,E-R图表示的概念模型如下:
E-R图
3.1.2逻辑结构设计
由E-R图转换成为的关系模型如下:
用户表(用户名,密码,身份类型)
车次信息表(车次编号,起始站,终点站,出发时间,票价,余票,限载人数)
车票信息表(车次编号,座位号)
用户表主码为用户名,每一个非主属性既不部分依赖于码,也不传递依赖于码,所以符合3NF。
车次信息表主码为车次编号,每一个非主属性既不部分依赖于码,也不传递依赖于码,所以符合3NF。
车票信息表主码为车次编号和座位号,每一个非主属性既不部分依赖于码,也不传递依赖于码,所以符合3NF。
按以上关系模式在sqlserver2012中建立的表,如下所示:
用户信息表
车次信息表
车票信息表
建立外码,保持参照完整性。
Trainno表中的trainno为主码,ticket表中seat,trainno为主码,所以trainno为ticket表的外码。
为了让ticket表中座位号更加规范化,所以添加check约束。
输入表达式为:
(seatbetween‘1’and‘99’)
触发器的应用:
为了更好的同步车票余票信息,为ticket表建立触发器gengxingjian,每当ticket表插入数据时,对应的车次余票减1。
触发器gengxinjia每当有数据删除时,对于车次余票加1。
建立gengxinjian触发器:
Select*fromticket
GO
Createtriggergengxinjian onticketafterinsert
as
begin
declare@trainnonvarchar(10);
select @trainno=trainno
from inserted
updateTrainnosetlastticket=lastticket-1wheretrainno=@trainno
end
建立gengxinjia触发器:
Select*fromticket
Go
Createtrigger gengxinjiaonticketafterdelete
as
begin
declare@trainnonvarchar(10);
select @trainno=trainno
from deleted
updateTrainnosetlastticket=lastticket+1wheretrainno=@trainno
end
3.2系统主要功能模块设计
对于本系统的使用者,设置为管理员与售票员两种,方便管理。
系统管理员能享有查询,报表打印,修改用户密码,车次管理,账户管理五种功能。
而售票员可以进行票务管理,查询,报表打印,修改密码四种操作。
登录模块流程图
这是售票员用户特有的操作模块,主要负责车站的售票退票工作。
为了满足人们购票需要,加入了团体购票与团体退票功能。
票务管理流程图
在本系统中,包括了两种查询。
一种为车次查询。
输入正确的车次,另一种线路查询则需要输入起始站与终点站。
对于不正确的信息都要给予错误报告。
查询流程图
在修改时,需要输入用户名及其次用户的原密码才能进行密码修改操作。
对于用户名不存在或密码错误都要进行报错。
再确认新密码后可以修改成功。
修改密码流程图
此模块为管理员特有模块,包括车次修改,票价改动,车次删除,车次录入四个功能,方便管理员操作。
车次管理流程图
此功能也是管理员特有操作,可以用来添加和删除用户,也可以修改账户的权限。
对系统的安全性有所改善。
用户管理流程图
3.3各模块的主要算法对应的原代码
在系统原代码中含有大量的数据库连接,和关闭的代码,过于重复,故有时候会省略此部分代码。
1.登录模块
登录模块的主要算法是:
把输入的数据与数据库中存放用户信息的用户表进行比对,如果一致,则登陆成功。
登录功能主要的源代码为:
stringsql="select*fromLoginwhereusername='"+textBox1.Text+"'andpassword='"+textBox2.Text+"'andtype='"+comboBox1.Text+"'";
try
{
DataSetds=newsqlConnect().Getds(sql);
if(ds.Tables[0].Rows.Count>0)
{
stringusertype;
usertype=ds.Tables[0].Rows[0][2].ToString();
MessageBox.Show("登陆成功","登录",
MessageBoxButtons.OK,MessageBoxIcon.Information);
Mainmain=newMain();
main.Show();
if(usertype=="售票员")
{
main.account.Enabled=false;
main.trainmanagement.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();
}
}
2.查询模块
查询的算法就是把用户输入的数据当作查询条件,从数据库里面查询出相关信息。
思路是一样的,所以在此写其中的线路查询源代码:
stringsql="selecttrainnoas车次,starttimeas发车时间,priceas价格,lastticketas余票,numberas限载人数fromTrainnowhere1=1";
DataSetds=newDataSet();
SqlDataAdapterda;
SqlConnectionconn=newSqlConnection("DataSource=SIFANGZHAO-PC;InitialCatalog=ticket;IntegratedSecurity=True;");
if(textBox2.Text.Equals("")&&textBox3.Text.Equals(""))
{
MessageBox.Show("请输入始发站或者终点站");
}
else
{
try
{
if((textBox2.Text.Trim().Equals(""))==false)
sql+="andstart='"+textBox2.Text.Trim()+"'";
if((textBox3.Text.Trim().Equals(""))==false)
sql+="andfinish='"+textBox3.Text.Trim()+"'";
SqlCommandcomm=newSqlCommand(sql,conn);
da=newSqlDataAdapter(comm);
da.Fill(ds);
dataGridView2.DataSource=ds.Tables[0];
}
catch
{
MessageBox.Show("查询信息失败!
");
}
finally
{
conn.Close();
}
}
}
3.票务管理
票务管理的算法主要分为购票和退票两个主要的算法。
购票算法中首先需要根据始发站与终点站,查询出可以到达的车次,再根据购票者的选择选择车次,再选择座位,至此购票完成。
购票的算法:
1.查询的代码:
stringsql="selecttrainnoas车次,starttimeas发车时间,priceas价格,lastticketas余票,numberas限载人数fromTrainnowherestart='"+textBox1.Text.Trim()+"'andfinish='"+textBox2.Text.Trim()+"'";
DataSetds=newDataSet();
SqlDataAdapterda;
SqlConnectionconn=newSqlConnection("DataSource=SIFANGZHAO-PC;InitialCatalog=ticket;IntegratedSecurity=True;");
if(textBox1.Text.Equals("")||textBox2.Text.Equals(""))
{
MessageBox.Show("请输入起始站和终点站");
}
else
{
try
{
SqlCommandcomm=newSqlCommand(sql,conn);
da=newSqlDataAdapter(comm);
da.Fill(ds);
dataGridView1.DataSource=ds.Tables[0];
}
catch
{
MessageBox.Show("查询信息失败!
");
}
finally
{
conn.Close();
}
}
2.接下来输入车次,如果是团体购票还需要输入数量,选择购买的时候,检查一下选择的车次余票是否大于或者等于需要购买的数量,如果输入的车次无效或者票数不足,应当进行提示。
代码如下:
if((textBox7.Text.Trim().Equals("")||