软件工程.docx
《软件工程.docx》由会员分享,可在线阅读,更多相关《软件工程.docx(33页珍藏版)》请在冰豆网上搜索。
软件工程
软件工程与开发
设计报告
项目名称:
飞机售票管理系统
项目组长
姓名:
陈赛学号:
24112401863
项目成员
姓名:
林华清学号:
24112400406
姓名:
毛佳学号:
24112401854
姓名:
邓怿鹏学号:
24112400403
开课学期:
2013至2014学年第二学期
开课班级:
N计算机11-1F班
指导老师:
陶睿
完成时间:
2014年6月1日
任务贡献表
序号
姓名
班级
学号
E_mail
QQ
签名
1
陈赛
N计算机11-1F班
24112401863
214744257@
214744257
任务
贡献
总结资料,分配任务,编写代码
2
邓怿鹏
N计算机11-1F班
24112400403
178524672@
178524672
任务
贡献
编写报告,做代码设计
3
林华清
N计算机11-1F班
522490293@
522490293
任务
贡献
绘图与分析,编写代码
4
毛佳
N计算机11-1F班
24112401854
24112401854@
326178574
任务
贡献
查找资料,做代码设计
1.前言
1.1编写目的
需求分析说明书提供用户与开发人员对开发软件的共同理解,使用户与开发单位就该系统的功能定义、环境需求达成共识,是今后各阶段设计工作的基础和依据,也是本阶段评审和测试阶段确认与验收的依据。
本需求分析的读者对象包括客户、业务人员需求分析人员、测试人员、用户文档编写人和项目管理人员。
1.2目标
A:
《飞机售票管理系统》运行于Internet环境,提供远程机票预订功能,包括远程航班信息查询,机票预订与确认等;使用《飞机售票管理系统》可使机票订购过程简单化、电子化、数字化,节省常规过程所不必要的资源浪费。
B:
运行环境Windous中dos下即可运行(程序为c语言)
C:
程序需要联网才可以使用
2.系统需求规格说明
2.1:
功能需求:
A:
用户注册功能:
该功能可以完成普通旅客注册和管理员注册任务。
B:
用户信息维护功能:
该功能可以完成普通旅客和管理员根据实际情况,对自己的信息进行更新操作。
C:
用户功能:
C1:
机票查询功能:
该功能为用户提供简洁的页面呈现,方便用户根据自己的需要选择自己需要的机票。
C2:
机票预定功能:
该功能为用户提供简洁的页面呈现,方便用户根据自己的需要预定机票。
C3:
对票功能:
该功能,通过和用户的交互,用户提供机票的订单号,由系统自动用户退票工作。
D:
管理员功能:
D1:
票务信息维护功能:
通过该功能,管理员可以根据飞机场提供的相关信息,更新最新的票务信息,方便用户查询。
D2:
飞机信息维护功能:
通过该功能,管理员可以根据实际情况,更新飞机的机长,型号,使用年限等信息。
D3:
用户信息维护功能:
通过该功能,管理员可以查阅到用户的详细信息,并根据用户的申请,为用户更新会员信息。
2.2:
性能需求:
A:
系统处理的准确性和及时性:
系统处理的准确性和及时性是系统的必要性能。
在系统设计和开发过程中,要充分考虑程序当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足企业对信息处理的需求。
在系统开发过程中,必须采用一定的方法保证系统的准确性。
B:
系统的开放性和系统的可扩展性:
系统应该是一个开放系统,只要符合一定的规范,就可以简单的加入和减少系统的模块,配置系统的硬件。
通过软件的修补,替换完成系统的升级和更新换代。
C:
机票预订系统直接面对使用人员的,而使用人员往往对计算机并不是非常熟悉。
这就需要系统能够提供良好的用户接口,易用的人机交互界面。
要实现这一点,就要求系统应该尽量使用用户熟悉的属于和中文信息界面;针对用户可能出现的问题,提供足够的在线帮助,缩短用户对系统的熟悉过程。
3.系统分析
3.1用例建模
3.1.1识别参与者和用例
3.1.2绘制用例图
3.1.3用例的描述
用例名称:
乘客查询机票信息
主参与者:
乘客
层次:
海平面(用户目标)
利益相关者:
乘客、管理员
前置条件:
乘客必须在线可访问网络
最低保证:
回滚任何未完成的事务,系统记录进展日志直到失败
成功保证:
用户想要的信息正确加载
触发器:
用户访问客户端首页
主要的成功情节:
1.乘客选择出发地、目的地和时间等信息。
2.乘客从界面中选择要查看的航班信息。
3.乘客从界面中选择选定的航班查看具体信息。
4.乘客使用“返回”按钮,查看其它航班信息。
扩展:
1.距离第一次查询超过30分钟。
A.通知管理员和用户,自动更新最新航班信息。
2.Interner连接中断
A.系统回滚最初状态。
3.顾客在任一点退出系统
系统会滚到交易前位置。
用例名称:
乘客退订机票
主参与者:
乘客
层次:
海平面(用户目标)
利益相关者:
乘客
前置条件:
乘客必须在线可访问网络
最低保证:
回滚任何未完成的事务,系统记录进展日志直到失败
成功保证:
用户成功退订一张订单
触发器:
用户单击退票按钮
主要的成功情节:
1:
用户成功查询自己的订单详情。
2:
用户选择一张订单,系统将订单详情显示在页面上。
3:
通知用户是否退订该订单
4:
用户选择是,调用退票用例,更新票务信息表。
5:
告知用户成功退票。
6:
用户选择否,返回页面。
扩展:
1:
根据用户提供的信息,无法查询到一张订单
告知用户,提供正确订单号,继续操作
2:
票务信息票更新出错:
告知管理员,手动更新。
3:
机票信息表更新出错:
告知管理员。
手动更新。
4.Interner连接中断
系统回滚最初状态。
5.顾客在任一点退出系统
系统会滚到交易前位置。
用例名称:
用户注册
主参与者:
乘客
层次:
海平面(用户目标)
利益相关者:
乘客、航空公司
前置条件:
乘客已经调用了“用户注册”用例
最低保证:
回滚任何未完成的事务,系统记录进展日志直到失败
成功保证:
乘客成功的完成订单,创建订单,信用卡支付,创建收据,返回乘客订单信息
触发器:
乘客点击“注册按钮”
主要的成功细节:
1.页面跳转至用户注册页面。
2.用户填入信息,点击注册。
3.成功校验用户输入的信息:
空校验,密码校验等错误信息校验,
4.信息校验合法,更新客户表
5.告知用户,成功注册,请返回登录
扩展:
1:
用户提供的信息不足:
告知用户,提供详细信息后,完成注册
2:
密码校验不相符:
告知用户,校验密码后,完成注册
3:
客户表更新失败
告知管理员,手动更新
4.Interner连接中断
系统回滚最初状态。
5.顾客在任一点退出系统
系统会滚到交易前位置。
用例名称:
用户购买机票
主参与者:
乘客
层次:
海平面(用户目标)
利益相关者:
乘客、管理员、航空公司
前置条件:
乘客已经调用了“查询机票”用例
最低保证:
回滚任何未完成的事务,系统记录进展日志直到失败
成功保证:
乘客成功的完成订单,创建订单,信用卡支付,创建收据,返回乘客订单信息
触发器:
乘客选择支付机票
主要的成功细节:
6.为这个事务创建一个订单。
7.乘客根据时间需求,已经确认所需航班。
8.确认航班信息,并登录网上银行进行支付。
9.顾客收到包含航班号、身份证号、乘客姓名、乘机时间、联系电话等在内的确认信息。
10.顾客选择“提交订单”,顾客、订单、和航班数据被更新。
11.订单完成。
扩展:
1.已经选择航班,但长时间没有支付
A.超过网站预留时间(50分钟),订单被取消。
反馈通知用户。
B.未超过网站预留时间(50分钟),航班信息被网站更新,订单取消。
C.未超过网站预留时间(50分钟),航班信息未被网站更新,业务继续。
2.由于机票已被其他用户预订而不能创建订单。
A.顾客收到无机票的消息,被通知选择其他航班。
B.顾客收到无机票的消息,退该用例。
3.顾客由于信用卡账户不能成功支付。
A.信用卡有问题,顾客被要求用一个新的信用卡账户。
B.网站问题,顾客被通知稍后再试。
4.Interner连接中断
B.系统回滚最初状态。
5.顾客在任一点退出系统
A.系统会滚到交易前位置。
用例名称:
维护航班信息
主参与者:
管理员
层次:
海平面(用户目标)
利益相关者:
管理员
前置条件:
管理员成功登录系统
最低保证:
管理员无法获得权限,自动退出系统
成功保证:
管理员成功登录系统
触发器:
管理员登录系统
主要的成功情节:
1:
成功调用登录用例;
2:
管理员成功登录系统。
3:
管理员通过航空公司所提供的航班信息成功更新票务信息。
4:
用户订票信息成功反馈给管理员。
5:
管理员根据反馈信息实时更新订票系统。
扩展:
1:
管理员无法正常登录系统:
A:
告知管理员,管理员校验用户名和密码,并重新登录,并登录成功。
B:
告知管理员,管理员退出系统。
2:
用户订票信息无法正常反馈:
A:
告知管理员和用户,延迟订单操作,等待管理员更新票务信息后,继续订单的执行。
3:
管理员对航班信息操作不成功
A.通知用户,系统暂时不可用,请稍后登录,并手动更新数据。
3.2类图建模
3.2.1识别对象和类
对象:
管理员,用户,机票,飞机
类:
飞机类,客户类,管理员,票务信息类,机票类
3.2.2识别属性与操作
管理员类:
属性:
管理员编号,管理员姓名,管理员密码,联系电话
操作:
更新,增加,信息校验,查询
客户类:
属性:
客户姓名,客户密码,客户年龄,客户地址,联系电话,会员状态。
操作:
更新,增加,信息校验,查询
飞机类:
属性:
飞机编号,飞机型号,机长姓名,购买时间,服役时间。
操作:
更新,查询
票务信息类:
属性:
订单编号,客户姓名,出发地,目的地,出发时间,到达时间,票价,客户会员信息,张数。
操作:
增加,删除,查询
机票类:
属性:
机票编号,出发地,目的地,出发时间,到达时间,票价,库存量
操作:
增加,删除,修改,更新
3.2.3定义类之间的关系
客户类:
自查询,自更新,自校验,查询票务信息类,修改票务信息类,
修改机票类。
管理员:
自查询,自更新,自校验,查询客户类,查询机票信息,修改票务信息类,管理飞机类。
3.2.4绘制类图
3.3顺序图建模
3.3.1登录用例
3.3.2用户注册用例
3.3.3订票用例:
3.3.4:
退票用例:
3.3.5机票信息维护
4.性能需求
4.1数据精确度
在从数据库中提取数据时,要求数据定位准确;在向数据库输入数据时,要求录入数据有校验准确;查询返回的信息均来源于数据库。
4.2时间特性
a.查询响应时间应在人的感官视觉时间范围内
b.更新处理、数据转化与传输和运行时间受到网络个人操作设备的影响会对具体的操作有不同的反应;且随着系统的不断更新、版本的升级(在硬件设备允许的条件下)会有所提高。
4.3适应性
当需求发生某些变化时,机票管理应用软件操作方式、数据结构、运行环境基本不会发生变化,变化只是将对应的数据库文件内的记录改变,或将过滤条件改变即可。
4整体设计与模块划分
4.1根据需求分析,该程序可分为以下四大模块:
4.2系统流程图
4.3.运行需求
4.3.1用户界面
本工程产品通过微型机进行运行、操作。
输出、输入的相对时间将由微型机本身的处理速度来决定。
(具体界面见后,组图)
4.3.2硬件接口
本工程产品不需要特定的硬件或硬件接口进行支撑
5详细设计
5.1数据结构:
结构体类型数组
5.2数据库结构:
下表构成该系统的基本数据库。
航班号
起飞时间
目的地
座次号
座次订出与否的标记
订票者姓名
订票者身份证号码
int
char
char
int
Char
char
char
5.3采用C语言定义相关的数据类型
structtravellerinfo//旅客信息结构
{
charfightnum[10];//航班号
charname[10];//姓名
charsex[5];//性别
charidnum[20];//证件号码
charznum[12];//座次号码
charflage[2];//座次定出与否标记
charpoto[12];//联系电话
};
structfightinfo//机票信息结构体
{
charfightnum[10];//航班号
charstart[8];//出发地
chardestination[8];//目的地
unsignedintprice;//价格
unsignedintgoyear;//出发时间年
unsignedintgomoth;//月
unsignedintgoday;//日
unsignedintgohour;//时
unsignedintgominute;//分
unsignedintarryear;//到达时间年
unsignedintarrmoth;//月
unsignedintarrday;//日
unsignedintarrhour;//时
unsignedintarrminute;//分
unsignedintallsticket;//总票数
unsignedintsurplusticket;//剩余票数
};
structallfightinfo//机票全部结构
{
structtravellerinfofight;//旅客信息结构
structfightinfofight1;//机票信息结构体
};
6.源代码
#include
#include
#include
#defineN1000
typedefstructplane
{
charID[10];/*航班代号*/
charBePlace[10];/*飞机起飞地点*/
charEnPlace[10];/*飞机降落终点*/
chardata[15];/*飞机起飞时间*/
intmax;/*飞机最大乘客人数*/
intprice;/*飞机票价*/
intnum;/*飞机已售票数*/
}PLANE;
PLANEti[N];
intn;/*当前的航班数目*/
voidmenu();
voidmenu1();
voidinput(inti)
{
printf("请输入航班代号:
\n");
scanf("%s",ti[i].ID);
printf("请输入起飞地点:
\n");
scanf("%s",ti[i].BePlace);
printf("请输入降落地点:
\n");
scanf("%s",ti[i].EnPlace);
printf("请输入起飞时间:
\n");
scanf("%s",ti[i].data);
printf("请输入航班的最大载客人数:
\n");
scanf("%d",&ti[i].max);
printf("请输入航班的票价:
\n");
scanf("%d",&ti[i].price);
ti[i].num=0;
}
voidenter()
{
inti;
system("cls");
printf("请输入航班的数目(0-%d)?
:
",N);
scanf("%d",&n);/*要输入的记录个数*/
printf("\n请输入数据\n\n");
for(i=0;i{
printf("\n请输入第%d航班记录.\n",i+1);
input(i);/*调用输入函数*/
}
getchar();
menu();
}
voidprintf_one(inti)/*显示一个记录的函数*/
{
printf("%11s%6s%10s%6s%6d%6d%6d",ti[i].ID,ti[i].BePlace,ti[i].EnPlace,ti[i].data,ti[i].price,ti[i].max,ti[i].num);
}
voidbrowse()
{
inti;
system("cls");
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
printf_one(i);
printf("\n");
}
getchar();
getchar();
menu();
}
voidorder()/*排序模块(按平均成绩)*/
{
inti,j;
structplanes;
system("cls");
for(i=0;i{
for(j=i+1;jif(strcmp(ti[i].data,ti[j].data)>0)
{
s=ti[i];
ti[i]=ti[j];
ti[j]=s;}
}
browse();
}
voidsearch_time()
{
inti,m=0;
structplanes;
system("cls");
printf("\n\nEnterthetime:
");
scanf("%s",s.data);/*输入出发的时间*/
puts("\n----------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
if(strcmp(s.data,ti[i].data)==0)
{
m++;
if((m!
=0)&&(m%10==0))/*目的是分屏显示*/
{
printf("\n\nPressanykeytocontiune...");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n----------------------------------------------------------------------");
getchar();/*按任意健*/
getchar();
menu1();
}
voidserch_end()
{
inti,m=0;
structplanes;
system("cls");
printf("\n\nEntertheendPlace:
");
scanf("%s",s.EnPlace);/*输入要到达的地方*/
puts("\n----------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
if(strcmp(ti[i].EnPlace,s.EnPlace)==0)
{
m++;
if((m!
=0)&&(m%10==0))/*目的是分屏显示*/
{
printf("\n\nPressanykeytocontiune...");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n----------------------------------------------------------------------");
getchar();/*按任意健*/
getchar();
menu1();
}
voidmenu1()
{
intn,w1;
do
{
system("cls");/*清屏*/
puts("\t\t\t\t飞机售票操作!
\n\n");
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.按照时间排序");
puts("\t\t\t\t2.按照时间查找航班");
puts("\t\t\t\t3.按照地点查找航班");
puts("\t\t\t\t4.返回主菜单");
puts("\n\n\t\t**********************************************\n");
printf("Choiceyournumber(1-4):
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)/*对选择的数字作判断*/
{
w1=1;
printf("yourchoiceisnotbetween1and4,Pleaseinputagain:
");
getchar();
getchar();
}
elsew1=0;
}while(w1==1);
/*选择功能*/
switch(n)
{
case1:
order();break;
case2:
search_time();break;
case3:
serch_end();break;
case4:
menu();break;
}
}
intsearch()/*查找模块*/
{
inti,k;
structplanes;
k=-1;
system("cls");
printf("\n\n请输入要订票的起飞地点:
");
scanf("%s",s.BePlace);/*输入要到达的地方*/
printf("\n\n请输入