this.DropDownList_qsz.DataTextField=this.dsbegin.Tables[0].Columns[0].ToString();
this.DropDownList_qsz.DataValueField=this.dsbegin.Tables[0].Columns[0].ToString();
this.DropDownList_qsz.DataBind();
3.4.3价格计算原理及代码
计算价格是本系统中比较复杂的一个模块。首先我们先了解一下铁路部门是如何计算车票价格的。火车票价格计算参数有四张表,它们分别是“普通列车硬座价格表”,“普通列车卧铺价格表”,“空调列车硬座价格表”,“空调列车卧铺价格表”
本系统数据库中有四张表
(putongliechejiage,putonglichewopujiage,kongtiaoliejiage,kongtiaoliechewopujiage),分别与上面四张表结构相对应。下面讲具体实现价格计算的流程:
价格计算的核心代码:(仅以普通列车硬座为例)
if((kongtiao==””)&&(zuoweileixing==”硬座”)) //如果是普通列车硬座 {
this.sqlDataAdapter_putongche.SelectCommand.CommandText=”select里程,普通列车,普快列车,特快列车,空调费率 ,座位类型from putongliechejiage “; //构造查询语句
if(this.sqlConnection2.State.ToString()==”Closed”) this.sqlConnection2.Open(); //打开数据库
this.sqlDataAdapter_putongche.Fill(this.dsputongche); //执行查询语句 int hangshu=this.dsputongche.Tables[0].Rows.Count; //记录查询结果的行数
21
基于.NET 火车售票系统的设计与实现
if(leixing==”普通”) //如果车辆类型为“普通” {
for(int i=0;i { if(lucheng>=decimal.Parse(this.dsputongche.Tables[0].Rows[i][0].ToString())&&lucheng //判断路程是在那个范围内 {jiage=decimal.Parse(this.dsputongche.Tables[0].Rows[i][1].ToString())+decimal.Parse(this.dsputongche.Tables[0].Rows[i][4].ToString()); //得出价格 break; //退出循环 } } } 3.4.4售票模块界面 1.售票界面: 22 图3.9售票界面 3.5订票模块 订票模块和买票模块共用一个界面,当在软件主界面分别点击买票和订票按钮时,通过URL传递给买票页面的参数(flag)不一样,买票页面在page_load事件里面先判断flag的值,如果flag=1,买票界面下面的用户信息栏(如图5-11)不显示,如果flag=2则显示用户信息栏。其它的操作原理基本一致,只是订票操作在dingpiao表中要记录的字段多一些,这里不再阐述。 3.6退票模块 退票模块主要有两个功能:退票和退订,如果用户已经买到票,又想把票退掉,可以选择退票功能,前提是车票上的开车日期在退票之后,否则不能退;如果用户有过订票记录,但还没拿到票,现在又想取消订票,可以选择退订功能,退票和退订在合法的时间范围内返给用户的金额是原价的80%(本系统暂定为 23 80%)。退订和退票的操作流程一致,如下: 选择退票方式-}输入车次-〉选择时间-〉点“确定”-〉选择起始站和终点站-〉选择作为类型-〉输入票数—〉点“价格”-〉点退票。 这里要注意的是,如果用户选择的是退订方式,底下的用户信息栏用户要如实填写,即和订票时输入的信息要完全一样,否则退票操作不能完成。 3.6.1退票方式 用户选择退票时,系统重新加载页面显示退票要填写的信息栏。用户点退票按钮后,系统先判断所有的信息栏有没有空值,如果有给出错误提示“信息输入不完整”,如果没有空值,获取系统时间,用车票上的开车时间减去系统时间得到差值,如果差值大于等于零,表示可以退票,把订票表里面的该条买票纪录删除,并在车次基本信息表的对应车次和对应座位类型票数上加上退票数。退票方式中用到的确定车次和计算价格和买票模块中的原理基本一样,唯一不同的是退票方式下的计算价格返回的是两个值,一个原价,一个现退金额,买票模块中的计算价格只返回一个价格。 3.6.2退订方式 退订方式和退票方式界面大体一致,只是退订方式比退票多了一个用户信息栏,实现的原理也差不多,只不过退订在删除订票记录的时候必须要验证订票用户信息,当用户名,身份证号都对应上,才可以删除该条订票记录,删除订票记录后,也要修改车次基本信息表的剩余票数。 基于.NET 火车售票系统的设计与实现 3.7查询模块 查询模块的功能是当用户买票时,他只知道开车时间,起始站和终点站,但是不知道坐哪趟车,或者是用户想了解车次的详细信息等等。用户这些需求都可以通过查询功能来实现。 24 图3.7查询模块的操作 3.7.1查询模块关键代码 1.DateGrid控件 DateGrid(数据网格)控件是用来把数据库中的查询结果展示给用户,使用之前先要设置好它的数据源和数据成员。当执行了查询语句后,填充数据集,再执行数据网格绑定,数据就可以展示出来。 本页面的DateGrid控件主要有以下几个事件: DataGrid_ItemComman事件。这个事件里面常用的命令有两种:select ,delete, DateGrid里面用到的是select命令,也就是我们在查询结果中看到的“购买”。如图5-16: 图3-16 车次查询结果 这个事件的代码如下: if(e.CommandName==”Select”) //判断命令类型 { 25