软件体系结构实验报告2.docx
《软件体系结构实验报告2.docx》由会员分享,可在线阅读,更多相关《软件体系结构实验报告2.docx(29页珍藏版)》请在冰豆网上搜索。
软件体系结构实验报告2
学生实验报告
(理工类)
课程名称:
软件体系结构专业班级:
13软件工程2班
学生学号:
69学生姓名:
管东升
所属院部:
软件工程学院指导教师:
陈圣国
2015——2016学年第1学期
金陵科技学院教务处制
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。
若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。
纸张一律采用A4的纸张。
实验报告书写说明
实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。
各院部可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。
(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。
(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。
实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称:
经典软件体系结构风格实验学时:
4学时
同组学生姓名:
实验地点:
1216
实验日期:
实验成绩:
批改教师:
批改时间:
一、实验目的和要求
(1)理解管道-过滤器软件体系结构、面向对象软件体系结构的原理
(2)掌握管道-过滤器软件体系结构、面向对象软件体系结构特点
(3)面向对象软件体系结构的编程实现
二、实验仪器和设备
奔腾以上计算机,Windows10、VisualStudio2013、MySQL
三、实验过程
(1)在dos下体会管道过滤器的体系结构。
使用dir|more命令了解管道-过滤器风格的程序。
(2)数据抽象和面向对象软件体系结构设计实现。
设计一个应用程序,在该程序定义平面图形的抽象类和其派生类圆、矩形、三角形,椭圆。
该程序的功能包括:
输入相应的图形参数,如矩形的长和宽,单击相应按钮,能根据输入参数创建图形类并输出该对象的面积。
使用c#、c++或Java或语言进行面向对象的程序设计:
(1)首先考虑数据封装性,
(2)考虑继承性,(3)考虑抽象类。
应用程序代码:
:
namespaceWindowsFormsApplication1
{
publicabstractclassGraphic
{
publicabstractdoubleArea();
}
}
:
namespaceWindowsFormsApplication1
{
publicclassRectangle:
Graphic
{
doublelen;
doublewid;
publicRectangle(doublelength,doublewidth)
{
len=length;
wid=width;
}
publicoverridedoubleArea()
{
returnlen*wid;
}
}
}
:
namespaceWindowsFormsApplication1
{
publicclassTriangle:
Graphic
{
doublebtm;
doublehgt;
publicTriangle(doublebottom,doubleheight)
{
btm=bottom;
hgt=height;
}
publicoverridedoubleArea()
{
returnbtm*hgt/2;
}
}
}
:
namespaceWindowsFormsApplication1
{
publicclassCircle:
Graphic
{
doubleradius;
publicCircle(doubler)
{
radius=r;
}
publicoverridedoubleArea()
{
returnradius*radius*;
}
}
}
:
usingSystem;
using;
using;
namespaceWindowsFormsApplication1
{
publicclassEllipse:
Graphic
{
doublela;
doublelb;
publicEllipse(doublea,doubleb)
{
la=a;
lb=b;
}
publicoverridedoubleArea()
{
returnla*lb*;
}
}
}
:
usingSystem;
using;
using;
using;
using;
using;
usingWindowsFormsApplication1
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if=="圆")
{
doubler=;
Circlecircle=newCircle(r);
=());
}
elseif=="矩形")
{
doublelen=;
doublewid=;
Rectanglerec=newRectangle(len,wid);
=());
}
elseif=="三角形")
{
doublebtm=;
doublehgt=;
Triangletri=newTriangle(btm,hgt);
=());
}
elseif=="椭圆")
{
doublea=;
doubleb=;
Ellipseelp=newEllipse(a,b);
=());
}
}
privatevoidcomboBox1_SelectedIndexChanged(objectsender,EventArgse)
{
if=="圆")
{
="半径";
=false;
=false;
=false;
=false;
}
elseif=="矩形")
{
="长";
=true;
=true;
=false;
=false;
}
elseif=="三角形")
{
="底";
=true;
=true;
=false;
=false;
}
elseif=="椭圆")
{
="半长轴";
="半短轴";
=true;
=true;
=false;
=false;
}
}
}
}
四、实验结果与分析
程序初始界面:
如选择椭圆,输入半长轴和半短轴,点击计算,输出结果:
如选择三角形,输入底和高,点击计算,输出结果:
五、思考题
(1)管道-过滤器软件体系结构与批处理软件体系结构的区别和联系是什么
答:
管道/过滤器结构通常导致进程成为批处理的结构,因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每一个过滤器看成一个完整的从输入到输出的转换。
.限定过滤器的数据存储容量,就可以得到有界管道/过滤器。
过滤器将所有输入数据作为单个实体进行处理,这就是批处理系统
(2)面向对象软件体系结构与主程序-子程序软件体系结构的区别和联系是什么
答:
主程序-子程序体系结构在设计上使用层次化的划分方法,通常采用自顶向下的功能化设计方法,面向对象体系结构在设计上使用面向对象的设计方法,可以隐藏对象的内部状态并且要求所有对象间的交互都通过该方法,即进行了数据封装,这也是面向对象编程的基本原则
六、实验心得与体会
在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。
因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
通过实验,我对这种软件体系结构有了进一步了解。
实验项目名称:
多层C/S结构应用设计实验学时:
4学时
同组学生姓名:
实验地点:
1216
实验日期:
实验成绩:
批改教师:
批改时间:
一、实验目的和要求
设计并实现一个基于多层C/S结构的数据库应用,熟悉多层C/S体系结构及其基本处理流程,了解多层结构表现层、业务逻辑层(功能层)、数据访问层所完成的功能,掌握多层C/S结构的数据库应用设计方法,对这三层进行明确分割,并在逻辑上使其独立。
学生通过本实验的训练能够熟练掌握对小型数据库应用系统三层结构层次划分方法及系统实现技术。
二、实验仪器和设备
奔腾以上计算机,Windows10、VisualStudio2013、MySQL
三、实验过程
分别采用二层C/S结构和多层C/S结构实现个人通讯录系统。
该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。
联系人信息包括姓名、住址、电话。
整个系统的功能图如下图所示:
应用程序代码:
usingSystem;
usingWindowsFormsApplication2
{
publicpartialclassForm1:
Form
{
publicintaction=0;ext)+1;
}
Dbconconnector=newDbcon();
MySqlConnectioncon=();
();
MySqlCommandcmd=newMySqlCommand("insertintoperson(id,name,phoneno,location)values(@id,@name,@phoneno,@location)",con);
"@name",;
"@phoneno",;
"@location",;
"@id",(id));
();
();
build();
}
privatevoidmodify()
{
foreach(ListViewItemitemin
{
Dbconconnector=newDbcon();
MySqlConnectioncon=();
();
MySqlCommandcmd=();
="updatepersonsetname=@name,phoneno=@phoneno,location=@locationwhereid=@id";
"@name",;
"@phoneno",;
"@location",;
"@id",;
();
();
}
build();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(action==0)
{
add();
}
elseif(action==1)
{
modify();
}
();
();
();
=true;
=false;
}
privatevoidbutton4_Click(objectsender,EventArgse)
{
foreach(ListViewItemitemin
{
=true;
=false;
=[1].Text;
=[2].Text;
=[3].Text;
action=1;
}
}
privatevoidForm1_Load(objectsender,EventArgse)
{
build();
}
publicvoidbuild()
{
();
Dbconconnector=newDbcon();
MySqlConnectioncon=();
();
MySqlCommandcmd=newMySqlCommand("select*fromperson",con);
MySqlDataReaderdr=();
while())
{
ListViewItemitem=newListViewItem();
=(dr["id"]);
"name"]));
"phoneno"]));
"location"]));
}
();
();
();
}
privatevoidbutton5_Click(objectsender,EventArgse)
{
foreach(ListViewItemitemin
{
Dbconconnector=newDbcon();
MySqlConnectioncon=();
();
MySqlCommandcmd=newMySqlCommand("deletefrompersonwhereid="+,con);
();
}
build();
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
=true;
=false;
();
();
();
}
privatevoidtextBox2_TextChanged(objectsender,EventArgse)
{
}
privatevoidlist1_SelectedIndexChanged(objectsender,EventArgse)
{
层B/S结构的个人通讯录
.项目结构截图
publicvoidAddFriend(ContactEntryfriend)
{
SqlConnectionconn=newSqlConnection();
=["ConnectionString"];
SqlCommandcmd=newSqlCommand();
="Select*fromcontact";
=conn;
();
SqlDataReaderreader=();
int[]temp=newint[2];
temp[0]=0;
while())
{
temp[1]=(0);
if(temp[0]{
temp[0]=temp[1];
}
}
intcID=temp[0]+1;
();
();
conn=newSqlConnection();
=["ConnectionString"];
cmd=newSqlCommand();
="insertintocontact(ID,cName,cAddress,cPhone,cEmail)";
+="values("+cID+",'";
+=+"','";
+=+"','";
+=+"','";
+=+"')";
=conn;
();
();
();
}
调用Bean中的属性:
调用配置文件中的信息:
.“修改联系人信息”功能:
“修改”功能的代码:
publicvoidUpdateFriendByID(ContactEntryfriend)
{
SqlConnectionconn=newSqlConnection();
=["ConnectionString"];
SqlCommandcmd=newSqlCommand();
="updatecontactsetcName='"+;
+="',cAddress='"+;
+="',cEmail='"+;
+="',cPhone='"++"'";
+="whereID="+;
=conn;
();
();
();
}
“删除”联系人功能:
“删除”功能的代码:
publicvoidDeleteFriendByID(intid)
{
SqlConnectionconn=newSqlConnection();
=["ConnectionString"];
SqlCommandcmd=newSqlCommand();
="deletefromcontactwhereID="+id;
=conn;
();
();
();
}
.“搜索”联系人功能:
“搜索”功能的代码:
publicSqlDataReaderGetFriendKey(stringkey)
{
SqlConnectionconn=newSqlConnection();
=["ConnectionString"];
SqlCommandcmd=newSqlCommand();
="selectID,cName,cAddress,cPhone,cEmailfromcontact";
+="wherecNamelike'%"+key+"%'";
+="orcAddresslike'%"+key+"%'";
+="orcPhonelike'%"+key+"%'";
+="orcEmaillike'%"+key+"%'";
=conn;
();
SqlDataReaderreader=;
returnreader;
}
二层B/S结构个人通讯录
.二层B/S结构界面设计和逻辑代码未分离
protectedvoidButton1_Click(objectsender,EventArgse)
{
if
{
SqlConnectionconn=newSqlConnection();
=["ConnectionString"];
SqlCommandcmd=newSqlCommand();
="Insertintocontact(ID,cName,cAddress,cPhone,cEmail)";
+="values("+cID+",'";
+=+"','";
+=+"','";
+=+"','";
+=+"')";
cID++;
=conn;
();
();
();
("");
}
}
四、实验结果与分析
结果分析:
三层B/S结构实现了界面设计和逻辑代码的分离,更加规范化,使后期的修改代码和维护更加便利。
在制作的时候也遇到了一些麻烦,比如由于不小心输入sql代码字段没有添加空格,导致运行的时候没有报任何错误,却使得系统一直卡在那里,只好用任务管理器将他终结,才使得系统退出运行,后来用断点调试,发现运行到执行sql语句下一句的时候,给出的参数值有问题,于是才发现问题所在!
所以在编写程序的时候需要我们小心输入,有时候一个字符的写错,可能会引起很大的麻烦,还有就是要分步
四、思考题
与C/S体系结构比较,B/S体系结构有什么优点采用B/S与C/S混合体系结构在系统设计时应该注意哪些问题
答:
基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。
用户在使用系统时,仅需要一个浏览器就可以运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。
B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开发性基础。
用B/S和C/S混合结构设计时应考虑B/S、C/S的具体使用环境。
比如B/S适用于外部远程访问,C/S适用于内部局域网访问,服务端也能对客户端加以识别,避免远程主机使用C/S的权限进行非法访问
六、实验心得与体会
本次实验最终使用java进行开发而不是C#的原因在于对于的不了解。
实验中设计并实现了一个基于B/S结构的数据库应用,熟悉了B/S体系结构及其基本处理流程,了解了B/S结构系统各部分所完成的功能,掌握了B/S结构的数据库应用设计方法。
通过本实验的训练熟练掌握了对小型数据库应用系统B/S结构设计及系统实现技术。
。