软件体系结构 个人通讯录管理系统要点.docx
《软件体系结构 个人通讯录管理系统要点.docx》由会员分享,可在线阅读,更多相关《软件体系结构 个人通讯录管理系统要点.docx(31页珍藏版)》请在冰豆网上搜索。
![软件体系结构 个人通讯录管理系统要点.docx](https://file1.bdocx.com/fileroot1/2023-2/28/14c171f7-1dc2-4add-86db-f3de15bab81d/14c171f7-1dc2-4add-86db-f3de15bab81d1.gif)
软件体系结构个人通讯录管理系统要点
课程实验报告
软件系统结构
专业
软件工程
学生姓名
张伯虎
班级
B软件121
学号
1210701128
指导老师
孙莉
实验一C/S结构应用设计
一、实验目的
设计并实现一个基于多层C/S结构的数据库应用,熟悉多层C/S体系结构及其基本处理流程,了解多层结构表现层、业务逻辑层(功能层)、数据访问层所完成的功能,掌握多层C/S结构的数据库应用设计方法,对这三层进行明确分割,并在逻辑上使其独立。
学生通过本实验的训练能够熟练掌握对小型数据库应用系统三层结构层次划分方法及系统实现技术。
二、实验原理
1、C/S软件体系结构是基于资源不对等,且为实现共享而提出来的,是20世纪90年代成熟起来的技术,C/S体系结构定义了工作站如何与服务器相连,以实现数据和应用分布到多个处理机上。
2、C/S体系结构有三个主要组成部分:
数据库服务器、客户应用程序和网络。
(1)二层客户/服务器风格
(2)三层客户/服务器风格
三、主要仪器及耗材
每人一台计算机
四、实验步骤及内容
需要实际设计开发出一个简单的基于二层C/S结构的应用系统——个人通讯录管理系统,主要步骤和内容如下:
1、在SQLServer2000中建立数据库Contact,建立表friend。
建立数据库Contact:
createdatabaseContact
usecontact
go
建立表friend:
Createtablefriend(
Fidintidentity(1,1)notnull,--编号信息
Fnamevarchar(8)notnull,--姓名信息
Fphonevarchar(12),--电话信息
Faddressvarchar(100)–地址信息
)
go
2、在VisualStudio2000中用C#语言建立用户界面层(UI)程序:
Contact项目,主要呈现用户操作界面。
3、运行程序查看结果。
添加联系人信息:
五、实验注意事项
1.C#区分大小写,编写程序时一定要注意。
2.程序要注意保存,并记住保存的位置
3.本实验为综合性实验,需要多次才能完成,前面的阶段性实验成果后续需要使用,在下课离开机房时务必将数据库、项目程序等备份到移动存储设备带走。
六、讨论、思考题
1、画出二层C/S结构简图,并列举优缺点。
Contact项目
数据存储层
应用程序
Contact数据库
二层C/S结构的优点:
开发比较容易,操作简单,容易理解
二层C/S结构的缺点:
应用程序升级和维护困难,可扩展性差
2、简述本实验中开发二层C/S结构应用系统的技术线路。
业务逻辑层设计
完成界面设计、功能设计(对数据库的增删改查)
数据层设计
创建数据库,数据据表,以及数据的存储、查询与返回
3、画图表示二层C/S结构三种可能的物理部署方式。
服务器2
数据层
服务器1
数据层
客户机
功能层
功能层
数据层
功能层
4、写出本实验中业务逻辑层的主要功能及实现代码。
业务逻辑层的主要功能是:
查看联系人信息,添加联系人信息,修改联系人信息,删除联系人信息。
1.查看联系人信息主要代码:
stringsql="selectFid,Fname,Fphone,Faddressfromt_friend";
SqlConnectionconn=newSqlConnection(connstr);
conn.Open();
SqlCommandcomm=newSqlCommand(sql,conn);
SqlDataReaderdr=comm.ExecuteReader(CommandBehavior.CloseConnection);
try{
list_allFriend.Items.Clear();
while(dr.Read()){
this.list_allFriend.Items.Add(
newListViewItem(newstring[]{dr.GetInt32(0).ToString(),
dr.GetString
(1),
dr.GetString
(2),
dr.GetString(3)}));
}
}catch(Exceptione){
MessageBox.Show(e.ToString());
}finally{
dr.Close();
}
2.添加联系人信息:
stringsql="insertintot_friendvalues('"+tb_name.Text+"','"+tb_phone.Text+"','"+tb_adress.Text+"')";
SqlConnectionconn=newSqlConnection(connstr);
conn.Open();
SqlCommandcomm=newSqlCommand(sql,conn);
intlineNum=comm.ExecuteNonQuery();
conn.Close();
3.修改联系人信息:
stringsql="updatet_friendsetFname='"+tb_name.Text+"',Fphone='"+tb_phone.Text+"',Faddress='"+tb_adress.Text+"'whereFid='"+lineNumFlag+"'";
SqlConnectionconn=newSqlConnection(connstr);
conn.Open();
SqlCommandcomm=newSqlCommand(sql,conn);
intlineNum=comm.ExecuteNonQuery();
conn.Close();
4.删除联系人信息:
stringsql="deletefromt_friendwhereFid='"+lineNumFlag+"'";
SqlConnectionconn=newSqlConnection(connstr);
conn.Open();
SqlCommandcomm=newSqlCommand(sql,conn);
intlineNum=comm.ExecuteNonQuery();
conn.Close();
七、实验体会
在这次实验中,主要是C/S二层结构的设计和项目代码撰写,对于C/S二层结构的设计还是比较简单的,主要是在代码撰写时遇到一些问题,主要是数据库连接这一块,我在SQLEXPRESS服务中新建数据库和用户,一直无法用该用户名登陆数据库,后来发现是SQLEXPRESS服务有问题,我把数据库的服务改成了MSSQLSERVER问题解决。
在这次实验中我明白了C/S的含义以及C/S二层结构的设计和代码的撰写。
在代码撰写的过程中,我明白了C/S二层架构的优点:
代码撰写简单,容易理解,但我也了解到了C/S二层架构的缺点:
就是代码的冗余度高,回过头看结构不是得有条理,调试改错时有点难度,后期程序的升级和维护比较困难,程序的可扩展性比较差。
实验二C/S结构应用设计
一、实验目的
设计并实现一个基于多层C/S结构的数据库应用,熟悉多层C/S体系结构及其基本处理流程,了解多层结构表现层、业务逻辑层(功能层)、数据访问层所完成的功能,掌握多层C/S结构的数据库应用设计方法,对这三层进行明确分割,并在逻辑上使其独立。
学生通过本实验的训练能够熟练掌握对小型数据库应用系统三层结构层次划分方法及系统实现技术。
二、实验原理
1、C/S软件体系结构是基于资源不对等,且为实现共享而提出来的,是20世纪90年代成熟起来的技术,C/S体系结构定义了工作站如何与服务器相连,以实现数据和应用分布到多个处理机上。
2、C/S体系结构有三个主要组成部分:
数据库服务器、客户应用程序和网络。
三、主要仪器及耗材
每人一台计算机
四、实验步骤及内容
需要实际设计开发出一个简单的基于多层C/S结构的应用系统——个人通讯录管理系统,主要步骤和内容如下:
1、在SQLServer2000中建立数据库Contact,建立表friend。
建立数据库Contact:
createdatabaseContact
usecontact
go
建立表friend:
Createtablefriend(
Fidintidentity(1,1)notnull,--编号信息
Fnamevarchar(8)notnull,--姓名信息
Fphonevarchar(12),--电话信息
Faddressvarchar(100)–地址信息
)
Go
2、在VisualStudio2000中用C#语言建立用户界面层(UI)程序:
Contact项目,主要呈现用户操作界面。
3、运行程序查看结果。
添加联系人信息:
五、实验注意事项
1.C#区分大小写,编写程序时一定要注意。
2.程序要注意保存,并记住保存的位置
3.本实验为综合性实验,需要多次才能完成,前面的阶段性实验成果后续需要使用,在下课离开机房时务必将数据库、项目程序等备份到移动存储设备带走。
六、讨论、思考题
1、画出三层C/S结构简图,并列举优缺点。
应用表现层
业务逻辑层
数据存储层
Contact项目
ContactDB.cs
Contact数据库
三层C/S优点:
1.允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能提高系统和软件的可维护性和可扩展性。
2.允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。
3.三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最适合的开发语言。
4.允许充分利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,这就为一剪梅的安全管理奠定了坚实的基础;整个系统的管理层次也更加合理和可控制。
三层C/S缺点:
使用C/S三层架构需要把功能层分出来,这会可能会对执行效率有所影响;也有可能会造成一些存储空间的消耗比较大。
2、简述本实验中开发三层C/S结构应用系统的技术线路。
表示层
显示功能界面,以及调用功能函数
功能层
完成功能处理,及向数据库增删改查
数据层
创建数据库,数据据表,以及数据的存储、查询与返回
3、画图表示三层C/S结构三种可能的物理部署方式。
服务器2
数据层
服务器1
数据层
功能层
功能层
数据层
客户机
表示层
表示层
功能层
表示层
4、写出本实验中业务逻辑层的主要功能及实现代码。
//修改联系人
publicboolUpdateFriend(stringname,stringphone,stringaddress,intlineNumFlag){
stringsql="updatet_friendsetFname='"+name+"',Fphone='"+phone+"',Faddress='"+address+"'whereFid='"+lineNumFlag+"'";
BuildConnection(sql);
intlineNum=comm.ExecuteNonQuery();
CloseConnection();
if(lineNum==1){
returntrue;
}else{
returnfalse;
}
}
七、实验体会
在此次实验中,我学会了软件开发时使用C/S三层架构,我在C/S三层架构与二层架构实验对比中我了解到了C/S三层架构的优点。
使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能提高系统和软件的可维护性和可扩展性;使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性;应用的各层可以并行开发,各层也可以选择各自最适合的开发语言;允许充分利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段非法地访问数据层,这就为一剪梅的安全管理奠定了坚实的基础;整个系统的管理层次也更加合理和可控制。
基于以上优点,三层架构对与二层架构而言,完全可以取而代之,而且使用三层架构可以使你的程序代码的条理更加的清晰,增强可读性。
实验三B/S结构应用设计
一、实验目的
设计并实现一个基于B/S结构的数据库应用,熟悉B/S体系结构及其基本处理流程,了解B/S结构系统各部分所完成的功能,掌握B/S结构的数据库应用设计方法。
学生通过本实验的训练能够熟练掌握对小型数据库应用系统B/S结构设计及系统实现技术。
二、实验原理
1、浏览器/服务器(B/S)风格就是上述三层应用结构的一种实现方式,其具体结构为:
浏览器/Web服务器/数据库服务器。
2、B/S体系结构主要是利用不断成熟的WWW浏览器技术,结合浏览器的多种脚本语言,用通用浏览器就实现了原来需要复杂的专用软件才能实现的强大功能,并节约了开发成本。
从某种程度上来说,B/S结构是一种全新的软件体系结构。
三、主要仪器及耗材
每人一台计算机,配备
四、实验内容及步骤
1、采用B/S结构实现个人通讯录系统。
该系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。
联系人信息包括姓名、住址、电话。
整个系统的功能图如下图所示:
在MyEclips中新建项目:
Structure_Contact。
生成项目之后在src下新建包org.action,在org.action包中建立action类,包括:
addAction、deleteAction、editAction、mainAction、modifyAction、registerAction类主要步骤如下:
(1)建立addAction类继承ActionSupport类,主要是同于添加用户,主要代码如下:
publicStringexecute()throwsException{
HttpServletRequestrequest=ServletActionContext.getRequest();//mark
HttpSessionsession=request.getSession();
userfriend=newUserFriend();
userfriendid=newUserFriendId();
userfrienddaoimp=newUserFriendDaoImp();
name=request.getParameter("name");
address=request.getParameter("address");
phone=request.getParameter("phone");
user=(User)session.getAttribute("user");//accountandpassword
userfriendid.setUser(user.getUsername());//account_name
userfriend.setId(userfriendid);//idauto-increase
userfriend.setName(name);
userfriend.setAddress(address);
userfriend.setPhone(phone);
if(userfrienddaoimp.insert(userfriend)){
ArrayListal=userfrienddaoimp.getAll(user.getUsername());
session.setAttribute("al",al);
return"success";
}
else{
return"error";
}
}
}
(2)建立deleteAction类继承ActionSupport类用于删除用户,代码如下:
publicclassdeleteActionextendsActionSupport{
privateUserFrienduserfriend;
privateStringuser;
privateintid;
privateUserFriendIduserfriendid;
privateUserFriendDaoImpuserfrienddaoimp;
publicStringexecute()throwsException{
userfriend=newUserFriend();
userfriendid=newUserFriendId();
userfrienddaoimp=newUserFriendDaoImp();
HttpServletRequestrequest=ServletActionContext.getRequest();//mark
HttpSessionsession=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);
if(userfrienddaoimp.delete(userfriend)){
ArrayListal=userfrienddaoimp.getAll(user);
session.setAttribute("al",al);
return"success";
}
else{
return"error";
}
}
}
(3)建立editAction类继承ActionSupport类,用于编辑用户,代码如下:
publicclasseditActionextendsActionSupport{
privateStringuser;
privateintid;
privateStringname;
privateStringaddress;
privateStringphone;
privateUserFrienduserfriend;
privateUserFriendIduserfriendid;
privateUserFriendDaoImpuserfrienddaoimp;
publicStringexecute()throwsException{
HttpServletRequestrequest=ServletActionContext.getRequest();
HttpSessionsession=request.getSession();
userfriendid=newUserFriendId();
userfriend=newUserFriend();
userfrienddaoimp=newUserFriendDaoImp();
System.out.println(request.getParameter("username"));//null
System.out.println(request.getParameter("id"));//null
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)){
ArrayListal=userfrienddaoimp.getAll(user);
session.setAttribute("al",al);
return"success";
}
else{
return"error";
}
}
}
(4)建立org.model包,在包中创建User、UserFriend和UserFriendId类,创建User.hbm.xml和UserFriend.hbm.xml文档。
publicclassUserimplementsjava.io.Serializable{
privateStringusername;
privateStringpassword;
publicUser(){
}
publicUser(Stringusername){
this.username=username;
}
publicUser(Stringusername,Stringpassword){
this.username=username;
this.password=password;
}
publicStringgetUsername(){
returnthis.username;
}
publicvoidsetUsername(Stringuserna