1、 软 件 学 院综合训练项目报告书课程名称 .NET 框架程序设计 项目名称 机票预订系统 专业班级 软件 13- 7 班 组 别 第 9 组 成 员 任课教师 刘亮 目 录1 设计时间 .32 设计任务 .33 设计内容 .33.1 问题分析 43.1.1 新用户注册 .43.1.2 验证密码登陆 .43.1.3 用户信息界面 .43.2 程序设计 53.3 测试与分析 83.3.1 测试 .83.3.2 分析 .83.4 代码 94 总结与展望 .24参考文献 251 设计时间2016-1-192 设计任务当今世界,以信息技术为主要标志的科技进步日新月异,高科技成果向现实生产力的转化越来越
2、快。纵观全球经济发展,信息技术和信息产业已经成为经济增长的主要推动力之一,正在改变着传统的生产和经营方式以至生活方式,发达国家经过产业结构的升级和经济结构的转型已进入信息经济阶段。信息资源已经成为国民经济和社会发展的战略资源,信息化水平也已成为现代水平和综合国力的重要标志。今年是“十五”计划开局之年,中共十五届五中全会通过的国民经济和社会发展第十个五年计划建议中已明确指出:“信息化是当今世界经济和社会发展的大趋势,也是我国产业优化升级和实现工业化、现代化的关键环节。 ”“大力推进国民经济和社会信息化,是覆盖现代化建设全局的战略举措。 ”,可见,党和国家已将国民经济和社会信息化放在优先发展位置,
3、体现了先进生产力的客观要求,是一项重要的战略决策。这是民航加快发展的机遇,更是民航信息化的难得机遇。 随着知识经济的到来,人类已经逐步进入信息化社会,信息增长的速度越来越快,人们希望利用先进的管理理论方法手段来得到并处理越来越多的信息,以提高工作效率和管理水平。由于信息资源对人们生活的重要性,不断提高信息的收集,传输,加以利用等活动,日益成为人们社会生活的重要组成部分。网上机票预订管理系统的产生和发展正好满足人们的这种需求。现在将详细介绍我的课程设计机票预订系统。 3 设计内容 随着民航事业的壮大,人们消费水平的提高,在现实生活中,乘坐民航的消费者也越来越多。由于中国人口众多,订购机票成为了旅
4、客们最头疼的问题!怎样为旅客提供高效,便捷的服务是国家在航空运输中应该首要解决的问题。通过网络实现机票预定已经成为一种消费的时尚,给消费者带来极大的便捷!预定查询系统因此在各机票预定网点中的作用也越显重要。因此,开发一套具有完整的存储,查询,核对,打印机票功能的实时机票预定系统更显紧迫。机票预定系统应克服存储乘客信息少,查询效率低下等问题外,更重要的是其安全性,可靠性,这关系到航班的乘客的安全及准确,本系统因面向广大机票预定网点,因此要能在售票网点中普及,则需要开发一个功能全,价格能被顾客所接受的系统。系统要实现的基本功能是航班的售票,订票,退票,乘客信息的管理;而系统在以后扩展时还可以实现的
5、功能有:对机组工作人员的管理,预定机票的送票情况管理等。此系统的开发由我们分模块完成,而我所负责的模块是实现系统的售票,订票,退票功能。要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要简单明了,易于操作,服务器程序利于维护。机票预定管理系统是典型的信息管理系统,其主要开发包括后台数据库的建立和维护,以及前端应用程序的开发两个方面。对于前者要求建立起数据库一致性和完整性强,数据安全性好的库。而后者则要求应用程序功能完备,易使用等特点。3.1 问题分析 3.1.1 新用户注册新用户可以注册,注册时输入用户名可以查询用户可不可用,可用就可以注册,注册时可以判断用户输入的密码
6、和验证密码是否相同,相同才给以注册, 如果满意可以点注册,注册成功后用户可以选择不用在回到登陆界面,可以直接 陆到用户主界面,以后就可以用这个用户登录了。3.1.2 验证密码登陆验证登陆名密码,正确进入主菜单,如果输入相应用户密码正确,跳转;不正确则清空登录框,最多可以输入三次,三次不正确系统会自动关闭。3.1.3 用户信息界面 主窗体的用户信息界面,用户点击个人查询按钮,可以把自己的个人信息显示到界面上,还可以对自己的信息进行相应的修改,还可以点击我的机票查询,查询该用户的订票记录;选择订购往返票可以继续预订该架航班的往返票,否则只能订购单程票;3.1.4 订票界面主窗体的订票界面,你可以点
7、击你想查询的有关机票的信息的按钮(查询出发地,查询目的地,航线查询,客户信息查询)获得相关信息的表,根据表的内容,你可以选中你要定的票信息,点确定后在下面会显示你的机票的相关内容,如果满意可以点击订票,把相关信息添加到机票数据库表中,跳转到支付界面;如果不满意,可以点击返回,所有信息清空,再重新选择;图 1 机票预定系统业务系统功能图3.2 程序设计1.本程序中用到的所有抽象数据类型的定义及实现;数据表的数据结字典表名 描述航空信息表 用于存储各个航班的航行情况票价 用于存储各个航班路线的价钱等信息机票订单 用于存储用户的下单情况用户信息 用于存储用户的个人基本信息,完成注册、登陆等操作往返票
8、 用于存储客户下单的往返票信息单程票 用于存储客户下单的单程票信息数据库序列的数据字典序列 描述seqid 用于实现订单的订单号的自增和航空信息表的 id 信息的自增触发器的数据字典触发器 描述in_wangfanpiao 实现机票订单表完成删除操作后将这条数据插入往返票表航空信息表;票价表;机票订单表;用户信息表;往返票表;单程票表;将 E-R 图转换成关系模型,关系的主码用横线标识:航空信息表(did,航空公司,出发城市,到达城市,飞机型号,起飞时间 ,到达时间,出发日期)票价(did ,航空公司 ,出发城市,到达城市 ,飞机型号 ,起飞时间 ,到达时间 ,出发日期,单程票价 ,往返票价)
9、机票订单(did ,航空公司 ,出发城市 ,到达城市 ,飞机型号),起飞时间 ,到达时间 ,出发日期 ,单程票价 ,往返票价 ,订购时间)用户信息(id ,用户名 ,密码 ,联系方式 ,身份 , 状态)往返票(did ,航空公司 ,出发城市 ,到达城市 ,飞机型号,起飞时间 ,到达时间 ,出发日期 ,往返票价 ,订购时间 )单程票(did ,航空公司,出发城市,到达城市,飞机型号 ,起飞时间 ,到达时间 ,出发日期 ,单程票价 ,订购时间)2.主程序的流程及函数的调用关系图。3.3 测试与分析3.3.1 测试给出测试数据,输出测试的结果,测试数据应该完整(覆盖算法各种情况)。在登陆部分我用了
10、session 对象来保持登陆的状态,用 for 循环控制登陆输入的次数,用 exexcutescalar 来返回选择数据库用户名和密码的有无情况;在各个部分显示数据库的数据用到了 gridview 控件,在支付界面使用了 for 循环选择 gridview 的行的长度,并且使用 checkbox 来检查哪行被选中,从而实现支付算法;从 gridview 中选择要插入的行到数据库中也是这样设计的,不过相应的代码不同,其他用 gridview 中的编辑选项实现删除操作,将删除的 text 改成选购,当删除某一行时,利用数据库中设置的触发器将这行数据插入到已购订单表中,从而实现选购。购票成功后还可
11、以利用 gridview来显示,不满意还可以删除之。3.3.2 分析1.调试过程中遇到的问题是如何解决的以及对设计与实现的回顾、讨论和分析;运行程序的时候出现了很多 bug,经过一番分析最终得到了解决。比如插入数据的时候遇到插错行或者不能插入的情况。2.算法的时间复杂度和空间复杂度的分析,改进设想。从这方面分析,我的算法比较简单但是相同的代码写了很多遍,我觉得应该适当的将这部分相同的代码放在一个函数中,用其他模块来调用,这样才能提高软件的运行效率和可读性。3.4 代码源程序代码及必要注释。MasterPage.master.csprotected void Page_Load(object s
12、ender, EventArgs e)DateTime d = DateTime.Now;Label1.Text = d.ToLongDateString() + d.ToLongTimeString();if(Session“pass“=“right“)HyperLink1.Text=“已登录“;HyperLink1.NavigateUrl = “/用户订单.aspx“;if (Session“tiaozhuanzhuye“ = “right“)Label2.Text = “登陆超时,请重新登陆! “;登陆.aspx.csprotected void Button1_Click(object
13、 sender, EventArgs e)String conStr = ConfigurationManager.ConnectionStrings“ConnectionString“.ConnectionString;OracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand cmd = new OracleCommand(“SELECT 用户名 FROM 用户信息 WHERE 用户名 = “ + TextBox1.Text + “, conn);if (Button1.TabIndex 3)
14、Session“tiaozhuanzhuye“ = “right“;Response.Redirect(“Default.aspx“);elseif (cmd.ExecuteScalar() = null)Label1.Text = “用户名不存在 !“;Session“pass“ = null;/double.Parse(Button1.TabIndex+;elsecmd.CommandText = “select 用户名,密码 from 用户信息 where 用户名 =“ + TextBox1.Text + “and 密码 =“ + TextBox2.Text + “;/cmd.Conne
15、ctionif (cmd.ExecuteScalar() = null)Label1.Text = “密码错误,请重新输入 !“;Session“pass“ = null;Button1.TabIndex+;elsecmd.CommandText = “select 用户名,密码,状态 from 用户信息 where 用户名 =“ + TextBox1.Text + “and 密码 =“ + TextBox2.Text + “ and 状态=1“;if (cmd.ExecuteScalar() = null)Session“pass“ = “right“;cmd.CommandText = “
16、update 用户信息 set 状态=1 where 用户名 =“ + TextBox1.Text + “;cmd.ExecuteNonQuery();conn.Close();Response.Redirect(“用户订单.aspx“);/Label1.Text = “此用户 id 已经处于登录状态“;elseLabel1.Text = “此用户 id 已经处于登录状态“;Button1.TabIndex+;/*Session“pass“ = “right“;cmd.CommandText = “update 用户信息 set 状态=1 where 用户名 =“ + TextBox1.Tex
17、t + “and 密码 =“ + TextBox2.Text + “;cmd.ExecuteNonQuery();Session“khbj“ = TextBox1.Text;Response.Redirect(“用户订单.aspx“);*/conn.Close(); 票价.aspx.csString conStr = ConfigurationManager.ConnectionStrings“ConnectionString“.ConnectionString;protected void Page_Load(object sender, EventArgs e)DateTime d = D
18、ateTime.Now;Label2.Text = d.ToLongDateString() + d.ToLongTimeString();protected void Button2_Click(object sender, EventArgs e)OracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand cmd = new OracleCommand(“select 用户名 from 用户信息 where 用户名 =“ + TextBox1.Text + “, conn);if(cmd.Ex
19、ecuteScalar()=null)Label1.Text = “用户不存在,验证失败 ,请重新验证“;else Label1.Text = “验证通过“;protected void Button1_Click(object sender, EventArgs e)OracleConnection conn = new OracleConnection(conStr);conn.Open();for (int ii = 0; ii GridView1.Rows.Count; ii+)CheckBox cc = GridView1.Rowsii.FindControl(“CheckBox1“
20、) as CheckBox;if (cc.Checked)SqlDataSource1.InsertParameters.Clear();SqlDataSource2.InsertParameters.Clear();SqlDataSource2.InsertParameters.Add(“DID“, TextBox1.Text);SqlDataSource2.InsertParameters.Add(“航空公司“, GridView1.Rowsii.Cells1.Text);SqlDataSource2.InsertParameters.Add(“出发城市“, GridView1.Rowsi
21、i.Cells2.Text);SqlDataSource2.InsertParameters.Add(“到达城市“, GridView1.Rowsii.Cells3.Text);SqlDataSource2.InsertParameters.Add(“飞机型号“, GridView1.Rowsii.Cells4.Text);SqlDataSource2.InsertParameters.Add(“起飞时间“, GridView1.Rowsii.Cells5.Text);SqlDataSource2.InsertParameters.Add(“到达时间“, GridView1.Rowsii.Ce
22、lls6.Text);SqlDataSource2.InsertParameters.Add(“出发日期“, GridView1.Rowsii.Cells7.Text);SqlDataSource2.InsertParameters.Add(“单程票价“, GridView1.Rowsii.Cells8.Text);SqlDataSource2.InsertParameters.Add(“往返票价“, GridView1.Rowsii.Cells9.Text);/SqlDataSource2.InsertParameters.Add(“订购时间“, Label2.Text);/SqlDataS
23、ource1.InsertCommand = “insert into 机票订单 values(“+a+“,“+b+“,“+c+“,“+d+“,“+t+“,“+f+“,“+g+“,“+h+“,“+i+“,“+k+“)“;/Session“ccsj“ = Label2.Text;Session“khbj“ = TextBox1.Text;SqlDataSource2.Insert();Label1.Text = “成功加入我的订单 “;else Label1.Text = “加入订单失败!请重试或返回 “;conn.Close();往返票.aspx.csprotected void Page_L
24、oad(object sender, EventArgs e)Session“wangfan“=“right“;if (Session“zhifu“ = “right“ for (int ii = 0; ii GridView2.Rows.Count; ii+)String conStr = ConfigurationManager.ConnectionStrings“ConnectionString“.ConnectionString;OracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand
25、cmd = new OracleCommand(“delete from 单程票 where 出发城市 =“ + GridView2.Rowsii.Cells2.Text + “ and 到达城市=“ + GridView2.Rowsii.Cells3.Text + “ “, conn);cmd.ExecuteNonQuery();conn.Close();protected void Button2_Click(object sender, EventArgs e)if (Label1.Text = “|Label1.Text =“0“) Label2.Text = “支付失败!“; els
26、e Response.Redirect(“支付.aspx“); protected void Button1_Click(object sender, EventArgs e)double sum = 0.0;for (int ii = 0; ii GridView1.Rows.Count; ii+)CheckBox cc = GridView1.Rowsii.FindControl(“CheckBox1“) as CheckBox;if (cc.Checked)sum += (double.Parse(GridView1.Rowsii.Cells8.Text);Label1.Text = s
27、um.ToString();protected void Button3_Click(object sender, EventArgs e)if (Session“zhifu“ = “right“ Session“wangfan“ = “;elsefor (int ii = 0; ii GridView2.Rows.Count; ii+)String conStr = ConfigurationManager.ConnectionStrings“ConnectionString“.ConnectionString;OracleConnection conn = new OracleConnec
28、tion(conStr);conn.Open();OracleCommand cmd = new OracleCommand(“delete from 往返票 where 出发城市 =“ + GridView2.Rowsii.Cells2.Text + “ and 到达城市=“ + GridView2.Rowsii.Cells3.Text + “ “, conn);cmd.ExecuteNonQuery();conn.Close();/*调用删除代码*/修改密码.aspx.cstryconn.Open();OracleCommand cmd = new OracleCommand(“selec
29、t 用户名 from 用户信息 where 用户名 =“ + TextBox1.Text + “, conn);if(cmd.ExecuteScalar()=null)Label1.Text = “用户名不存在!“;TextBox1.Text = TextBox2.Text = TextBox3.Text = “; elsecmd.CommandText = “update 用户信息 set 密码=:mima where 用户名=:yonghuming“;cmd.Parameters.Add(new OracleParameter(“:yonghuming“, OracleType.VarCh
30、ar);cmd.Parameters“:yonghuming“.Value = TextBox1.Text;cmd.Parameters.Add(new OracleParameter(“:mima“, OracleType.VarChar);cmd.Parameters“:mima“.Value = TextBox2.Text;cmd.ExecuteNonQuery();TextBox1.Text = TextBox2.Text = TextBox3.Text = “;Label1.Text = “修改成功!“;conn.Close();catch Label1.Text = “出现错误,修
31、改失败!请返回或者重新输入 “;TextBox1.Text = TextBox2.Text = TextBox3.Text = “;用户订单.aspx.cspublic void select2()tryOracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand cmd = new OracleCommand();cmd.Connection = conn;cmd.CommandText = “update 用户信息 set 状态=0 where 状态=1“;cmd.ExecuteNonQuery
32、();conn.Close();catchResponse.Write(“出现错误“);protected void Page_Load(object sender, EventArgs e)Session“yonghudingdan“ = “right“;if (Session“zhifu“ = “right“ if(Session“pass“=null)Response.Redirect(“登陆.aspx“); /selctdeng();for (int ii = 0; ii GridView3.Rows.Count; ii+)String conStr = ConfigurationMa
33、nager.ConnectionStrings“ConnectionString“.ConnectionString;OracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand cmd = new OracleCommand(“delete from 往返票 where 出发城市 =“ + GridView3.Rowsii.Cells2.Text + “ and 到达城市=“ + GridView3.Rowsii.Cells3.Text + “ “, conn);cmd.ExecuteNonQue
34、ry();conn.Close(); protected void Button2_Click(object sender, EventArgs e)Session“pass“ = null;select2();Response.Redirect(“Default.aspx“);protected void Button4_Click1(object sender, EventArgs e)Label1.Text = TextBox1.Text;protected void Button5_Click(object sender, EventArgs e)if (Label2.Text = “
35、) Label3.Text=“支付失败!“; else Response.Redirect(“支付.aspx“); protected void Button6_Click(object sender, EventArgs e)double sum = 0.0;for (int ii = 0; ii GridView2.Rows.Count; ii+)CheckBox cc = GridView2.Rowsii.FindControl(“CheckBox1“) as CheckBox;if (cc.Checked)sum += (double.Parse(GridView2.Rowsii.Ce
36、lls8.Text);Label2.Text = sum.ToString();protected void Button7_Click(object sender, EventArgs e)String conStr = ConfigurationManager.ConnectionStrings“ConnectionString“.ConnectionString;OracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand cmd = new OracleCommand(“select 用户名
37、 from 用户信息 where 用户名 =“ + TextBox2.Text + “and 密码 =“ + TextBox3.Text + “, conn);if (cmd.ExecuteScalar() = null)Label1.Text = “输入错误“;elseResponse.Redirect(“修改密码.aspx“);protected void Button8_Click(object sender, EventArgs e)if (Session“zhifu“ = “right“ Session“zhifu“ = “;Session“yonghudingdan“ = “;el
38、sefor (int ii = 0; ii GridView3.Rows.Count; ii+)String conStr = ConfigurationManager.ConnectionStrings“ConnectionString“.ConnectionString;OracleConnection conn = new OracleConnection(conStr);conn.Open();OracleCommand cmd = new OracleCommand(“delete from 单程票 where 出发城市 =“ + GridView3.Rowsii.Cells2.Te
39、xt + “ and 到达城市=“ + GridView3.Rowsii.Cells3.Text + “ “, conn);cmd.ExecuteNonQuery();conn.Close(); 支付.aspx.csprotected void Page_Load(object sender, EventArgs e)Session“zhifu“=“right“;protected void Button1_Click(object sender, EventArgs e)/*if(Session“yonghudingdan“=“right“)Response.Redirect(“用户订单.a
40、spx“);*/if (Session“wangfan“ = “right“)Response.Redirect(“往返票.aspx“);elseResponse.Redirect(“用户订单.aspx“);注册.aspx.cs try conn.Open();OracleCommand cmd = new OracleCommand(“select 用户名 from 用户信息 where 用户名 =“ + TextBox1.Text + “, conn);if(cmd.ExecuteScalar()=null)cmd.CommandText = “insert into 用户信息 value
41、s(seqid.nextval,:yonghuming,:mima,:lianxifangshi,:shenfen,0)“;cmd.Parameters.Add(new OracleParameter(“:yonghuming“, OracleType.VarChar);cmd.Parameters“:yonghuming“.Value = TextBox1.Text;cmd.Parameters.Add(new OracleParameter(“:mima“, OracleType.VarChar);cmd.Parameters“:mima“.Value = TextBox2.Text;cm
42、d.Parameters.Add(new OracleParameter(“:lianxifangshi“, OracleType.Number);cmd.Parameters“:lianxifangshi“.Value = TextBox4.Text;cmd.Parameters.Add(new OracleParameter(“:shenfen“, OracleType.VarChar);cmd.Parameters“:shenfen“.Value = DropDownList1.SelectedItem.Text;cmd.ExecuteNonQuery();TextBox1.Text =
43、 TextBox2.Text = TextBox3.Text = TextBox4.Text = “;Label1.Text = “注册成功!“;elseLabel1.Text = “此用户名已被注册! “;TextBox1.Text = TextBox2.Text = TextBox3.Text = TextBox4.Text = “;conn.Close();catch Label1.Text = “出现错误,注册失败!请返回或者重新输入 “;TextBox1.Text = TextBox2.Text = TextBox3.Text = TextBox4.Text = “;4 总结与展望通
44、过这次短暂的课程设计,我对 ASP.net 的网页设计有了更加深刻的了解,同时对oracle 数据库运用有了更加熟练的掌握。在平时做的时候感觉没这么费时费力,在这次我真正做设计时发现数据库和网页的连接并没有想象的那么简单,在第一天开始做的时候,在从网页连接数据库的阶段就花费了整整一天的时间,一直在不断地找代码,因为很多问题使得网页链接 oracle 后台都没有成功,但接下来的任务就轻松了不少,可是有的时候要解决一个错误会花上很多时间,有很多错误意想不到,有的错误却犯得很低级,不过这样对自身的调试解决错误的能力提高了很多。数据库连接错误,是因为数据库的名称不对,这些细小错误告诉了我编程细心的重要
45、性,养成一个好的编程习惯非常重要。这次项目的完整开发过程,让我有了项目初步的思想,这次项目的开发让我把软件生成的流程从信息的收集,再写需求,再完成后台设计到编写代码,到测试,让我知道还有很多地方的不足。这次课程设计的时间很紧迫,再加上各方面的经验不足,也遇到很多问题,这个网上机票订票系统还有很多地方没有完善,所以我会在今后的设计中更加努力,争取能够设计出更加有水平的作品,同时也是为了不辜负老师的一番辛勤教导。总的来说,这次课程设计对我帮助很大,让我的编程思想得到了系统化,对以后的软件开发的大体思路有了大概的轮廓,我发现老师上课讲的很多东西对我们都很有用,在此感谢两位指导老师的现场指导,同样感谢
46、在此期间帮助我的各位同学。参考文献1 屈辉立,陈可明,石武信.JSP 网站编程教程M. 第 1 版, 北京:北京希望电子出版社,2005 2 白勇.用 B/S 模式构建在线考试系统 J,重庆电力高等专科学校学报,2003,10(4): 100130. 3 Jiang Guo,Yuehong Liao,Behzad Parviz.A Survey of J2EE Application Performance Management SystemsJ,Proceedings of the IEEE International Conference on Web Services (ICWS04),2004.6(5):1732.4 VB 数据库管理范例: http:/ 成员分工成绩评定成绩 教师签字