软件体系结构
课程实验报告
软件系统结构
专业 软件工程 张韬 B 软件121 1210701132 孙莉
学生姓名 班学
级 号
指导老师
实验一 C/S结构应用设计(1)
一、 实验目的
设计并实现一个基于多层C/S结构的数据库应用,熟悉多层C/S体系结构及其基本处理流程,了解多层结构表现层、业务逻辑层(功能层) 、数据访问层所完成的功能,掌握多层C/S结构的数据库应用设计方法,对这三层进行明确分割,并在逻辑上使其独立。学生通过本实验的训练能够熟练掌握对小型数据库应用系统三层结构层次划分方法及系统实现技术。
二实验环境
奔腾以上计算机,装有SQL Server 2000数据库系统和Visual Studio 2000软件。
三、实验内容
1、分别采用二层C/S结构和多层C/S结构实现个人通讯录系统。该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。联系人信息包括姓名、住址、电话。整个系统的功能图如下图所示:
分析系统需求,完成软件体系结构设计及模块划分、数据库设计,采用Visual C#实现系统功能
四、实验操作过程
在电脑上安装好Microsoft Visual Studio 2010 用于系统的开发
需要实际设计开发出一个简单的基于两层C/S结构的应用系统——个人通讯录管理系统,主要步骤和内容如下:
1、在 SQL Server 2000中建立数据库Contact ,建立表friend 。
(1)建立数据库Contact : Create database contact (2)建立数据库表friend
//使用contact 数据库 USE contact
GO
//是否存在数据库表friend ,如果存在则删除
If exists(select*from dbo.sysobjects where id=object id(N’[dbo].[friend]’)and
OBJECTPROPERTY (id,N’isusertable ’)=1)
Drop table [dbo].[friend] GO
//建立表friend
Create table [dbo].[friend]
([fid] [int] identity(1,1) not null,
[fname] [varchar] (8) collate Chinese prc ci as not null, [fphone] [varchar] (12) collate Chinese prc ci as null, [faddress] [varchar] (100) collate Chinese prc ci as null )on [primary]
表1 friend的结构
新建完friend 表之后向表中插入1条记录。以便程序调试时使用。 2、在Visual Studio 2000中用C#语言建立用户界面层(UI )程序:Contact 项目,主要呈现用户操作界面。 用户的主要操作界面如下:
其中txtAddress 控件的Multilane 属性为True. 最后我们要设置性设置为
True ,View
listView 属性,将其FullRowSelect 属性设置为true,Gridlines 属
Details ,并点开Columns
属性设置为属性,添加一列,设置其
Name 为fContactID ,Text 属性为编号,以此方式再为其添加姓名、电话、联系方式。
到此,用户图形界面就设计完成了。
3、编写应用程序层代码,用于实现数据访问、添加、删除和修改等控制,关键代码如下:
(1)数据连接
数据库连接的代码如下:
string connstr = "Data Source=(local);Initial Catalog=contact;user id=sa;password=";
本代码的意思是以用户名为sa 登录到本地数据库,密码为空。
(2)数据添加、删除和修改等控制的主要代码
①显示联系人信息
显示联系人信息由主界面的listview 显示,其思路是读取数据库中所有的联系人信息,然后通过Lisview 显示。
private void getInfo() {
string sql = "select Fid,Fname,Fphone,Faddress from friend"; SqlConnection conn = new SqlConnection(connstr); conn.Open ();
SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader
cmd.ExecuteReader(CommandBehavior.CloseConnection);
reader
=
try {
this.listView.Items.Clear(); while (reader.Read()) {
string[] subItems = new string[]{
reader.GetInt32(0).ToString(), reader.GetString(1), reader.GetString(2), reader.GetString(3)};
this.listView.Items.Add(new ListViewItem(subItems)); }
reader.Close(); }
catch (Exception ex) {
MessageBox.Show(ex.ToString()); } }
②添加联系人信息
对联系人信息进行添加的操作并录入数据库
public void addInfo(string name, string phone, string address)
{ string
sql="insert
into
friend(Fname,Fphone,Faddress)values('"+name+"','"+phone+"','"+address+"')";
SqlConnection conn=new SqlConnection(connstr); SqlCommand cmd=new SqlCommand(sql,conn); conn.Open();
cmd.ExecuteNonQuery(); conn.Close();}
③修改联系人信息
对联系人信息进行修改的操作并录入数据库
private void btnEdit_Click(object sender, EventArgs e) {
if (this.listView.SelectedItems.Count == 0) {
MessageBox.Show("请单击选择需要修改的联系人!"); return; }
this.enableInfo();
ListViewItem lvi = this.listView.SelectedItems
[this.listView.SelectedItems.Count - 1];
this.txtName.Text = lvi.SubItems[1].Text; this.txtPhone.Text = lvi.SubItems[2].Text; this.txtAddress.Text = lvi.SubItems[3].Text; Fid = Convert.ToInt32(lvi.SubItems[0].Text); this.isAdd = false;
this.btnDel.Enabled = false; this.btnAdd.Enabled = false; }
④删除联系人
对联系人信息进行删除的操作并录入数据库
private void button5_Click(object sender, EventArgs e) {
int infoID = this.getselectid(); if (infoID == 0) {
MessageBox.Show("请选中信息先!"); return; } try {
string sql = "delete friend where fid=" + infoID; SqlConnection conn = new SqlConnection(connstr); conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); conn.Close(); this.getInfo(); }
catch (Exception ex) {
MessageBox.Show(ex.Message); } }
五、实验结果及结论。
当我们运行程序时可以看到之前在数据库中插入的数据已经显示在了联系人列表中,我们点击添加联系人信息之后再次插入信息,点击确定后,我们可以看到,新插入的数据已经在联系人列表中了,如下图所示。
单击确定按钮之后显示通讯上去了:
六、心得体会
本次实验完成了实验要求里的内容,遇到一些问题,都得到很好的解决。
实验二 C/S结构应用设计(2)
一、实验目的
设计并实现一个基于多层C/S结构的数据库应用,熟悉多层C/S体系结构及其基本处理流程,了解多层结构表现层、业务逻辑层(功能层) 、数据访问层所完成的功能,掌握多层C/S结构的数据库应用设计方法,对这三层进行明确分割,并在逻辑上使其独立。学生通过本实验的训练能够熟练掌握对小型数据库应用系统三层结构层次划分方法及系统实现技术。
二、实验环境
奔腾以上计算机,装有SQL Server 2000数据库系统和Visual Studio 2000软件。
三、实验内容
1、分别采用二层C/S结构和多层C/S结构实现个人通讯录系统。该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。联系人信息包括姓名、住址、电话。整个系统的功能图如下图所示:
分析系统需求,完成软件体系结构设计及模块划分、数据库设计,采用Visual C#实现系统功能
四、 实验操作过程
需要实际设计开发出一个简单的基于多层C/S结构的应用系统——个人通讯录管理系统,主要步骤和内容如下:
1、在 SQL Server 2000中建立数据库Contact ,建立表friend 。 在创建二层C/S时,我们已经创建了contact 数据库,并建立了friend 表,这次我们可以直接引用。
2、在Visual Studio 2000中用C#语言建立用户界面层(UI )程序:Contact 项目,主要呈现用户操作界面。
在创建二层C/S架构中,我们已经创建过此用户图形界面,三层架构的用户图形层(UI )与两层架构一致,所以在此就不再重复。
3、在Contact 中增加新类ContactDb.cs 作为业务逻辑层(BLL )程序。 在业务逻辑层中需要为其添加头文件
using System;
using System.Collections.Generic; using System.Text; using System.Data; 并创建contactDB 类
using System.Data.SqlClient; namespace Contact {
class ContactDB{ }
4、编写类文件ContactDb.cs 代码,用于实现数据访问控制,关键代码如下: (1)数据连接
数据库的访问是由contactDB 类中的getReader 方法实现的,在MainForm 中,只需要如下代码:
SqlDataReader reader = cdb.getReader();
getReader 方法定义了一个String 类型的变量sql ,用于保存访问数据库的SQL 命令:
string sql = "select Fid,Fname,Fphone,Faddress FROM friend";
接着新建数据库连接对象conn 并打开数据连接:
SqlConnection conn = new SqlConnection(connStr); conn.Open();
其中连接字符窜connStr 是contactDB 类的域:
string connStr = "Data source=(local);Initial Catalog=contact;user id=sa;password=''";
然后建立数据命令对象:
SqlCommand cmd = new SqlCommand(sql, conn);
数据命令对象cmd 使用的数据库连接是conn ,而参数sql 表示数据命令的数据文本为sql ,即数据命令的CommandText 属性为sql 。 (2)数据获取
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return reader;
在MainForm 的getInfo 方法中,获取了由ContactDB 类的getReader 方法返回的数据阅读器后,接下来要执行的是循环读取阅读器中的信息,然后依次添加到listView 中;
try
{
SqlDataReader reader = cdb.getReader();
this.listView.Items.Clear(); //清除listView 中所有的item while (reader.Read()) {
string[] subItems = new string[]{ reader.GetInt32(0).ToString(), reader.GetString(1), reader.GetString(2), reader.GetString(3)};
this.listView.Items.Add(new ListViewItem(subItems)); }
reader.Close(); }
catch (Exception ex) {
MessageBox.Show(ex.ToString()); } while (reader.Read()) {
每次读取一条记录都将记录中的每个字段的信息封装到string 类型的数组中:
string[] subItems = new string[]{ reader.GetInt32(0).ToString(), reader.GetString(1), reader.GetString(2), reader.GetString(3)
接下来将subItems 中的数据封装为listView 的一个节点(listViewItem )并添加到listView 中:
this.listView.Items.Add(new ListViewItem(subItems)); reader.Close();
至此显示联系人的功能就完成了,其他模块的代码编写与此类似,就不再重复。
五、 实验结果及结论。
(1)数据库中原有两个数据,分别为彭振东与张三的信息,我们选择修改联
系人,修改张三的名字为王麻子,电话为8890,, 联系地址为中国,可以看到listView 中张三的信息修改了,如下图所示:
(2)思考题:与二层C/S体系结构比较,三层(多层) 体系结构有什么特点?采用三层体系结构在设计时应该注意哪些问题? 答:三层体系结构的优点:
①允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性 ②允许更灵活有效地选用相应的平台和硬件系统
③三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最合适的开发语言。
④允许充分利用功能层有效地隔离层表示层与数据层。
⑤三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。
六、心得体会
本次实验很顺利,完成了要求。
实验三 B/S结构应用设计(1)
一、实验目的
设计并实现一个基于B/S结构的数据库应用,熟悉B/S体系结构及其基本处理流程,了解B/S结构系统各部分所完成的功能,掌握B/S结构的数据库应用设计方法。学生通过本实验的训练能够熟练掌握对小型数据库应用系统B/S结构设计及系统实现技术。
二、实验环境
MyEclips 10、Tomcat 、SQL Server 2010
三、实验内容
1、采用B/S结构实现个人通讯录系统。该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。联系人信息包括姓名、住址、电话。整个系统的功能图如下图所示:
分析系统需求,完成软件体系结构设计及模块划分、数据库设计,采用ASP.Net(使用C#语言) 实现系统功能
四、实验操作过程
在MyEclips 中新建项目:Structure_Contact。生成项目之后在src 下新建包org.action, 在org.action 包中建立action 类,包括:addAction 、deleteAction 、editAction 、mainAction 、modifyAction 、registerAction 类主要步骤如下:
(1)建立addAction 类继承ActionSupport 类,主要是同于添加用户,主要
代码如下:
public String execute() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest (); //mark HttpSession session = request.getSession(); userfriend = new UserFriend(); userfriendid = new UserFriendId();
}
}
name = request.getParameter("name"); address = request.getParameter("address"); phone = request.getParameter("phone"); user = (User)session.getAttribute("user"); userfriendid.setUser(user.getUsername()); userfriend.setId(userfriendid); userfriend.setName(name); userfriend.setAddress(address); userfriend.setPhone(phone);
if (userfrienddaoimp.insert(userfriend)){ } else { }
return "error";
session.setAttribute("al", al); return "success";
//account and password //account_name
//id auto-increase
(2)建立deleteAction 类继承ActionSupport 类用于删除用户,代码如下:
public class deleteAction extends ActionSupport{
private UserFriend userfriend; private String user; private int id;
private UserFriendId userfriendid;
private UserFriendDaoImp userfrienddaoimp;
public String execute() throws Exception{
userfriend = new UserFriend(); userfriendid = new UserFriendId();
userfrienddaoimp = new UserFriendDaoImp();
HttpServletRequest request = ServletActionContext.getRequest(); //mark HttpSession session = request.getSession(); //mark user = request.getParameter("username"); System.out.println(request.getParameter("id")); id = Integer.parseInt(request.getParameter("id")); userfriendid.setUser(user); userfriendid.setId(id);
userfriend.setId(userfriendid);
}
}
} else{ }
return "error";
ArrayList al = userfrienddaoimp.getAll(user); session.setAttribute("al", al); return "success";
(3)建立editAction 类继承ActionSupport 类,用于编辑用户,代码如下:
public class editAction extends ActionSupport{
private String user ; private int id; private String name; private String address; private String phone;
private UserFriend userfriend; private UserFriendId userfriendid;
private UserFriendDaoImp userfrienddaoimp; public String execute() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); userfriendid = new UserFriendId(); userfriend = new UserFriend();
userfrienddaoimp = new UserFriendDaoImp();
System.out.println(request.getParameter("username")); //null System.out.println(request.getParameter("id")); user = request.getParameter("username");
id = Integer.parseInt(request.getParameter("id")); name = request.getParameter("name"); address = request.getParameter("address"); phone = request.getParameter("phone"); userfriendid.setId(id); userfriendid.setUser(user); userfriend.setId(userfriendid); userfriend.setName(name); userfriend.setAddress(address); userfriend.setPhone(phone);
if(userfrienddaoimp.update(userfriend)){
ArrayList al = userfrienddaoimp.getAll(user); session.setAttribute("al", al);
//null
}
}
}
else{ }
return "error";
(4)建立org.model 包,在包中创建User 、UserFriend 和UserFriendId 类,创建User.hbm.xml 和UserFriend.hbm.xml 文档。
public class User implements java.io.Serializable { }
public class UserFriend implements java.io.Serializable {
private UserFriendId id; private String name; private String address; private String phone; public UserFriend() { }
public UserFriend(UserFriendId id) { }
this.id = id; private String username; private String password; public User() { }
public User(String username) { }
public User(String username, String password) { }
public String getUsername() { }
public void setUsername(String username) { }
public String getPassword() { }
public void setPassword(String password) { }
this.password = password; return this.password; this.username = username; return this.username; this.username = username; this.password = password; this.username = username;
}
public UserFriendId getId() { }
public void setId(UserFriendId id) {
return this.id; this.id = id; this.name = name; this.address = address; this.phone = phone;
}
}
this.id = id;
public String getName() { }
public void setName(String name) { }
public String getAddress() { }
public void setAddress(String address) { }
public String getPhone() { }
public void setPhone(String phone) { }
this.phone = phone; return this.phone; this.address = address; return this.address; this.name = name; return this.name;
public class UserFriendId implements java.io.Serializable {
private Integer id; private String user; public UserFriendId() { }
public UserFriendId(Integer id, String user) { }
public Integer getId() { }
public void setId(Integer id) {
return this.id; this.id = id; this.user = user;
}
}
public String getUser() { }
public void setUser(String user) { }
public boolean equals(Object other) { }
public int hashCode() { }
int result = 17;
result = 37 * result + (getId() == null ? 0 : this.getId().hashCode()); result = 37 * result
+ (getUser() == null ? 0 : this.getUser().hashCode());
if ((this == other))
return true; this.user = user; return this.user;
if ((other == null))
return false;
if (!(other instanceof UserFriendId))
return false;
UserFriendId castOther = (UserFriendId) other;
return ((this.getId() == castOther.getId()) || (this.getId() != null
&& castOther.getId() != null && this.getId().equals( castOther.getId())))
&& ((this.getUser() == castOther.getUser()) || (this.getUser() != null
&& castOther.getUser() != null && this.getUser() .equals(castOther.getUser())));
return result;
(5)User.hbm.xml ,用于数据库中的表User 和定义的属性相对应,代码如下:
(6)UserFriend.hbm.xml用于数据库中的表UserFriend 和定义的属性相对应,代码如下:
五、实验结果及结论
(1)用户登录界面显示:
(2)用户主界面:
(3)编辑界面:
(4)思考题:与C/S体系结构比较,B/S体系结构有什么优点?采用B/S与C/S混合体系结构在设计时应该注意哪些问题?
答:基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。用户在使用系统时,仅需要一个浏览器就可以运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开发性基础。
六、心得体会
本次实验学到了很多东西,对于要求的内容,也都得到很好的解决。
实验四 B/S结构应用设计(1)
一、实验目的
设计并实现一个基于B/S结构的数据库应用,熟悉B/S体系结构及其基本处理流程,了解B/S结构系统各部分所完成的功能,掌握B/S结构的数据库应用设计方法。学生通过本实验的训练能够熟练掌握对小型数据库应用系统B/S结构设计及系统实现技术。
二、实验环境
MyEclips 10、Tomcat 、SQL Server 2010
三、实验内容
1、采用B/S结构实现个人通讯录系统。该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。联系人信息包括姓名、住址、电话。整个系统的功能图如下图所示:
分析系统需求,完成软件体系结构设计及模块划分、数据库设计,采用ASP.Net(使用C#语言) 实现系统功能
四、实验操作过程
接着上次的项目中建立的Structure_Contact项目,生成项目之后在src 下新建包org.action, 在org.action 包中建立action 类,包括:addAction 、deleteAction 、editAction 、mainAction 、modifyAction 、registerAction 类主要步骤如下:
(1)建立mainServlet 继承ActionSupport 类:
public class mainAction extends ActionSupport{
private String account_name; private String password; private User user;
public String getAccount_name() {
// // }
}
public void setAccount_name(String account_name) { }
public String getPassword() { }
public void setPassword(String password) { }
public String execute() throws Exception{ }
user = new User();
HttpServletRequest request = ServletActionContext.getRequest(); //mark HttpSession session = request.getSession(); //mark account_name = request.getParameter("account_name"); password = request.getParameter("password"); user.setPassword(password); user.setUsername(account_name); UserDaoImp userDao = new UserDaoImp(); System.out.println(account_name); System.out.println(password);
UserFriendDaoImp ufdi = new UserFriendDaoImp(); ArrayList al = ufdi.getAll(account_name); session.setAttribute("al", al);
if(session.getAttribute("user")==null){ } else{ }
return "success";
if(userDao.Check(account_name, password)){ }
return "error";
session.setAttribute("user", user); return "success";
this.password = password; return password;
this.account_name = account_name;
(2)建立registerAction 继承ActionSupport 类:
public class registerAction extends ActionSupport{
private String username; private String password; private UserDaoImp userdaoimp;
public String execute() throws Exception{
}
}
username = request.getParameter("username"); password = request.getParameter("password"); userdaoimp = new UserDaoImp();
if(userdaoimp.addAccount(username, password)){ } else{ }
return "error"; return "success";
(3)建立org.Dao 包,包中创建UserDao 和UserFriendDao 类
(4)建立org.DaoImp 包,包中创建UserDaoImp 和UserFriendDaoImp 类 (5)在WebRoot 文件夹下建立add.jsp 、edit.jsp 、error.jsp 、login.jsp 、main.jsp 、register.jsp: 下面是main.jsp 代码:
phone_category welcome!
ArrayList list = (ArrayList)session.getAttribute("al"); Iterator iter = list.iterator(); while(iter.hasNext()){
UserFriend userfriend = (UserFriend)iter.next();
String temp_id = String.valueOf(userfriend.getId().getId()); //can't let int
to string in href ,so add the java code to complete it and then send.
}
name | address | phone |
"add.jsp">add |
---|---|---|---|
%> String temp_name = userfriend.getId().getUser(); etPhone() %> |
&id=">edit  "deleteAction.action?username=&id=">delete |
下面是login.jsp 代码:
register
if you don't have account ,please click here to register.
五、实验结果及结论
(1)添加界面:
(2)出错界面:
(3)register界面:
六、心得体会
本次实验学到了很多,完成了要求。
相关文章
- 8项目风险管理知识:风险评估报告
- 软件工程资料
- 软件开发实施方案
- [软件工程]选择题(2)
- 软件工程简单
- 软件体系结构期末试卷
- 各类软件及其用途文档
- 软件工程试题库
- 软件工程期末考试试题
- 20**年软件外包现状及发展趋势分析
项目风险管理知识:风险评估报告2008-07-01引言本文档的范围和目的 本文主要针对软件开发涉及到的风险,包括在软件开发周期过程中可能出现的风险以及软件实施过程中外部环境的变化可能引起的风险等进行评估.在文中对所提到的风险都一一做了详细的 ...
软件工程习题集答案 第一章 <软件工程概述>作业答案 一.名词解释 1. 软件 软件是计算机程序以及开发.使用和维护程序所需要的所有文档. 软件是包括程序.数据及其相关文档的完整集合. 2. 软件危机 软件生产的进度.数量.质量 ...
1 软件开发实施方案 系统开发严格按照软件工程的方法进行组织,系统的开发过程按照需求分析.系统分析与设计要求.系统编码.系统测试几个过程有序推进.下表所示系统开发流程图,采用原型及迭代方式开发,根据用户需求持续改进,直到最终用户确认满意. ...
51. 在面向数据流的软件设计方法中,一般将信息流分为( A )A. 变换流和事务流 B. 变换流和控制流C. 事务流和控制流 D. 数据流和控制流52. 程序的三种基本控制结构是( B ).A.过程. ...
第一章 绪论 1.软件产品的特性是什么?⑴软件是一种逻辑产品,看不见也摸不着,因而具有无形性.⑵软件产品的生产主要是研制,通过复制就产生大量的软件产品.⑶软件产品不会用坏,不存在磨损,消耗问题.⑷软件产品的生产还未完全摆脱手工开发方式,大部 ...
北京工业大学2008 – 2009学年 第二学期考试样题 考试课程: 软件体系结构 II 考试日期:2009 年 12 月 日 学 院: 软件学院 专 业: 软件工程 学 号: 姓名: 成绩: 一 填空题 (共 30 空, 每空 1 分) ...
三维分子类 RASMOL 2.7.2.1 观看生物分子3D 微观立体结构的软件.非常有名,巨棒! RasTop 2.0 为RasMol 2.7.1的图形用户界面软件 CHIME 2.6 SP3 直接在浏览器中观看3D 分子. MolMol ...
软件工程 一.选择题 1.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做 [ C ] A.软件工程 B.软件周期 C.软件危机 D.软件产生 2.研究开发所需要的成本和资源是属于可行性研究中的研究的一方面. [ B ] A ...
一,单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项 前的字母填在题后的横线上. 1.可行性研究要进行一次_____需求分析. A.详细的 B.全面的 C.简化的.压缩 ...
2015-2020年中国软件外包行业现状调研分 析与发展趋势预测报告 报告编号:15726A7 行业市场研究属于企业战略研究范畴,作为当前应用最为广泛的咨询服务,其研究成果以报告形式呈现,通常包含以下内容: 一份专业的行业研究报告,注重指导 ...