客运综合管理系统项目—售票管理(售票)
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 |
列名 |
数据类型 |
主键/外键 |
说明 |
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.下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)
仅供学习,禁止用于商业用途
客运综合管理系统项目—售票管理(售票)相关推荐
- 客运综合管理系统项目解析-检票管理-检票
第2章 功能实现 2.1 检票管理: 检票管理具有检票(查询/手工检票/报班/出车).补检(查询/补检,绿色通道:可实现先上车购票,后补检).检票查询(查询/清空)等功能. 2.1-1 检票: 鼠标到 ...
- 客运综合管理系统项目—售票管理(留票)
2.2.4 留票 查询按钮可以查询对应班次的座位信息,显示对应座位的图片,如果座位处于空的状态,就可以留票,右击座位图片进行留票和取消留票,右边DGV显示的是对应班次所留的票的一些基本信息 2.2.4 ...
- 客运综合管理系统项目—报班统计(车辆调度报班)
2.3.2 车辆调度报班 车辆调度报班可以对车辆进行延时,停班,修改停班和取消停班等操作 2.3.2(图1) 从界面上可以看到我们这里用到的控件有 控件名称 说明 文字(Label) 控件可以在工具箱 ...
- 基于springboot的中国国家图书馆管理系统项目(管理功能)
中国国家图书馆管理系统项目(模板) 中国国家图书馆管理系统项目介绍 项目背景 项目功能 项目技术 项目模块 项目要求 中国国家图书馆管理系统项目开发流程 第一节 登录 1. 持久层 2. 业务层 3. ...
- 无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型
无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型 axu ...
- 无人机综合管理系统、设备管理、设备台账、零部件管理、故障维修、维护工单、飞控成员、飞行站点、飞行计划、飞行记录、运维管理、维护管理、人员管理、无人机管理、维修保养、配件管理、保养管理、团队管理
无人机综合管理系统.设备管理.设备台账.零部件管理.故障维修.维护工单.飞控成员.飞行站点.飞行计划.飞行记录.运维管理.维护管理.人员管理.无人机管理.维修保养.配件管理.保养管理.团队管理. ax ...
- java《集团客运系统》项目总结
<集团客运系统>项目总结 作者:尚路成 本次任务完成时间:2018年11月18日-2019年01月16日 开发工具与关键技术:MyEclipse java.ssm.GIS.JQ HTML ...
- (附源码)计算机毕业设计SSM基于的智慧校园安防综合管理系统
(附源码)计算机毕业设计SSM基于的智慧校园安防综合管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...
- 计算机毕业设计之java+javaweb的充电桩综合管理系统
** 计算机毕业设计之java+javaweb的充电桩综合管理系统 项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化 ...
最新文章
- no判断 python yes_python的判断 - osc_kewb5r6m的个人空间 - OSCHINA - 中文开源技术交流社区...
- Bug改到怀疑人生…… | 每日趣闻
- centos 升级4.0 内核
- 《偷梁换柱》全世界最最简单对付SMSS。EXE病毒的方法,可能也是对付某类流氓程序的好方法...
- 北京2018网络赛 hihocoder#1828 : Saving Tang Monk II (BFS + DP +多开一维)
- 从字节理解Unicode(UTF8/UTF16)
- vuex页面刷新后数据丢失
- excel 公式 单引号 concat_Excel制作倒计时、抽签器你见过没?
- 简易计算器的c++实现
- 喜迎进博会 欢聚环球港 共享消费城——2021环球商业年会暨城市综合体论坛圆满举行
- 阿里云服务器安装并配置nginx代理转发请求
- 华三防火墙h3cf100配置双宽带_华三F100系列、华为USG6300系列防火墙 策略路由配置实例...
- notepad编译java文件_notepad编译java
- linux用不了wifi密码忘记了,极路由wifi密码忘记了怎么办?
- python爬取4k高清壁纸(再也不怕没有壁纸了)
- 远见:如何规划职业生涯3大阶段
- 中专计算机学籍分数,中考成绩不理想,有高中录取却说给办中专学籍,这有什么不同吗?...
- SAP Data Service 4.2 下载及安装教程
- 用HTML写一个仿写新浪微博简单的导航
- 刘强东给村民送500万年货;支付宝或上线黄金红包;Space X成功发射重型火箭丨价值早报
热门文章
- PTA-7-1 厘米换算英尺英寸 (15 分)
- System.gc()介绍
- snubber电路总结
- 第四周 放大电路的分析
- 修改系统默认的音频设备
- 【更新】本地提权工具公开|CVE-2020-0796:微软发布SMBv3协议“蠕虫级”漏洞补丁通告
- 【蓝桥杯经典数学题】杨辉三角形
- Android开发-安卓手机真机调试配置教程(以小米/红米手机为例)
- php只取时间的下士_闲来无聊,用python抓取天气信息,简单就是美啊
- 无法连接虚拟设备 ide1:0,因为主机上没有相应的设备。 您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?