您的位置:首页 > 其它

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

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)
相片
表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

[align=left]表11.票据状态表(BillStatusList)[/align]

列名

数据类型
主键/外键
说明
BillStatusID
int
主键
票据状态ID
BillStatus
char (100)
票据状态
表12.票据类型表(BillTypeList)
列名
数据类型
主键/外键
说明
BillTypeID
int - Identity
主键
票据类型ID
BillTypeName
char (100)
票据类型名称
TicketPrice
decimal (18, 3)
票价
表13.座位表(ASeatNumberList)

列名

数据类型
主键/外键
说明
ASeatNumberID
int - Identity
主键
座号ID
ASeatNumber
char (10)
座号
VehicleID
int
外键
车辆表.车辆ID
SeatStateID
int
外键
座位状态表.座位状态ID
UserNo
bit
有用否
LinkNo
bit
连接否
表14.票号表(TicketNumberList)

列名

数据类型
主键/外键
说明
TicketNumberID
int
主键
票号ID
TicketNumber
char (100)
票号
ASeatNumberID
int
外键
座位表.座号ID
UserNo
bit
有用否
表15.座位状态表(SeatStateList)

列名

数据类型
主键/外键
说明
SeatStateID
int
主键
座位状态ID
SeatState
char (100)
座位状态
表16.用户表(UserList)

列名
数据类型
主键/外键
说明
UserID
int
主键
用户ID
UserNumber
char (100)
用户编码
StaffID
int
外键
员工表.员工ID
WorkValue
char (100)
工价
LimitsOfAuthorityGroupID
int
外键
权限组表.权限组ID
Password
char (100)
密码
Remarks
char (100)
备注
StopUseNo
bit
停用否
1.车辆图片的实现

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



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

BEGIN

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

OutVehicleList.OutVehicleID, LineList.LineName

FROM         VehicleList INNER JOIN

OutVehicleListON VehicleList.VehicleID = OutVehicleList.VehicleID INNER JOIN

LineListON VehicleList.LineID = LineList.LineID

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

END


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


第三步:界面层(UIL)代码
private void VehiclePhoto(DataTable dtVehicle)//显示车辆图片的方法,在Load事件中被调用
{
pnlVehicle.Controls.Clear();//设置panel为空
for (int RowsIndex = 0, leftX = 50, leftY = 50; RowsIndex < dtVehicle.Rows.Count; RowsIndex++)//声明一个整形,一个横坐标和一个纵坐标,设置值的范围
{
int RowsCount = RowsIndex / 4;//一行有4个
if (RowsIndex % 4 == 0)
{
leftX = 10;//与左边的距离
}
else if (RowsIndex != 0)
{
leftX += 90;//两图片宽的距离
}
leftY = 12 + RowsCount * 85;//(8) 与顶点的距离(35)两图片高的距离
Button btn = new Button();
btn.Name = dtVehicle.Rows[RowsIndex]["VehicleBlockNumber"].ToString().Trim();
btn.Tag = Convert.ToInt32(dtVehicle.Rows[RowsIndex]["VehicleID"].ToString().Trim());
btn.Location = new Point(leftX, leftY);
btn.Text = "车牌号:" + dtVehicle.Rows[RowsIndex]["VehicleBlockNumber"].ToString()
+ "\n 班次:" + dtVehicle.Rows[RowsIndex]["Classes"].ToString()
+ "\n 线路:" + dtVehicle.Rows[RowsIndex]["LineName"].ToString();//车辆图片中显示的数据
btn.ForeColor = Color.OrangeRed;//设置字体颜色
btn.Font = new Font("宋体", 8, FontStyle.Bold);//字体大小
btn.Size = new Size(80, 65);//
btn.TextAlign = ContentAlignment.TopLeft;
btn.BackgroundImageLayout = ImageLayout.Center;
btn.BackgroundImage = imgVehicle.Images["001.png"];
this.pnlVehicle.Controls.Add(btn);
btn.MouseDown += new MouseEventHandler(btn_MouseDown);//鼠标按下事件(在控件上按下鼠标键事件,调用事件)
btn.MouseEnter += new EventHandler(btn_MouseEnter);//鼠标移动到时发生
btn.MouseLeave += new EventHandler(btn_MouseLeave);//鼠标离开时发生
}
}


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

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

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

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


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

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


5.售票



第一步:数据库存储过程
IF @TYPE='frmSellTicket_InsertSellTicket'--新增售票
BEGIN
INSERT INTO BillList(TicketNumber, GetOnStation, GetOffStation, BillTypeID,
BillStatusID, SellTicKetTime, SellTicketSatffID, ASeatNumberID, SellTicKetYuan, TicketNumberID)
VALUES     (@TicketNumber, @GetOnStation, @GetOffStation, @BillTypeID,
@BillStatusID, @SellTicKetTime, @SellTicketSatffID, @ASeatNumberID, @SellTicKetYuan, @TicketNumberID)
END


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


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


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

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


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


第三步:界面层(UIL)代码
private void btnYes_Click(object sender, EventArgse)//保存按钮

{

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

{

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

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

{

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

stringstrHalfTicketNumber = lblHalfTicketText.Text;

stringstrDiscountTicketNumber = lblDiscountTicketText.Text;

stringstrFreeTicketNumber = lblFreeTicketText.Text;

decimaldemTotalSum = Convert.ToDecimal(lblTotalSumText.Text);

intintOutVehicleID = PublicStaticObject.OutVehicleClearID;

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

if(i > 0)

{

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

}

else

{

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

}

}

else

{

stringstrEntireTicketNumber = lblEntireTicketText.Text;

stringstrHalfTicketNumber = lblHalfTicketText.Text;

stringstrDiscountTicketNumber = lblDiscountTicketText.Text;

stringstrFreeTicketNumber = lblFreeTicketText.Text;

decimaldemTotalSum = Convert.ToDecimal(lblTotalSumText.Text);

intintOutVehicleID = PublicStaticObject.OutVehicleClearID;

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

if(i > 0)

{

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

}

else

{

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

}

}

}

else

{

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

}

}


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

仅供学习,禁止用于商业用途
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: