民航订票管理系统.docx
《民航订票管理系统.docx》由会员分享,可在线阅读,更多相关《民航订票管理系统.docx(36页珍藏版)》请在冰豆网上搜索。
![民航订票管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/12/6c2affde-6435-43f2-89e3-432c6fc1aff2/6c2affde-6435-43f2-89e3-432c6fc1aff21.gif)
民航订票管理系统
《软件工程实习》
说明
题目:
民航订票管理系统
小组成员姓名
专业班级
学号
别:
计算机科学与工程
指导教师:
年月曰
软件工程实习成绩评定表
评分项目需求分析数据库设计系统设计项目管理代码质量
小组评分标准
实际得分
分值
10
15
10
10
10
25
项目测试
个人评分标准
小组
成员
姓名
个人完成的具体任务及其完成情况(两人共同承担任务,写清楚各自完成的比例)
个人实际得分
个人综合成绩
100
个人综合成绩二小组总成绩*30%+个人实际得分*70%
用户安装及使用手册项目成果提交小组总成绩
1.项目管理
2.需求分析
3.数据库设计
4.概要设计
5.详细设计
13
6.项目测试
29
7.安装手册
32
8.使用手册
34
9.总结
35
参考文献
36
1.项目管理
该部分文档编写负责人
该部分文档复核人
最终版本
1.1甘特图
1.1.1项目名称及起止时间
项目名称及起止时间由图
1-1给出。
0任务名称
工期
开始时间
芫咸时间
前置任雰
1
进行需求片析
2工性日
2010年8月2汨
2010年8月2汨
E
参老资料
厂工作日
却10年8月2汨
RID年8月烈日
3
:
圍
墅数据库
1工作日
加10年&月£汨
201。
年S月25日
L,2
4
编宜mailt代码
1亍作日
ZOiCi年8^260
2010^3^250
3
5
编写CgtDinerf
3工作日
2CI1CI年8^260
2010年8月羽日
3
G
编写LingFon*
3工作日
药10年8^260
2010^8^2303
7
编宜]hM代码
3工住日
2010年8^280
aoiQ年£月如日3
…才
编^SellT
3工作日
如10年8月茨日
2010年3月如日3
■9'
1
编写Form1代码
1工柞日
2010^8^310
2010^3^315%瓦6」尼3
1Q
编写文档
1工住日
2010年8^310
药1仃年E月31日
11
1
握交非业
1工作日
EDici年g月1日
201。
年g月1日
L,乙3,4,5,S,兀
图1-1
甘特图
1.1.2项目甘特图
项目甘特图如图
图1-2项目甘特图
2.需求分析
该部分文档编写负责人
该部分文档复核人
最终版本
2.1系统要求
实现一个民航订票管理系统,主要分为机场、航空公司和乘客三个部分,其中
1、航空公司的管理包括:
机型的管理
航线的制定、变更和取消,如航线的起止地点,距离里程向航线上增加,改派或撤销飞机向机场提供航线和飞机信息
审核机场的航班计划
2、机场航班和订票管理包括:
制定、修改和撤销航班时刻
制定、修改和撤销机票的价格(必需与航班时刻保持一致性)管理并确认乘客的订票记录(有座位)和价格
3、乘客航班查询和订票管理包括:
乘客可以查询航班、航线和飞机资料
乘客可以预定机票(提供必要的个人信息),可以根据用户的飞行里程对用户进行折扣,并可以查询机场的确认标志。
乘客可以查询自己的飞行记录和里程累计
2.1.1用例图
管理员一系统用例图乘客一系统用例图如图2-1与图2-2所示:
管理员
统计查询售票情况
乘客
査询航线的基本信息
图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
如表3-1所示
数量、折扣、以及金额如
和折扣Discount
如图3-5所示具体数值
ID
int
Name
nvarchor(50)
Levels
snodllint
Gender
bit
Address
nvarchar(SO)
Email
nvarchar(50)
Score
lint
Password
int
图3-1Customer
列名
数据类酉
ID
int
LineNum
int
Price
smallmoney
Taper
nvarchar(50)
PrESS
nvarchar(50j
FromTo
nvarcharC50)
Time
smalldatetime
Seats
int
列名
数据类型
图3-2Line
允许空
列名
数据类型
允许空
?
ID
int
□
匚ustomerlD
int
0
Sum
smallmoney
□
Time
smalldatetime
□
图3-3Sell
列名
数据类型
允许空
?
ID
int
□
5ellID
int
□
LinelD
int
□
Number
int
□
Discount
Moat
□
Sum
smallmone/
0
图3-4SellTicket
列名
数菇类型
允许空
ELevels
int
□
Discount
float
□
图3-5Discount
表3-1格Discount
Levels
Discount
1
0.9
2
0.85
3
0.8
3.1.2数据视图设计创建数据视图VTicketsell
CREATEVIEWdbo.VTicketSellAS
SELECTdbo.SellTicket」D,dbo.SellTicket.SellID,dbo.Sell.CustomerlD,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.ID
INNERJOINdbo.LineONdbo.Line.lD=dbo.SellTicket.LinelD
3.1.3存储过程和触发器
创建存储过程PGetSellDetail
用于获取指定交易号的交易明细
CREATEPROCEDURE[dbo]
ASBEGIN
SETNOCOUNTON;
SELECT[SellTicket][Line].[Press],[Line][SellTicket].[Number]
[SellTicket].[Sum]
FROM[SellTicket]
ON[Line].[ID]AND[SellTicket]END
.[P_GetSellDetail]
.[LineID].[FromTo],,[SellTicket]
[Line][Line]
INNERJOIN=[SellTicket].[SellID]
(@SellIDint)
.[LineNum]
.[Price],
.[Discount],
[Line]
.[LineID]=@SellID
创建触发器T_NewSellTicket每当订出一张机票对应的航线的座位数就会减CREATETRIGGER[T_NewSellTicket]ON[dbo].[SellTicket]
FORINSERT
AS
BEGIN
SETNOCOUNTON;
DECLARE@LineIDint,@Numberint
SELECT@LineID=[LineID],@Number=[Number]FROMinsertedUPDATE[Line]
SET[Seats]=[Seats]-@NumberWHERE[Line].[ID]=@LineID
END创建触发器T_NewSell没新增一笔会员订票交易就会在会员的里程数上为会员加上相应的里程CREATETRIGGER[T_NewSell]ON[dbo].[Sell]
FORINSERT
ASBEGIN
int,@Sumsmallmoney
=[CustomerID],@Sum=[Sum]FROM
SETNOCOUNTON;DECLARE@CustomerIDSELECT@CustomerIDinserted
NOTNULL
IF@CustomerIDIS
BEGIN
UPDATE[Customer]
SET[Score]=[Score]+@Sum
WHERE[Customer].[ID]=@CustomerID
ENDEND创建触发器T_UpdateScore
在更新会员记录是发生在score字段发生变化时执行上设置会员级别为3级达到500以上设置会员级别为CREATETRIGGER[T_UpdateScore]ON[dbo]
FORUPDATEASBEGIN
SETNOCOUNTON;
IFUPDATE(Score)
BEGIN
DECLARE@CustomerID
SELECT@CustomerIDinserted
IF@Score>=1000ELSEIF@Score>=ELSESET@LevelsUPDATE[Customer]
当公里数达到1000以
2级否则为
.[Customer]
1级
int,@Scoreint=[ID],@Score
SET@Levels=3500SET@Levels=1
SET[Levels]=@Levels
WHERE[Customer].[ID]=@CustomerIDEND
END
@Levels
=[Score]
smallint
FROM
4概要设计
该部分文档编写负责人
该部分文档复核人
最终版本
4.1用户界面
4.1.1登陆界面
登陆界面如图4-1所示,主要实现登录功能。
J盅开]
+ir
V—J二4J
*0•亠c±]^~—r~
用円5||
图4-1登陆界面
4.1.2注册界面
注册界面如图4-2所示,主要实现注册功能。
佥员疽JB
音员号
©鸟Oi*
图4-2注册界面
4.1.3主界面
主界面如图4-3所示,是系统的主界面,作为其他界面的向导使用。
欢迎使用民航订票系统
会员信息
管理
图4-3主界面
4.1.4航线管理界面
航线管理界面如图4-4所示,可进行航线的查询和修改。
列□飙st#目她
]呈剥信I
吕
飞机£i弓
fit空it司
g伽
fi机时间
*1
10]
^|l00OHO
中a啟仝■骚司
dtS-±rS
soio-e-jT
12-«
30
102
200.DODD
中HK空■运司
2Dia-S-2T
12.DD
3D
103
100.mo
中aft空■it司
上海-广州
iOic-e-?
T
L£:
W
50
1M
IDQ.DODO
中S北方
2Dia-e-27
1£.»
ID
LD5
100.DODO
中a北才喷空.
吉木齐
2010-B-ZT
LZ:
m
JO
106
IDQ.DODO
中S中方ffi£..
rSHI-=fii«
2DlQ-a-Z7
t£.DO
30
iDTT
100.HMD
中.
广州-*睡
2010-S-ZT
iZ:
»
30
tffi
2QD.DODO
河iSffi主:
&司
阁1恥幵封
20lQ-a-27
1£:
[U
曹
I保存脚]
图4-4航线管理界面
4.1.5会员管理界面
会员管理界面如图4-5所示主要实现会员信息的查询和修改
tfeth
EnuL
图4-5会员管理界面
4.1.6订票界面
订票界面如图4-6所示主要实现订票和会员订票的打折功能
图4-6订票界面
5.详细设计
该部分文档编写负责人
该部分文档复核人
最终版本
5.1系统界面的代码实现
5.1.1登陆界面的代码实现
namespacePlaneTicket
Form
{
publicpartialclassMain:
{
publicMain()
InitializeComponent();
privatevoidbtn1_Click(
objectsender,EventArgse)
if(tb1.Text==""
||tb2.Text==
"")
MessageBoxShow(”请输入用户名密码再登录”);
return;
stringSQL="SELECT[Name]FROM[Customer]WHERE[ID]=";SQL+=tb1.Text+"AND[PassWord]='"+tb2.Text.Trim()+"”'
SqlConnectionconn;
SqlCommandcmd;
conn=new
SqlConnection(ConfigurationManager.ConnectionStrings["PlaneTicket.Properties.Se
ttings.PlaneTicketConnectionString"].ConnectionString);
{conn.Open();cmd=
try
newSqlCommanQSQL,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{
publicpartial
{
classNewC:
Form
protected
protected
SqlConnectionSqlCommandcmd;
conn;
publicNewC()
InitializeComponent();
this.Load+=newEventHandler(NewC_Load);
privatevoidNewC_Load(objectsender,EventArgse){
try
{conn=new
SqlConnection(ConfigurationManager.ConnectionStrings["PlaneTicket.Properties.Settings.PlaneTicketConnectionString"].ConnectionString);
cmd=newSqlCommand();cmd.Connection=conn;conn.Open();
catch(Exceptionexp)
MessageBox.Show("无法建立数据连接:
"+exp.Message);this.Close();
private
voidbtnNew_Click(objectsender,EventArgse)
if(tbID.Text=="")
MessageBox.Show("用户名不能为空","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
tbID.Focus();
return;
if
(tbName.Text=="")
MessageBox.Show("姓名不能为空",MessageBoxIcon.Warning);
tbName.Focus();
return;
"提示",MessageBoxButtons.OK,
if
(tbPass.Text==
"")
"提示",MessageBoxButtons.OK,
MessageBox.Show("密码不能为空",MessageBoxIcon.Warning);
tbPass.Focus();
return;
?
","提示",
DialogResult.No)
if(MessageBox.Show("确认增加新会员吗
MessageBoxButtons.YesNo,MessageBoxIcon.Question)==
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(",");
"1");
if(rabMan.Checked)sb1.Append(else
"0");
);
sb1.Append(
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
{
Form
publicpartialclassMain:
{
publicMain()
InitializeComponent();
privatevoidbtn1_Click(
objectsender,EventArgse)
if(tb1.Text==""
||tb2.Text=="")
MessageBox.Show("请输入用户名密码再登录");return;
HIH
stringSQL="SELECT[Name]FROM[Customer]WHERE[ID]="SQL+=tb1.Text+"AND[PassWord]='"+tb2.Text.Trim()+
SqlConnectionconn;
SqlCommandcmd;
conn=new
SqlConnection(ConfigurationManager.ConnectionStrings["PlaneTicket.Properties.Settings.PlaneTicketConnectionString"].ConnectionString);
conn.Open();cmd=
try
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.S