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 |
| 安检否 |
列名 | 数据类型 | 主键/外键 | 说明 |
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 |
表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) |
| 票据状态 |
列名 | 数据类型 | 主键/外键 | 说明 |
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) |
| 座位状态 |
表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.下拉框的绑定请阅览登陆界面的实现,查询的实现请阅览(库存/取票)
仅供学习,禁止用于商业用途