软件工程实验报告实验四.docx
《软件工程实验报告实验四.docx》由会员分享,可在线阅读,更多相关《软件工程实验报告实验四.docx(17页珍藏版)》请在冰点文库上搜索。
软件工程实验报告实验四
实验报告
课程名称软件工程
实验项目实验四编码及测试
实验仪器个人电脑
系别___计算机科学与技术系____
专业_____计算机科学与技术___
组长姓名王海阔2010011187
小组成员刘大伟_2010011195
郑晓驰2010011192
实验日期_____2012-5-22_________
成绩_______________________
指导教师_田英爱
1实验内容
根据系统的特点,选取适当的编程语言实现系统,并对系统功能实施测试。
2实验要求
完成系统的编码和测试工作,书写实验报告。
3实验工具与方法
Rationalroseenterpriseedition
MicrosoftVisualC++6.0
4实验结果
系统名称:
航空售票系统
4.1请根据所选系统,说明所利用的开发语言,并绘制所开发系统的实现类图。
我用的开发语言是C++,下面是开发系统的实现类图
4.2给出实现类图中最复杂的1个类的实现代码,要求必须要有注释等良好的风格。
我本来打算用面向对象的类来实现各个模块的功能,后来发现类太多了,各个类之间的关系很复杂,程序调试的时候出现了很多错误,所以我把好多类用函数来实现了,虽然这与开始设计的思路不一致,但实现的功能是一样的,下面是我大体的设计思路。
1.初始化
初始化由两部分组成:
先进行机票的初始化,例如100001201100前面六个数字表示第一架飞机情况,已定1张票,是第五号,后六个数字是第二架飞机的信息,2,3两张票被预定。
接下来进行乘客信息的初始化。
根据机票初始化决定储存每架飞机信息的链表从information.dat中读取多少个数据块。
按照上面的例子,head1将information中读取一个长度为node的struct类型数据,head2将读取2个。
2.程序主体
初始化后将进入主程序,主程序包括以下函数来实现必要功能:
voidmakenull();//初始化,包括三部分
voidmakenull_ticket();//从文件中读入票的信息
voidmakenull_information();//从文件中读入乘客信息
voidmakenull_wait();//从文件中读入排队信息
voidlist_menu();//显示主菜单
voidlist_ticket();//显示指定班机的余票
voidlist_information();//选择要察看的班机
voidplane_information(node*head);//显示指定班机中所有乘客信息
voidbook();//实现订票的功能
voidadd_information(node*head,intx,inty);//订票后将乘客信息加入相应的链表
voidshow_wait();//实现显示队列中人名的功能
voidadd_wait(intx,inty);//实现插队的功能
voidsearch_delete(intx);//参数x=0实现查找,x=1时实现删除
voidwrite_to_file();//将票和各链表的信息写入文件中
boolcomp(node*x,node*y);//判断是否匹配
在主程序的循环中选择相应的操作,进入相应的函数实现想要的功能。
下面是部分的代码
针对各种可能出现错误的情况也进行了测试,例如,选择了错误的航班号,选择了错误的座位号,机票全部被预定,机票全部被取消等等,读写文件没有出现错误。
1主菜单页面部分代码
//用户登录,首先检验用户输入的可操作性,然后调用相应的数据库操作。
voidlist_menu()
{{cout<计科0901-刘艳民"<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<}
2.订票系统部分代码
//这部分要实现订票的功能,订票信息,如地点,座位号,订票日期,检查此票是否被预订等时,系统首先验证输入字符的有效性,然后再执行添加过程。
voidbook()
{
inti,j,p;
cout<(1、2、3)";//可选的地点
do{
cin>>i;
if(i<1||i>=m){
cout<****"<";
}
else
{cout<cout<"<for(p=1;p<=n;p++)
if(a[i].seat[p]==0)cout<<""<
cout<break;}
}while
(1);
cout<";
do{
cin>>j;
if(j<1||j>n){
cout<****"<";
}
else
{
q->date=i;
cout<"<date<break;
}
}while
(1);
if(a[i].seat[j]==0){
a[i].seat[j]=1;
cout<a[i].seat[0]++;
if(i==1)add_information(head1,1,j);
if(i==2)add_information(head2,2,j);
if(i==3)add_information(head3,3,j);
}
else
{
cout<add_wait(i,j);
}
}
voidadd_wait(intx,inty)
{
wait*tempw;
tempw=newwait;
tempw->next=NULL;
cout<<"请输入个人信息"<cout<cout<<"姓名:
";cin>>tempw->name;
cout<<"ID号:
";cin>>tempw->id;
cout<<"电话:
";cin>>tempw->phone;
tempw->seat=y;
tempw->plane=x;
wait_end->next=tempw;
tempw->pre=wait_end;
wait_end=wait_end->next;
cout<wait_head->count++;
write_to_file();
}
主函数
voidmain()
{
makenull();
do
{list_menu();
cout<";
cin>>c;
if(c!
='6')
switch(c)
{
case'0':
show_wait();break;
case'1':
{list_ticket();book();}break;
case'2':
search_delete
(1);break;
case'3':
list_ticket();break;
case'4':
list_information();break;
case'5':
search_delete(0);break;
default:
break;
}
}while(c!
='6');
cout<<"ExitSystem";
}
voidshow_wait()
{wait*tempw;
tempw=wait_head->next;
if(tempw==NULL)cout<"<while(tempw!
=NULL)
{cout<name<<"-";
tempw=tempw->next;
}
}
voidadd_information(node*head,intx,inty)
{node*temp;
temp=newnode;
temp->pre=NULL;
temp->next=NULL;
cout<<"请输入个人信息"<cout<cout<<"姓名:
";cin>>temp->name;
cout<<"ID号:
";cin>>temp->id;
temp->seat=y;
temp->plane=x;
temp->next=head->next;
temp->pre=head;
if(head->next!
=NULL)head->next->pre=temp;
head->next=temp;
write_to_file();
cout<}
voidsearch_delete(intx)
{node*p,*q,*r;
wait*tempw,*tempw2,*tempw3;
intstep=1,t1,t2,i;
charch;
p=newnode;
tempw=newwait;
tempw2=newwait;
tempw3=newwait;
q=head1;
cout<cout<<"*************"<cout<";cin>>p->name;
do{q=q->next;
if((q!
=NULL)&&
(comp(q,p)))
{cout<q->date=q->plane;
cout<<"Located!
"<cout<<"****************";
cout<"<name;
cout<"<id;
cout<"<seat;
cout<"<plane;
cout<"<date<if(x==1){
cout<<"删除该纪录?
[Y/N]";
cin>>ch;
if(ch=='Y'||ch=='y'){
t1=q->plane;
t2=q->seat;
a[t1].seat[t2]=0;
a[t1].seat[0]--;
r=q;q=q->pre;
r->pre->next=r->next;
if(r->next!
=NULL)r->next->pre=r->pre;
delete(r);
cout<<"****记录删除成功!
****";
write_to_file();
tempw=wait_head;
for(i=0;icount;i++)
{tempw=tempw->next;
if(tempw==NULL)break;
if((tempw->plane==t1)&&(tempw->seat==t2))
{
strcpy(tempw3->name,tempw->name);
strcpy(tempw3->phone,tempw->phone);
cout<"<cout<"<name;
cout<"<id<a[t1].seat[0]++;
a[t1].seat[t2]=1;
if(tempw->plane==1)add_information(head1,1,tempw->seat);
if(tempw->plane==2)add_information(head2,2,tempw->seat);
if(tempw->plane==3)add_information(head3,3,tempw->seat);
tempw2=tempw->pre;
tempw2->next=tempw->next;
if(tempw->next==NULL)wait_end=tempw2;
elsetempw->next->pre=tempw2;
delete(tempw);
wait_head->count--;
write_to_file();
cout<name<<"已经成功订票,已经由电话"<phone<<"通知了"<break;
}
}
}
}continue;
}
else
{if(q==NULL)
{step++;
if(step==2)q=head2;
if(step==3)q=head3;
if(step==4){cout<}
}
}while
(1);
}
4.3根据系统用例及所实现的系统功能,编写4-5个具有代表性的测试用例。
根据1-2个测试用例,说明测试执行过程,并记录。
一开始无人订票,显示如下信息
现在订票
功能选择1,到1地的飞机,姓名等信息如下
订完票后数据库更新后的结果,查询剩余票,1飞机2号票已被订,以及一号飞机的信息
下面我将1号飞机的票全定完,来显示排队的信息,姓名等信息是随便输入的
现在想订票,一号机已经满了,得排队
查询等候队列的信息乘客we正在排队
现在退订,退订后的查询结果如下
5实验总结
王海阔:
作为组长,代码我承担了代码的主要编写工作和后期的完善修改,
在写码的过程整体来说不是很难,因为有以前数据结构的基础加上之前对于图的深入构想,整体还是比较上手的,遇到的问题主要是对于订票数量的边界值没有一个准确的把握,在测试过程中,频频报错,我们通过用等价划分的方法解决了输入报错的问题,使系统更加完美了。
本次的设计,让我大大地感觉到,对于程序设计中,对语言再熟悉也比不过在设计中算法和结构分析的真知灼见。
当然,成功的程序设计是要建立在熟悉语言的基础之上的。
树立广阔的软件大思想,平时语言的基本功要扎实。
而每一次程序设计的经营能大大地增加对语言的熟悉和感知。
程序设计的技能来自多方面,每一次的亲自实践、思考揣摩、刨根问底就会让自己更加清楚所欠缺的是什么。
所以,现在觉得在设计实践中作为参考的书册阅读和研究远远比过单纯的阅读,因为它是在最紧迫的时间上填补自己最紧迫的不足。
刘大伟:
这次实验我主要完成了代码部分编写,窗口设计和系统测试部分。
实践语言采用的是C++语言进行开发,系统主要分别为以下7个窗体分别编码,再对每个窗体中的控件进行单独编码。
在前3次的需求分析和制作的基础上,有效的制作出了7个窗体设计。
测试部分:
根据系统用例及所实现的系统功能,我编写4-5个具有代表性的测试用例(相关实例以及结果见相关截图)。
比如说针对各种可能出现错误的情况也进行了测试,选择了错误的航班号,选择了错误的座位号,机票全部被预定,机票全部被取消等等,最后结果显示读写文件并没有出现错误。
总的来说,通过我们组的努力和老师的帮助下,我们组顺利完成了这次实验设计。
郑晓驰:
这次实验,我主要完成整个架构的设计工作,后期主要负责测试工作,该售票系统在刚完成时,有很多功能bug,经过我们三个人加班加点的亲密合作
逐一排除系统不完善的部分,并使系统相对完美。
在本次实验,学到了团队合作的重要性,分工的高效性。