第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

- -待续!!!

以上仅供学习参考,禁止商业用途!!!

客运综合管理系统项目解析-检票管理-检票相关推荐

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

    2.2.2 售票 售票这个模块,可以根据车站选择车辆,也可以直接根据班次和线路查询车辆,按钮直接查询是不根据车站来查询的按车站查是根据车站来查询的,当鼠标移动到车辆图片时,左上角会出现该车辆的信息,点 ...

  2. 客运综合管理系统项目—报班统计(车辆调度报班)

    2.3.2 车辆调度报班 车辆调度报班可以对车辆进行延时,停班,修改停班和取消停班等操作 2.3.2(图1) 从界面上可以看到我们这里用到的控件有 控件名称 说明 文字(Label) 控件可以在工具箱 ...

  3. 客运综合管理系统项目—售票管理(留票)

    2.2.4 留票 查询按钮可以查询对应班次的座位信息,显示对应座位的图片,如果座位处于空的状态,就可以留票,右击座位图片进行留票和取消留票,右边DGV显示的是对应班次所留的票的一些基本信息 2.2.4 ...

  4. 承志医疗管理系统技术解析住院管理(六)

    下面是对医生工作站的一些主体的功能进行描述,和解析说明: 医师对分配好床位的病人进行医嘱录入和处方录入还有一些辅助的检查和对病人的信息修改查看等,功能如下图:   医师点击菜单栏-->护理--& ...

  5. 承志医院管理系统项目解析 门诊收费(七)

    1.4门诊收费 用于处方和辅助检查项目的收费,收费有3种情况:分别是现金.记账和刷卡.按照要求,备注填写你收费的类型,在后面收费员交款时好区别.如图(1): 图(1) 从界面上可以看到我们这里用到的控 ...

  6. 承志医院管理系统项目解析 门诊医生工作站—辅助检查项目(六)

    1.33辅助检查 在需要做辅助检查的时候,选择病人,然后选择相关信息的辅助检查项目,如图(1).(2)所示:: 图(1) 图(2) 从界面上可以看到我们这里用到的控件有 控件名称 说明 日期控件(Da ...

  7. 承志医院管理系统项目解析 门诊医生工作站—书写病历(四)

    1.3门诊医生工作站 由门诊医生进行看病,开药与诊疗方案. 1.31书写病历 书写病历这个模块,主要是给病人写病历,如图(1) 图(1) 控件名称 说明 日期控件(DateTimePicker) 控件 ...

  8. Bootstrap4+MySQL前后端综合实训-Day08-PM【ajax获取表单标签内容、根据“栏目信息”添加“新闻信息”、新闻管理系统-项目展示】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目   录 ajax获取表单标签内容 ajax根据数据库加载select下来列 ...

  9. 无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型

    无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型 axu ...

最新文章

  1. 驰骋工作流引擎设计系列07 线性流程节点运动(发送)设计
  2. 【翻译】旧技术成就新勒索软件,Petya添加蠕虫特性
  3. cnc加工中心保养表_CNC加工中心有哪些日常保养方法?
  4. Python代码注释应该怎么写?
  5. 面试字节跳动后的2点总结,建议收藏!
  6. 《Python Cookbook 3rd》笔记(4.12):不同集合上元素的迭代
  7. 对标小米!华为P50 Pro+将有望搭载液态镜头技术
  8. 云计算中的地域和可用区概念
  9. 在树莓派上编译安装golang环境
  10. 大朗机器人餐厅在哪里_获得海内外一致好评,送餐机器人为中国餐饮打开新世界...
  11. VMWare安装Ubuntu 16.04
  12. 人手一份!Vue 3 中文文档来啦!
  13. 一汽丰田RAV4电路图2012至2013
  14. 高铁检测试验软件,高铁规划要点及测试情况分析
  15. 基于react+antd的后台管理模板
  16. 解决SQLServer2000安装被挂起的方法
  17. MacOS安装brew安装git安装sdkman安装sbt
  18. 移动支付服务Dwolla宣布10美元以下交易不收费
  19. 【Android 基础知识】翻页类视图 ViewPager
  20. iOS - 找出汉字拼音首字母

热门文章

  1. 信用卡账单日和还款日最长最短免息期是如何计算的
  2. 【EF框架】DbContext的使用
  3. flash actionscript3.0 游戏人物走动
  4. 基于位表示的8叉树数据存储原理
  5. Unity 初识:SkyBox(天空盒)
  6. 看了个电影《天那边》
  7. windows 11文件夹共享踩坑记录
  8. Apache的在线升级
  9. Arduino板上通过操作端口寄存器来进行控制
  10. 创新投融资促中国城市智慧型发展