车站售票管理系统数据库课设_车站售票管理系统课设
车站售票管理系统数据库课设由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“车站售票管理系统课设”。
中文摘要
本文针对车站的售票实际情况,按照软件工程的结构化设计思想,经过项目的需求分析、概要设计、详细设计,以及编码实现和调试等步骤设计开发了车站售票系统。并运用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 paword='” + 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();MeageBox.Show(“登陆成功”, “登录”, MeageBoxButtons.OK, MeageBoxIcon.Information);Main main = new Main();main.Show();if(usertype == “售票员”){ main.account.Enabled = false;} if(usertype == “管理员”){ main.piaowu.Enabled = false;}
this.Hide();} else { MeageBox.Show(“用户名或密码错误,请重新输入!”, “登录”, MeageBoxButtons.OKCancel, MeageBoxIcon.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(“”)){ MeageBox.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 { MeageBox.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(“”)){ MeageBox.Show(“请输入起始站和终点站”);} else { try
{ SqlCommand comm = new SqlCommand(sql, conn);da = new SqlDataAdapter(comm);da.Fill(ds);dataGridView1.DataSource = ds.Tables[0];} catch { MeageBox.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 {
MeageBox.Show(“选择班次成功,请选择座位!”);tuanmai tm = new
tuanmai(this.textBox7.Text.Trim(), textBox8.Text.Trim());tm.Show();} catch { MeageBox.Show(“购票失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} } catch { MeageBox.Show(“购票失败!”);} } else { MeageBox.Show(“购票失败,票数不足!或者输入车次错误,不存在此车次!”);} } else { MeageBox.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();MeageBox.Show(“选择座位成功,购买成功!”);count++;if(count == amount){ MeageBox.Show(“购票完成!”);this.Close();}
} catch { MeageBox.Show(“选择座位失败,购买失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { conn.Close();}
} catch { MeageBox.Show(“选择座位失败,购买失败!”);} } else { MeageBox.Show(“选择座位失败,该座位已经卖出!”);} } else { MeageBox.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
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();MeageBox.Show(“退票成功!”);count++;if(count == amount){ MeageBox.Show(“退票完成!”);this.Close();} } catch { MeageBox.Show(“退票失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { connn.Close();} } else { MeageBox.Show(“该车次尚未出售此座位,请重新输入!”);} } else { MeageBox.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 paword = '” + textBox3.Text + “' where username = '” + textBox1.Text + “' and paword ='” + textBox2.Text + “'”;if(this.textBox3.Text.Equals(this.textBox4.Text)){ try { conn.Open();cmd = new SqlCommand(updatestr, conn);isnull= cmd.ExecuteScalar();if(isnull!= null){ MeageBox.Show(“密码修改成功!”, “密码修改”, MeageBoxButtons.OK, MeageBoxIcon.Information);
this.Close();} else { MeageBox.Show(“密码修改失败,输入了无效的用户名,请重新输入!”);} } catch { MeageBox.Show(“密码修改失败,原密码输入错误!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { conn.Close();} }
else { MeageBox.Show(“两次输入的新密码不一致!”, “错误”, MeageBoxButtons.OK, MeageBoxIcon.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)
MeageBox.Show(“车次更改成功!”);else { MeageBox.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();MeageBox.Show(“录入成功!”);textBox7.Clear();textBox8.Clear();textBox9.Clear();textBox10.Clear();textBox11.Clear();textBox12.Clear();} catch { MeageBox.Show(“录入失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { conn.Close();} } catch { MeageBox.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){ MeageBox.Show(“删除车次成功!”);textBox1.Clear();} else { MeageBox.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)MeageBox.Show(“改价成功!”);else
MeageBox.Show(“输入起始站或者终点站有误,不存在此线路!”);
} catch { MeageBox.Show(“改价失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { conn.Close();}
} catch { MeageBox.Show(“改价失败!”);} 7.账户管理
账户管理包括账户修改、账户添加、账户删除。1.账户修改
根据输入的账户信息,进行系统校验。如果存在则修改账户 信息,否则给出失败提示信息。关键性源代码:
int isnull;if(textBox1.Text.Equals(“”)||
comboBox1.Text.Equals(“”)){ MeageBox.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){ MeageBox.Show(“修改成功!”);textBox1.Clear();} else { MeageBox.Show(“修改失败,输入了无效的帐户”);} } catch { MeageBox.Show(“修改失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);}
finally { conn.Close();}
} catch { MeageBox.Show(“修改失败!”);} } 2.账户添加
根据输入的相关信息,系统进行校验,如果不存在同名的用户,则进行添加。否则给出相关错误提示信息。关键性源代码:
if(textBox3.Text.Equals(“”)|| textBox2.Text.Equals(“”)||comboBox2.Text.Equals(“”)){ MeageBox.Show(“请输入需要添加的的帐户信息”);} else { try {
SqlConnection conn = new SqlConnection(“Data Source=SIFANGZHAO-PC;Initial Catalog=ticket;Integrated Security=True;”);string sql = “ insert into login(username,paword,type)values('” + textBox1.Text.Trim()+“','”+textBox2.Text.Trim()+“','”+comboBox2.Text.Trim()+“')”;SqlCommand cmd;try { conn.Open();cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();MeageBox.Show(“添加帐户成功!”);textBox1.Clear();} catch { MeageBox.Show(“添加帐户失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { conn.Close();} } catch { MeageBox.Show(“添加帐户失败!”);} } 3.账户删除
根据输入的信息,系统进行校验,如果存在此用户,则删除。否则给出相关错误提示,如:账户名无效等。关键性源代码:
int isnull;if(textBox4.Text.Equals(“”)){ MeageBox.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){ MeageBox.Show(“删除帐户成功!”);textBox1.Clear();} else { MeageBox.Show(“删除帐户失败,输入了无效的帐户”);}
} catch { MeageBox.Show(“删除帐户失败!”, “错误”, MeageBoxButtons.RetryCancel, MeageBoxIcon.Information);} finally { conn.Close();} } catch { MeageBox.Show(“删除帐户失败!”);} }
4 调试与运行结果及存在的主要问题
1.登录
2.查询 车次查询
线路查询
3.票务管理 售票
(1)售票查询
38(2)输入购买车次
(3)购买车次有误
39(4)选择座位成功
(5)座位冲突无法售出
退票
(1)输入退票车次
(2)输入无效车次
(3)输入座位号,成功退票
(4)座位未出售,退票失败
团体售票
(1)团体购票查询
(2)团体购票车次不存在43
(3)团体购票车次成功
(3)团体第一次出售
(4)团体第二次出售
(5)团体购票完成45 团体退票
(1)输入退票车次与退票数量
(2)输入无效车次
46(3)团体退票第一次退票
(4)团体退票第二次退票
47(5)团体退票完成(6)团体退票座位未出售