客运综合管理系统项目解析-检票管理-检票
第2章 功能实现
2.1 检票管理:
检票管理具有检票(查询/手工检票/报班/出车)、补检(查询/补检,绿色通道:可实现先上车购票,后补检)、检票查询(查询/清空)等功能。
2.1-1 检票:
鼠标到达座位状态图片时会根据座位状态而显示售票信息,然后根据售票的状态就可以点击图片绑定还没检票的座位进行检票,车辆只有报班后才可进行出车或开具结算单。检票窗口不但可以快速出车,还可通过到达调度管理-出车情况,同时检票后会新增一检票记录信息,以此最大限度地缩短检票时间,避免过去乘客排长队等候检票的现象。功能如下图(图2.1-1)
从界面上可以看到我们这里用到工具箱的控件有:
控件名称 |
说明 |
容器控件(框) GroupBox |
每个控件都可以根据需要的功能更改其属性,右键查看.也可以进行编辑事件-->找到一个闪电图标点击查看需要的事件,例如:查询按钮(btnSrean)是修改过按钮文本Text属性的重命名! btnSrean_Click这是单击查询事件,还有很多的事件根据项目需求找到来编辑. |
公共控件(集合) ListView |
|
公共控件(文字描写) Label |
|
公共控件(按钮)Button |
|
公共控件(日期)DateTimePicker |
|
公共控件(文本框)TextBox |
|
所有Windows窗体(dgv)DataGridView |
|
容器控件(选项卡)TabControl |
|
公共控件(下拉框)ComboBox |
检票功能实现:
第一步:数据库
1、 表与表关系(图2.1-2)
从上面可以知道用到的表有:
表1:车辆表 (VehicleList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
VehicleID |
int - Identity |
主键 |
车辆ID |
VehicleNumber |
char (100) |
车辆编号 |
|
VehicleBlockNumber |
char (100) |
车牌号 |
|
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 |
EntireTicketNumber |
char (100) |
全票数 |
|
HalfTicketNumber |
char (100) |
半票数 |
|
DiscountTicketNumber |
char (100) |
打折票数 |
|
FreeTicketNumber |
char (100) |
免票数 |
|
FeeRateID |
int |
外键 |
费率ID |
SeatNumber |
char (100) |
座位数 |
|
AddSeatNumber |
char (100) |
加座数 |
|
TotalSum |
decimal (18, 2) |
总金额 |
|
Remarks |
char (100) |
备注 |
|
ClassesLongStopID |
int |
外键 |
班次长停ID |
ClassesRepeatID |
int |
外键 |
班次循环ID |
ClassesNewsID |
int |
外键 |
班次信息ID |
Classes |
char (100) |
班次 |
|
OpenVehicleSiteID |
int |
外键 |
发车站ID |
EndVehicleSiteID |
int |
外键 |
终点站ID |
DeductFeeNo |
bit |
扣费否 |
|
MotorTypeNumber |
char (100) |
发动机型号 |
|
MotorNumber |
char (100) |
发动机号 |
|
VehicleAlterTypeCase |
char (100) |
车辆改型情况 |
|
WhetherCheck |
char (100) |
是否安检 |
|
SafeCheckNo |
bit |
安检否 |
列名 |
数据类型 |
主键/外键 |
说明 |
表2:站点表 (StationList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
StationID |
int - Identity |
主键 |
站点ID |
StationNumber |
char (100) |
站点编号 |
|
StationName |
char (100) |
站点名称 |
|
WindowID |
int |
外键 |
窗口ID |
StopNo |
bit |
调用否 |
表3:座号表 (ASeatNumberList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
ASeatNumberID |
int - Identity |
主键 |
座号ID |
ASeatNumber |
char (10) |
座号 |
|
VehicleID |
int |
外键 |
车辆ID |
SeatStateID |
int |
外键 |
座位状态ID |
UserNo |
bit |
使用否 |
|
LinkNo |
bit |
连接否 |
表4:票号表 (TicketNumberList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
TicketNumberID |
int - Identity |
主键 |
票号ID |
TicketNumber |
char (100) |
票号 |
|
ASeatNumberID |
int |
外键 |
座号ID |
UserNo |
bit |
使用否 |
表5:票据表 (BillList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
BillID |
int - Identity |
主键 |
票据ID |
TicketNumber |
char (100) |
票号 |
|
GetOnStation |
char (100) |
上车站 |
|
GetOffStation |
char (100) |
下车站 |
|
RunningWaterNo |
bit |
流水否 |
|
BillTypeID |
int |
外键 |
票据类型ID |
BillStatusID |
int |
外键 |
票据状态ID |
SellTicKetTime |
datetime |
售票时间 |
|
SellTicketSatffID |
int |
外键 |
售票员ID |
ASeatNumberID |
int |
外键 |
座号ID |
SellTicKetYuan |
decimal (18, 3) |
售票价 |
|
CheckTicketID |
int |
外键 |
检票ID |
TicketNumberID |
int |
外键 |
票号ID |
表6:检票表 (CheckTicketList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
CheckTicketID |
int - Identity |
主键 |
检票ID |
AlreadyCheckNo |
bit |
已检否 |
|
BillID |
int |
外键 |
票据ID |
Remarks |
char (100) |
备注 |
|
CheckTicketTime |
datetime |
检票时间 |
|
CheakPicketRoomID |
int |
外键 |
|
UserID |
int |
外键 |
用户ID |
表7:票据状态表 (BillStatusList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
BillStatusID |
int - Identity |
主键 |
票据状态ID |
BillStatus |
char (100) |
票据状态 |
表8:线路表 (LineList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
LineID |
int - Identity |
主键 |
线路ID |
LineName |
char (100) |
线路MC |
|
VehicleID |
int |
外键 |
车辆ID |
Remarks |
char (100) |
备注 |
|
StopNo |
bit |
调用否 |
下面开始编写数据库储存过程:
数据库对应逻辑层(BLL)和界面层(UIL)文件夹:CheckTicketManage_frmCheckTicket(检票窗体和对应的类的存储过程)
<span style="font-size:14px;">USE [客运综合管理系统2015]
GO
/****** Object: StoredProcedure [dbo].[CheckTicketManage_frmCheckTicket] Script Date: 05/28/2015 15:36:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[CheckTicketManage_frmCheckTicket]--[检票管理_检票]@Type CHAR(200)='',@VehicleID INT=0,@ASeatNumberID INT=0,@BillID INT=0,@AlreadyCheckNo BIT=0,@SellTicketID INT=0,@CheckTicketTime DATETIME='',@CheakPicketRoomID INT=0,@UserID INT=0
AS
BEGINIF @Type='frmCheckTicket_Load_dgvVehicle'--绑定dgvVehicleBEGINSELECT LTRIM(RTRIM(VehicleList.VehicleBlockNumber))AS VehicleBlockNumber, LTRIM(RTRIM(LineList.LineName))AS LineName,LTRIM(RTRIM(VehicleList.Classes))AS Classes, VehicleList.VehicleStateID, VehicleList.VehicleID,OutVehicleList.OutVehicleTime, VehicleList.SafeCheckNoFROM VehicleList INNER JOINLineList ON VehicleList.LineID = LineList.LineID INNER JOINOutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleIDWHERE VehicleList.VehicleStateID!=1 AND VehicleList.VehicleStateID!=3 AND OutVehicleList.UserTo=1 AND VehicleList.DeductFeeNo=0ORDER BY OutVehicleList.OutVehicleTime DESC--数据按日期最新排序ENDIF @Type='frmCheckTicket_Load_lvwSeatStatus'--图片显示座位状态BEGINSELECT ASeatNumberList.ASeatNumberID, ASeatNumberList.ASeatNumber, ASeatNumberList.SeatStateID,VehicleList.VehicleID, VehicleList.OpenVehicleSiteID, StationList.StationID, StationList.StationNameFROM ASeatNumberList INNER JOINVehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID INNER JOINStationList ON VehicleList.OpenVehicleSiteID = StationList.StationIDWHERE ASeatNumberList.VehicleID=@VehicleIDENDIF @Type='frmCheckTicket_Update_Status'--检票/复检(修改座位状态)BEGINUPDATE ASeatNumberListSET SeatStateID =1WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberIDENDIF @Type='frmCheckTicket_Insert_Status'--检票/复检InsertBEGININSERT INTO CheckTicketList(AlreadyCheckNo)VALUES (@AlreadyCheckNo) ENDIF @Type='frmCheckTicket_Load_dgvThisStationAlreadyCheck'--本站已检BEGINSELECT ASeatNumberList.ASeatNumberID, LTRIM(RTRIM(BillList.TicketNumber)) AS TicketNumber, LTRIM(RTRIM(ASeatNumberList.ASeatNumber)) AS ASeatNumber,LTRIM(RTRIM(BillList.GetOffStation))AS GetOffStation, LTRIM(RTRIM(BillList.SellTicKetYuan)) AS SellTicKetYuan,LTRIM(RTRIM(StationList_1.StationName))AS StationName, VehicleList.VehicleID, ASeatNumberList.SeatStateID, BillList.BillID, CheckTicketList.CheckTicketID, CheckTicketList.AlreadyCheckNo, CheckTicketList.CheckTicketTime, CheckTicketList.CheakPicketRoomID,LTRIM(RTRIM(StationList.StationName))AS StationNameOneFROM StationList INNER JOINVehicleList ON StationList.StationID = VehicleList.StationID RIGHT OUTER JOINCheckTicketList INNER JOINTicketNumberList INNER JOINASeatNumberList ON TicketNumberList.ASeatNumberID = ASeatNumberList.ASeatNumberID INNER JOINBillList ON TicketNumberList.TicketNumberID = BillList.TicketNumberID ON CheckTicketList.BillID = BillList.BillID INNER JOINStationList AS StationList_1 ON CheckTicketList.CheakPicketRoomID = StationList_1.StationID ON VehicleList.VehicleID = ASeatNumberList.VehicleIDWHERE ASeatNumberList.SeatStateID=1 AND VehicleList.DeductFeeNo=0 AND CheckTicketList.UserID=1 ORDER BY CheckTicketList.CheckTicketTime DESC--数据按最新日期排序 ENDIF @Type='frmCheckTicket_Update_OutVehicleStatus'--出车BEGINUPDATE VehicleListSET VehicleStateID =3 WHERE VehicleList.VehicleID=@VehicleID ENDIF @Type='frmCheckTicket_Load_dgvAlreadyReportClasses'--已报班次dgvAlreadyReportClassesBEGINSELECT LTRIM(RTRIM(VehicleList.VehicleBlockNumber))AS VehicleBlockNumber, LTRIM(RTRIM(LineList.LineName))AS LineName, LTRIM(RTRIM(VehicleList.Classes))AS Classes, VehicleList.VehicleStateID, OutVehicleList.UserTo, VehicleList.VehicleID,OutVehicleList.OutVehicleTimeFROM VehicleList INNER JOINLineList ON VehicleList.LineID = LineList.LineID INNER JOINOutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleIDWHERE OutVehicleList.UserTo=1 and VehicleList.SafeCheckNo=1 AND VehicleList.DeductFeeNo=0ORDER BY OutVehicleList.OutVehicleTime DESC--数据按最新日期排序 ENDIF @Type='frmCheckTicket_CellClickDgvVehicle'--dgv单击查询BEGINSELECT ASeatNumberList.ASeatNumberID, LTRIM(RTRIM(BillList.TicketNumber))AS TicketNumber, LTRIM(RTRIM(ASeatNumberList.ASeatNumber))AS ASeatNumber,LTRIM(RTRIM(BillList.GetOffStation))AS GetOffStation, LTRIM(RTRIM(BillList.SellTicKetYuan))AS SellTicKetYuan, VehicleList.VehicleID,ASeatNumberList.SeatStateID, BillList.BillID, CheckTicketList.CheckTicketID, CheckTicketList.AlreadyCheckNo, CheckTicketList.CheckTicketTime, CheckTicketList.CheakPicketRoomID, LTRIM(RTRIM(StationList.StationName))AS StationNameFROM CheckTicketList INNER JOINTicketNumberList INNER JOINASeatNumberList ON TicketNumberList.ASeatNumberID = ASeatNumberList.ASeatNumberID INNER JOINBillList ON TicketNumberList.TicketNumberID = BillList.TicketNumberID ON CheckTicketList.BillID = BillList.BillID INNER JOINStationList ON CheckTicketList.CheakPicketRoomID = StationList.StationID LEFT OUTER JOINVehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID LEFT OUTER JOINStationList AS StationList_1 ON VehicleList.StationID = StationList_1.StationIDWHERE ASeatNumberList.SeatStateID=1 AND ASeatNumberList.VehicleID=@VehicleID AND VehicleList.DeductFeeNo=0 and CheckTicketList.UserID=1ORDER BY CheckTicketList.CheckTicketTime DESC--数据按最新日期排序ENDIF @Type='frmCheckTicket_Load_MouseDownLvwSeatStatus'--单击图片座位状态绑定数据BEGINSELECT BillList.BillID, ASeatNumberList.ASeatNumberID, BillList.TicketNumber, ASeatNumberList.ASeatNumber, BillList.SellTicKetYuan,VehicleList.VehicleID, ASeatNumberList.SeatStateID, BillList.BillStatusID, OutVehicleList.OutVehicleTime, OutVehicleList.OutVehicleID,BillList.GetOnStation, BillList.GetOffStation, VehicleList.StationID, StationList.StationName, BillList.SellTicKetTimeFROM OutVehicleList INNER JOINVehicleList ON OutVehicleList.VehicleID = VehicleList.VehicleID INNER JOINStationList ON VehicleList.StationID = StationList.StationID RIGHT OUTER JOINTicketNumberList INNER JOINASeatNumberList ON TicketNumberList.ASeatNumberID = ASeatNumberList.ASeatNumberID INNER JOINBillList ON TicketNumberList.TicketNumberID = BillList.TicketNumberID ON VehicleList.VehicleID = ASeatNumberList.VehicleID WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberID and BillList.BillStatusID<>5 ENDIF @Type='frmCheckTicket_InsertCheckTicket'--新增查票BEGINBEGIN TRANINSERT INTO CheckTicketList(AlreadyCheckNo, BillID, CheckTicketTime, CheakPicketRoomID,UserID)VALUES (@AlreadyCheckNo, @BillID, @CheckTicketTime, @CheakPicketRoomID,@UserID)SELECT @@IDENTITYCOMMIT TRAN END
END</span>
第二步:服务端BLL(逻辑层)写方法调用数据库代码:
对应文件夹:CheckTicketManage.frmCheckTicket.cs(检票类)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;//添加命名空间,
using System.Data;//添加命名空间
using System.Data.SqlClient;//添加命名空间namespace BLL客运综合管理系统.CheckTicketManage
{[ServiceContract]//服务标签public class frmCheckTicket{DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();//实例化#region 绑定dgvVehicle信息(这里方法的解说:文字解析)[OperationContract]//行为标签public DataSet frmCheckTicket_Load_dgvVehicle()//方法名可以跟对应数据库写的存储过程方法名字相同{SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),};mySqlParameters[0].Value = "frmCheckTicket_Load_dgvVehicle";//对应数据库写的存储过程方法名字DataTable dt = myDALMethod.QueryDataTable("CheckTicketManage_frmCheckTicket", mySqlParameters);DataSet ds = new DataSet(); //对应数据库存储过程名字ds.Tables.Add(dt);return ds;}#endregion#region 图片显示座位状态[OperationContract]public DataSet frmCheckTicket_Load_lvwSeatStatus(int intVehicleID){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@VehicleID", SqlDbType.Int),};mySqlParameters[0].Value = "frmCheckTicket_Load_lvwSeatStatus";mySqlParameters[1].Value = intVehicleID;DataTable dt = myDALMethod.QueryDataTable("CheckTicketManage_frmCheckTicket", mySqlParameters);DataSet ds = new DataSet();ds.Tables.Add(dt);return ds;}#endregion#region 单击图片绑定数据[OperationContract]public DataSet frmCheckTicket_Load_MouseDownLvwSeatStatus(int intASeatNumberID){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@ASeatNumberID", SqlDbType.Int),};mySqlParameters[0].Value = "frmCheckTicket_Load_MouseDownLvwSeatStatus";mySqlParameters[1].Value = intASeatNumberID;DataTable dt = myDALMethod.QueryDataTable("CheckTicketManage_frmCheckTicket", mySqlParameters);DataSet ds = new DataSet();ds.Tables.Add(dt);return ds;}#endregion#region 检票/复检[OperationContract]public int frmCheckTicket_Update_Status(int intASeatNumberID){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@ASeatNumberID", SqlDbType.Int),};mySqlParameters[0].Value = "frmCheckTicket_Update_Status";mySqlParameters[1].Value = intASeatNumberID;return myDALMethod.UpdateData("CheckTicketManage_frmCheckTicket", mySqlParameters);}#endregion#region 检票Insert[OperationContract]public int frmCheckTicket_Insert_Status(bool boolAlreadyCheckNo){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@AlreadyCheckNo", SqlDbType.Bit),};mySqlParameters[0].Value = "frmCheckTicket_Insert_Status";mySqlParameters[1].Value = boolAlreadyCheckNo;return myDALMethod.UpdateData("CheckTicketManage_frmCheckTicket", mySqlParameters);}#endregion#region 绑定本站已检[OperationContract]public DataSet frmCheckTicket_Load_dgvThisStationAlreadyCheck(){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),};mySqlParameters[0].Value = "frmCheckTicket_Load_dgvThisStationAlreadyCheck";DataTable dt = myDALMethod.QueryDataTable("CheckTicketManage_frmCheckTicket", mySqlParameters);DataSet ds = new DataSet();ds.Tables.Add(dt);return ds;}#endregion#region 出车[OperationContract]public int frmCheckTicket_Update_OutVehicleStatus(int intVehicleID){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@VehicleID", SqlDbType.Int),};mySqlParameters[0].Value = "frmCheckTicket_Update_OutVehicleStatus";mySqlParameters[1].Value = intVehicleID;return myDALMethod.UpdateData("CheckTicketManage_frmCheckTicket", mySqlParameters); }#endregion#region 绑定已报班次[OperationContract]public DataSet frmCheckTicket_Load_dgvAlreadyReportClasses(){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),};mySqlParameters[0].Value = "frmCheckTicket_Load_dgvAlreadyReportClasses";DataTable dt = myDALMethod.QueryDataTable("CheckTicketManage_frmCheckTicket", mySqlParameters);DataSet ds = new DataSet();ds.Tables.Add(dt);return ds;}#endregion#region dgv单击查询[OperationContract]public DataSet frmCheckTicket_CellClickDgvVehicle(int intVehicleID){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@VehicleID", SqlDbType.Int),};mySqlParameters[0].Value = "frmCheckTicket_CellClickDgvVehicle";mySqlParameters[1].Value = intVehicleID;DataTable dt = myDALMethod.QueryDataTable("CheckTicketManage_frmCheckTicket", mySqlParameters);DataSet ds = new DataSet();ds.Tables.Add(dt);return ds;}#endregion#region 新增查票[OperationContract]public int frmCheckTicket_InsertCheckTicket(bool boolAlreadyCheckNo, int intBillID, DateTime CheckTicketTimem, int intCheakPicketRoomID, int UserID){SqlParameter[] mySqlParameters = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@AlreadyCheckNo", SqlDbType.Bit),new SqlParameter("@BillID", SqlDbType.Int),new SqlParameter("@CheckTicketTime", SqlDbType.DateTime),new SqlParameter("@CheakPicketRoomID", SqlDbType.Int),new SqlParameter("@UserID", SqlDbType.Int),};mySqlParameters[0].Value = "frmCheckTicket_InsertCheckTicket";mySqlParameters[1].Value = boolAlreadyCheckNo;mySqlParameters[2].Value = intBillID;mySqlParameters[3].Value = CheckTicketTimem;mySqlParameters[4].Value = intCheakPicketRoomID;mySqlParameters[5].Value = UserID; return myDALMethod.UpdateData("CheckTicketManage_frmCheckTicket", mySqlParameters);}#endregion}
}
第三步:客户端UIL(界面层)写调用方法调用BLL(逻辑层)代码:
对应文件夹:CheckTicketManage.frmCheckTicket.cs(检票窗体)对应各种功能详解:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;//添加命名空间namespace XX集团客运综合管理系统client.CheckTicketManage
{public partial class frmCheckTicket : Form{public frmCheckTicket(){InitializeComponent();}BLL客运综合管理系统.CheckTicketManage.frmCheckTicket.frmCheckTicketClient myfrmCheckTicketClient =new BLL客运综合管理系统.CheckTicketManage.frmCheckTicket.frmCheckTicketClient();//实例化,用来调用BLL的方法使用BLL客运综合管理系统.SafeCheck.frmVehicleNews.frmVehicleNewsClient myfrmVehicleNewsClient =new BLL客运综合管理系统.SafeCheck.frmVehicleNews.frmVehicleNewsClient();BLL客运综合管理系统.SafeCheck.frmDriverNews.frmDriverNewsClient myfrmDriverNewsClient =new BLL客运综合管理系统.SafeCheck.frmDriverNews.frmDriverNewsClient();BLL客运综合管理系统.frmMain.frmMainClient myfrmMainClient = new BLL客运综合管理系统.frmMain.frmMainClient();public delegate void ChangeFormColor(bool topmost);//自定义方法public delegate void ChangeFormColor1(bool topmost1);public event ChangeFormColor ChangeColor;public event ChangeFormColor1 ChangeColor1;private void frmJianPiao_FormClosing(object sender, FormClosingEventArgs e){ChangeColor1(true);ChangeColor(true);}#region frmCheckTicket_Load事件DataTable dtdgvVehicle;//声明一个全局变量private void frmCheckTicket_Load(object sender, EventArgs e){DataTable dtcboStation = myfrmDriverNewsClient.frmDriverInformation_Load_StationName().Tables[0];//绑定数据cboCheckTicketMouth.DataSource = dtcboStation;//绑定下拉框cboCheckTicketMouth.DisplayMember = "StationName";cboCheckTicketMouth.ValueMember = "StationID";cboCheckTicketMouth.SelectedIndex = -1;txtOpenVehicleDate.Format = DateTimePickerFormat.Custom;//设置时间格式2015-04-21 19:55:00txtOpenVehicleDate.CustomFormat = "yyyy-MM-dd HH:mm:ss";dtdgvVehicle = myfrmCheckTicketClient.frmCheckTicket_Load_dgvVehicle().Tables[0];dgvVehicle.DataSource = dtdgvVehicle;//绑定待检班次dgv信息this.dgvVehicle = SYS_PublicStaticClass.SetDgv(dgvVehicle);//序号this.dgvVehicle.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框this.dgvVehicle.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中this.dgvVehicle.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中this.dgvThisStationAlreadyCheck = SYS_PublicStaticClass.SetDgv(dgvThisStationAlreadyCheck);//序号this.dgvThisStationAlreadyCheck.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框this.dgvThisStationAlreadyCheck.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中this.dgvThisStationAlreadyCheck.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中string[] strClasses = new string[dtdgvVehicle.Rows.Count];for (int i = 0; i < dtdgvVehicle.Rows.Count; i++){strClasses[i] = dtdgvVehicle.Rows[i]["Classes"].ToString().Trim();}txtClasses.AutoCompleteSource = AutoCompleteSource.CustomSource;//班次自动完成源txtClasses.AutoCompleteCustomSource.AddRange(strClasses);txtClasses.AutoCompleteMode = AutoCompleteMode.SuggestAppend;DataTable dtdgvAlreadyReportClasses = myfrmCheckTicketClient.frmCheckTicket_Load_dgvAlreadyReportClasses().Tables[0];dgvAlreadyReportClasses.DataSource = dtdgvAlreadyReportClasses;//绑定已报班次dgv信息this.dgvAlreadyReportClasses = SYS_PublicStaticClass.SetDgv(dgvAlreadyReportClasses);//序号this.dgvAlreadyReportClasses.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框this.dgvAlreadyReportClasses.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中this.dgvAlreadyReportClasses.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中}#endregion#region dgv单击事件private void dgvVehicle_CellClick(object sender, DataGridViewCellEventArgs e){PublicStaticObject.intVehicleStateID = Convert.ToInt32(dgvVehicle.CurrentRow.Cells["车辆状态ID"].Value);//PublicStaticObject.intVehicleStateID公共静态ID在这个模块任意调用PublicStaticObject.intVehicleID = Convert.ToInt32(dgvVehicle.CurrentRow.Cells["班次ID"].Value);lblOpenVehicleTimetxt.Text = dgvVehicle.CurrentRow.Cells["出车时间"].Value.ToString().Trim();//绑定数据給相应控件txtClassesOne.Text = dgvVehicle.CurrentRow.Cells["班次"].Value.ToString().Trim();txtLine.Text = dgvVehicle.CurrentRow.Cells["线路"].Value.ToString().Trim();txtVehicleNumer.Text = dgvVehicle.CurrentRow.Cells["车牌号"].Value.ToString().Trim();DataTable dtlvwSeatStatus = myfrmCheckTicketClient.frmCheckTicket_Load_lvwSeatStatus(PublicStaticObject.intVehicleID).Tables[0];//根据车辆ID绑定座位信息cboCheckTicketMouth.Text = dtlvwSeatStatus.Rows[0]["StationName"].ToString().Trim();lvwSeatStatus.Controls.Clear();//清空for (int RowsIndex = 0, leftX = 10, leftY = 100; RowsIndex < dtlvwSeatStatus.Rows.Count; RowsIndex++)//生成图片方法{int RowsCount = RowsIndex / 9;if (RowsIndex % 9 == 0){leftX = 8;//与左边的距离}else if (RowsIndex != 0){leftX += 44;//两图片宽的距离}leftY = 8 + RowsCount * 35;//(9) 与顶点的距离(35)两图片高的距离Button btnOne = new Button();Label lblOne = new Label();btnOne.Name = dtlvwSeatStatus.Rows[RowsIndex]["ASeatNumber"].ToString().Trim();btnOne.Tag = Convert.ToInt32(dtlvwSeatStatus.Rows[RowsIndex]["ASeatNumberID"]);btnOne.ForeColor = Color.DeepPink;btnOne.Cursor = Cursors.Hand;btnOne.Font = new Font("宋体", 11, FontStyle.Bold);btnOne.Text = dtlvwSeatStatus.Rows[RowsIndex]["ASeatNumber"].ToString().Trim();btnOne.Location = new Point(leftX, leftY);btnOne.Size = new Size(42, 30);int intSeatStateID = (int)dtlvwSeatStatus.Rows[RowsIndex]["SeatStateID"];//绑定根据不同状态的IDswitch (intSeatStateID){case 1: btnOne.BackgroundImage = imgSeat.Images["001.PNG"]; break;case 2: btnOne.BackgroundImage = imgSeat.Images["002.PNG"]; break;case 3: btnOne.BackgroundImage = imgSeat.Images["003.PNG"]; break;case 5: btnOne.BackgroundImage = imgSeat.Images["004.PNG"]; break;}//根据不同状态显示不同图片lvwSeatStatus.Controls.Add(btnOne);btnOne.MouseEnter += new EventHandler(btnOne_MouseEnter);btnOne.MouseLeave += new EventHandler(btnOne_MouseLeave);btnOne.MouseDown += new MouseEventHandler(btnOne_MouseDown);//在座位上按下鼠标键事件 }DataTable dtList=myfrmCheckTicketClient.frmCheckTicket_CellClickDgvVehicle(PublicStaticObject.intVehicleID).Tables[0];dgvThisStationAlreadyCheck.DataSource = dtList;decimal decCount = 0;for (int i = 0; i < dtList.Rows.Count; i++){if (Convert.ToInt32(dtList.Rows[i]["SeatStateID"]) == 1){decCount++;}}lblAlreadyCheck.Text = decCount.ToString();//已检数decimal decAlreadySellCount = 0;for (int j = 0; j < dtlvwSeatStatus.Rows.Count; j++){if (Convert.ToInt32(dtlvwSeatStatus.Rows[j]["SeatStateID"]) == 2 || Convert.ToInt32(dtlvwSeatStatus.Rows[j]["SeatStateID"]) == 1){decAlreadySellCount++;}}lblAlreadySell.Text = decAlreadySellCount.ToString();//已售数lblNotCheck.Text = Convert.ToString(Convert.ToDecimal(lblAlreadySell.Text.ToString().Trim()) - Convert.ToDecimal(lblAlreadyCheck.Text.ToString().Trim())).Trim();//未检数}#endregionvoid btnOne_MouseDown(object sender, MouseEventArgs e)//事件{try{DataTable dtPhoneNews = myfrmCheckTicketClient.frmCheckTicket_Load_MouseDownLvwSeatStatus(PublicStaticObject.intASeatNumberID).Tables[0];PublicStaticObject.intBillOneID = Convert.ToInt32(dtPhoneNews.Rows[0]["BillID"]);PublicStaticObject.intASeatNumberOneID = Convert.ToInt32(dtPhoneNews.Rows[0]["ASeatNumberID"]);PublicStaticObject.intSeatStateID = Convert.ToInt32(dtPhoneNews.Rows[0]["SeatStateID"]);txtTicketNumber.Text = dtPhoneNews.Rows[0]["TicketNumber"].ToString().Trim();txtSeatNumber.Text = dtPhoneNews.Rows[0]["ASeatNumber"].ToString().Trim();txtArriveStation.Text = dtPhoneNews.Rows[0]["GetOffStation"].ToString().Trim();txtPrice.Text = dtPhoneNews.Rows[0]["SellTicketYuan"].ToString().Trim();txtOpenVehicleDate.Text = dtPhoneNews.Rows[0]["SellTicKetTime"].ToString().Trim();}catch{ MessageBox.Show("数据为空无法绑定!请重新检查是否已购票!!!");//提示作用}}void btnOne_MouseEnter(object sender, EventArgs e)//座位图片鼠标到达时发生(图片变大,){Button btnOne = sender as Button;//实例化一个btnOnePublicStaticObject.intASeatNumberID = Convert.ToInt32(btnOne.Tag);btnOne.ForeColor = Color.MediumVioletRed;btnOne.Size = new Size(45, 35);btnOne.BackgroundImageLayout = ImageLayout.Zoom;try{lbl2.Visible = true;DataTable dtPhoneNews = myfrmCheckTicketClient.frmCheckTicket_Load_MouseDownLvwSeatStatus(PublicStaticObject.intASeatNumberID).Tables[0];if (dtPhoneNews.Rows.Count > 0){lbl2.Size = new Size(50, 20);lbl2.BackColor = Color.Linen;lbl2.ForeColor = Color.DarkGoldenrod;lbl2.Text = "票号:" + dtPhoneNews.Rows[0]["TicketNumber"].ToString().Trim()+ "\n\n座位号:" + dtPhoneNews.Rows[0]["ASeatNumber"].ToString().Trim()+ "\n\n上车站:" + dtPhoneNews.Rows[0]["GetOnStation"].ToString().Trim()+ "\n\n下车站:" + dtPhoneNews.Rows[0]["GetOffStation"].ToString().Trim()+ "\n\n售价:" + dtPhoneNews.Rows[0]["SellTicketYuan"].ToString().Trim()+ "\n\n售票时间:" + dtPhoneNews.Rows[0]["SellTicKetTime"].ToString().Trim();}else{lbl2.Text = "对不起,该座位没有售票信息!";}}catch { MessageBox.Show("数据绑定有误!请重新检查代码!!!"); }}void btnOne_MouseLeave(object sender, EventArgs e)//座位图片鼠标离开(图片变小){Button btnOne = sender as Button;int intSeatID = Convert.ToInt32(btnOne.Tag);btnOne.ForeColor = Color.OrangeRed;btnOne.Size = new Size(42, 30);lbl2.Visible = false;}#region 检票/复检private void btnCheckTicke_Click(object sender, EventArgs e){string cheak = txtTicketNumber.Text.ToString().Trim();if (PublicStaticObject.intSeatStateID == 1){MessageBox.Show("此座位信息已检票!请重新选择座位!!!");return;}if (PublicStaticObject.intSeatStateID == 3){MessageBox.Show("此座位还没售票信息!无法检票!!!");return;}if (PublicStaticObject.intSeatStateID == 2){if (MessageBox.Show("您确定检票号为(" + cheak + ")的票?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){if (cboCheckTicketMouth.Text.ToString().Trim() == ""){MessageBox.Show("请选择检票口!");return;}if (PublicStaticObject.intBillOneID > 0){try{Boolean boolAlreadyCheckNo = true;int intBillID = PublicStaticObject.intBillOneID;DateTime CheckTicketTimem = DateTime.Now;int intCheakPicketRoomID = (int)(cboCheckTicketMouth.SelectedValue);int UserID = 1;int i = myfrmCheckTicketClient.frmCheckTicket_InsertCheckTicket(boolAlreadyCheckNo, intBillID, CheckTicketTimem, intCheakPicketRoomID, UserID);if (i > 0){myfrmCheckTicketClient.frmCheckTicket_Update_Status(PublicStaticObject.intASeatNumberOneID);MessageBox.Show("检票成功!");dgvVehicle_CellClick(null, null);DataTable dtList = myfrmCheckTicketClient.frmCheckTicket_CellClickDgvVehicle(PublicStaticObject.intVehicleID).Tables[0];dgvThisStationAlreadyCheck.DataSource = dtList;txtTicketNumber.Text = "";txtSeatNumber.Text = "";txtArriveStation.Text = "";txtPrice.Text = "";txtOpenVehicleDate.Text = "";}else{MessageBox.Show("检票失败了!");return;}}catch { MessageBox.Show("数据有误请查看代码!"); }}else{MessageBox.Show("请您选择需要选择的座位!");return;}}}else{MessageBox.Show("对不起,该座位不能检票!");return;}}#endregion#region 出车private void btnOutVehicle_Click(object sender, EventArgs e){if (PublicStaticObject.intVehicleStateID == 3){MessageBox.Show("此车已成功出过了!!!");return;}DialogResult dr = MessageBox.Show("您确定要出车?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if (dr == DialogResult.OK){DataTable dt = myfrmVehicleNewsClient.frmVehicleNews_OutVehicleNows(PublicStaticObject.intVehicleID).Tables[0];int intOutVehicleOneID = (int)dt.Rows[0]["OutVehicleID"];int OutVehicleCount = myfrmVehicleNewsClient.frmVehicleNews_OutVehicle(PublicStaticObject.intVehicleThreeID, intOutVehicleOneID);if (OutVehicleCount > 0){myfrmCheckTicketClient.frmCheckTicket_Update_OutVehicleStatus(PublicStaticObject.intVehicleID);MessageBox.Show("出车成功");DataTable dtdgvAlreadyReportClasses = myfrmCheckTicketClient.frmCheckTicket_Load_dgvAlreadyReportClasses().Tables[0];dgvAlreadyReportClasses.DataSource = dtdgvAlreadyReportClasses;this.dgvAlreadyReportClasses = SYS_PublicStaticClass.SetDgv(dgvAlreadyReportClasses);}else{MessageBox.Show("出车失败了!!!");return;}}}#endregion#region 报班private void btnCheck_Click(object sender, EventArgs e){if (MessageBox.Show("您确定要安检?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){Boolean str = Convert.ToBoolean(dgvVehicle.CurrentRow.Cells["SafeCheckNo"].Value);if (str == true){MessageBox.Show("对不起!已经安检过了,不用重复安检!!!");return;}else{if (myfrmVehicleNewsClient.frmVehicleNews_CheckUpdate(PublicStaticObject.intVehicleID) > 0){MessageBox.Show("安检成功!");frmCheckTicket_Load(null, null);tbCheLiangZhuanTai.SelectedTab = tabPage3;}else{MessageBox.Show("安检失败!");tbCheLiangZhuanTai.SelectedTab = tabPage3;return;}}}}#endregion#region 查询班次private void btnSrean_Click(object sender, EventArgs e){try{string strTicketNumber = txtClasses.Text;DataTable dtSeatAndTicket = dtdgvVehicle = myfrmCheckTicketClient.frmCheckTicket_Load_dgvVehicle().Tables[0];DataView dv1 = new DataView(dtSeatAndTicket);dv1.RowFilter = "Classes like '%" + strTicketNumber + "%'";dtSeatAndTicket = dv1.ToTable();dgvVehicle.DataSource = dv1;}catch { }}#endregion}
}
以上是检票管理-检票功能实现步骤:数据库-->BLL-->UIL
- -待续!!!
以上仅供学习参考,禁止商业用途!!!
客运综合管理系统项目解析-检票管理-检票相关推荐
- 客运综合管理系统项目—售票管理(售票)
2.2.2 售票 售票这个模块,可以根据车站选择车辆,也可以直接根据班次和线路查询车辆,按钮直接查询是不根据车站来查询的按车站查是根据车站来查询的,当鼠标移动到车辆图片时,左上角会出现该车辆的信息,点 ...
- 客运综合管理系统项目—报班统计(车辆调度报班)
2.3.2 车辆调度报班 车辆调度报班可以对车辆进行延时,停班,修改停班和取消停班等操作 2.3.2(图1) 从界面上可以看到我们这里用到的控件有 控件名称 说明 文字(Label) 控件可以在工具箱 ...
- 客运综合管理系统项目—售票管理(留票)
2.2.4 留票 查询按钮可以查询对应班次的座位信息,显示对应座位的图片,如果座位处于空的状态,就可以留票,右击座位图片进行留票和取消留票,右边DGV显示的是对应班次所留的票的一些基本信息 2.2.4 ...
- 承志医疗管理系统技术解析住院管理(六)
下面是对医生工作站的一些主体的功能进行描述,和解析说明: 医师对分配好床位的病人进行医嘱录入和处方录入还有一些辅助的检查和对病人的信息修改查看等,功能如下图: 医师点击菜单栏-->护理--& ...
- 承志医院管理系统项目解析 门诊收费(七)
1.4门诊收费 用于处方和辅助检查项目的收费,收费有3种情况:分别是现金.记账和刷卡.按照要求,备注填写你收费的类型,在后面收费员交款时好区别.如图(1): 图(1) 从界面上可以看到我们这里用到的控 ...
- 承志医院管理系统项目解析 门诊医生工作站—辅助检查项目(六)
1.33辅助检查 在需要做辅助检查的时候,选择病人,然后选择相关信息的辅助检查项目,如图(1).(2)所示:: 图(1) 图(2) 从界面上可以看到我们这里用到的控件有 控件名称 说明 日期控件(Da ...
- 承志医院管理系统项目解析 门诊医生工作站—书写病历(四)
1.3门诊医生工作站 由门诊医生进行看病,开药与诊疗方案. 1.31书写病历 书写病历这个模块,主要是给病人写病历,如图(1) 图(1) 控件名称 说明 日期控件(DateTimePicker) 控件 ...
- Bootstrap4+MySQL前后端综合实训-Day08-PM【ajax获取表单标签内容、根据“栏目信息”添加“新闻信息”、新闻管理系统-项目展示】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目 录 ajax获取表单标签内容 ajax根据数据库加载select下来列 ...
- 无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型
无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型 axu ...
最新文章
- 驰骋工作流引擎设计系列07 线性流程节点运动(发送)设计
- 【翻译】旧技术成就新勒索软件,Petya添加蠕虫特性
- cnc加工中心保养表_CNC加工中心有哪些日常保养方法?
- Python代码注释应该怎么写?
- 面试字节跳动后的2点总结,建议收藏!
- 《Python Cookbook 3rd》笔记(4.12):不同集合上元素的迭代
- 对标小米!华为P50 Pro+将有望搭载液态镜头技术
- 云计算中的地域和可用区概念
- 在树莓派上编译安装golang环境
- 大朗机器人餐厅在哪里_获得海内外一致好评,送餐机器人为中国餐饮打开新世界...
- VMWare安装Ubuntu 16.04
- 人手一份!Vue 3 中文文档来啦!
- 一汽丰田RAV4电路图2012至2013
- 高铁检测试验软件,高铁规划要点及测试情况分析
- 基于react+antd的后台管理模板
- 解决SQLServer2000安装被挂起的方法
- MacOS安装brew安装git安装sdkman安装sbt
- 移动支付服务Dwolla宣布10美元以下交易不收费
- 【Android 基础知识】翻页类视图 ViewPager
- iOS - 找出汉字拼音首字母