}
}
else if(s
System.out.println(\你输入的数小了\
}
else{ } }
System.out.println(\恭喜你猜对了\break;
System.out.println(\是否再来一次:y/n\Scanner stb=new Scanner(System.in); String b =stb.next(); cha=b.toString();
}
}
3.2注册模块
3.2.1实现原理
注册模块里有两种注册方式:代售点注册和企业用户注册。代售点注册是针对火车站下属的售票窗口,企业用户注册是针对长期需要购票的企事业单位,如
16
大中专院校和企业单位。这两种不同的注册方式要求用户填写的注册信息不同,但是它们的注册信息是存放在同一张表(user表)里面的。既然注册信息都放在一张表里面,那么如何区分两种不同的用户?本系统从user表里的两个字段来区分:一是“代售点编号”字段,如果是代售点注册,系统在用户注册时自动分配给该用户一个编号,如果是企业用户注册,该字段为空;二是通过“用户类型来区分”,如果是代售点注册,用户类型为“1”,如果是企业用户注册,该字段值为“2”,如果是高级管理员该字段值为“0”,这个字段的值在订票和买票操作中要用到,因为不同的用户类型他的提前订票和买票时间不同。
在注册页面当用户点击两个RadioButton按钮:代售点注册和企业用户注册,这两个组件的AutoPostBack属性的值都为True,并且它们Grounpname相同,当用户任意点击其中一个,系统会自动把用户选择返回给服务器,服务器根据选择的注册方式初始化页面,点击两个RadioButton出现的用户信息填写框不同。这里是把两种用户注册信息放到一个页面里,在页面的page_load事件里,判断是那种注册方式,根据不同的注册方式隐藏一种,显示另外的信息栏。
当用户点击确定(注册)按钮时,系统首先判断页面上所有的信息栏有没有空,有空则提示“信息输入不完整”,否则进入下一步判断,用户注册页面这里要求用户名6-16个字符,密码8-16个字符,所以这里要判断用户名和密码格式是否合法,密码和重复密码要一致,密码长度要合法。如果输入信息都满足上述条件,把用户的注册信息存储到user表(用户表)里面,然后系统跳转到注册成功页面,在此页面停留5秒钟,自动回到用户登录页面,这里用户也可以手动点击回到用户登录页面。
3.2.2 Button_queding_Click事件(提交事件) ◆Button_queding_Click事件的核心代码如下:
this.sqlDataAdapter_user.InsertCommand.CommandText=”insert into [user] (序号,用户名,密码,联系方式,负责人,代售点编号,具体地址,身份证,用户类型) values(.”+xuhao+”.,.”+xingming+”.,.”+mima+”.,.”+lxfs+”.,.”+fzr+”.,.”+bianhao+”.,.”+dz+”.,.”+sfz+”.,.”+yonghuleixing+”.)”;//构造sql插入语句
17
if(this.sqlConnection1.State.ToString()==”Closed”) this.sqlConnection1.Open();//打开数据库连接
this.sqlDataAdapter_user.InsertCommand.ExecuteNonQuery();//执行插入语句
this.Response.Redirect(“zhucechenggong.aspx”);//跳转到注册成功信息页面
◆获取IP的代码如下 :
this.Label_IP.Text=Page.Request.UserHostAddress; ◆获取浏览器版本号的代码如下:
this.Label_LLQ.Text=Request.Browser.Version; 基于.NET 火车售票系统的设计与实现
3.3系统主界面
系统主界面是所有系统其它所有模块的入口,主界面上的所有按钮鼠标点击事件主要执行两种代码:一是直接跳转如:
this.Response.Redirect(“黑龙江x.aspx”);,“黑龙江x.aspx”是其它功能页面的名称,
二是在主界面的上弹出新的窗口,如: string msg;
msg = “”;
this.RegisterStartupScript(“个人信息”,msg);//执行javascript脚本
图3.3系统主界面
3.4售票模块
3.4.1实现原理
在买票页面,用户需要输入购买的车次,开车时间,起始站,终点站,座位类型,是不是学生票,票数,等信息。这里要注意的是:当用户输入车次后,直接去点起始站和终点站的下拉菜单是没有可选值的,正确定操作是输入车次后,点确定,系统会根据车次把该车次的详细路段信息绑定到起始站和终点站的下拉菜单里面,为什么要输入车次后点击确定?这就是B/S结构系统得特点,要想得到结果必须要把数据提交给后台服务器,如果只是输入车次不点确定,后台无法确定车次信息。同样的道理,当上面的车票信息都填写完后要点击价格按钮,系统会根据车次信息把价格计算出来,显示给用户。计算出来价格后,用户就可以点击购买按钮,进行买票。
点击购买按钮后,系统首先从Senssion[“name”]里面得到当前登录的用户名,根据用户名在user表(用户表)里面找到该用户的用户类型,根据用户类型得出该用户的提前买票时间;然后把当前的系统时间和开车时间求差值,把这个差值和提前买票时间做个比较 ,如果差值大于提前买票时间,提示“不在
19
购票期限内!”。否则,在dingpiao表(订票表)里面添加买票纪录 ,在tickets表(车次信息表)里把对应的车次对应座位类型的票数减去购买的票数;最后给出买票详单,买票详单上显示了车票的具体信息,这些字段信息是如何获得的?
通常有两种方法:一,买票操作成功后,调用买票详单页面,通过URL把所有的车票信息传递过去;二,调用买票详单页面时,只传递车次,详单页面的page_load事件里面直接获取车次,根据车次去订票表里面查找购票信息,再把它们显示出来,本系统用的是第二种方法。买票详单上面有打印按钮,点击它可以把车票打印出来。
3.4.2绑定车次代码
DropDownList_qsz(起始站下拉框)和DropDownList_zdz(终点站下拉框)两个下拉框开始时是空的,当用户输入车次后,点击“确定”按钮,系统会根据车次从数据库里面的ticketsinf表查询该车次的所有沿途站点,并把它绑定到DropDownList_qsz和DropDownList_zdz上,用户就可以从DropDownList_qsz和DropDownList_zdz里面分别选择起始站和终点站。
Button_quding_click(确定车次)事件里绑定起始站的核心代码如下: dsbegin=new DataSet(); //存放起始站的查询结果
sql=”SELECT出发站FROM ticketsinf”; /* 构造查询语句 sql+=” where车次=’”+ this.Text_checi.Text.Trim()+”’”; */
if(this.sqlConnection1.State.ToString()==”Closed”) /*打开数据库连接 this.sqlConnection1.Open(); */
this.sqlDataAdapter_ticketsinf.SelectCommand.CommandText=sql; /*执行查询操作
this.sqlDataAdapter_ticketsinf.Fill(this.dsbegin); */
this.DropDownList_qsz.DataSource=this.dsbegin; //以下为绑定起始站代码 this.DropDownList_qsz.DataMember=this.dsbegin.Tables[0].ToString();
20