客运综合管理系统项目—售票管理(退票)
2015-05-30 20:45
239 查看
2.2.3 退票
售出的票在一定的时间内可以进行退票处理,超出了一定的时间,车票就不能再退,退票金额按离出车时间的不同而不同.2.2.3(图1)
从界面上可以看到我们这里用到的控件有
控件名称 | 说明 |
文字(Label) | 控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。右击控件选择属性,在跳出框里面选择带有雷电的图标,在里面可以选择属性 |
下拉框(ComboBox) | |
文本(TextBox) | |
按钮(Button) | |
表格(DataGridView) | |
容器(Panel) | |
日期控件(DateTimePicker) |
第一步:数据库
1、表与关系
2.2.3(图2)
表1.员工表(dbo.StaffList)
列名 | 数据类型 | 主键/外键 | 说明 |
StaffID | int | 主键 | 员工ID |
StaffNumber | char (100) | 员工编号 | |
StaffName | char (100) | 员工姓名 | |
Sex | char (100) | 性别 | |
IdentityCardNumber | char (100) | 身份证号 | |
HomeLocation | char (100) | 家庭地址 | |
Phone | char (100) | 电话 | |
StaffTypeID | int | 外键 | 员工类型表.员工类型ID |
OrganizationID | int | 外键 | 机构表.机构ID |
StationID | int | 外键 | 站点表.站点ID |
Remarks | char (100) | 备注 | |
LeaveOfficeNo | bit | 离职否 | |
InvokingNo | bit | 调用否 | |
Date | datetime | 日期 | |
Photo | nvarchar (3000) | 相片 |
列名 | 数据类型 | 主键/外键 | 说明 |
VehicleTypeID | int | 主键 | 车辆类型ID |
VehicleTypeName | char (100) | 车辆类型名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
DriverID | int - Identity | 主键 | 司机ID |
DriverNumber | char (100) | 司机编号 | |
WorkValue | char (100) | 工价 | |
DriveCardNumber | char (100) | 驾驶证号 | |
GrantDriveVehicleTypeID | int | 外键 | 车型表.准驾车型ID |
FollowEnterpriseQualificationCard | char (100) | 从业资格证 | |
CardCheckDate | datetime | 证件验期 | |
Remarks | char (100) | 备注 | |
MountGuardCardValidityDate | datetime | 上岗证有效期 |
列名 | 数据类型 | 主键/外键 | 说明 |
StationID | int | 主键 | 站点ID |
StationNumber | char (100) | 站点编号 | |
StationName | char (100) | 站点名称 | |
StopNo | bit | 停用否 |
列名 | 数据类型 | 主键/外键 | 说明 |
VehicleID | int | 主键 | 车辆ID |
VehicleNumber | char (100) | Yes | 车辆编号 |
VehicleBlockNumber | char (100) | Yes | 车牌号 |
VehicleStateID | int | 外键 | 车辆状态表.车辆状态ID |
MotorcadeID | int | 外键 | 车队表.车队ID |
VehicleClearID | int | 外键 | 车辆明细表.车辆明细ID |
VehicleTypeID | int | 外键 | 车型表.车型ID |
DriverID | int | 外键 | 司机表.司机ID |
DeputyDriverOneID | int | 外键 | 司机表.副司机1ID |
DeputyDriverTwoID | int | 外键 | 司机表.副司机2ID |
StationID | int | 外键 | 站点表.车站ID |
LineID | int | 外键 | 线路表.线路ID |
OpenVehicleTime | datetime | 发车时间 | |
ASeatNumberID | int | 外键 | 座号表.座号ID |
FeeRateID | int | 外键 | 费用表.费用ID |
SeatNumber | char (100) | 座位数 | |
AddSeatNumber | char (100) | 加座数 | |
Remarks | char (100) | 备注 | |
ClassesLongStopID | int | 外键 | 班次长停表.班次长停ID |
ClassesRepeatID | int | 外键 | 扣费表.扣费ID |
Classes | char (100) | 班次 | |
OpenVehicleSiteID | int | 外键 | 站点表.发车站 ID |
EndVehicleSiteID | int | 外键 | 站点表.终点站ID |
DeductFeeNo | bit | 扣费否 | |
MotorNumber | char (100) | 车队编号 | |
VehicleAlterTypeCase | char (100) | 车辆改型情况 | |
WhetherCheck | char (100) | 安检情况 | |
SafeCheckNo | bit | 安检否 |
列名 | 数据类型 | 主键/外键 | 说明 |
OutVehicleID | int | 主键 | 出车ID |
VehicleStateID | int | 外键 | 车辆状态ID |
OutVehicleTime | datetime | 出车时间 | |
VehicleID | int | 外键 | 车辆ID |
UserTo | int | 是否有用 |
列名 | 数据类型 | 主键/外键 | 说明 |
VehicleStateID | int | 主键 | 车辆状态ID |
VehicleStateName | char (100) | 车辆状态名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
LineID | int - Identity | 主键 | 线路ID |
LineName | char (100) | 线路名称 | |
VehicleID | int | 外键 | 车辆表.车辆ID |
Remarks | char (100) | 备注 | |
StopNo | bit | 停用否 |
列名 | 数据类型 | 主键/外键 | 说明 |
BillID | int | 主键 | .票据ID |
TicketNumber | char(100) | 票号 | |
GetOnStation | char(100) | 上车站 | |
GetOffStation | char(100) | 下车站 | |
BillTypeID | int | 外键 | 票据类型表.票据类型ID |
BillStatusID | int | 外键 | 票据状态表.票据状态ID |
SellTicKetTime | datetime | 买票时间 | |
SellTicketSatffID | int | 外键 | 员工表.售票员ID |
ASeatNumberID | int | 外键 | 座位表.座位ID |
SellTicKetYuan | decimal(18, 3) | 买票金额 | |
CheckTicketID | int | 外键 | 检票表.检票ID |
TicketNumberID | int | 外键 | 票号表.票号ID |
列名 | 数据类型 | 主键/外键 | 说明 |
ReturnATicketClearID | int | 主键 | 退票ID |
ReturnATicketNumber | char(100) | 退票号 | |
BillTypeID | char(100) | 外键 | 票据类型表.票据类型ID |
StationAffairFee | decimal(18, 2) | 站务费 | |
ReturnATicketTime | datetime | 废票时间 | |
ProcedureFeeRate | decimal(18, 0) | 手续费率 | |
ReturnSum | decimal(18, 2) | 退还金额 | |
TimeDifference | char(100) | 时差 | |
ReturnATicketOperatorID | int | 外键 | 员工表.退票操作员ID |
BillID | int | 外键 | 票据表.票据ID |
列名 | 数据类型 | 主键/外键 | 说明 |
BillStatusID | int | 主键 | 票据状态ID |
BillStatus | char (100) | 票据状态 |
列名 | 数据类型 | 主键/外键 | 说明 |
BillTypeID | int - Identity | 主键 | 票据类型ID |
BillTypeName | char (100) | 票据类型名称 | |
TicketPrice | decimal (18, 3) | 票价 |
列名 | 数据类型 | 主键/外键 | 说明 |
ASeatNumberID | int - Identity | 主键 | 座号ID |
ASeatNumber | char (10) | 座号 | |
VehicleID | int | 外键 | 车辆表.车辆ID |
SeatStateID | int | 外键 | 座位状态表.座位状态ID |
UserNo | bit | 有用否 | |
LinkNo | bit | 连接否 |
列名 | 数据类型 | 主键/外键 | 说明 |
TicketNumberID | int | 主键 | 票号ID |
TicketNumber | char (100) | 票号 | |
ASeatNumberID | int | 外键 | 座位表.座号ID |
UserNo | bit | 有用否 |
列名 | 数据类型 | 主键/外键 | 说明 |
SeatStateID | int | 主键 | 座位状态ID |
SeatState | char (100) | 座位状态 |
第一步:根据下拉框的数据绑定票据信息数据库的存储过程
IF @TYPE='frmReturnATicket_SelectTicketNews'--绑定票信息,车辆,座位,票据等信息 BEGIN SELECT ASeatNumberList.ASeatNumberID, VehicleList.VehicleID, VehicleList.VehicleBlockNumber, ASeatNumberList.ASeatNumber, TicketNumberList.TicketNumber, BillList.GetOffStation, BillList.GetOnStation, BillList.TicketNumber, BillTypeList.BillTypeName, BillList.SellTicKetYuan, BillList.SellTicKetTime, StaffList.StaffName, VehicleList.Classes, StationList.StationID AS OpenVehicleSiteID, StationList.StationName AS OpenVehicleSite, StationList_1.StationID AS EndVehicleSiteID, StationList_1.StationName AS EndVehicleSite, BillList.BillID, OutVehicleList.OutVehicleTime, TicketNumberList.TicketNumberID FROM StationList INNER JOIN ASeatNumberList INNER JOIN TicketNumberList ON ASeatNumberList.ASeatNumberID = TicketNumberList.ASeatNumberID INNER JOIN VehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID ON StationList.StationID = VehicleList.OpenVehicleSiteID INNER JOIN StationList AS StationList_1 ON VehicleList.EndVehicleSiteID = StationList_1.StationID INNER JOIN OutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleID INNER JOIN BillTypeList INNER JOIN BillList ON BillTypeList.BillTypeID = BillList.BillTypeID INNER JOIN StaffList ON BillList.SellTicketSatffID = StaffList.StaffID ON TicketNumberList.TicketNumberID = BillList.TicketNumberID WHERE TicketNumberList.TicketNumberID=@TicketNumberID and ASeatNumberList.SeatStateID = 2 and BillList.BillStatusID=3 AND OutVehicleList.UserTo=1--座位状态为订,车辆明细表有用否为是 END
第二步:根据下拉框的数据绑定票据信息逻辑层(BLL)代码
[OperationContract] public DataSet frmReturnATicket_SelectTicketNews(int intTicketNumberID)//绑定票信息,车辆,座位,票据等信息 { SqlParameter[]mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@TicketNumberID", SqlDbType.Int)}; mySqlParameter[0].Value = "frmReturnATicket_SelectTicketNews"; mySqlParameter[1].Value =intTicketNumberID; DataTablemyDataTable = myDALMethod.QueryDataTable("SellTicketManage_frmReturnATicket",mySqlParameter); DataSetmyDataSet = new DataSet(); myDataSet.Tables.Add(myDataTable); returnmyDataSet; }
第三步:根据下拉框的数据绑定票据信息界面层(UIL)代码,
private void cboTicketNumber_DropDownClosed(object sender, EventArgs e)//在下拉框选择数据后执行,绑定票信息,车辆,座位,票据等信息 { try { PublicStaticObject.intTicketNumberID = Convert.ToInt32(cboTicketNumber.SelectedValue);//根据下拉框选择的值来获取票号ID DataTable dtTicketNews = myfrmReturnATicketClient.frmReturnATicket_SelectTicketNews(PublicStaticObject.intTicketNumberID).Tables[0];//获取票据信息 //下面的是给文本框等绑定数据,即绑定票据信息 cboTicketNumber.Text = dtTicketNews.Rows[0]["TicketNumber"].ToString().Trim(); txtClasses.Text = dtTicketNews.Rows[0]["Classes"].ToString().Trim(); dtpOpenVehicleDate.Text = dtTicketNews.Rows[0]["OutVehicleTime"].ToString().Trim(); dtpOpenVehicleTime.Text = dtTicketNews.Rows[0]["OutVehicleTime"].ToString().Trim(); txtTicketType.Text = dtTicketNews.Rows[0]["BillTypeName"].ToString().Trim(); txtPrice.Text = dtTicketNews.Rows[0]["SellTicKetYuan"].ToString().Trim(); txtSeatNumber.Text = dtTicketNews.Rows[0]["ASeatNumber"].ToString().Trim(); txtStartSite.Text = dtTicketNews.Rows[0]["OpenVehicleSite"].ToString().Trim();// txtGetOnStation.Text = dtTicketNews.Rows[0]["GetOnStation"].ToString().Trim(); txtArriveStation.Text = dtTicketNews.Rows[0]["GetOffStation"].ToString().Trim(); txtEndVehicleSite.Text = dtTicketNews.Rows[0]["EndVehicleSite"].ToString().Trim(); txtSellTicketDate.Text = dtTicketNews.Rows[0]["SellTicKetTime"].ToString().Trim(); } catch { } }
2、退票的实现
第一步:退票数据库的存储过程
IF @TYPE='frmReturnATicket_InsertRetureTicket'--新增退票信息 BEGIN INSERT INTO ReturnATicketClearList(StationAffairFee, ReturnATicketTime, BillID, ProcedureFeeRate, ReturnSum, TimeDifference, ReturnATicketOperatorID) VALUES (@StationAffairFee, @ReturnATicketTime, @BillID, @ProcedureFeeRate, @ReturnSum, @TimeDifference, @ReturnATicketOperatorID) END IF @TYPE='frmReturnATicket_UpdateTicketStaue' BEGIN Update BillList set BillList.BillStatusID=4--修改座位状态 WHERE BillList.BillID=@BillID UPDATE ASeatNumberList set ASeatNumberList.SeatStateID=3--修改座位状态 WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberID UPDATE TicketNumberList SET TicketNumberList.UserNo=1--修改票号的有用否 WHERE TicketNumberList.TicketNumberID=@TicketNumberID END
第二步:
退票逻辑层(BLL)代码
[OperationContract] public int frmReturnATicket_InsertRetureTicket(string strStationAffairFee,DateTime dtReturnATicketTime,int BillID, string strProcedureFeeRate,decimal decReturnSum,string strTimeDifference,int intReturnATicketOperatorID)//退票 { SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char), new SqlParameter("@StationAffairFee", SqlDbType.Char), new SqlParameter("@ReturnATicketTime", SqlDbType.DateTime), new SqlParameter("@BillID", SqlDbType.Int), new SqlParameter("@ProcedureFeeRate", SqlDbType.Char), new SqlParameter("@ReturnSum", SqlDbType.Char), new SqlParameter("@TimeDifference", SqlDbType.Char), new SqlParameter("@ReturnATicketOperatorID", SqlDbType.Int),}; mySqlParameter[0].Value = "frmReturnATicket_InsertRetureTicket"; mySqlParameter[1].Value = strStationAffairFee; mySqlParameter[2].Value = dtReturnATicketTime; mySqlParameter[3].Value = BillID; mySqlParameter[4].Value = strProcedureFeeRate; mySqlParameter[5].Value = decReturnSum; mySqlParameter[6].Value = strTimeDifference; mySqlParameter[7].Value = intReturnATicketOperatorID; return myDALMethod.UpdateData("SellTicketManage_frmReturnATicket", mySqlParameter); }
第三步:界面层(UIL)代码
private void btnReturnATicket_Click(object sender, EventArgs e)//退票 { if (Convert.ToInt32(cboTicketNumber.SelectedValue) > 0)//判断下拉框获取的ID大于0 { DataTable dtTicketNews = myfrmReturnATicketClient.frmReturnATicket_SelectTicketNews(PublicStaticObject.intTicketNumberID).Tables[0]; DateTime dtTime=Convert.ToDateTime(dtTicketNews.Rows[0]["OutVehicleTime"].ToString().Trim()); if (Convert.ToDateTime(dtTime) > Convert.ToDateTime(txtRetureTicket.Text)) { if (MessageBox.Show("确定退票?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK) { if (txtHandlingCharge.Text == "") { MessageBox.Show("手续费不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (txtReturnSum.Text == "") { MessageBox.Show("退还金额不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (txtStationAffairFee.Text == "") { MessageBox.Show("站务费不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (txtTimeDifference.Text == "") { MessageBox.Show("时差不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } string strStationAffairFee = txtStationAffairFee.Text.ToString().Trim();//获文本框的数据 string strProcedureFeeRate = txtStationAffairFee.Text.ToString().Trim(); string strTimeDifference = txtStationAffairFee.Text.ToString().Trim(); DateTime dtReturnATicketTime = Convert.ToDateTime(txtRetureTicket.Text); decimal decReturnSum = Convert.ToDecimal(txtReturnSum.Text); int BillID = (int)dtTicketNews.Rows[0]["BillID"]; int intReturnATicketOperatorID = PublicStaticObject.intSatffTwo; int ASeatNumberID = (int)dtTicketNews.Rows[0]["ASeatNumberID"]; int i = myfrmReturnATicketClient.frmReturnATicket_InsertRetureTicket(strStationAffairFee, dtReturnATicketTime, BillID, strProcedureFeeRate, decReturnSum, strTimeDifference, intReturnATicketOperatorID); if (i > 0) { int intTicketNumberID = (int)dtTicketNews.Rows[0]["TicketNumberID"]; myfrmReturnATicketClient.frmReturnATicket_UpdateTicketStaue(BillID, ASeatNumberID, intTicketNumberID).Tables[0].ToString().Trim();//新增退票 string KnowName = "于" + dtReturnATicketTime + "出售一张班次为" + txtClasses.Text.ToString().Trim() + "票号为" + cboTicketNumber.Text.ToString().Trim() + "的票";//新增一条信息提示 myfrmMainClient.frmMain_InsertKnow(KnowName); MessageBox.Show("退票成功!");//提示框 frmReturnATicket_Load(null, null);//再次执行load事件的代码 } else { MessageBox.Show("退票失败!"); } } } else { MessageBox.Show("退票时间已过,无法退票!"); } } else { MessageBox.Show("请选择票号!"); } }
3、下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)
仅供学习,禁止用于商业用途
相关文章推荐
- jquery加载解析XML文件
- 归并排序
- 关于资源增量更新策略
- MVP for Android
- AOP之代理模式(二)
- 猜测:Oracle ash报告中SQL Text 出现"** SQL Text Not Available **"的原因
- Android应用中遍历Assets的结果
- 兔子--解决EditText的drawableLeft与输入文本的协调问题
- 网络工程师必备素质-IP地址练习题
- Intellij_idea-14官方快捷键中文版
- MySQL主从复制几个重要的启动选项
- matlab中fspecial中生成高斯模板的解释以及c语言实现
- mysql登陆与退出
- 北京络捷斯特第三方物流信息系统技术解析(五) 订单录入-配送订单
- Android实战简易教程-第五枪(ListView用法研究)
- 团队冲刺阶段二第四次站立会议
- wsdl2java 生成webService客户端代码,并读取数据
- 浅析几种排序
- Missing variable or function matlab错误
- Pascal's Triangle II