客运综合管理系统项目—售票管理(售票)
2015-05-30 20:00
239 查看
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) | 相片 |
列名 | 数据类型 | 主键/外键 | 说明 |
VehicleTypeID | int | 主键 | 车辆类型ID |
VehicleTypeName | char (100) | 车辆类型名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
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 | 上岗证有效期 |
列名 | 数据类型 | 主键/外键 | 说明 |
StationID | int | 主键 | 站点ID |
StationNumber | char (100) | 站点编号 | |
StationName | char (100) | 站点名称 | |
StopNo | bit | 停用否 |
列名 | 数据类型 | 主键/外键 | 说明 |
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 | 安检否 |
列名 | 数据类型 | 主键/外键 | 说明 |
OutVehicleID | int | 主键 | 出车ID |
VehicleStateID | int | 外键 | 车辆状态ID |
OutVehicleTime | datetime | 出车时间 | |
VehicleID | int | 外键 | 车辆ID |
UserTo | int | 是否有用 |
列名 | 数据类型 | 主键/外键 | 说明 |
VehicleStateID | int | 主键 | 车辆状态ID |
VehicleStateName | char (100) | 车辆状态名称 |
列名 | 数据类型 | 主键/外键 | 说明 |
LineID | int - Identity | 主键 | 线路ID |
LineName | char (100) | 线路名称 | |
VehicleID | int | 外键 | 车辆表.车辆ID |
Remarks | char (100) | 备注 | |
StopNo | bit | 停用否 |
列名 | 数据类型 | 主键/外键 | 说明 |
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 |
列名 | 数据类型 | 主键/外键 | 说明 |
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 |
列名 | 数据类型 | 主键/外键 | 说明 |
BillStatusID | int | 主键 | 票据状态ID |
BillStatus | char (100) | 票据状态 |
列名 | 数据类型 | 主键/外键 | 说明 |
BillTypeID | int - Identity | 主键 | 票据类型ID |
BillTypeName | char (100) | 票据类型名称 | |
TicketPrice | decimal (18, 3) | 票价 |
列名 | 数据类型 | 主键/外键 | 说明 |
ASeatNumberID | int - Identity | 主键 | 座号ID |
ASeatNumber | char (10) | 座号 | |
VehicleID | int | 外键 | 车辆表.车辆ID |
SeatStateID | int | 外键 | 座位状态表.座位状态ID |
UserNo | bit | 有用否 | |
LinkNo | bit | 连接否 |
列名 | 数据类型 | 主键/外键 | 说明 |
TicketNumberID | int | 主键 | 票号ID |
TicketNumber | char (100) | 票号 | |
ASeatNumberID | int | 外键 | 座位表.座号ID |
UserNo | bit | 有用否 |
列名 | 数据类型 | 主键/外键 | 说明 |
SeatStateID | int | 主键 | 座位状态ID |
SeatState | char (100) | 座位状态 |
列名 | 数据类型 | 主键/外键 | 说明 |
UserID | int | 主键 | 用户ID |
UserNumber | char (100) | 用户编码 | |
StaffID | int | 外键 | 员工表.员工ID |
WorkValue | char (100) | 工价 | |
LimitsOfAuthorityGroupID | int | 外键 | 权限组表.权限组ID |
Password | char (100) | 密码 | |
Remarks | char (100) | 备注 | |
StopUseNo | bit | 停用否 |
第一步:数据库的存储过程
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.下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)
仅供学习,禁止用于商业用途
相关文章推荐
- 实现医生工作站中处方录入功能的代码(六)
- 张维为 - 中国震撼:一个”文明型国家“的崛起(2015年5月30日)
- 文章标题
- 用ZipInputStream和ZipOutputStream实现文件及文件夹的压缩解压
- leetcode ZigZag Conversion
- 部分A+B
- 导数练习7
- Android 开发工具类 31_WebService 获取手机号码归属地
- Android 监听ScrollView的滑动
- 菜鸟学Android笔记(九):Schema之名称空间
- 【MyEclipse使用教程】—如何设置jsp页面为默认utf-8编码
- Infragist ics Ult imate 2015 Vol.1 - Product Keys
- BZOJ 1054: [HAOI2008]移动玩具( BFS )
- OpenCV中Mat数据的访问报错
- Java多态性 父类引用指向子类对象
- 百度之星初赛(1) 1003 序列变换 二分搜索
- 百度之星初赛(1)1001 超级赛亚ACMer
- 13.5 监视数据库镜像
- iOS中使用RNCryptor对资源文件加密
- iOS 错误集锦与断点调试