软件体系结构实验报告材料.docx
《软件体系结构实验报告材料.docx》由会员分享,可在线阅读,更多相关《软件体系结构实验报告材料.docx(34页珍藏版)》请在冰豆网上搜索。
软件体系结构实验报告材料
学生实验报告
(理工类)
课程名称:
软件体系结构专业班级:
13软件工程2班
学生学号:
1305104067学生姓名:
黄可非
所属院部:
软件工程学院指导教师:
陈圣国
2015——2016学年第1学期
金陵科技学院教务处制
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。
若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。
纸张一律采用A4的纸张。
实验报告书写说明
实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。
各院部可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。
(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。
(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。
实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称:
经典软件体系结构风格实验学时:
4学时
同组学生姓名:
实验地点:
1216
实验日期:
2015.10.27-2015.11.3实验成绩:
批改教师:
批改时间:
一、实验目的和要求
(1)理解管道-过滤器软件体系结构、面向对象软件体系结构的原理
(2)掌握管道-过滤器软件体系结构、面向对象软件体系结构特点
(3)面向对象软件体系结构的编程实现
二、实验仪器和设备
奔腾以上计算机,Windows10、VisualStudio2013、MySQL
三、实验过程
(1)在dos下体会管道过滤器的体系结构。
使用dir|more命令了解管道-过滤器风格的程序。
(2)数据抽象和面向对象软件体系结构设计实现。
设计一个应用程序,在该程序定义平面图形的抽象类和其派生类圆、矩形、三角形,椭圆。
该程序的功能包括:
输入相应的图形参数,如矩形的长和宽,单击相应按钮,能根据输入参数创建图形类并输出该对象的面积。
使用c#、c++或Java或语言进行面向对象的程序设计:
(1)首先考虑数据封装性,
(2)考虑继承性,(3)考虑抽象类。
应用程序代码:
Graphic.cs:
namespaceWindowsFormsApplication1
{
publicabstractclassGraphic
{
publicabstractdoubleArea();
}
}
Rectangle.cs:
namespaceWindowsFormsApplication1
{
publicclassRectangle:
Graphic
{
doublelen;
doublewid;
publicRectangle(doublelength,doublewidth)
{
len=length;
wid=width;
}
publicoverridedoubleArea()
{
returnlen*wid;
}
}
}
Triangle.cs:
namespaceWindowsFormsApplication1
{
publicclassTriangle:
Graphic
{
doublebtm;
doublehgt;
publicTriangle(doublebottom,doubleheight)
{
btm=bottom;
hgt=height;
}
publicoverridedoubleArea()
{
returnbtm*hgt/2;
}
}
}
Circle.cs:
namespaceWindowsFormsApplication1
{
publicclassCircle:
Graphic
{
doubleradius;
publicCircle(doubler)
{
radius=r;
}
publicoverridedoubleArea()
{
returnradius*radius*3.14;
}
}
}
Ellipse.cs:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceWindowsFormsApplication1
{
publicclassEllipse:
Graphic
{
doublela;
doublelb;
publicEllipse(doublea,doubleb)
{
la=a;
lb=b;
}
publicoverridedoubleArea()
{
returnla*lb*3.14;
}
}
}
From1.cs:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceWindowsFormsApplication1
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(comboBox1.SelectedItem=="圆")
{
doubler=Convert.ToDouble(textBox1.Text);
Circlecircle=newCircle(r);
textBox4.Text=Convert.ToString(circle.Area());
}
elseif(comboBox1.SelectedItem=="矩形")
{
doublelen=Convert.ToDouble(textBox1.Text);
doublewid=Convert.ToDouble(textBox2.Text);
Rectanglerec=newRectangle(len,wid);
textBox4.Text=Convert.ToString(rec.Area());
}
elseif(comboBox1.SelectedItem=="三角形")
{
doublebtm=Convert.ToDouble(textBox1.Text);
doublehgt=Convert.ToDouble(textBox3.Text);
Triangletri=newTriangle(btm,hgt);
textBox4.Text=Convert.ToString(tri.Area());
}
elseif(comboBox1.SelectedItem=="椭圆")
{
doublea=Convert.ToDouble(textBox1.Text);
doubleb=Convert.ToDouble(textBox2.Text);
Ellipseelp=newEllipse(a,b);
textBox4.Text=Convert.ToString(elp.Area());
}
}
privatevoidcomboBox1_SelectedIndexChanged(objectsender,EventArgse)
{
if(comboBox1.SelectedItem=="圆")
{
label1.Text="半径";
label2.Visible=false;
label3.Visible=false;
textBox2.Visible=false;
textBox3.Visible=false;
}
elseif(comboBox1.SelectedItem=="矩形")
{
label1.Text="长";
label2.Visible=true;
textBox2.Visible=true;
label3.Visible=false;
textBox3.Visible=false;
}
elseif(comboBox1.SelectedItem=="三角形")
{
label1.Text="底";
label3.Visible=true;
textBox3.Visible=true;
label2.Visible=false;
textBox2.Visible=false;
}
elseif(comboBox1.SelectedItem=="椭圆")
{
label1.Text="半长轴";
label2.Text="半短轴";
label2.Visible=true;
textBox2.Visible=true;
label3.Visible=false;
textBox3.Visible=false;
}
}
}
}
四、实验结果与分析
程序初始界面:
如选择椭圆,输入半长轴和半短轴,点击计算,输出结果:
如选择三角形,输入底和高,点击计算,输出结果:
五、思考题
(1)管道-过滤器软件体系结构与批处理软件体系结构的区别和联系是什么?
答:
管道/过滤器结构通常导致进程成为批处理的结构,因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每一个过滤器看成一个完整的从输入到输出的转换。
.限定过滤器的数据存储容量,就可以得到有界管道/过滤器。
过滤器将所有输入数据作为单个实体进行处理,这就是批处理系统
(2)面向对象软件体系结构与主程序-子程序软件体系结构的区别和联系是什么?
答:
主程序-子程序体系结构在设计上使用层次化的划分方法,通常采用自顶向下的功能化设计方法,面向对象体系结构在设计上使用面向对象的设计方法,可以隐藏对象的内部状态并且要求所有对象间的交互都通过该方法,即进行了数据封装,这也是面向对象编程的基本原则
六、实验心得与体会
在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。
因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
通过实验,我对这种软件体系结构有了进一步了解。
实验项目名称:
多层C/S结构应用设计实验学时:
4学时
同组学生姓名:
实验地点:
1216
实验日期:
2015.11.10-2015.11.24实验成绩:
批改教师:
批改时间:
一、实验目的和要求
设计并实现一个基于多层C/S结构的数据库应用,熟悉多层C/S体系结构及其基本处理流程,了解多层结构表现层、业务逻辑层(功能层)、数据访问层所完成的功能,掌握多层C/S结构的数据库应用设计方法,对这三层进行明确分割,并在逻辑上使其独立。
学生通过本实验的训练能够熟练掌握对小型数据库应用系统三层结构层次划分方法及系统实现技术。
二、实验仪器和设备
奔腾以上计算机,Windows10、VisualStudio2013、MySQL
三、实验过程
分别采用二层C/S结构和多层C/S结构实现个人通讯录系统。
该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。
联系人信息包括姓名、住址、电话。
整个系统的功能图如下图所示:
应用程序代码:
usingSystem;
usingSystem.Windows.Forms;
usingMySql.Data.MySqlClient;
namespaceWindowsFormsApplication2
{
publicpartialclassForm1:
Form
{
publicintaction=0;//0:
添加;1:
修改
publicForm1()
{
InitializeComponent();
}
privatevoidgroupBox3_Enter(objectsender,EventArgse)
{
}
privatevoidbutton3_Click(objectsender,EventArgse)
{
frm1.Enabled=true;
frm2.Enabled=false;
action=0;
}
privatevoidadd()
{
longid=0;
intcount=list1.Items.Count;
if(count==0)
{
id=1001;
}
else
{
id=long.Parse(list1.Items[count-1].Text)+1;
}
Dbconconnector=newDbcon();
MySqlConnectioncon=connector.dbcon();
con.Open();
MySqlCommandcmd=newMySqlCommand("insertintoperson(id,name,phoneno,location)values(@id,@name,@phoneno,@location)",con);
cmd.Parameters.AddWithValue("@name",name.Text);
cmd.Parameters.AddWithValue("@phoneno",phoneno.Text);
cmd.Parameters.AddWithValue("@location",location.Text);
cmd.Parameters.AddWithValue("@id",Convert.ToString(id));
cmd.ExecuteNonQuery();
con.Close();
build();
}
privatevoidmodify()
{
foreach(ListViewItemiteminlist1.SelectedItems)
{
Dbconconnector=newDbcon();
MySqlConnectioncon=connector.dbcon();
con.Open();
MySqlCommandcmd=con.CreateCommand();
cmd.CommandText="updatepersonsetname=@name,phoneno=@phoneno,location=@locationwhereid=@id";
cmd.Parameters.AddWithValue("@name",name.Text);
cmd.Parameters.AddWithValue("@phoneno",phoneno.Text);
cmd.Parameters.AddWithValue("@location",location.Text);
cmd.Parameters.AddWithValue("@id",item.Text);
cmd.ExecuteNonQuery();
con.Close();
}
build();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(action==0)
{
add();
}
elseif(action==1)
{
modify();
}
name.Clear();
phoneno.Clear();
location.Clear();
frm2.Enabled=true;
frm1.Enabled=false;
}
privatevoidbutton4_Click(objectsender,EventArgse)
{
foreach(ListViewItemiteminlist1.SelectedItems)
{
frm1.Enabled=true;
frm2.Enabled=false;
name.Text=item.SubItems[1].Text;
phoneno.Text=item.SubItems[2].Text;
location.Text=item.SubItems[3].Text;
action=1;
}
}
privatevoidForm1_Load(objectsender,EventArgse)
{
build();
}
publicvoidbuild()
{
list1.BeginUpdate();
list1.Items.Clear();
Dbconconnector=newDbcon();
MySqlConnectioncon=connector.dbcon();
con.Open();
MySqlCommandcmd=newMySqlCommand("select*fromperson",con);
MySqlDataReaderdr=cmd.ExecuteReader();
while(dr.Read())
{
ListViewItemitem=newListViewItem();
item.Text=Convert.ToString(dr["id"]);
item.SubItems.Add(Convert.ToString(dr["name"]));
item.SubItems.Add(Convert.ToString(dr["phoneno"]));
item.SubItems.Add(Convert.ToString(dr["location"]));
list1.Items.Add(item);
}
dr.Close();
con.Close();
list1.EndUpdate();
}
privatevoidbutton5_Click(objectsender,EventArgse)
{
foreach(ListViewItemiteminlist1.SelectedItems)
{
Dbconconnector=newDbcon();
MySqlConnectioncon=connector.dbcon();
con.Open();
MySqlCommandcmd=newMySqlCommand("deletefrompersonwhereid="+item.Text,con);
cmd.ExecuteNonQuery();
}
build();
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
frm2.Enabled=true;
frm1.Enabled=false;
name.Clear();
phoneno.Clear();
location.Clear();
}
privatevoidtextBox2_TextChanged(objectsender,EventArgse)
{
}
privatevoidlist1_SelectedIndexChanged(objectsender,EventArgse)
{
//MessageBox.Show();
}
privatevoidbutton6_Click(objectsender,EventArgse)
{
MessageBox.Show("developedbyaltair");
}
}
publicclassDbcon
{
publicMySqlConnectiondbcon()
{
Stringconstr="server=localhost;UserId=root;password=root;Database=contact";
MySqlConnectioncon=newMySqlConnection(constr);
returncon;
}
}
}
四、实验结果与分析
程序主界面:
点击“添加联系人信息”:
点击“确定”:
选中列表上的某项内容,点击“修改联系人信息”:
修改信息并点击“确定”:
五、思考题
与二层C/S体系结构比较,三层(多层)体系结构有什么优点?
采用三层体系结构在系统设计时应该注意哪些问题?
答:
三层体系结构的优点:
①允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性 ②允许更灵活有效地选用相应的平台和硬件系统
③三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最合适的开发语言。
④允许充分利用功能层有效地隔离层表示层与数据层。
⑤三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。
在设计三层结构时,首先要考虑的问题在于数据层和业务层的连接是否畅通,数据的吞吐量是否过大。
在用户对于程序相应速度要求一般或者数据吞吐量较小的情况下,可以采用三层结构进行