1、今日完成任务:
(1)预订车票
(2)提交预订信息跳转到车票详情页面
(3)取消订单
(4)网上支付
2、核心源码:
(1)前台效果:


(2)预订车票(前台页面代码)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link href="../css/reset.css" rel="stylesheet" />
<link href="../css/iconfont.css" rel="stylesheet" />
<link href="../css/aa.css" rel="stylesheet" />
<script src="../js/jquery-1.9.1.min.js"></script>
<script src="../js/f.js"></script>
<script src="../js/laydate/laydate.js"></script>
<script>
//执行一个laydate实例
laydate.render({
elem: '#test1' //指定元素
});
</script>
<style type="text/css">
.icon-weibiaoti1:before {
content: "e695";
}
.icon-xinxiliulan:before {
content: "e614";
}
#test1{clear:both;border:1px solid #ccc;height:25px;position:relative; left:50px;bottom:20px;}
.InputDiv{border:none;}
#txtCfd,#txtMdd{border:1px solid #ccc;height:25px;}
#btnSelect{color:#fff;}
.auto-style1 {
background: #fff;
margin-left: 40px;
}
.headboxtext{
height:30px;
line-height:30px;
}
#content{margin-top:20px;padding:0;}
#content .txt{height:25px; border:1px solid #ccc;}
#content table{margin:auto;}
#btnSubmit {
color:#fff;
background-color:#FD4C4C;
90PX;
height:30px;
}
.auto-style2 {
580px;
height: 232px;
}
#Label1{font-size:20px;}
</style>
<title>产品管理</title>
</head>
<body>
<form id="form1" runat="server">
<div class="PublicHead clearfix">
<div class="leftBox clearfix">
<!--<div class="companyLogo">
<img src="images/logo.jpg" />
</div>-->
<!--<i class="iconfont icon-caidan"></i>-->
<div class="companyText">
客车网上售票系统
</div>
</div>
<div class="RightBox clearfix">
<div class="UserPhotoBox">
<div class="UserPic">
<img src="../Images/user.jpg"/>
</div>
<div class="UserName">
用户
</div>
</div>
<a href="Login.aspx">
<div class="dropOutBox">
<i class="iconfont icon-app_icons--">
</i>
<span>退出</span>
</div>
</a>
</div>
</div>
<div class="PublicDownWhole clearfix">
<!--左侧-->
<div class="leftBox">
<ul>
<a href="UserManagement.html"> <li class=""><i class="iconfont icon-yonghuguanli"></i><span>用户管理</span></li></a>
<a href="SelectTicket.aspx">
<li class="Select"><i class="iconfont icon-tubiao_dingdan"></i><span>票务查询</span></li>
</a>
<a href="ClassificationManagement.html">
<li><i class="iconfont icon-fenlei"></i><span>我的订单</span></li>
</a>
<a href="ProductManagement.html"> <li><i class="iconfont icon-weibiaoti1"></i><span>留言板</span></li></a>
<a href="ProductManagement.html"> <li><i class="iconfont icon-xinxiliulan"></i><span>信息浏览</span></li></a>
</ul>
</div>
<!--右侧-->
<div class="RightBox">
<div class="PublicContentBox">
<!--公用指向页面名字-->
<div class="PublicPointToAgeText">
<span class="span1">客车网上售票系统 </span> <span class="span2">票务查询</span> <span class="span2">预订车票</span>
</div>
<!--查询-->
<div class="InquireBox clearfix" style="line-height:40px;">
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
<!--表修改-->
<div class="auto-style1" style="margin-left:0px; height:700px;">
<div class="headbox">
<div class="headboxtext">
<%--<span class="span1">车票查询</span>--%>
<asp:Label ID="lblSelect" runat="server" Text="乘车人信息:"></asp:Label>
</div>
</div>
<div id="content">
<%-- 姓名:<asp:TextBox ID="txtName" CssClass="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="乘客姓名不能为空" ControlToValidate="txtName"></asp:RequiredFieldValidator>
身份证号:<asp:TextBox ID="txtID" CssClass="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="乘客身份证号不能为空" ControlToValidate="txtID"></asp:RequiredFieldValidator>
手机号:<asp:TextBox ID="txtPhone" CssClass="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="乘客手机号不能为空" ControlToValidate="txtPhone"></asp:RequiredFieldValidator>
价格:<asp:TextBox ID="txtPrice" CssClass="txt" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="提交订单" />--%>
<table class="auto-style2">
<tr>
<td>姓名:</td>
<td><asp:TextBox ID="txtName" CssClass="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="乘客姓名不能为空" ControlToValidate="txtName"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>身份证号:</td>
<td><asp:TextBox ID="txtID" CssClass="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="乘客身份证号不能为空" ControlToValidate="txtID"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td> 手机号:</td>
<td><asp:TextBox ID="txtPhone" CssClass="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="乘客手机号不能为空" ControlToValidate="txtPhone"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td> 价格:</td>
<td><asp:TextBox ID="txtPrice" CssClass="txt" runat="server" ReadOnly="True"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" style="padding-left:100px;">
<asp:Button ID="btnSubmit" runat="server" Text="提交订单" OnClick="btnSubmit_Click" />
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
预订车票(后台代码)
public partial class bookTicket : System.Web.UI.Page { OrderinfoManager bll = new OrderinfoManager(); int Seatnum; protected void Page_Load(object sender, EventArgs e) { CarinfoManager carinfo = new CarinfoManager(); TraininfoManager train = new TraininfoManager(); //获取跳转页面传递过来的值 int cid =Convert.ToInt32(Request.QueryString["Cid"]); //通过Cid查询数据并绑定在前台控件上 DataSet ds = carinfo.SelectByCid(cid); this.txtPrice.Text = ds.Tables[0].Rows[0]["Price"].ToString(); //日期 string date = Convert.ToDateTime(ds.Tables[0].Rows[0]["Start_date"]).ToShortDateString(); string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string xingqi = Day[Convert.ToInt32(Convert.ToDateTime(ds.Tables[0].Rows[0]["Start_date"]).DayOfWeek.ToString("d"))].ToString(); //出发站 string Begin_sta = ds.Tables[0].Rows[0]["Begin_sta"].ToString(); //到达站 string End_sta = ds.Tables[0].Rows[0]["End_sta"].ToString(); //出发时间 string Start_time = ds.Tables[0].Rows[0]["Start_time"].ToString(); //到达时间 string End_time = ds.Tables[0].Rows[0]["End_time"].ToString(); int tid=Convert.ToInt32(ds.Tables[0].Rows[0]["Tid"]); //车次 string checi = train.SelectByTid(tid).Tables[0].Rows[0]["Tname"].ToString(); Seatnum=Convert.ToInt32(train.SelectByTid(tid).Tables[0].Rows[0]["Seatnum"]); this.Label1.Text = date+"("+xingqi+") "+checi+"次 " + Begin_sta + "站(" + Start_time + "开)" + "-- " + End_sta + "站(" + End_time + "到)"; } //提交 protected void btnSubmit_Click(object sender, EventArgs e) { //获取需要提交的数据 CarinfoManager carinfo = new CarinfoManager(); TraininfoManager train = new TraininfoManager(); Orderinfo order = new Orderinfo(); //获取跳转页面传递过来的值 order.Cid= Convert.ToInt32(Request.QueryString["Cid"]); Userinfo user =(Userinfo)Session["user"]; order.Uid= user.Uid; order.Card= this.txtID.Text; order.Name= this.txtName.Text; order.Price=Convert.ToDouble(this.txtPrice.Text); //发车日期 string date = carinfo.SelectByCid(order.Cid).Tables[0].Rows[0]["Start_date"].ToString(); //当前座位数=总座位数-当前列车当天的订单数 int num = Seatnum - bll.SelectCount(date, order.Cid); //将座位号设定为座位数 order.Seatnum = num; bool boo = bll.Add(order); if (boo) { //获取oid int oid = bll.GetOid(order); //成功 Response.Redirect("OrderInfo.aspx?id=" + oid); } DAL层: public DataSet SelectByCid(int cid) { string sql = $"select * from Carinfo where Cid={cid}"; DataSet ds = dbHelper.GetData(sql); return ds; } public bool Add(Orderinfo order) { string sql = $"insert into Orderinfo values({order.Cid},{order.Uid},'{order.Card}','{order.Name}',{order.Price},default,default,{order.Seatnum})"; int num = dbHelper.ExecuteNonQuery(sql); if (num!=0) { return true; } else { return false; } }
(3)提交预订信息跳转到车票详情页面(后台代码)
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindGv(); } } protected void BindGv() { int oid = Convert.ToInt32(Request.QueryString["id"]); this.GridView1.DataSource = bll.GetAllData(oid); this.GridView1.DataBind(); } DAL层: public DataSet GetDataByOid(int oid) { string sql = $"select * from Orderinfo where Oid={oid}"; return dbHelper.GetData(sql); }
(4)取消订单、网上支付(前台代码)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link href="../css/reset.css" rel="stylesheet" />
<link href="../css/iconfont.css" rel="stylesheet" />
<link href="../css/aa.css" rel="stylesheet" />
<script src="../js/jquery-1.9.1.min.js"></script>
<script src="../js/f.js"></script>
<script src="../js/laydate/laydate.js"></script>
<script>
//执行一个laydate实例
laydate.render({
elem: '#test1' //指定元素
});
</script>
<style type="text/css">
.icon-weibiaoti1:before {
content: "e695";
}
.icon-xinxiliulan:before {
content: "e614";
}
#test1{clear:both;border:1px solid #ccc;height:25px;position:relative; left:50px;bottom:20px;}
.InputDiv{border:none;}
#txtCfd,#txtMdd{border:1px solid #ccc;height:25px;}
#btnSelect{color:#fff;}
.auto-style1 {
background: #fff;
margin-left: 40px;
}
.headboxtext{
height:30px;
line-height:30px;
}
#Label1{font-size:20px;}
#GridView1{text-align:center;}
.btn{
color:#fff;
background-color:#FD4C4C;
90PX;
height:30px;
}
</style>
<title>产品管理</title>
</head>
<body>
<form id="form1" runat="server">
<div class="PublicHead clearfix">
<div class="leftBox clearfix">
<!--<div class="companyLogo">
<img src="images/logo.jpg" />
</div>-->
<!--<i class="iconfont icon-caidan"></i>-->
<div class="companyText">
客车网上售票系统
</div>
</div>
<div class="RightBox clearfix">
<div class="UserPhotoBox">
<div class="UserPic">
<img src="../Images/user.jpg"/>
</div>
<div class="UserName">
用户
</div>
</div>
<a href="Login.aspx">
<div class="dropOutBox">
<i class="iconfont icon-app_icons--">
</i>
<span>退出</span>
</div>
</a>
</div>
</div>
<div class="PublicDownWhole clearfix">
<!--左侧-->
<div class="leftBox">
<ul>
<a href="UserManagement.html"> <li class=""><i class="iconfont icon-yonghuguanli"></i><span>用户管理</span></li></a>
<a href="SelectTicket.aspx">
<li class="Select"><i class="iconfont icon-tubiao_dingdan"></i><span>票务查询</span></li>
</a>
<a href="ClassificationManagement.html">
<li><i class="iconfont icon-fenlei"></i><span>我的订单</span></li>
</a>
<a href="ProductManagement.html"> <li><i class="iconfont icon-weibiaoti1"></i><span>留言板</span></li></a>
<a href="ProductManagement.html"> <li><i class="iconfont icon-xinxiliulan"></i><span>信息浏览</span></li></a>
</ul>
</div>
<!--右侧-->
<div class="RightBox">
<div class="PublicContentBox">
<!--公用指向页面名字-->
<div class="PublicPointToAgeText">
<span class="span1">客车网上售票系统 </span> <span class="span2">票务查询</span> <span class="span2">预订车票</span>
</div>
<!--查询-->
<div class="InquireBox clearfix" style="line-height:40px;">
<asp:Label ID="Label1" runat="server" Text="详细信息"></asp:Label>
</div>
<!--表修改-->
<div class="auto-style1" style="margin-left:0px; height:700px;">
<div class="headbox">
<div class="headboxtext">
<%--<span class="span1">车票查询</span>--%>
<asp:Label ID="lblSelect" runat="server" Text="乘车人信息:"></asp:Label>
</div>
</div>
<div id="content">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" Height="144px" Width="564px">
<Columns>
<asp:BoundField DataField="Name" HeaderText="姓名" />
<asp:BoundField DataField="card" HeaderText="证件号码" />
<asp:BoundField DataField="Seatnum" HeaderText="席位号" />
<asp:BoundField DataField="Price" HeaderText="票价" />
</Columns>
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FFF1D4" />
<SortedAscendingHeaderStyle BackColor="#B95C30" />
<SortedDescendingCellStyle BackColor="#F1E5CE" />
<SortedDescendingHeaderStyle BackColor="#93451F" />
</asp:GridView>
</br>
<asp:Button ID="btnCancle" CssClass="btn" runat="server" Text="取消订单" OnClick="Button1_Click" />
<asp:Button ID="btnZf" CssClass="btn" runat="server" Text="网上支付" OnClick="Button2_Click"/>
</div>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
(5)取消订单(后台代码)
//取消 protected void Button1_Click(object sender, EventArgs e) { int oid = Convert.ToInt32(Request.QueryString["id"]); bool boo = bll.Del(oid); if (boo) { Response.Write("<script>alert('订单已取消!')</script>"); this.btnZf.Visible = false; } } DAL层: public bool Del(int oid) { string sql = $"delete from Orderinfo where Oid={oid}"; int num=dbHelper.ExecuteNonQuery(sql); if (num!=0) { return true; } else { return false; } }
(6)网上支付(后台代码)
//支付 protected void Button2_Click(object sender, EventArgs e) { //修改车票状态 int oid = Convert.ToInt32(Request.QueryString["id"]); bool boo = bll.UpdateState(oid); if (boo) { Response.Write("<script>alert('支付成功!')</script>"); this.btnCancle.Visible = false; } } DAL层: public bool UpdateState(int oid) { string sql = $"update Orderinfo set State=1 where Oid={oid}"; int num = dbHelper.ExecuteNonQuery(sql); if (num != 0) { return true; } else { return false; } }
3、遇到的问题:
(1)进入预订车票页面的时候需要显示该车次信息,比较绕
(2)很多想实现的效果因为能力有限没办法实现,需要前端技术
4、解决的方法:
(1)仿照12306的流程实现
(2)技术能力方面需要利用这个暑假做提升
5、项目燃尽图更新(此内容一周已更新)
