完整word版民航订票管理系统.docx
《完整word版民航订票管理系统.docx》由会员分享,可在线阅读,更多相关《完整word版民航订票管理系统.docx(41页珍藏版)》请在冰豆网上搜索。
完整word版民航订票管理系统
《软件工程实习》
说明书
题目:
民航订票管理系统
小组成员姓名
专业班级
学号
系别:
计算机科学与工程
指导教师:
年月日
软件工程实习成绩评定表
小组评分标准
评分项目
分值
实际得分
需求分析
15
数据库设计
10
系统设计
15
项目管理
5
代码质量
10
项目测试
10
用户安装及使用手册
10
项目成果提交
25
小组总成绩
100
个人评分标准
小组成员姓名
个人完成的具体任务及其完成情况(两人共同承担任务,写清楚各自完成的比例)
个人实际得分
个人综合成绩
个人综合成绩=小组总成绩*30%+个人实际得分*70%
1.项目管理…………………………………………………………2
2.需求分析…………………………………………………………3
3.数据库设计………………………………………………………5
4.概要设计…………………………………………………………9
5.详细设计…………………………………………………………13
6.项目测试…………………………………………………………29
7.安装手册…………………………………………………………32
8.使用手册…………………………………………………………34
9.总结………………………………………………………………35
参考文献……………………………………………………………36
1.项目管理
该部分文档编写负责人
该部分文档复核人
最终版本
1。
1甘特图
1.1。
1项目名称及起止时间
项目名称及起止时间由图1—1给出.
图1-1甘特图
1。
1.2项目甘特图
项目甘特图如图1-2所示
图1—2项目甘特图
2。
需求分析
该部分文档编写负责人
该部分文档复核人
最终版本
2.1系统要求
实现一个民航订票管理系统,主要分为机场、航空公司和乘客三个部分,其中
1、航空公司的管理包括:
机型的管理
航线的制定、变更和取消,如航线的起止地点,距离里程
向航线上增加,改派或撤销飞机
向机场提供航线和飞机信息
审核机场的航班计划
2、机场航班和订票管理包括:
制定、修改和撤销航班时刻
制定、修改和撤销机票的价格(必需与航班时刻保持一致性)
管理并确认乘客的订票记录(有座位)和价格
3、乘客航班查询和订票管理包括:
乘客可以查询航班、航线和飞机资料
乘客可以预定机票(提供必要的个人信息),可以根据用户的飞行里程对用户进行折扣,并可以查询机场的确认标志.
乘客可以查询自己的飞行记录和里程累计
2。
1。
1用例图
管理员—系统用例图乘客—系统用例图如图2-1与图2—2所示:
图2—1
图2-2
3。
数据库设计
该部分文档编写负责人
该部分文档复核人
最终版本
3。
1数据库设计
3。
1。
1数据表格设计
Customer:
字段包括主键ID顾客的名字、会员等级、性别、地址、E-mail、累计旅途、密码如图3—1所示
Line:
包括主键ID航线号码、价格、飞机型号、航空公司、出发地及目的地、登机时间和剩余座位数如图3-2所示
Sell:
字段包括主键ID顾客ID价格总计和时间如图3—3所示
SellTicket:
字段包括主键ID、交易ID、航线ID、数量、折扣、以及金额如图3—4所示
Discount:
字段包括主键Levels和折扣Discount如图3—5所示具体数值如表3-1所示
图3—1Customer
图3-2Line
图3—3Sell
图3-4SellTicket
图3-5Discount
表3-1格Discount
Levels
Discount
1
0。
9
2
0。
85
3
0。
8
3.1。
2数据视图设计
创建数据视图V_TicketSell
CREATEVIEWdbo。
V_TicketSellAS
SELECTdbo。
SellTicket。
ID,dbo。
SellTicket。
SellID,dbo.Sell。
CustomerID,dbo。
Sell。
Time,dbo。
Line.LineNum,dbo。
Line。
Press,dbo.Line。
FromTo,dbo。
Line.Price,dbo.SellTicket.Number,dbo.SellTicket。
Discount,dbo。
SellTicket。
Sum
FROMdbo.SellINNERJOINdbo.SellTicketONdbo。
SellTicket。
SellID=dbo。
Sell.IDINNERJOINdbo。
LineONdbo。
Line。
ID=dbo。
SellTicket。
LineID
3.1。
3存储过程和触发器
创建存储过程P_GetSellDetail
用于获取指定交易号的交易明细
CREATEPROCEDURE[dbo].[P_GetSellDetail](@SellIDint)
AS
BEGIN
SETNOCOUNTON;
SELECT[SellTicket].[LineID],[Line].[LineNum],[Line].[Press],[Line].[FromTo],[Line].[Price],[SellTicket]。
[Number],[SellTicket]。
[Discount],[SellTicket]。
[Sum]
FROM[SellTicket]INNERJOIN[Line]
ON[Line]。
[ID]=[SellTicket]。
[LineID]
AND[SellTicket]。
[SellID]=@SellID
END
创建触发器T_NewSellTicket
每当订出一张机票对应的航线的座位数就会减
CREATETRIGGER[T_NewSellTicket]ON[dbo].[SellTicket]
FORINSERT
AS
BEGIN
SETNOCOUNTON;
DECLARE@LineIDint,@Numberint
SELECT@LineID=[LineID],@Number=[Number]FROMinserted
UPDATE[Line]
SET[Seats]=[Seats]-@Number
WHERE[Line].[ID]=@LineID
END
创建触发器T_NewSell
没新增一笔会员订票交易就会在会员的里程数上为会员加上相应的里程
CREATETRIGGER[T_NewSell]ON[dbo].[Sell]
FORINSERT
AS
BEGIN
SETNOCOUNTON;
DECLARE@CustomerIDint,@Sumsmallmoney
SELECT@CustomerID=[CustomerID],@Sum=[Sum]FROMinserted
IF@CustomerIDISNOTNULL
BEGIN
UPDATE[Customer]
SET[Score]=[Score]+@Sum
WHERE[Customer]。
[ID]=@CustomerID
END
END
创建触发器T_UpdateScore
在更新会员记录是发生在score字段发生变化时执行当公里数达到1000以上设置会员级别为3级达到500以上设置会员级别为2级否则为1级
CREATETRIGGER[T_UpdateScore]ON[dbo]。
[Customer]
FORUPDATE
AS
BEGIN
SETNOCOUNTON;
IFUPDATE(Score)
BEGIN
DECLARE@CustomerIDint,@Scoreint,@Levelssmallint
SELECT@CustomerID=[ID],@Score=[Score]FROMinserted
IF@Score>=1000SET@Levels=3
ELSEIF@Score〉=500SET@Levels=2
ELSESET@Levels=1
UPDATE[Customer]
SET[Levels]=@Levels
WHERE[Customer].[ID]=@CustomerID
END
END
4概要设计
该部分文档编写负责人
该部分文档复核人
最终版本
4.1用户界面
4.1.1登陆界面
登陆界面如图4—1所示,主要实现登录功能。
图4-1登陆界面
4。
1。
2注册界面
注册界面如图4—2所示,主要实现注册功能.
图4—2注册界面
4。
1.3主界面
主界面如图4-3所示,是系统的主界面,作为其他界面的向导使用。
图4-3主界面
4.1。
4航线管理界面
航线管理界面如图4—4所示,可进行航线的查询和修改。
图4—4航线管理界面
4.1.5会员管理界面
会员管理界面如图4-5所示主要实现会员信息的查询和修改
图4-5会员管理界面
4。
1.6订票界面
订票界面如图4-6所示主要实现订票和会员订票的打折功能
图4—6订票界面
5.详细设计
该部分文档编写负责人
该部分文档复核人
最终版本
5.1系统界面的代码实现
5。
1。
1登陆界面的代码实现
namespacePlaneTicket
{
publicpartialclassMain:
Form
{
publicMain()
{
InitializeComponent();
}
privatevoidbtn1_Click(objectsender,EventArgse)
{
if(tb1.Text==””||tb2。
Text=="”)
{
MessageBox。
Show("请输入用户名密码再登录");
return;
}
stringSQL="SELECT[Name]FROM[Customer]WHERE[ID]=";
SQL+=tb1。
Text+”AND[PassWord]='"+tb2。
Text.Trim()+"'";
SqlConnectionconn;
SqlCommandcmd;
conn=newSqlConnection(ConfigurationManager.ConnectionStrings["PlaneTicket。
Properties.Settings。
PlaneTicketConnectionString"].ConnectionString);
try
{
conn.Open();
cmd=newSqlCommand(SQL,conn);
SqlDataReaderreader1=cmd。
ExecuteReader();
if(reader1.HasRows)
{
MessageBox。
Show("登录成功”);
Form1frm1=newForm1();
frm1。
ShowDialog();
}
}
catch(Exceptionexp)
{
MessageBox.Show("无法建立数据连接:
”+exp.Message);
this.Close();
}
finally
{
if(conn!
=null&&conn.State!
=ConnectionState。
Closed)
conn。
Close();
}
}
privatevoidbtn2_Click(objectsender,EventArgse)
{
NewCfrm1=newNewC();
frm1.ShowDialog();
}
privatevoidbt3_Click(objectsender,EventArgse)
{
this。
Close();
}
}
}
5.1.2注册界面的代码实现
namespacePlaneTicket
{
publicpartialclassNewC:
Form
{
protectedSqlConnectionconn;
protectedSqlCommandcmd;
publicNewC()
{
InitializeComponent();
this。
Load+=newEventHandler(NewC_Load);
}
privatevoidNewC_Load(objectsender,EventArgse)
{
try
{
conn=newSqlConnection(ConfigurationManager.ConnectionStrings["PlaneTicket。
Properties。
Settings。
PlaneTicketConnectionString”]。
ConnectionString);
cmd=newSqlCommand();
cmd.Connection=conn;
conn.Open();
}
catch(Exceptionexp)
{
MessageBox.Show("无法建立数据连接:
”+exp.Message);
this。
Close();
}
}
privatevoidbtnNew_Click(objectsender,EventArgse)
{
if(tbID。
Text=="”)
{
MessageBox。
Show(”用户名不能为空”,”提示”,MessageBoxButtons。
OK,MessageBoxIcon。
Warning);
tbID。
Focus();
return;
}
if(tbName。
Text=="”)
{
MessageBox.Show(”姓名不能为空","提示”,MessageBoxButtons.OK,MessageBoxIcon。
Warning);
tbName。
Focus();
return;
}
if(tbPass。
Text=="”)
{
MessageBox.Show(”密码不能为空",”提示”,MessageBoxButtons。
OK,MessageBoxIcon.Warning);
tbPass。
Focus();
return;
}
if(MessageBox.Show(”确认增加新会员吗?
”,”提示",MessageBoxButtons。
YesNo,MessageBoxIcon.Question)==DialogResult。
No)
return;
StringBuildersb1=newStringBuilder(”INSERTINTO[Customer]([ID],[Name],[Levels],[Gender],[Address],[Email],[Score],[PassWord])VALUES(”);
sb1.Append(tbID.Text);
sb1.Append(”,’”);
sb1.Append(tbName。
Text);
sb1。
Append("’,");
sb1.Append
(1);
sb1.Append(”,");
if(rabMan.Checked)
sb1。
Append("1");
else
sb1.Append("0");
sb1。
Append(”,'");
sb1.Append(tbAddress.Text);
sb1.Append(”’,’");
sb1。
Append(tbEmail。
Text);
sb1.Append("’,”);
sb1.Append(0);
sb1。
Append(”,");
sb1。
Append(tbPass.Text);
sb1.Append(”)");
cmd。
CommandText=sb1。
ToString();
try
{
if(cmd。
ExecuteNonQuery()>0)
{
MessageBox.Show(”增加成功!
",”提示”,MessageBoxButtons.OK,MessageBoxIcon。
Information);
this。
Close();
}
else
{
MessageBox.Show("未增加任何记录","提示",MessageBoxButtons。
OK,MessageBoxIcon。
Asterisk);
}
}
catch(Exceptionexp)
{
MessageBox。
Show("数据访问错误:
”+exp。
Message);
}
}
}
}
5。
1.3主界面的代码实现
namespacePlaneTicket
{
publicpartialclassMain:
Form
{
publicMain()
{
InitializeComponent();
}
privatevoidbtn1_Click(objectsender,EventArgse)
{
if(tb1。
Text==""||tb2.Text==””)
{
MessageBox。
Show("请输入用户名密码再登录");
return;
}
stringSQL="SELECT[Name]FROM[Customer]WHERE[ID]=”;
SQL+=tb1.Text+”AND[PassWord]='"+tb2.Text.Trim()+”’”;
SqlConnectionconn;
SqlCommandcmd;
conn=newSqlConnection(ConfigurationManager。
ConnectionStrings[”PlaneTicket。
Properties。
Settings。
PlaneTicketConnectionString”].ConnectionString);
try
{
conn.Open();
cmd=newSqlCommand(SQL,conn);
SqlDataReaderreader1=cmd。
ExecuteReader();
if(reader1.HasRows)
{
MessageBox.Show("登录成功");
Form1frm1=newForm1();
frm1.ShowDialog();
}
}
catch(Exceptionexp)
{
MessageBox.Show(”无法建立数据连接:
”+exp。
Message);
this。
Close();
}
finally
{
if(conn!
=null&&conn.State!
=ConnectionState.Closed)
conn。
Close();
}
}
privatevoidbtn2_Click(objectsender,EventArgse)
{
NewCfrm1=newNewC();
frm1。
ShowDialog();
}
privatevoidbt3_Click(objectsender,EventArgse)
{
this.Close();
}
}
}
5.1。
4航线管理界面代码实现
namespacePlaneTicket
{
publicpartialclassLineForm:
Form
{
protectedSqlConnectionconn;
protectedSqlCommandcmd;
protectedPlaneTicketDataSetTableAdapters.LineTableAdapteradapter;
publicLineForm()
{
InitializeComponent();
}
privatevoidLineForm_Load(objectsender,EventArgse)
{
try
{
conn=newSqlConnection(ConfigurationManager。
ConnectionStrings["PlaneTicket.Properties。
Settings。
PlaneTicketConnectionString"].ConnectionString);
conn.Open();
this.InitData();
adapter=newPlaneTicketDataSetTableAdapters。
LineTableAdapter();
adapter。
Fill(planeTicketDataSet1.Line);
dgvLine。
DataSource=planeTicketDataSet1。
Line.DefaultView;
}
catch(Exceptionexp)
{
MessageBox。
Show("无法建立数据连接:
”+exp。
Message);
this.Close();
}
finally
{
if(conn!
=null&&conn.State!
=ConnectionState。
Closed)
conn。
Close();
}
}
protectedvoidInitData()
{
cmd=newSqlCommand("SELECTDISTINCT[Press]FROM[Line]ORDERBY[Press]",conn);
SqlDataReaderreader1=cmd。
ExecuteReader();
cmbPress.Items。
Clear()