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

本文详细介绍了售票系统的管理与操作流程,包括座位查询、图片显示、留票、取消留票等功能实现,以及数据库存储过程、逻辑层和界面层代码。通过绑定座位图片、新增留票、更新座位状态等步骤,实现高效便捷的票务管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.2.4 留票

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

                                                                                                                                         2.2.4(图1)

从图  2.1(图1)上可以看到我们这里用到的控件有

控件名称

说明

    文字(label

控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。右击控件选择属性,在跳出框里面选择带有雷电的图标,在里面可以选择属性

下拉框(ComboBox

文本(TextBox

按钮(Button

    容器(panel)

   表格(DataGridView

数据库

1、表与关系


                                                                                                                      2.2.4(图2)

表1.车辆表(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

 

安检否

表2.座位表(ASeatNumberList)

列名

数据类型

主键/外键

说明

ASeatNumberID

int - Identity

主键

座号ID

ASeatNumber

char (10)

 

座号

VehicleID

int

外键

车辆表.车辆ID

SeatStateID

int

外键

座位状态表.座位状态ID

UserNo

bit

 

有用否

LinkNo

bit

 

连接否

表3.票号表(TicketNumberList)

列名

数据类型

主键/外键

说明

TicketNumberID

int

主键

票号ID

TicketNumber

char (100)

 

票号

ASeatNumberID

int

外键

座位表.座号ID

UserNo

bit

 

有用否

表4.用户表(dbo.UserList)

列名

数据类型

主键/外键

说明

UserID

int

主键

用户ID

UserNumber

char (100)

 

用户编码

StaffID

int

外键

员工表.员工ID

WorkValue

char (100)

 

工价

LimitsOfAuthorityGroupID

int

外键

权限组表.权限组ID

Password

char (100)

 

密码

Remarks

char (100)

 

备注

StopUseNo

bit

 

停用否

表5.员工表(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)

 

相片

表6.票号表(TicketNumberList)

列名

数据类型

主键/外键

说明

TicketNumberID

int

主键

票号ID

TicketNumber

char (100)

 

票号

ASeatNumberID

int

外键

座位表.座号ID

UserNo

bit

 

有用否

表7.线路表(LineList)

列名

数据类型

主键/外键

说明

LineID

int - Identity

主键

线路ID

LineName

char (100)

 

线路名称

VehicleID

int

外键

车辆表.车辆ID

Remarks

char (100)

 

备注

StopNo

bit

 

停用否

表8.留票表(StayTicketList)

列名

数据类型

主键/外键

说明

StayTicketID

int - Identity

主键

留票ID

Remarks

char (100)

 

备注

ASeatNumberID

int

外键

座位表.座位ID

StayTicketTime

datetime

 

留票时间

StayTicketSatffID

int

外键

员工表.留票员ID

 

1.下拉框的绑定请查看登陆界面的实现,查询的实现请查看售票管理(库存/取票),dgv的绑定请查看售票管理(退票)

2.座位图片的显示留票的实现

                                                                                                              2.2.4(图3)

第一步:数据库的存储过程

@TYPE CHAR(100)='',
@StayTicketID INT=0, 
@Remarks CHAR(100)='', 
@ASeatNumberID INT=0, 
@StayTicketTime DATETIME='', 
@StayTicketSatffID INT=0,
IF @TYPE='frmStayTicket_SelectAseatPhoto'--绑定座位图片
BEGIN
SELECT     ASeatNumberList.ASeatNumber, VehicleList.Classes, ASeatNumberList.SeatStateID, ASeatNumberList.ASeatNumberID, VehicleList.VehicleID, OutVehicleList.OutVehicleID
FROM         ASeatNumberList INNER JOIN
                      VehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID INNER JOIN
                      OutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleID
WHERE OutVehicleList.UserTo=1 and  VehicleList.DeductFeeNo=0--当有用否等于TRUE时
END
IF @TYPE='frmStayTicket_SelectAseatPhotoID'--获取新增座位的ID
BEGIN
SELECT     ASeatNumberList.ASeatNumber, VehicleList.Classes, ASeatNumberList.SeatStateID, ASeatNumberList.ASeatNumberID, VehicleList.VehicleID
FROM         ASeatNumberList INNER JOIN
                      VehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID
WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberID
END
IF @TYPE='frmStayTicket_InsertStayTicket'	--新增留票
BEGIN
INSERT INTO  StayTicketList(Remarks, ASeatNumberID, StayTicketTime, StayTicketSatffID,ClientID)
VALUES  (@Remarks, @ASeatNumberID, @StayTicketTime, @StayTicketSatffID,@ClientID)
END
IF @TYPE='frmStayTicket_UpdateSeatStaue'--修改座位状态
BEGIN
UPDATE     ASeatNumberList
SET        SeatStateID=5 
WHERE      ASeatNumberList.ASeatNumberID=@ASeatNumberID
END

第二步:逻辑层(BLL)代码

 [OperationContract]
        public DataSet frmStayTicket_SelectAseatPhoto()//绑定图片
        {
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char) };
            mySqlParameter[0].Value = "frmStayTicket_SelectAseatPhoto";
            DataTable myDataTable = myDALMethod.QueryDataTable("SellTicketManage_frmStayTicket", mySqlParameter);
            DataSet myDataSet = new DataSet();
            myDataSet.Tables.Add(myDataTable);
            return myDataSet;
        }
        [OperationContract]
        public int frmStayTicket_InsertStayTicket(string strRemarks, int intASeatNumberID, DateTime dtStayTicketTime, int intStayTicketSatffID)//新增留票
        {
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
                                            new SqlParameter("@Remarks", SqlDbType.Char),
                                            new SqlParameter("@ASeatNumberID", SqlDbType.Char),
                                            new SqlParameter("@StayTicketTime", SqlDbType.Char),
                                            new SqlParameter("@StayTicketSatffID", SqlDbType.Char)};
            mySqlParameter[0].Value = "frmStayTicket_InsertStayTicket";
            mySqlParameter[1].Value = strRemarks;
            mySqlParameter[2].Value = intASeatNumberID;
            mySqlParameter[3].Value = dtStayTicketTime;
            mySqlParameter[4].Value = intStayTicketSatffID;
            return myDALMethod.UpdateData("SellTicketManage_frmStayTicket", mySqlParameter);
        }
        [OperationContract]
        public int frmStayTicket_UpdateSeatStaue(int intASeatNumberID)//修改座位状态
        {
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
                                            new SqlParameter("@ASeatNumberID", SqlDbType.Char),};
            mySqlParameter[0].Value = "frmStayTicket_UpdateSeatStaue";
            mySqlParameter[1].Value = intASeatNumberID;
            return myDALMethod.UpdateData("SellTicketManage_frmStayTicket", mySqlParameter);
        }

第三步:界面层(UIL)代码

 private void VehiclePhoto(DataTable dtClasses)//显示座位图片的方法(解说请查看售票管理(售票))
        {
            pnlVehicle.Controls.Clear();//设置panel为空
            for (int RowsIndex = 0, leftX = 50, leftY = 50; RowsIndex < dtVehicle.Rows.Count; RowsIndex++)//声明一个整形,一个横坐标和一个纵坐标,设置值的范围
            {
                int RowsCount = RowsIndex / 4;//一行有4个
                if (RowsIndex % 4 == 0)//取/4的余数
                {
                    leftX = 10;//与左边的距离
                }
                else if (RowsIndex != 0)//如果声明的整形不等于0
                {
                    leftX += 90;//两图片宽的距离
                }
                leftY = 12 + RowsCount * 85;//(8) 与顶点的距离(35)两图片高的距离 
                Button btn = new Button();
                btn.Name = dtVehicle.Rows[RowsIndex]["VehicleBlockNumber"].ToString().Trim();
                btn.Tag = Convert.ToInt32(dtVehicle.Rows[RowsIndex]["VehicleID"].ToString().Trim());
                btn.Location = new Point(leftX, leftY);
                btn.Text = "车牌号:" + dtVehicle.Rows[RowsIndex]["VehicleBlockNumber"].ToString()
                                  + "\n 班次:" + dtVehicle.Rows[RowsIndex]["Classes"].ToString()
                                  + "\n 线路:" + dtVehicle.Rows[RowsIndex]["LineName"].ToString();//车辆图片中显示的数据
                btn.ForeColor = Color.OrangeRed;//设置字体颜色
                btn.Font = new Font("宋体", 8, FontStyle.Bold);//字体大小
                btn.Size = new Size(80, 65);//
                btn.TextAlign = ContentAlignment.TopLeft;
                btn.BackgroundImageLayout = ImageLayout.Center;//图片出现的位置
                btn.BackgroundImage = imgVehicle.Images["001.png"];
                this.pnlVehicle.Controls.Add(btn);
                btn.MouseDown += new MouseEventHandler(btn_MouseDown);//鼠标按下事件(在控件上按下鼠标键事件,调用事件)
                btn.MouseEnter += new EventHandler(btn_MouseEnter);//鼠标移动到时发生
                btn.MouseLeave += new EventHandler(btn_MouseLeave);//鼠标离开时发生
            }

            }
void btn_MouseEnter(object sender, EventArgs e)//座位图片鼠标到达时发生(图片变大,)
        {
            Button btnOne = sender as Button;
            PublicStaticObject.intAseatID = Convert.ToInt32(btnOne.Tag);
            btnOne.ForeColor = Color.MediumVioletRed;/图片中字体颜色改变
            btnOne.Size = new Size(55, 50);//改变图片的大小
            btnOne.BackgroundImageLayout = ImageLayout.Zoom;
            PublicStaticObject.intSeatTicKetNumber = Convert.ToInt32(btnOne.Tag);
        }
        void btn_MouseLeave(object sender, EventArgs e)//车辆图片鼠标离开(图片变小)
        {
            Button btn = sender as Button;
            int intVehicleID = Convert.ToInt32(btn.Tag);
            btn.ForeColor = Color.OrangeRed;//图片中字体颜色改变
            btn.Size = new Size(45, 40);//改变图片的大小
        }
 private void 留票ToolStripMenuItem_Click(object sender, EventArgs e)//右键功能留票
        {
            try
            {
                DataTable dtphotoOne = myfrmStayTicketClient.frmStayTicket_SelectAseatPhotoID(PublicStaticObject.intAseatID).Tables[0];
                if ((int)dtphotoOne.Rows[0]["SeatStateID"] == 3)//判断,当座位状态等于空时,可以留票
                {
                    DialogResult dr = MessageBox.Show("确定要留票?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);//提示框
                    if (dr == DialogResult.OK)//当按下提示框中(是)时
                    {
                        if (txtRemarks.Text == "")
                        {
                            MessageBox.Show("备注不能为空!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            return;
                        }
                        if (MessageBox.Show("确定留备注为(" + txtRemarks.Text + "\n)的票?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
                        {
                            DataTable dtphoto = myfrmStayTicketClient.frmStayTicket_SelectAseatPhotoID(PublicStaticObject.intAseatID).Tables[0];//获取数据
                            string strRemarks = txtRemarks.Text.ToString().Trim();
                            int intBillID = (int)dtphoto.Rows[0]["ASeatNumberID"];
                            DateTime dtStayTicketTime = DateTime.Now;
                            int intStayTicketSatffID = PublicStaticObject.UserID;
                            int i = myfrmStayTicketClient.frmStayTicket_InsertStayTicket(strRemarks, intBillID, dtStayTicketTime, intStayTicketSatffID);
                            if (i > 0)
                            {
                                string KnowName = "于" + dtStayTicketTime + "留一张班次为" + cboClassesNumber.Text.ToString().Trim() +"的票";//信息提示
                                myfrmMainClient.frmMain_InsertKnow(KnowName);
                                MessageBox.Show("留票成功!");
                                myfrmStayTicketClient.frmStayTicket_UpdateSeatStaue(PublicStaticObject.intAseatID);//修改座位状态
                                btnSearch_Click(null, null);//刷新
                            }
                            else
                            {
                                MessageBox.Show("操作错误!");
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("该座位无法留票!");
                }
            }
            catch { }
        }

3.取消留票的实现

                                                                                                           2.2.4(图4)

第一步:数据库的存储过程

IF @TYPE='frmStayTicket_UpdateSeatStaueOne'--修改座位状态(取消留票)
BEGIN
UPDATE     ASeatNumberList
SET        SeatStateID=3--修改座位的状态等于空
WHERE      ASeatNumberList.ASeatNumberID=@ASeatNumberID
END

第二步:逻辑层(BLL)代码

 [OperationContract]
        public int frmStayTicket_UpdateSeatStaueOne(int intASeatNumberID)//修改座位状态(取消留票)
        {
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
                                            new SqlParameter("@ASeatNumberID", SqlDbType.Char),};
            mySqlParameter[0].Value = "frmStayTicket_UpdateSeatStaueOne";
            mySqlParameter[1].Value = intASeatNumberID;
            return myDALMethod.UpdateData("SellTicketManage_frmStayTicket", mySqlParameter);
        }

第三步:界面层(UIL)代码

private void 取消留票ToolStripMenuItem_Click(object sender, EventArgs e)//右键取消留票
        {
            try
            {
                DataTable dtphotoOne = myfrmStayTicketClient.frmStayTicket_SelectAseatPhotoID(PublicStaticObject.intAseatID).Tables[0];//获取一条数据
                if ((int)dtphotoOne.Rows[0]["SeatStateID"] == 5)//判断座位状态是否是留
                {
                    DialogResult dr = MessageBox.Show("确定要取消留票?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);//提示框,
                    if (dr == DialogResult.OK)//提示框按是时执行
                    {
                        int i =
                            myfrmStayTicketClient.frmStayTicket_UpdateSeatStaueOne(PublicStaticObject.intAseatID);
                        if (i > 0)
                        {
                            DataTable DT = myfrmStayTicketClient.frmStayTicket_SelectStayTicket(PublicStaticObject.intAseatID).Tables[0];
                            int StayTicketID = (int)DT.Rows[0]["StayTicketID"];
                            myfrmStayTicketClient.frmStayTicket_UpdateStayTicket(StayTicketID);
                            MessageBox.Show("取消成功!");
                            btnSearch_Click(null, null);
                        }
                        else
                        {
                            MessageBox.Show("操作错误!");//提示框
                        }
                    }
                }
                else
                {
                    MessageBox.Show("该座位不在留票状态!");
                }
            }
            catch { }
        }















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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值