Advertisement

客运综合管理系统项目—售票管理(退票)

阅读量:

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) 相片

表2.车辆类型表(VehicleTypeList)

列名 数据类型 主键/外键 说明
VehicleTypeID int 主键 车辆类型ID
VehicleTypeName char (100) 车辆类型名称

表3.司机表(DriverList)

列名 数据类型 主键/外键 说明
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 上岗证有效期

表4.站点表(StationList)

列名 数据类型 主键/外键 说明
StationID int 主键 站点ID
StationNumber char (100) 站点编号
StationName char (100) 站点名称
StopNo bit 停用否

表5.车辆表(VehicleList)

列名 数据类型 主键/外键 说明
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 安检否

表6.出车表(OutVehicleList)

列名 数据类型 主键/外键 说明
OutVehicleID int 主键 出车ID
VehicleStateID int 外键 车辆状态ID
OutVehicleTime datetime 出车时间
VehicleID int 外键 车辆ID
UserTo int 是否有用

表7.车辆状态表(VehicleStateList)

列名 数据类型 主键/外键 说明
VehicleStateID int 主键 车辆状态ID
VehicleStateName char (100) 车辆状态名称

表8.线路表(LineList)

列名 数据类型 主键/外键 说明
LineID int - Identity 主键 线路ID
LineName char (100) 线路名称
VehicleID int 外键 车辆表.车辆ID
Remarks char (100) 备注
StopNo bit 停用否

表9:票据表 (BillList)

列名 数据类型 主键/外键 说明
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

表10:退票表(ReturnATicketDetailedStatement)

列名 数据类型 主键/外键 说明
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

表11.票据状态表(BillStatusList)

列名 数据类型 主键/外键 说明
BillStatusID int 主键 票据状态ID
BillStatus char (100) 票据状态

表12.票据类型表(BillTypeList)

列名 数据类型 主键/外键 说明
BillTypeID int - Identity 主键 票据类型ID
BillTypeName char (100) 票据类型名称
TicketPrice decimal (18, 3) 票价

表13.座位表(ASeatNumberList)

列名 数据类型 主键/外键 说明
ASeatNumberID int - Identity 主键 座号ID
ASeatNumber char (10) 座号
VehicleID int 外键 车辆表.车辆ID
SeatStateID int 外键 座位状态表.座位状态ID
UserNo bit 有用否
LinkNo bit 连接否

表14.票号表(TicketNumberList)

列名 数据类型 主键/外键 说明
TicketNumberID int 主键 票号ID
TicketNumber char (100) 票号
ASeatNumberID int 外键 座位表.座号ID
UserNo bit 有用否

表15.座位状态表(SeatStateList)

列名 数据类型 主键/外键 说明
SeatStateID int 主键 座位状态ID

| SeatState | char (100) | | 座位状态
||

1、根据下拉框的数据绑定票据信息

第一步:根据下拉框的数据绑定票据信息数据库的存储过程

复制代码
 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、下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)

仅供学习,禁止用于商业用途

全部评论 (0)

还没有任何评论哟~