您的位置:首页 > 其它

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

2015-05-30 20:45 239 查看

2.2.3 退票

售出的票在一定的时间内可以进行退票处理,超出了一定的时间,车票就不能再退,退票金额按离出车时间的不同而不同.



2.2.3(图1)

从界面上可以看到我们这里用到的控件有

控件名称
说明
文字(Label)

控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。右击控件选择属性,在跳出框里面选择带有雷电的图标,在里面可以选择属性

下拉框(ComboBox)

文本(TextBox)

按钮(Button)

表格(DataGridView)

容器(Panel)

日期控件(DateTimePicker)

功能实现:

第一步:数据库

1、表与关系



2.2.3(图2)

表1.员工表(dbo.StaffList)

列名
数据类型
主键/外键
说明
StaffID
int
主键
员工ID
StaffNumber
char (100)
员工编号
StaffName
char (100)
员工姓名
Sex
char (100)
性别
IdentityCardNumber
char (100)
身份证号
HomeLocation
char (100)
家庭地址
Phone
char (100)
电话
StaffTypeID
int
外键
员工类型表.员工类型ID
OrganizationID
int
外键
机构表.机构ID
StationID
int
外键
站点表.站点ID
Remarks
char (100)
备注
LeaveOfficeNo
bit
离职否
InvokingNo
bit
调用否
Date
datetime
日期
Photo
nvarchar (3000)
相片
表2.车辆类型表(VehicleTypeList)
列名
数据类型
主键/外键
说明
VehicleTypeID
int
主键
车辆类型ID
VehicleTypeName
char (100)
车辆类型名称
表3.司机表(DriverList)
列名
数据类型
主键/外键
说明
DriverID
int - Identity
主键
司机ID
DriverNumber
char (100)
司机编号
WorkValue
char (100)
工价
DriveCardNumber
char (100)
驾驶证号
GrantDriveVehicleTypeID
int
外键
车型表.准驾车型ID
FollowEnterpriseQualificationCard
char (100)
从业资格证
CardCheckDate
datetime
证件验期
Remarks
char (100)
备注
MountGuardCardValidityDate
datetime
上岗证有效期
表4.站点表(StationList)
列名
数据类型
主键/外键
说明
StationID
int
主键
站点ID
StationNumber
char (100)
站点编号
StationName
char (100)
站点名称
StopNo
bit
停用否
表5.车辆表(VehicleList)
列名
数据类型
主键/外键
说明
VehicleID
int
主键
车辆ID
VehicleNumber
char (100)
Yes
车辆编号
VehicleBlockNumber
char (100)
Yes
车牌号
VehicleStateID
int
外键
车辆状态表.车辆状态ID
MotorcadeID
int
外键
车队表.车队ID
VehicleClearID
int
外键
车辆明细表.车辆明细ID
VehicleTypeID
int
外键
车型表.车型ID
DriverID
int
外键
司机表.司机ID
DeputyDriverOneID
int
外键
司机表.副司机1ID
DeputyDriverTwoID
int
外键
司机表.副司机2ID
StationID
int
外键
站点表.车站ID
LineID
int
外键
线路表.线路ID
OpenVehicleTime
datetime
发车时间
ASeatNumberID
int
外键
座号表.座号ID
FeeRateID
int
外键
费用表.费用ID
SeatNumber
char (100)
座位数
AddSeatNumber
char (100)
加座数
Remarks
char (100)
备注
ClassesLongStopID
int
外键
班次长停表.班次长停ID
ClassesRepeatID
int
外键
扣费表.扣费ID
Classes
char (100)
班次
OpenVehicleSiteID
int
外键
站点表.发车站 ID
EndVehicleSiteID
int
外键
站点表.终点站ID
DeductFeeNo
bit
扣费否
MotorNumber
char (100)
车队编号
VehicleAlterTypeCase
char (100)
车辆改型情况
WhetherCheck
char (100)
安检情况
SafeCheckNo
bit
安检否
表6.出车表(OutVehicleList)
列名
数据类型
主键/外键
说明
OutVehicleID
int
主键
出车ID
VehicleStateID
int
外键
车辆状态ID
OutVehicleTime
datetime
出车时间
VehicleID
int
外键
车辆ID
UserTo
int
是否有用
表7.车辆状态表(VehicleStateList)
列名
数据类型
主键/外键
说明
VehicleStateID
int
主键
车辆状态ID
VehicleStateName
char (100)
车辆状态名称
表8.线路表(LineList)
列名
数据类型
主键/外键
说明
LineID
int - Identity
主键
线路ID
LineName
char (100)
线路名称
VehicleID
int
外键
车辆表.车辆ID
Remarks
char (100)
备注
StopNo
bit
停用否
表9:票据表 (BillList)

列名

数据类型

主键/外键

说明

BillID

int

主键

.票据ID

TicketNumber

char(100)

票号

GetOnStation

char(100)

上车站

GetOffStation

char(100)

下车站

BillTypeID

int

外键

票据类型表.票据类型ID

BillStatusID

int

外键

票据状态表.票据状态ID

SellTicKetTime

datetime

买票时间

SellTicketSatffID

int

外键

员工表.售票员ID

ASeatNumberID

int

外键

座位表.座位ID

SellTicKetYuan

decimal(18, 3)

买票金额

CheckTicketID

int

外键

检票表.检票ID

TicketNumberID

int

外键

票号表.票号ID

表10:退票表(ReturnATicketDetailedStatement)

列名

数据类型

主键/外键

说明

ReturnATicketClearID

int

主键

退票ID

ReturnATicketNumber

char(100)

退票号

BillTypeID

char(100)

外键

票据类型表.票据类型ID

StationAffairFee

decimal(18, 2)

站务费

ReturnATicketTime

datetime

废票时间

ProcedureFeeRate

decimal(18, 0)

手续费率

ReturnSum

decimal(18, 2)

退还金额

TimeDifference

char(100)

时差

ReturnATicketOperatorID

int

外键

员工表.退票操作员ID

BillID

int

外键

票据表.票据ID

表11.票据状态表(BillStatusList)
列名
数据类型
主键/外键
说明
BillStatusID
int
主键
票据状态ID
BillStatus
char (100)
票据状态
表12.票据类型表(BillTypeList)

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

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

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

列名
数据类型
主键/外键
说明
SeatStateID
int
主键
座位状态ID
SeatState
char (100)
座位状态

1、根据下拉框的数据绑定票据信息



第一步:根据下拉框的数据绑定票据信息数据库的存储过程
IF @TYPE='frmReturnATicket_SelectTicketNews'--绑定票信息,车辆,座位,票据等信息
BEGIN
SELECT     ASeatNumberList.ASeatNumberID, VehicleList.VehicleID, VehicleList.VehicleBlockNumber, ASeatNumberList.ASeatNumber, TicketNumberList.TicketNumber, BillList.GetOffStation,
BillList.GetOnStation, BillList.TicketNumber, BillTypeList.BillTypeName, BillList.SellTicKetYuan, BillList.SellTicKetTime, StaffList.StaffName, VehicleList.Classes,
StationList.StationID AS OpenVehicleSiteID, StationList.StationName AS OpenVehicleSite, StationList_1.StationID AS EndVehicleSiteID, StationList_1.StationName AS EndVehicleSite, BillList.BillID,
OutVehicleList.OutVehicleTime, TicketNumberList.TicketNumberID
FROM         StationList INNER JOIN
ASeatNumberList INNER JOIN
TicketNumberList ON ASeatNumberList.ASeatNumberID = TicketNumberList.ASeatNumberID INNER JOIN
VehicleList ON ASeatNumberList.VehicleID = VehicleList.VehicleID ON StationList.StationID = VehicleList.OpenVehicleSiteID INNER JOIN
StationList AS StationList_1 ON VehicleList.EndVehicleSiteID = StationList_1.StationID INNER JOIN
OutVehicleList ON VehicleList.VehicleID = OutVehicleList.VehicleID INNER JOIN
BillTypeList INNER JOIN
BillList ON BillTypeList.BillTypeID = BillList.BillTypeID INNER JOIN
StaffList ON BillList.SellTicketSatffID = StaffList.StaffID ON TicketNumberList.TicketNumberID = BillList.TicketNumberID
WHERE TicketNumberList.TicketNumberID=@TicketNumberID and ASeatNumberList.SeatStateID = 2 and BillList.BillStatusID=3 AND OutVehicleList.UserTo=1--座位状态为订,车辆明细表有用否为是
 END


第二步:根据下拉框的数据绑定票据信息逻辑层(BLL)代码
[OperationContract]

public DataSet frmReturnATicket_SelectTicketNews(int intTicketNumberID)//绑定票信息,车辆,座位,票据等信息

{

SqlParameter[]mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),

new SqlParameter("@TicketNumberID", SqlDbType.Int)};

mySqlParameter[0].Value = "frmReturnATicket_SelectTicketNews";

mySqlParameter[1].Value =intTicketNumberID;

DataTablemyDataTable = myDALMethod.QueryDataTable("SellTicketManage_frmReturnATicket",mySqlParameter);

DataSetmyDataSet = new DataSet();

myDataSet.Tables.Add(myDataTable);

returnmyDataSet;

}


第三步:根据下拉框的数据绑定票据信息界面层(UIL)代码,

private void cboTicketNumber_DropDownClosed(object sender, EventArgs e)//在下拉框选择数据后执行,绑定票信息,车辆,座位,票据等信息
{
try
{
PublicStaticObject.intTicketNumberID = Convert.ToInt32(cboTicketNumber.SelectedValue);//根据下拉框选择的值来获取票号ID
DataTable dtTicketNews = myfrmReturnATicketClient.frmReturnATicket_SelectTicketNews(PublicStaticObject.intTicketNumberID).Tables[0];//获取票据信息
//下面的是给文本框等绑定数据,即绑定票据信息
cboTicketNumber.Text = dtTicketNews.Rows[0]["TicketNumber"].ToString().Trim();
txtClasses.Text = dtTicketNews.Rows[0]["Classes"].ToString().Trim();
dtpOpenVehicleDate.Text = dtTicketNews.Rows[0]["OutVehicleTime"].ToString().Trim();
dtpOpenVehicleTime.Text = dtTicketNews.Rows[0]["OutVehicleTime"].ToString().Trim();
txtTicketType.Text = dtTicketNews.Rows[0]["BillTypeName"].ToString().Trim();
txtPrice.Text = dtTicketNews.Rows[0]["SellTicKetYuan"].ToString().Trim();
txtSeatNumber.Text = dtTicketNews.Rows[0]["ASeatNumber"].ToString().Trim();
txtStartSite.Text = dtTicketNews.Rows[0]["OpenVehicleSite"].ToString().Trim();//
txtGetOnStation.Text = dtTicketNews.Rows[0]["GetOnStation"].ToString().Trim();
txtArriveStation.Text = dtTicketNews.Rows[0]["GetOffStation"].ToString().Trim();
txtEndVehicleSite.Text = dtTicketNews.Rows[0]["EndVehicleSite"].ToString().Trim();
txtSellTicketDate.Text = dtTicketNews.Rows[0]["SellTicKetTime"].ToString().Trim();
}
catch
{ }
}


2、退票的实现



第一步:退票数据库的存储过程
IF @TYPE='frmReturnATicket_InsertRetureTicket'--新增退票信息
BEGIN
INSERT INTO     ReturnATicketClearList(StationAffairFee, ReturnATicketTime, BillID, ProcedureFeeRate,
ReturnSum, TimeDifference, ReturnATicketOperatorID)
VALUES   (@StationAffairFee, @ReturnATicketTime, @BillID, @ProcedureFeeRate,
@ReturnSum, @TimeDifference, @ReturnATicketOperatorID)
END
IF @TYPE='frmReturnATicket_UpdateTicketStaue'
BEGIN
Update BillList
set BillList.BillStatusID=4--修改座位状态
WHERE BillList.BillID=@BillID
UPDATE ASeatNumberList
set ASeatNumberList.SeatStateID=3--修改座位状态
WHERE ASeatNumberList.ASeatNumberID=@ASeatNumberID
UPDATE TicketNumberList
SET TicketNumberList.UserNo=1--修改票号的有用否
WHERE TicketNumberList.TicketNumberID=@TicketNumberID
END

第二步:
退票逻辑层(BLL)代码
[OperationContract]
public int frmReturnATicket_InsertRetureTicket(string strStationAffairFee,DateTime dtReturnATicketTime,int BillID,
string strProcedureFeeRate,decimal decReturnSum,string strTimeDifference,int intReturnATicketOperatorID)//退票
{
SqlParameter[] mySqlParameter = { new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("@StationAffairFee", SqlDbType.Char),
new SqlParameter("@ReturnATicketTime", SqlDbType.DateTime),
new SqlParameter("@BillID", SqlDbType.Int),
new SqlParameter("@ProcedureFeeRate", SqlDbType.Char),
new SqlParameter("@ReturnSum", SqlDbType.Char),
new SqlParameter("@TimeDifference", SqlDbType.Char),
new SqlParameter("@ReturnATicketOperatorID", SqlDbType.Int),};
mySqlParameter[0].Value = "frmReturnATicket_InsertRetureTicket";
mySqlParameter[1].Value = strStationAffairFee;
mySqlParameter[2].Value = dtReturnATicketTime;
mySqlParameter[3].Value = BillID;
mySqlParameter[4].Value = strProcedureFeeRate;
mySqlParameter[5].Value = decReturnSum;
mySqlParameter[6].Value = strTimeDifference;
mySqlParameter[7].Value = intReturnATicketOperatorID;
return myDALMethod.UpdateData("SellTicketManage_frmReturnATicket", mySqlParameter);
}


第三步:界面层(UIL)代码
private void btnReturnATicket_Click(object sender, EventArgs e)//退票
{
if (Convert.ToInt32(cboTicketNumber.SelectedValue) > 0)//判断下拉框获取的ID大于0
{
DataTable dtTicketNews = myfrmReturnATicketClient.frmReturnATicket_SelectTicketNews(PublicStaticObject.intTicketNumberID).Tables[0];
DateTime dtTime=Convert.ToDateTime(dtTicketNews.Rows[0]["OutVehicleTime"].ToString().Trim());
if (Convert.ToDateTime(dtTime) > Convert.ToDateTime(txtRetureTicket.Text))
{
if (MessageBox.Show("确定退票?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
if (txtHandlingCharge.Text == "")
{
MessageBox.Show("手续费不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
if (txtReturnSum.Text == "")
{
MessageBox.Show("退还金额不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
if (txtStationAffairFee.Text == "")
{
MessageBox.Show("站务费不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
if (txtTimeDifference.Text == "")
{
MessageBox.Show("时差不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
string strStationAffairFee = txtStationAffairFee.Text.ToString().Trim();//获文本框的数据
string strProcedureFeeRate = txtStationAffairFee.Text.ToString().Trim();
string strTimeDifference = txtStationAffairFee.Text.ToString().Trim();
DateTime dtReturnATicketTime = Convert.ToDateTime(txtRetureTicket.Text);
decimal decReturnSum = Convert.ToDecimal(txtReturnSum.Text);
int BillID = (int)dtTicketNews.Rows[0]["BillID"];
int intReturnATicketOperatorID = PublicStaticObject.intSatffTwo;
int ASeatNumberID = (int)dtTicketNews.Rows[0]["ASeatNumberID"];
int i = myfrmReturnATicketClient.frmReturnATicket_InsertRetureTicket(strStationAffairFee, dtReturnATicketTime, BillID,
strProcedureFeeRate, decReturnSum, strTimeDifference, intReturnATicketOperatorID);
if (i > 0)
{
int intTicketNumberID = (int)dtTicketNews.Rows[0]["TicketNumberID"];
myfrmReturnATicketClient.frmReturnATicket_UpdateTicketStaue(BillID, ASeatNumberID, intTicketNumberID).Tables[0].ToString().Trim();//新增退票
string KnowName = "于" + dtReturnATicketTime + "出售一张班次为" + txtClasses.Text.ToString().Trim() + "票号为" + cboTicketNumber.Text.ToString().Trim() + "的票";//新增一条信息提示
myfrmMainClient.frmMain_InsertKnow(KnowName);
MessageBox.Show("退票成功!");//提示框
frmReturnATicket_Load(null, null);//再次执行load事件的代码
}
else
{
MessageBox.Show("退票失败!");
}
}
}
else
{
MessageBox.Show("退票时间已过,无法退票!");
}
}
else
{
MessageBox.Show("请选择票号!");
}
}


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

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