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

2.2.2 售票

 售票这个模块,可以根据车站选择车辆,也可以直接根据班次和线路查询车辆,按钮直接查询是不根据车站来查询的按车站查是根据车站来查询的,当鼠标移动到车辆图片时,左上角会出现该车辆的信息,点击车辆图片,右下角会出现座位,车牌号,班次,发车站等也会显示出来,点击座位图片可以进行售票,其中票据类型可以选择,按出售按钮dgv中会出现一条数据,多个座位出售时dgv的数据也会增多,上面全票数,半票数等数量会改变,按右上角保存按钮可以保存各种票所售出的张数和售票金额等数据。

                                                                                                               2.2.2(图1)

从界面上可以看到我们这里用到的控件有

控件名称

说明

    文字(Label)

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

下拉框(ComboBox)

文本(TextBox)

按钮(Button)

表格(DataGridView)

容器(Panel)

数字增加和减少按钮 (numericUpDown)

数据库

1、表与关系


                                                                                                                   2.2.2(图2)


                                                                                                                      2.2.2(图3)

表1.员工表(dbo.StaffList)

列名

数据类型

主键/外键

说明

StaffID

int

主键

员工ID

StaffNumber

char (100)

 

员工编号

StaffName

char (100)

 

员工姓名

Sex

char (100)

 

性别

IdentityCardNumber

char (100)

 

身份证号

HomeLocation

char (100)

 

家庭地址

Phone

char (100)

 

电话

StaffTypeID

int

外键

员工类型表.员工类型ID

OrganizationID

int

外键

机构表.机构ID

StationID

int

外键

站点表.站点ID

Remarks

char (100)

 

备注

LeaveOfficeNo

bit

 

离职否

InvokingNo

bit

 

调用否

Date

datetime

 

日期

Photo

nvarchar (3000)

 

相片

表2.车辆类型表(VehicleTypeList)

列名

数据类型

主键/外键

说明

VehicleTypeID

int

主键

车辆类型ID

VehicleTypeName

char (100)

 

车辆类型名称

表3.司机表(DriverList)

列名

数据类型

主键/外键

说明

DriverID

int - Identity

主键

司机ID

DriverNumber

char (100)

 

司机编号

WorkValue

char (100)

 

工价

DriveCardNumber

char (100)

 

驾驶证号

GrantDriveVehicleTypeID

int

外键

车型表.准驾车型ID

FollowEnterpriseQualificationCard

char (100)

 

从业资格证

CardCheckDate

datetime

 

证件验期

Remarks

char (100)

 

备注

MountGuardCardValidityDate

datetime

 

上岗证有效期

表4.站点表(StationList)

列名

数据类型

主键/外键

说明

StationID

int

主键

站点ID

StationNumber

char (100)

 

站点编号

StationName

char (100)

 

站点名称

StopNo

bit

 

停用否

表5.车辆表(VehicleList)

列名

数据类型

主键/外键

说明

VehicleID

int

主键

车辆ID

VehicleNumber

char (100)

Yes

车辆编号

VehicleBlockNumber

char (100)

Yes

车牌号

VehicleStateID

int

外键

车辆状态表.车辆状态ID

MotorcadeID

int

外键

车队表.车队ID

VehicleClearID

int

外键

车辆明细表.车辆明细ID

VehicleTypeID

int

外键

车型表.车型ID

DriverID

int

外键

司机表.司机ID

DeputyDriverOneID

int

外键

司机表.副司机1ID

DeputyDriverTwoID

int

外键

司机表.副司机2ID

StationID

int

外键

站点表.车站ID

LineID

int

外键

线路表.线路ID

OpenVehicleTime

datetime

 

发车时间

ASeatNumberID

int

外键

座号表.座号ID

FeeRateID

int

外键

费用表.费用ID

SeatNumber

char (100)

 

座位数

AddSeatNumber

char (100)

 

加座数

Remarks

char (100)

 

备注

ClassesLongStopID

int

外键

班次长停表.班次长停ID

ClassesRepeatID

int

外键

扣费表.扣费ID

Classes

char (100)

 

班次

OpenVehicleSiteID

int

外键

站点表.发车站 ID

EndVehicleSiteID

int

外键

站点表.终点站ID

DeductFeeNo

bit

 

扣费否

MotorNumber

char (100)

 

车队编号

VehicleAlterTypeCase

char (100)

 

车辆改型情况

WhetherCheck

char (100)

 

安检情况

SafeCheckNo

bit

 

安检否

表6.出车表(OutVehicleList)

列名

数据类型

主键/外键

说明

OutVehicleID

int

主键

出车ID

VehicleStateID

int

外键

车辆状态ID

OutVehicleTime

datetime

 

出车时间

VehicleID

int

外键

车辆ID

UserTo

int

 

是否有用

表7.车辆状态表(VehicleStateList)

列名

数据类型

主键/外键

说明

VehicleStateID

int

主键

车辆状态ID

VehicleStateName

char (100)

 

车辆状态名称

表8.线路表(LineList)

列名

数据类型

主键/外键

说明

LineID

int - Identity

主键

线路ID

LineName

char (100)

 

线路名称

VehicleID

int

外键

车辆表.车辆ID

Remarks

char (100)

 

备注

StopNo

bit

 

停用否

表9.票据表 (BillList)

列名

数据类型

主键/外键

说明

BillID

int

主键

.票据ID

TicketNumber

char(100)

 

票号

GetOnStation

char(100)

 

上车站

GetOffStation

char(100)

 

下车站

BillTypeID

int

外键

票据类型表.票据类型ID

BillStatusID

int

外键

票据状态表.票据状态ID

SellTicKetTime

datetime

 

买票时间

SellTicketSatffID

int

外键

员工表.售票员ID

ASeatNumberID

int

外键

座位表.座位ID

SellTicKetYuan

decimal(18, 3)

 

买票金额

CheckTicketID

int

外键

检票表.检票ID

TicketNumberID

int

外键

票号表.票号ID


表10.退票表(ReturnATicketDetailedStatement)

列名

数据类型

主键/外键

说明

ReturnATicketClearID

int

主键

退票ID

ReturnATicketNumber

      char(100)

 

退票号

BillTypeID

char(100)

外键

票据类型表.票据类型ID

StationAffairFee

decimal(18, 2)

 

站务费

ReturnATicketTime

datetime

 

废票时间

ProcedureFeeRate

decimal(18, 0)

 

手续费率

ReturnSum

decimal(18, 2)

 

退还金额

TimeDifference

char(100)

 

时差   

ReturnATicketOperatorID

int

外键

员工表.退票操作员ID

BillID

int

外键

票据表.票据ID

表11.票据状态表(BillStatusList)

列名

数据类型

主键/外键

说明

BillStatusID

int

主键

票据状态ID

BillStatus

char (100)

 

票据状态

表12.票据类型表(BillTypeList)

列名

数据类型

主键/外键

说明

BillTypeID

int - Identity

主键

票据类型ID

BillTypeName

char (100)

 

票据类型名称

TicketPrice

decimal (18, 3)

 

票价

表13.座位表(ASeatNumberList)

列名

数据类型

主键/外键

说明

ASeatNumberID

int - Identity

主键

座号ID

ASeatNumber

char (10)

 

座号

VehicleID

int

外键

车辆表.车辆ID

SeatStateID

int

外键

座位状态表.座位状态ID

UserNo

bit

 

有用否

LinkNo

bit

 

连接否

表14.票号表(TicketNumberList)

列名

数据类型

主键/外键

说明

TicketNumberID

int

主键

票号ID

TicketNumber

char (100)

 

票号

ASeatNumberID

int

外键

座位表.座号ID

UserNo

bit

 

有用否

表15.座位状态表(SeatStateList)

列名

数据类型

主键/外键

说明

SeatStateID

int

主键

座位状态ID

SeatState

char (100)

 

座位状态

表16.用户表(UserList)

列名

数据类型

主键/外键

说明

UserID

int

主键

用户ID

UserNumber

char (100)

 

用户编码

StaffID

int

外键

员工表.员工ID

WorkValue

char (100)

 

工价

LimitsOfAuthorityGroupID

int

外键

权限组表.权限组ID

Password

char (100)

 

密码

Remarks

char (100)

 

备注

StopUseNo

bit

 

停用否

1.车辆图片的实现

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


IF @TYPE='frmSellTicket_SelectPhoto'--pnl绑定图片

BEGIN

SELECT     VehicleList.VehicleID, LTRIM(RTRIM(VehicleList.VehicleBlockNumber)) AS VehicleBlockNumber, VehicleList.VehicleStateID, LTRIM(RTRIM(VehicleList.Classes)) AS Classes,

                      OutVehicleList.OutVehicleID, LineList.LineName

FROM         VehicleList INNER JOIN

                      OutVehicleListON VehicleList.VehicleID = OutVehicleList.VehicleID INNER JOIN

                      LineListON VehicleList.LineID = LineList.LineID

WHERE VehicleList.VehicleStateID <>1 and OutVehicleList.UserTo=1 and  VehicleList.DeductFeeNo=0--范围,车辆状态不等于停,报废否为FALSE

END

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

  [OperationContract]
        public DataSet frmSellTicket_SelectPhoto()//dgv绑定车辆图片
        {
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char) };
            mySqlParameter[0].Value = "frmSellTicket_SelectPhoto";
            DataTable myDataTable = myDALMethod.QueryDataTable("SellTicketManage_frmSellTicket", mySqlParameter);
            DataSet myDataSet = new DataSet();
            myDataSet.Tables.Add(myDataTable);
            return myDataSet;
        }

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

private void VehiclePhoto(DataTable dtVehicle)//显示车辆图片的方法,在Load事件中被调用
        {
            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)
                {
                    leftX = 10;//与左边的距离
                }
                else if (RowsIndex != 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);//鼠标离开时发生
            }
        }

2.点击车辆图片时显示出来的数据的代码

  string strCheLiangID;//声明一个字符串
        int strCheLiangOneID;//声明一个整形
        int intTuX;
        int intTuY;
        int intTuWidth;
        int intTuHeight;
        int intTuXOne;
        int intTuYOne;
        int intTuWidthOne;
        int intTuHeightOne;
        private void btn_MouseDown(object sender, MouseEventArgs e)//图片鼠标按下//出现座位图片
        {
            Button btn = sender as Button;
            PublicStaticObject.intVehicleTwoID = Convert.ToInt32(btn.Tag);
            DataTable dtSeat = myfrmSellTicketClient.frmSellTicket_SelectASeat(PublicStaticObject.intVehicleTwoID).Tables[0];
            DataTable dtSell = myfrmSellTicketClient.frmSellTicket_SelectSell(PublicStaticObject.intVehicleTwoID).Tables[0];//绑定dgv数据
            dgvSellTicket.DataSource = dtSell;
            DataTable dtPhotoNews = myfrmSellTicketClient.frmSellTicket_SelectPhotoNews(PublicStaticObject.intVehicleTwoID).Tables[0];
            PublicStaticObject.OutVehicleClearID = (int)dtPhotoNews.Rows[0]["OutVehicleID"];
            lblCurrentTicketNumberText.Text = "***";//当前票号
            lblOpenVehicleSiteText.Text = dtPhotoNews.Rows[0]["OpenVehicleSite"].ToString().Trim();//发车站
            lblEndVehicleSiteText.Text = dtPhotoNews.Rows[0]["EndVehicleSite"].ToString().Trim();//终点站
            lblSeatNumberText.Text = dtPhotoNews.Rows[0]["SeatNumber"].ToString().Trim();//座位数
            lblAddSeatNumberText.Text = dtPhotoNews.Rows[0]["AddSeatNumber"].ToString().Trim();//加座数
            int SeatNumberAddSeatNumber = Convert.ToInt32(dtPhotoNews.Rows[0]["SeatNumber"]) + Convert.ToInt32(dtPhotoNews.Rows[0]["AddSeatNumber"]);
            lblTicketNumberText.Text = SeatNumberAddSeatNumber.ToString().Trim(); //dtPhotoNews.Rows[0][""].ToString().Trim();//票的总数
            lblEntireTicketText.Text = "0";
            lblHalfTicketText.Text = "0";
            lblFreeTicketText.Text = "0";//文本的数据为0
            lblDiscountTicketText.Text = "0";
            int EntireTicketTextOne = 0;
            int EntireTicketTextTwo = 0;
            int EntireTicketTextFhree = 0;
            int EntireTicketTexFour = 0;
            for (int a = 0; a < dgvSellTicket.Rows.Count; a++)
            {
                if ((int)dgvSellTicket.Rows[a].Cells["BillTypeID"].Value == 1)//当票据类型等于全票时
                {
                    EntireTicketTextOne++;
                    lblEntireTicketText.Text = EntireTicketTextOne.ToString().Trim();//全票
                }
                if ((int)dgvSellTicket.Rows[a].Cells["BillTypeID"].Value == 2)//当票据类型等于半票时
                {
                    EntireTicketTextTwo++;
                    lblHalfTicketText.Text = EntireTicketTextTwo.ToString().Trim();//半票
                }
                if ((int)dgvSellTicket.Rows[a].Cells["BillTypeID"].Value == 3)
                {
                    EntireTicketTextFhree++;
                    lblFreeTicketText.Text = EntireTicketTextFhree.ToString().Trim();//免票
                }
                if ((int)dgvSellTicket.Rows[a].Cells["BillTypeID"].Value == 4)
                {
                    EntireTicketTexFour++;
                    lblDiscountTicketText.Text = EntireTicketTexFour.ToString().Trim();//打折票
                }
            }
            decimal TotalSum = 0;
            if (dgvSellTicket.Rows.Count > 0)//如果dgvSellTicket的行数大于0
            {
                for (int j = 0; j < dgvSellTicket.Rows.Count; j++)
                {
                    TotalSum += Convert.ToDecimal(dgvSellTicket.Rows[j].Cells["SellTicKetYuan"].Value);
                }
                lblTotalSumText.Text = Convert.ToString(TotalSum);//总金额
            }
            else if (dtSell.Rows.Count == 0)
            {
                lblTotalSumText.Text = "0.000";//lblTotalSumText显示的值为
            }
            //lblCurrentTicketNumberText.Text = dtSeat.Rows[0]["TicketNumber"].ToString().Trim();//当前票号
            int SellNumberText = Convert.ToInt32(lblDiscountTicketText.Text) + Convert.ToInt32(lblFreeTicketText.Text) + Convert.ToInt32(lblHalfTicketText.Text) + Convert.ToInt32(lblEntireTicketText.Text);
            lblSellText.Text = SellNumberText.ToString().Trim();//dtPhotoNews.Rows[0][""].ToString().Trim();//买的张数
            lblSurplusTicketText.Text = (SeatNumberAddSeatNumber - SellNumberText).ToString().Trim();//dtPhotoNews.Rows[0][""].ToString().Trim();//剩余票张数
            lblVehicleText.Text = dtPhotoNews.Rows[0]["VehicleBlockNumber"].ToString().Trim();
            lblClassesOneText.Text = dtPhotoNews.Rows[0]["Classes"].ToString().Trim();//班次
            PublicStaticObject.Calsses = dtPhotoNews.Rows[0]["Classes"].ToString().Trim();
            lblShopText.Text = PublicStaticObject.strStationName;//车站
            lblWindowsText.Text = PublicStaticObject.strWindowNumber;//窗口
            cboGetOnStation.Text = lblOpenVehicleSiteText.Text;
            cboGetOffStation.Text = lblEndVehicleSiteText.Text;
            pnlSeat.Controls.Clear();
            for (int RowsIndex = 0, leftX = 10, leftY = 100; RowsIndex < dtSeat.Rows.Count; RowsIndex++)
            {
                int RowsCount = RowsIndex / 16;
                if (RowsIndex % 16 == 0)
                {
                    leftX = 8;//与左边的距离
                }
                else if (RowsIndex != 0)
                {
                    leftX += 44;//两图片宽的距离
                }
                leftY = 8 + RowsCount * 35;//(8) 与顶点的距离(35)两图片高的距离
                Button btnOne = new Button();
                Label lblOne = new Label();
                btnOne.Name = dtSeat.Rows[RowsIndex]["ASeatNumber"].ToString().Trim();
                btnOne.Tag = Convert.ToInt32(dtSeat.Rows[RowsIndex]["ASeatNumberID"].ToString().Trim());
                btnOne.ForeColor = Color.DeepPink;
                btnOne.Cursor = Cursors.Hand;
                btnOne.Font = new Font("宋体", 11, FontStyle.Bold);
                btnOne.Text = dtSeat.Rows[RowsIndex]["ASeatNumber"].ToString().Trim();
                btnOne.Location = new Point(leftX, leftY);
                btnOne.Size = new Size(42, 30);
                PublicStaticObject.intSeatStateID = (int)dtSeat.Rows[RowsIndex]["SeatStateID"];
                switch (PublicStaticObject.intSeatStateID)
                {
                    case 1: btnOne.BackgroundImage = imgSeat.Images["001.PNG"]; break;//当ID为1时显示图片1
                    case 2: btnOne.BackgroundImage = imgSeat.Images["002.PNG"]; break;//当ID为2时显示图片2
                    case 3: btnOne.BackgroundImage = imgSeat.Images["003.PNG"]; break;//.......
                    case 5: btnOne.BackgroundImage = imgSeat.Images["005.PNG"]; break;
                }
                pnlSeat.Controls.Add(btnOne);//绑定座位图片

               

                //btnOne.MouseDown += new MouseEventHandler(btnOne_MouseDown);//在控件上按下鼠标键事件
                btnOne.MouseEnter += new EventHandler(btnOne_MouseEnter);
                btnOne.MouseLeave += new EventHandler(btnOne_MouseLeave);

                if (btn.Tag.ToString() != strCheLiangID)
                {
                    Pen pen = new Pen(pnlVehicle.BackColor, 5);//用于绘图
                    Graphics gra = pnlVehicle.CreateGraphics();
                    gra.DrawRectangle(pen, new Rectangle(intTuX - 1, intTuY, intTuWidth, intTuHeight)); //用于透明绘图 
                }
                else
                {
                    btn.Cursor = Cursors.Hand;//显示手指按钮 
                    Pen pen = new Pen(Color.Red, 5);//用于绘图
                    Graphics gra = pnlVehicle.CreateGraphics();
                    gra.DrawRectangle(pen, new Rectangle(btn.Location.X - 1, btn.Location.Y, btn.Size.Width, btn.Size.Height)); //用于绘图
                }
                strCheLiangID = btn.Tag.ToString();
                intTuX = btn.Location.X;//btn的横坐标
                intTuY = btn.Location.Y;//btn的纵坐标
                intTuWidth = btn.Size.Width;
                intTuHeight = btn.Size.Height;

                btnOne.MouseDown += new MouseEventHandler(btnOne_MouseDown);//执行方法
                btnOne.ContextMenuStrip = cotmphoto;
            }
        }

3.鼠标移动到时图片变大和显示车辆信息的代码

 void btn_MouseEnter(object sender, EventArgs e)//车辆图片鼠标到达时发生(图片变大,显示车辆信息)
        {
            Button btn = sender as Button;
            PublicStaticObject.intVehicleID = Convert.ToInt32(btn.Tag);//用静态类保存
获取当前移动到图片的车辆ID
            btn.ForeColor = Color.MediumVioletRed;//显示图片的颜色
            btn.Size = new Size(86, 69);//显示图片的大小
            btn.Cursor = Cursors.Hand;//光标样式改变
            btn.BackgroundImageLayout = ImageLayout.Zoom;
            lbl.Visible = true;//文字显示等于TRUE
            DataTable dtPhotoNews = myfrmSellTicketClient.frmSellTicket_SelectPhotoNews(PublicStaticObject.intVehicleID).Tables[0];//数据集的绑定,数据库和Bll的代码和根据ID查询的一样
            lbl.Size = new Size(50, 20);
            lbl.BackColor = Color.Linen;//显示车辆信息文字的大小
            lbl.ForeColor = Color.YellowGreen;//文字的颜色
            lbl.Text = "车牌号:" + dtPhotoNews.Rows[0]["VehicleBlockNumber"].ToString().Trim() + ","//文本的数据
                        + "班次:" + dtPhotoNews.Rows[0]["Classes"].ToString().Trim() + ","
                        + "座位数:" + dtPhotoNews.Rows[0]["SeatNumber"].ToString().Trim() + ","
                        + "\n加座数:" + dtPhotoNews.Rows[0]["AddSeatNumber"].ToString().Trim() + ","
                        + "车辆状态:" + dtPhotoNews.Rows[0]["VehicleStateName"].ToString().Trim() + ","
                        + "车型:" + dtPhotoNews.Rows[0]["VehicleTypeName"].ToString().Trim() + ","
                        + "\n司机:" + dtPhotoNews.Rows[0]["Driver"].ToString().Trim() + ","
                        + "副司机1:" + dtPhotoNews.Rows[0]["DeputyDriverOne"].ToString().Trim() + ","
                        + "副司机2:" + dtPhotoNews.Rows[0]["DeputyDriverTwo"].ToString().Trim() + ","
                        + "\n到达站:" + dtPhotoNews.Rows[0]["OpenVehicleSite"].ToString().Trim() + ","
                        + "发车站:" + dtPhotoNews.Rows[0]["StationName"].ToString().Trim() + ","
                        + "终点站:" + dtPhotoNews.Rows[0]["EndVehicleSite"].ToString().Trim() + ","
                        + "\n出车时间:" + dtPhotoNews.Rows[0]["OutVehicleTime"].ToString().Trim() + ","
                        + "线路:" + dtPhotoNews.Rows[0]["LineName"].ToString().Trim() + ",";
4.鼠标离开图片变小
  void btn_MouseLeave(object sender, EventArgs e)//车辆图片鼠标离开(图片变小)
        {
            Button btn = sender as Button;
            int intVehicleBillID = Convert.ToInt32(btn.Tag);//获取当前移动到图片的车辆ID
            btn.ForeColor = Color.OrangeRed;
            btn.Size = new Size(80, 65);//设置图片的大小
            lbl.Visible = false;//文字显示等于FALSE
        }

5.售票


第一步:数据库存储过程

IF @TYPE='frmSellTicket_InsertSellTicket'--新增售票
BEGIN
INSERT INTO BillList(TicketNumber, GetOnStation, GetOffStation, BillTypeID,
           BillStatusID, SellTicKetTime, SellTicketSatffID, ASeatNumberID, SellTicKetYuan, TicketNumberID)
VALUES     (@TicketNumber, @GetOnStation, @GetOffStation, @BillTypeID,
          @BillStatusID, @SellTicKetTime, @SellTicketSatffID, @ASeatNumberID, @SellTicKetYuan, @TicketNumberID)
END

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

 [OperationContract]
        public int frmSellTicket_InsertSellTicket(string strTicketNumber,string strGetOnStation, string strGetOffStation, int intBillTypeID,
                                      int intBillStatusID,DateTime dtpSellTicKetTime,int intSellTicketSatffID,int intASeatNumberID, 
                                        decimal decSellTicKetYuan,int intTicketNumberID)//新增售票
        {
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
                                            new SqlParameter("@TicketNumber", SqlDbType.Char),
                                            new SqlParameter("@GetOnStation", SqlDbType.Char),
                                            new SqlParameter("@GetOffStation", SqlDbType.Char),
                                            new SqlParameter("@BillTypeID", SqlDbType.Int),
                                            new SqlParameter("@BillStatusID", SqlDbType.Int),
                                            new SqlParameter("@SellTicKetTime", SqlDbType.DateTime),
                                            new SqlParameter("@SellTicketSatffID", SqlDbType.Int),
                                            new SqlParameter("@ASeatNumberID", SqlDbType.Int),
                                            new SqlParameter("@SellTicKetYuan", SqlDbType.Decimal),
                                            new SqlParameter("@TicketNumberID", SqlDbType.Int)};
            mySqlParameter[0].Value = "frmSellTicket_InsertSellTicket";
            mySqlParameter[1].Value = strTicketNumber;
            mySqlParameter[2].Value =strGetOnStation;
            mySqlParameter[3].Value =strGetOffStation;
            mySqlParameter[4].Value =intBillTypeID;
            mySqlParameter[5].Value =intBillStatusID;
            mySqlParameter[6].Value =dtpSellTicKetTime;
            mySqlParameter[7].Value =intSellTicketSatffID;
            mySqlParameter[8].Value = intASeatNumberID;
            mySqlParameter[9].Value = decSellTicKetYuan;
            mySqlParameter[10].Value = intTicketNumberID;
            return myDALMethod.UpdateData("SellTicketManage_frmSellTicket", mySqlParameter);
        }

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

 private void btnSell_Click(object sender, EventArgs e)//新增售票
        {
            try
            {
                DataTable dtSeatOne = myfrmSellTicketClient.frmSellTicket_SelectSeat(PublicStaticObject.intSeatTicKetNumber).Tables[0];//获取数据集
                int intSeatStateOneID = (int)dtSeatOne.Rows[0]["SeatStateID"];
                if (lblCurrentTicketNumberText.Text == "***")//当文本的值为***是执行
                {
                    MessageBox.Show("请选择一张可出售的票!");
                }
                else
                {
                    if (intSeatStateOneID > 0)//当获取的ID大于0时
                    {
                        if (intSeatStateOneID == 3)//当获取的ID等于3时
                        {
                            string strOpenVehicleSiteText = cboGetOnStation.Text;//获取发车站
                            string strEndVehicleSiteText = cboGetOffStation.Text;//获取终点站
                            if (MessageBox.Show("确定出售" + "\n上车站:" + strOpenVehicleSiteText + "\n下车站:  " + strEndVehicleSiteText + "\n的票?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)//提示框,显示上车站,下车站和票号
                            {
                                if (PublicStaticObject.intVehicleTwoID > 0)
                                {
                                    string strTicketNumber = lblCurrentTicketNumberText.Text;// 
                                    string strGetOnStation = cboGetOnStation.Text;//获取下拉框中数据
                                    string strGetOffStation = cboGetOffStation.Text;
                                    int intBillTypeID = Convert.ToInt32(cboBillType.SelectedValue);//获取下拉框中数据的ID
                                    int intBillStatusID = 3;
                                    DateTime dtpSellTicKetTime = Convert.ToDateTime(lblSellTixketTimeText.Text);
                                    int intSellTicketSatffID = PublicStaticObject.intSatffTwo;
                                    int intASeatNumberID = PublicStaticObject.intSeatTicKetNumber;
                                    myfrmSellTicketClient.frmSellTicket_UpdateSeatTicKet(PublicStaticObject.intSeatTicKetNumber).Tables[0].ToString().Trim();
                                    DataTable dtSeat = myfrmSellTicketClient.frmSellTicket_SelectSeatTicKetNumber(PublicStaticObject.intSeatTicKetNumber).Tables[0];
                                    int intTicketNumberID = (int)dtSeat.Rows[0]["TicketNumberID"];
                                    decimal decSellTicKetYuan = (Convert.ToDecimal(txtSellTicketYuan.Text) * numBillType.Value) / 100;//两个文本显示的值相乘/100
                                    int intInsertSellTicket = myfrmSellTicketClient.frmSellTicket_InsertSellTicket(strTicketNumber, strGetOnStation, strGetOffStation, intBillTypeID,
                                                               intBillStatusID, dtpSellTicKetTime, intSellTicketSatffID, intASeatNumberID, decSellTicKetYuan, intTicketNumberID);
                                    if (intInsertSellTicket > 0)
                                    {
                                        string KnowName = "于" + dtpSellTicKetTime + "出售一张班次为" + lblClassesOneText.Text.ToString().Trim() + "票号为" + strTicketNumber + "的票";
                                        myfrmMainClient.frmMain_InsertKnow(KnowName);
                                        myfrmSellTicketClient.frmSellTicket_UpdateTicketUserNo(intTicketNumberID);
                                        myfrmSellTicketClient.frmSellTicket_UpdateLineNo(intASeatNumberID);
                                        MessageBox.Show("售票成功!");//显示提示
                                    }
                                    else
                                    {
                                        MessageBox.Show("无法添加!");
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("请选择一个空座位!");
                                }
                            }
                            else
                            {
                                MessageBox.Show("退出了该操作...");
                            }
                        }
                        else
                        {
                            MessageBox.Show("该座位无法售票...");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择一个座位...");
                    }
                }
            }
            catch { }
        }

7.保存各种票所售出的张数和售票金额等数据。

第一步:数据库存储过程

IF @TYPE='frmSellTicket_InsertVehicleClear'--新增售票明细信息
INSERT INTO VehicleClearList(EntireTicketNumber, HalfTicketNumber, DiscountTicketNumber, 
                             FreeTicketNumber,TotalSum,OutVehicleID)
VALUES (@EntireTicketNumber, @HalfTicketNumber, @DiscountTicketNumber, 
        @FreeTicketNumber,@TotalSum,@OutVehicleID)
IF @TYPE='frmSellTicket_UpdateVehicleClear'--修改售票明细信息
BEGIN
UPDATE     VehicleClearList
SET        EntireTicketNumber=@EntireTicketNumber, HalfTicketNumber=@HalfTicketNumber, 
           DiscountTicketNumber=@DiscountTicketNumber, FreeTicketNumber=@FreeTicketNumber,
           TotalSum=@TotalSum
 WHERE VehicleClearList.OutVehicleID=@OutVehicleID//获取一个ID的数据
END

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

  [OperationContract]
        public int frmSellTicket_InsertVehicleClear(string strEntireTicketNumber, string strHalfTicketNumber, string strDiscountTicketNumber, string strFreeTicketNumber, decimal demTotalSum, int intOutVehicleID)//新增明细信息
        {//新增售票明细信息
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
                                            new SqlParameter("@EntireTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@HalfTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@DiscountTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@FreeTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@TotalSum", SqlDbType.Decimal),
                                            new SqlParameter("@OutVehicleID", SqlDbType.Int),};
            mySqlParameter[0].Value = "frmSellTicket_InsertVehicleClear";
            mySqlParameter[1].Value = strEntireTicketNumber;
            mySqlParameter[2].Value = strHalfTicketNumber;
            mySqlParameter[3].Value = strDiscountTicketNumber;
            mySqlParameter[4].Value = strFreeTicketNumber;
            mySqlParameter[5].Value = demTotalSum;
            mySqlParameter[6].Value = intOutVehicleID;
            return myDALMethod.UpdateData("SellTicketManage_frmSellTicket", mySqlParameter);
        }
        [OperationContract]
        public int frmSellTicket_UpdateVehicleClear(string strEntireTicketNumber, string strHalfTicketNumber, string strDiscountTicketNumber, string strFreeTicketNumber, decimal demTotalSum, int intOutVehicleID)//修改明细信息
        {//修改售票明细信息
            SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
                                            new SqlParameter("@EntireTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@HalfTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@DiscountTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@FreeTicketNumber", SqlDbType.Char),
                                            new SqlParameter("@TotalSum", SqlDbType.Decimal),
                                            new SqlParameter("@OutVehicleID", SqlDbType.Int),};
            mySqlParameter[0].Value = "frmSellTicket_UpdateVehicleClear";
            mySqlParameter[1].Value = strEntireTicketNumber;
            mySqlParameter[2].Value = strHalfTicketNumber;
            mySqlParameter[3].Value = strDiscountTicketNumber;
            mySqlParameter[4].Value = strFreeTicketNumber;
            mySqlParameter[5].Value = demTotalSum;
            mySqlParameter[6].Value = intOutVehicleID;
            return myDALMethod.UpdateData("SellTicketManage_frmSellTicket", mySqlParameter);
        }

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

 private void btnYes_Click(object sender, EventArgse)//保存按钮

        {

            if(PublicStaticObject.intVehicleTwoID > 0)//判断选择车辆的ID是否大于0

            {

                DataTabledtVehicleClear = myfrmSellTicketClient.frmSellTicket_SelectVehicleClear(PublicStaticObject.OutVehicleClearID).Tables[0];

                if(dtVehicleClear.Rows.Count > 0)//判断之前是否保存过该出车明细的数据

                {

                    stringstrEntireTicketNumber = lblEntireTicketText.Text;//获取文本的数据

                    stringstrHalfTicketNumber = lblHalfTicketText.Text;

                    stringstrDiscountTicketNumber = lblDiscountTicketText.Text;

                    stringstrFreeTicketNumber = lblFreeTicketText.Text;

                    decimaldemTotalSum = Convert.ToDecimal(lblTotalSumText.Text);

                    intintOutVehicleID = PublicStaticObject.OutVehicleClearID;

                    inti = myfrmSellTicketClient.frmSellTicket_UpdateVehicleClear(strEntireTicketNumber,strHalfTicketNumber, strDiscountTicketNumber, strFreeTicketNumber, demTotalSum,intOutVehicleID);

                    if(i > 0)

                    {

                        MessageBox.Show("保存成功!");

                    }

                    else

                    {

                        MessageBox.Show("保存失败!");

                    }

                }

                else

                {

                    stringstrEntireTicketNumber = lblEntireTicketText.Text;

                    stringstrHalfTicketNumber = lblHalfTicketText.Text;

                    stringstrDiscountTicketNumber = lblDiscountTicketText.Text;

                    stringstrFreeTicketNumber = lblFreeTicketText.Text;

                    decimaldemTotalSum = Convert.ToDecimal(lblTotalSumText.Text);

                    intintOutVehicleID = PublicStaticObject.OutVehicleClearID;

                    inti =myfrmSellTicketClient.frmSellTicket_InsertVehicleClear(strEntireTicketNumber,strHalfTicketNumber, strDiscountTicketNumber, strFreeTicketNumber, demTotalSum,intOutVehicleID);

                    if(i > 0)

                    {

                        MessageBox.Show("保存成功!");

                    }

                    else

                    {

                        MessageBox.Show("保存失败!");

                    }

                }

            }

            else

            {

                MessageBox.Show("请选择一辆车...");

            }

        }

8.下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)




                                                        




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




  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值