实验9: 三层架构系统开发
一、实验名称和性质
所属课程 | C#数据库系统设计 |
实验名称 | 三层结构系统开发 |
实验学时 | 2 |
实验性质 | □验证 ✓□综合 □设计 |
必做/选做 | ✓□必做 □选做 |
二、实验目的
1. 了解三层架构系统开发。
2. 了解UI、BLL、DAL之间的依赖关系。
3. 了解三层之间的数据传递。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows XP下的SQL Server 2005(或 SQL Server 2008)
四、知识准备
1. 三层架构(3-tier architecture)就是将整个业务应用划分为:表现层(Presentation layer)、业务逻辑层(Application layer)、数据访问层(Data access layer)。
2. 三层架构中三层之间的依赖关系:用户界面层→业务逻辑层→数据访问层。
3. 三层结构的搭建:
(1)建立用户界面项目(UI):新建项目→Windows窗体应用程序(解决方案是:创建新解决方案);
(2)建立业务逻辑项目(BLL):新建项目→类库(解决方案是:添入解决方案);
(3)建立数据访问项目(DAL):新建项目→类库(解决方案是:添入解决方案);
(4)建立实体模型项目(Models):新建项目→类库(解决方案是:添入解决方案);
(5)添加各层之间的依赖关系(添加引用):
UI引用BLL和Models,BLL引用DAL和Models,DAL引用Models.
五、实验内容
(一)验证性试验
1.搭建三层架构
(1)建立用户界面项目(UI):新建项目→Windows窗体应用程序(解决方案是:创建新解决方案);
(2)建立业务逻辑项目(BLL):新建项目→类库(解决方案是:添入解决方案);
(3)建立数据访问项目(DAL):新建项目→类库(解决方案是:添入解决方案);
(4)建立实体模型项目(Models):新建项目→类库(解决方案是:添入解决方案);
(5)添加各层之间的依赖关系(添加引用):
UI引用BLL和Models,BLL引用DAL和Models,DAL引用Models.
2. 在Models项目中添加类UserInfo
public class UserInfo
{
publicUserInfo()
{}
#region Model
private string_userid;
private string_userpwd;
/// <summary>
///
/// </summary>
public string userID
{
set{ _userid=value;}
get{return _userid;}
}
/// <summary>
///
/// </summary>
public string userPWD
{
set{ _userpwd=value;}
get{return _userpwd;}
}
/// <summary>
///
/// </summary>
#endregion Model
}
3. 在DAL项目中添加类UserInfoDAL
using Models;
public class UserInfoDAL
{
public UserInfoDAL()
{
}
public bool Exists(string userID,string userPWD)
{
string sqlStr="select userID from userInfo where userID=@userID and userPWD=@userPWD";
string connStr = "server=.;database=student;integrated security=true";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(sqlStr, conn);
cmd.Parameters.Add("@userID", System.Data.SqlDbType.VarChar, 10);
cmd.Parameters["@userID"].Value = userID;
cmd.Parameters.Add("@userPWD", System.Data.SqlDbType.VarChar, 10);
cmd.Parameters["@userPWD"].Value = userPWD;
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.Read())
{
return true;
}
else
{
return false;
}
}
}
4. 在BLL项目中添加类UserInfoBLL
using DAL;
using Models;
public class UserInfoBLL
{
public UserInfoBLL()
{
}
UserInfoDAL dal = new UserInfoDAL();
public bool Exists(string userID,string userPWD)
{
return dal.Exists(userID,userPWD);
}
}
5. 将用户界面项目UI中窗体设计如下:
控件及属性
控件 | 属性 | 属性值 |
文本框1 | Name | txtUserID |
文本框2 | Name | txtUserPWD |
PassWordChar | * | |
标签1 | Text | 账号: |
标签2 | Text | 密码: |
命令按钮1 | Name | btnLogin |
Text | 登录 | |
命令按钮2 | Name | btnCancel |
Text | 取消 |
using BLL;
using Models ;
……….
UserInfoBLL userBLL = new UserInfoBLL();
private void btnLogin_Click(object sender, EventArgse)
{
UserInfo theUser;
stringuserID,userPWD;
userID = txtUserID.Text;
userPWD = txtUserPWD.Text;
if(userBLL.Exists(userID, userPWD))
{
MessageBox.Show("valid user");
}
else
{
MessageBox.Show("invalid user,ID or Password is wrong!");
}
}
6.从菜单“项目”选择UI属性,在项目属性窗口的启动对象选择“UI.Program”。
7.在UserInfoDAL中添加方法Insert();
public int Insert(UserInfotheUser)
{
stringsqlStr = "insert into userInfo(userID,userPWD) values(@userID ,@userPWD)";
stringconnStr = "server=.;database=student;integrated security=true";
SqlConnectionconn = new SqlConnection(connStr);
SqlCommandcmd = new SqlCommand(sqlStr, conn);
cmd.Parameters.Add("@userID", System.Data.SqlDbType.VarChar, 10);
cmd.Parameters["@userID"].Value = theUser .userID ;
cmd.Parameters.Add("@userPWD", System.Data.SqlDbType.VarChar, 10);
cmd.Parameters["@userPWD"].Value = theUser .userPWD ;
conn.Open();
intrecNum=cmd.ExecuteNonQuery();
conn.Close();
returnrecNum;
}
8.在UserInfoBLL中添加方法Insert();
public int Insert(UserInfotheUser)
{
returndal.Insert(theUser);
}
9. 在项目加入窗体UserInfoDetails,窗体界面如下
控件及属性
控件 | 属性 | 属性值 |
文本框1 | Name | txtUserID |
文本框2 | Name | txtUserPWD |
PassWordChar | * | |
文本框2 | Name | txtRepeatPWD |
PassWordChar | * | |
命令按钮1 | Name | btnAdd |
Text | Add | |
命令按钮2 | Name | btnUpdate |
Text | Update |
private void btnAdd_Click(object sender, EventArgs e)
{
if(txtUserID.Text == "")
{
MessageBox.Show("账号不能为空!");
}
else
{
if(txtUserPWD.Text != txtRepeatPWD.Text)
{
MessageBox.Show("2次输入的密码不一致!");
}
else
{
UserInfotheUser = new UserInfo();
theUser.userID = txtUserID.Text;
theUser.userPWD = txtUserPWD.Text;
UserInfoBLLuserInfoBLL = new UserInfoBLL();
inti = userInfoBLL.Insert(theUser);
if(i >= 0)
{
MessageBox.Show("记录已经插入!");
}
}
}
}
10.将用户界面项目UI中窗体Form1中的btnLogin_Click()事件中的
private void btnLogin_Click(object sender, EventArgse)
{
UserInfo theUser;
stringuserID,userPWD;
userID = txtUserID.Text;
userPWD = txtUserPWD.Text;
if(userBLL.Exists(userID, userPWD))
{
UserInfoDetails frm=new UserInfoDetails();
frm.Show();
}
else
{
MessageBox.Show("invalid user,ID or Password is wrong!");
}
}
(二)设计性试验
1. 在验证性实验建立的三层架构编程完成用户信息表UserInfo的修改和删除操作。
2. 在验证性实验建立的三层架构编程完成学生信息表s的插入、修改和删除操作。