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绑定图片BEGINSELECT     VehicleList.VehicleID, LTRIM(RTRIM(VehicleList.VehicleBlockNumber)) AS VehicleBlockNumber, VehicleList.VehicleStateID, LTRIM(RTRIM(VehicleList.Classes)) AS Classes,OutVehicleList.OutVehicleID, LineList.LineNameFROM         VehicleList INNER JOINOutVehicleListON VehicleList.VehicleID = OutVehicleList.VehicleID INNER JOINLineListON VehicleList.LineID = LineList.LineIDWHERE VehicleList.VehicleStateID <>1 and OutVehicleList.UserTo=1 and  VehicleList.DeductFeeNo=0--范围,车辆状态不等于停,报废否为FALSEEND

第二步:逻辑层(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";//文本的数据为0lblDiscountTicketText.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时显示图片1case 2: btnOne.BackgroundImage = imgSeat.Images["002.PNG"]; break;//当ID为2时显示图片2case 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);//用静态类保存
获取当前移动到图片的车辆IDbtn.ForeColor = Color.MediumVioletRed;//显示图片的颜色btn.Size = new Size(86, 69);//显示图片的大小btn.Cursor = Cursors.Hand;//光标样式改变btn.BackgroundImageLayout = ImageLayout.Zoom;lbl.Visible = true;//文字显示等于TRUEDataTable 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);//获取当前移动到图片的车辆IDbtn.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);//获取下拉框中数据的IDint 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;//两个文本显示的值相乘/100int 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=@TotalSumWHERE 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.下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)

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

客运综合管理系统项目—售票管理(售票)相关推荐

  1. 客运综合管理系统项目解析-检票管理-检票

    第2章 功能实现 2.1 检票管理: 检票管理具有检票(查询/手工检票/报班/出车).补检(查询/补检,绿色通道:可实现先上车购票,后补检).检票查询(查询/清空)等功能. 2.1-1 检票: 鼠标到 ...

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

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

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

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

  4. 基于springboot的中国国家图书馆管理系统项目(管理功能)

    中国国家图书馆管理系统项目(模板) 中国国家图书馆管理系统项目介绍 项目背景 项目功能 项目技术 项目模块 项目要求 中国国家图书馆管理系统项目开发流程 第一节 登录 1. 持久层 2. 业务层 3. ...

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

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

  6. 无人机综合管理系统、设备管理、设备台账、零部件管理、故障维修、维护工单、飞控成员、飞行站点、飞行计划、飞行记录、运维管理、维护管理、人员管理、无人机管理、维修保养、配件管理、保养管理、团队管理

    无人机综合管理系统.设备管理.设备台账.零部件管理.故障维修.维护工单.飞控成员.飞行站点.飞行计划.飞行记录.运维管理.维护管理.人员管理.无人机管理.维修保养.配件管理.保养管理.团队管理. ax ...

  7. java《集团客运系统》项目总结

    <集团客运系统>项目总结 作者:尚路成 本次任务完成时间:2018年11月18日-2019年01月16日 开发工具与关键技术:MyEclipse java.ssm.GIS.JQ HTML ...

  8. (附源码)计算机毕业设计SSM基于的智慧校园安防综合管理系统

    (附源码)计算机毕业设计SSM基于的智慧校园安防综合管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...

  9. 计算机毕业设计之java+javaweb的充电桩综合管理系统

    ** 计算机毕业设计之java+javaweb的充电桩综合管理系统 项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化 ...

最新文章

  1. no判断 python yes_python的判断 - osc_kewb5r6m的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. Bug改到怀疑人生…… | 每日趣闻
  3. centos 升级4.0 内核
  4. 《偷梁换柱》全世界最最简单对付SMSS。EXE病毒的方法,可能也是对付某类流氓程序的好方法...
  5. 北京2018网络赛 hihocoder#1828 : Saving Tang Monk II (BFS + DP +多开一维)
  6. 从字节理解Unicode(UTF8/UTF16)
  7. vuex页面刷新后数据丢失
  8. excel 公式 单引号 concat_Excel制作倒计时、抽签器你见过没?
  9. 简易计算器的c++实现
  10. 喜迎进博会 欢聚环球港 共享消费城——2021环球商业年会暨城市综合体论坛圆满举行
  11. 阿里云服务器安装并配置nginx代理转发请求
  12. 华三防火墙h3cf100配置双宽带_华三F100系列、华为USG6300系列防火墙 策略路由配置实例...
  13. notepad编译java文件_notepad编译java
  14. linux用不了wifi密码忘记了,极路由wifi密码忘记了怎么办?
  15. python爬取4k高清壁纸(再也不怕没有壁纸了)
  16. 远见:如何规划职业生涯3大阶段
  17. 中专计算机学籍分数,中考成绩不理想,有高中录取却说给办中专学籍,这有什么不同吗?...
  18. SAP Data Service 4.2 下载及安装教程
  19. 用HTML写一个仿写新浪微博简单的导航
  20. 刘强东给村民送500万年货;支付宝或上线黄金红包;Space X成功发射重型火箭丨价值早报

热门文章

  1. PTA-7-1 厘米换算英尺英寸 (15 分)
  2. System.gc()介绍
  3. snubber电路总结
  4. 第四周 放大电路的分析
  5. 修改系统默认的音频设备
  6. 【更新】本地提权工具公开|CVE-2020-0796:微软发布SMBv3协议“蠕虫级”漏洞补丁通告
  7. 【蓝桥杯经典数学题】杨辉三角形
  8. Android开发-安卓手机真机调试配置教程(以小米/红米手机为例)
  9. php只取时间的下士_闲来无聊,用python抓取天气信息,简单就是美啊
  10. 无法连接虚拟设备 ide1:0,因为主机上没有相应的设备。 您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?