第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
BEGIN
IF @Type='frmCheckTicket_Load_dgvVehicle'--绑定dgvVehicle
BEGIN
SELECT 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.SafeCheckNo
FROM VehicleList INNER JOIN
LineList ON VehicleList.LineID = LineList.LineID INNER JOIN
OutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleID
WHERE VehicleList.VehicleStateID!=1 AND VehicleList.VehicleStateID!=3 AND OutVehicleList.UserTo=1 AND VehicleList.DeductFeeNo=0
ORDER BY OutVehicleList.OutVehicleTime DESC--数据按日期最新排序
END
IF @Type='frmCheckTicket_Load_lvwSeatStatus'--图片显示座位状态
BEGIN
SELECT ASeatNumberList.ASeatNumberID, ASeatNumberList.ASeatNumber, ASeatNumberList.SeatStateID,
VehicleList.VehicleID, VehicleList.OpenVehicleSiteID, StationList.StationID, StationList.StationName
FROM ASeatNumberList INNER JOIN
VehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID INNER JOIN
StationList ON VehicleList.OpenVehicleSiteID = StationList.StationID
WHERE ASeatNumberList.VehicleID=@VehicleID
END
IF @Type='frmCheckTicket_Update_Status'--检票/复检(修改座位状态)
BEGIN
UPDATE ASeatNumberList
SET SeatStateID =1
WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberID
END
IF @Type='frmCheckTicket_Insert_Status'--检票/复检Insert
BEGIN
INSERT INTO CheckTicketList
(AlreadyCheckNo)
VALUES (@AlreadyCheckNo)
END
IF @Type='frmCheckTicket_Load_dgvThisStationAlreadyCheck'--本站已检
BEGIN
SELECT 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 StationNameOne
FROM StationList INNER JOIN
VehicleList ON StationList.StationID = VehicleList.StationID RIGHT OUTER JOIN
CheckTicketList INNER JOIN
TicketNumberList INNER JOIN
ASeatNumberList ON TicketNumberList.ASeatNumberID = ASeatNumberList.ASeatNumberID INNER JOIN
BillList ON TicketNumberList.TicketNumberID = BillList.TicketNumberID ON CheckTicketList.BillID = BillList.BillID INNER JOIN
StationList AS StationList_1 ON CheckTicketList.CheakPicketRoomID = StationList_1.StationID ON VehicleList.VehicleID = ASeatNumberList.VehicleID
WHERE ASeatNumberList.SeatStateID=1 AND VehicleList.DeductFeeNo=0 AND CheckTicketList.UserID=1
ORDER BY CheckTicketList.CheckTicketTime DESC--数据按最新日期排序
END
IF @Type='frmCheckTicket_Update_OutVehicleStatus'--出车
BEGIN
UPDATE VehicleList
SET VehicleStateID =3
WHERE VehicleList.VehicleID=@VehicleID
END
IF @Type='frmCheckTicket_Load_dgvAlreadyReportClasses'--已报班次dgvAlreadyReportClasses
BEGIN
SELECT 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.OutVehicleTime
FROM VehicleList INNER JOIN
LineList ON VehicleList.LineID = LineList.LineID INNER JOIN
OutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleID
WHERE OutVehicleList.UserTo=1 and VehicleList.SafeCheckNo=1 AND VehicleList.DeductFeeNo=0
ORDER BY OutVehicleList.OutVehicleTime DESC--数据按最新日期排序
END
IF @Type='frmCheckTicket_CellClickDgvVehicle'--dgv单击查询
BEGIN
SELECT 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 StationName
FROM CheckTicketList INNER JOIN
TicketNumberList INNER JOIN
ASeatNumberList ON TicketNumberList.ASeatNumberID = ASeatNumberList.ASeatNumberID INNER JOIN
BillList ON TicketNumberList.TicketNumberID = BillList.TicketNumberID ON CheckTicketList.BillID = BillList.BillID INNER JOIN
StationList ON CheckTicketList.CheakPicketRoomID = StationList.StationID LEFT OUTER JOIN
VehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID LEFT OUTER JOIN
StationList AS StationList_1 ON VehicleList.StationID = StationList_1.StationID
WHERE ASeatNumberList.SeatStateID=1 AND ASeatNumberList.VehicleID=@VehicleID AND VehicleList.DeductFeeNo=0 and CheckTicketList.UserID=1
ORDER BY CheckTicketList.CheckTicketTime DESC--数据按最新日期排序
END
IF @Type='frmCheckTicket_Load_MouseDownLvwSeatStatus'--单击图片座位状态绑定数据
BEGIN
SELECT 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.SellTicKetTime
FROM OutVehicleList INNER JOIN
VehicleList ON OutVehicleList.VehicleID = VehicleList.VehicleID INNER JOIN
StationList ON VehicleList.StationID = StationList.StationID RIGHT OUTER JOIN
TicketNumberList INNER JOIN
ASeatNumberList ON TicketNumberList.ASeatNumberID = ASeatNumberList.ASeatNumberID INNER JOIN
BillList ON TicketNumberList.TicketNumberID = BillList.TicketNumberID ON VehicleList.VehicleID = ASeatNumberList.VehicleID
WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberID and BillList.BillStatusID<>5
END
IF @Type='frmCheckTicket_InsertCheckTicket'--新增查票
BEGIN
BEGIN TRAN
INSERT INTO CheckTicketList(AlreadyCheckNo, BillID, CheckTicketTime, CheakPicketRoomID,UserID)
VALUES (@AlreadyCheckNo, @BillID, @CheckTicketTime, @CheakPicketRoomID,@UserID)
SELECT @@IDENTITY
COMMIT 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:00
txtOpenVehicleDate.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"];//绑定根据不同状态的ID
switch (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();
//未检数
}
#endregion
void 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;//实例化一个btnOne
PublicStaticObject.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
- -待续!!!
以上仅供学习参考,禁止商业用途!!!