04用户登录信息管理.docx
《04用户登录信息管理.docx》由会员分享,可在线阅读,更多相关《04用户登录信息管理.docx(16页珍藏版)》请在冰豆网上搜索。
04用户登录信息管理
青岛理工大学
课程实验报告
课程名称
软件设计与体系结构
班级
软件122
实验日期
2015.03.30
2015.04.13
姓名
贾蒙
学号
201207222
实验成绩
实验名称
用户登录信息管理
实验目的
及要求
熟悉三层架构
实验环境
Win7,VS2010
实验内容
1.建立一个解决方案
2.按三层架构模式添加工程
3.设定工程间的依赖关系
4.实现基本用户信息的管理操作:
增删改查
算法描述及实验步骤
1.选择文件-〉新建-〉项目
2.选择其它项目类型-〉VisualStudio解决方案
3.在解决方案所在的文件夹中创建以下文件夹:
Bin:
存放生成的可执行文件
Documents:
存放所用到的文档
Library:
存放用到的第三方控件
Setup:
存放用于安装的最终程序及其相关文件
UnitTest:
存放测试代码
4.准备以下文件放到相应的文件夹中:
在Library文件夹中建立SQLite文件夹,从SQLite的官方网站下载sqlite-netFx40-binary-Win32-2010-1.0.84.0.zip文件,解压缩后将其中的4个文件SQLite.Designer.dll、SQLite.Interop.dll、System.Data.SQLite.dll和System.Data.SQLite.Linq.dll拷贝到SQLite文件夹待用;
在Bin文件夹下面创建Database文件夹,并利用sqliteadmin在其中创建一个SQLite数据库文件MyFirstDB.s3db(或用代码创建),其中包含一个表:
表中admin密码为lcb,aaa密码为123,bbb密码为空
在Bin文件夹下面创建配置文件MyConfig.INI:
5.右键单击右图中的“解决方案MyFirstSolution(0个项目)”--〉添加--〉新建项目,建立如右图所示5个Project;
其中Common、DAL、Model和BLL项目类型为“类库”,UI的项目类型为“Windows应用程序”;
右键单击“MyFirstSolution.UI”设定UI为“启动项目”,该项目名称变为黑体显示。
6.添加引用(右键单击“引用”--〉“添加引用”):
BLL引用DAL和Model
DAL引用Common和Library文件夹中的3个dll文件:
SQLite.Designer.dll、System.Data.SQLite.dll和System.Data.SQLite.Linq.dll
Model引用Common和DAL
UI引用Common、BLL和Model,还必须将Library文件夹中的SQLite.Interop.dll文件复制到Bin文件夹中
添加引用的同时,项目间的依赖关系也就发生了变化,随之改变的是项目的编译顺序。
7.填写Common的代码:
修改Class1.cs的名称为CodeProcess.cs,并输入其代码
实现Base64的编码和解码功能
添加IniClass类
实现对INI文件的读写操作
添加MyConfig类
调用IniCalss类实现对配置文件MyConfig.INI的读写操作
8.填写DAL的代码
添加数据集UserDataSet,建立表Users,结构同SQLite数据库中的表Users
将类Class.cs改名为MyDbHelper.cs,并输入它的代码
实现数据库的操作:
连接,查询,修改
9.填写Model的代码:
修改类Class1.cs为User.cs,并填写其代码
实现利用DAL提供的功能从数据库中获取数据,并将需要保存的数据写入数据库(具体项目中,可以单个修改/保存,也应该可以批量修改/保存)
以属性的形式向上层提供数据
10.填写BLL的代码:
修改Class1.cs类为UserManager.cs类,并填写代码
实现对用户信息的管理:
获取数据,校验密码,修改密码
11.填写UI的内容:
添加Form的界面元素
添加Form_Load的代码
根据配置文件的内容设置界面元素
需要的话,实现自动登录功能
添加Button_Click点击事件的处理代码
检验登录帐号和密码
记录登录状态到配置文件中
调试过程及实验结果
总结
本次试验主要考察的是三层架构开发模式,即表示层、业务逻辑层、数据访问层。
通过本次试验对三层架构开发模式有了新的认识,不再是仅仅局限于课本上枯燥的知识,本次实验后有了更加生动的认识。
附
录
UI部分代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingMyFirstSolution.BLL;
usingMyFirstSolution.Common;
namespaceMyFirstSolution.UI
{
publicpartialclassForm1:
Form
{
privateStringcount=null;
privateStringpass=null;
privateintautoLogin=1;
//ini文?
件t路·径?
Stringfile=".\\MyConfig.ini";
MyConfigopIni;
publicForm1()
{
InitializeComponent();
}
privatevoidlogin_Click(objectsender,EventArgse)
{
this.count=this.counter.Text.ToString();
this.pass=this.password.Text.ToString();
if(this.auto.Checked)
{
opIni=newMyConfig(this.file);
opIni.setLoginName(this.count);
opIni.setLoginPassWord(this.pass);
opIni.setAutoLogin
(1);
}
else
{
opIni=newMyConfig(this.file);
opIni.setLoginName("");
opIni.setLoginPassWord("");
opIni.setAutoLogin(0);
}
UserManagerum=newUserManager(this.count);
if(um.checkPass(this.pass))
{
MessageBox.Show("登?
录?
成é功|");
}
else{
MessageBox.Show("登?
录?
失骸?
败悒?
);
}
}
privatevoidForm1_Load(objectsender,EventArgse)
{
opIni=newMyConfig(this.file);
this.count=opIni.getLoginName();
this.pass=opIni.getLoginPassword();
this.autoLogin=opIni.getAutoLogin();
//this.autoLogin=opIni.get
if(this.autoLogin==1)
{
this.auto.Checked=true;
this.counter.Text=this.count;
this.password.Text=this.pass;
UserManagerum=newUserManager(this.count);
if(um.checkPass(this.pass))
{
MessageBox.Show("登?
录?
成é功|");
}
else
{
MessageBox.Show("登?
录?
失骸?
败悒?
);
}
}
elseif(this.autoLogin==0)
{
this.auto.Checked=false;
}
}
}
}
BLL部分代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingMyFirstSolution.Model;
namespaceMyFirstSolution.BLL
{
publicclassUserManager
{
Useruse;
Stringname;
publicUserManager(Stringname)
{
this.name=name;
}
publicBooleancheckPass(Stringpass){
use=newUser(name);
if(pass==use.getPass())
returntrue;
else
returnfalse;
}
}
}
Modelde的代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingMyFirstSolution.DAL;
namespaceMyFirstSolution.Model
{
publicclassUser
{
MyDbHelpermd;
Stringcount;
publicUser(stringcount)
{
this.count=count;
}
publicStringgetPass()
{
md=newMyDbHelper();
returnmd.getPassword(count);
}
}
}
DAL的代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data.SQLite;
usingSystem.Data;
usingMyFirstSolution.Common;
namespaceMyFirstSolution.DAL
{
publicclassMyDbHelper
{
publicSQLiteConnectionGetCon()
{
stringstrFilePath="DataSource=C:
\\Users\\CODER\\Desktop\\TestSolution\\bin\\Database\\MyFirstDB.s3db";
SQLiteConnectionsqliteCon=newSQLiteConnection(strFilePath);
returnsqliteCon;
}
publicStringgetPassword(Stringname)
{
Stringpass;
SQLiteConnectioncon=GetCon();
con.Open();
Stringsqlstr="selectPasswordfromuserInfowhereAccount='"+name+"'";
SQLiteCommandcmd=con.CreateCommand();
cmd.CommandText=sqlstr;
SQLiteDataReaderreader=cmd.ExecuteReader();
reader.Read();
pass=reader[0].ToString();
returnpass;
}
}
}
Common的代码
1.base64编码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceMyFirstSolution.Common
{
publicclassCodeProcess
{
publicstringEncodeBase64(stringcode)
{
byte[]bytes=Encoding.Default.GetBytes(code);
stringstr=Convert.ToBase64String(bytes);
returnstr;
}
publicstringDecodeBase64(stringcode)
{
byte[]outputb=Convert.FromBase64String(code);
stringorgStr=Encoding.Default.GetString(outputb);
returnorgStr;
}
}
}
2.读取ini文件
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Runtime.InteropServices;
namespaceMyFirstSolution.Common
{
classIniClass
{
privatestringfileName;
[DllImport("kernel32")]
privatestaticexternintGetPrivateProfileInt(
stringlpAppName,stringlpKeyName,intnDefault,stringlpFileName
);
[DllImport("kernel32")]
privatestaticexternintGetPrivateProfileString(
stringlpAppName,stringlpKeyName,stringlpDefault,
StringBuilderlpReturnedString,intnSize,stringlpFileName
);
[DllImport("kernel32")]
privatestaticexternboolWritePrivateProfileString(
stringlpAppName,stringlpKeyName,stringlpString,stringlpFileName
);
publicvoidIniFile(stringfilename)
{
fileName=filename;
}
publicintGetInt(stringsection,stringkey,intdef)
{
returnGetPrivateProfileInt(section,key,def,fileName);
}
publicstringGetString(stringsection,stringkey,stringdef)
{
StringBuildertemp=newStringBuilder(1024);
GetPrivateProfileString(section,key,def,temp,1024,fileName);
returntemp.ToString();
}
publicvoidWriteInt(stringsection,stringkey,intiVal)
{
WritePrivateProfileString(section,key,iVal.ToString(),fileName);
}
publicvoidWriteString(stringsection,stringkey,stringstrVal)
{
WritePrivateProfileString(section,key,strVal,fileName);
}
publicvoidDelKey(stringsection,stringkey)
{
WritePrivateProfileString(section,key,null,fileName);
}
publicvoidDelSection(stringsection)
{
WritePrivateProfileString(section,null,null,fileName);
}
}
}
3.操作INI文件
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceMyFirstSolution.Common
{
publicclassMyConfig
{
Stringfilename;
StringloginName;
StringloginPassword;
intautologin;
StringConnectString;
CodeProcesscp=newCodeProcess();
publicMyConfig(Stringfilename)
{
this.filename=filename;
}
publicstringgetLoginName()
{
IniClassini=newIniClass();
ini.IniFile(filename);
this.loginName=ini.GetString("Login","LoginName","没?
找ò到?
");
returnloginName;
}
publicstringgetLoginPassword()
{
IniClassini=newIniClass();
ini.IniFile(filename);
this.loginPassword=ini.GetString("Login","LoginPassword","没?
找ò到?
");
returncp.DecodeBase64(loginPassword);
//returnloginPassword;
}
publicintgetAutoLogin()
{
IniClassini=newIniClass();
ini.IniFile(filename);
this.autologin=ini.GetInt("Login","AutoLogin",1);
returnautologin;
}
publicstringgetConnectString()
{
IniClassini=newIniClass();
ini.IniFile(filename);
this.ConnectString=ini.GetString("Database","ConnectString","");
returnConnectString;
}
publicvoidsetLoginName(Stringname)
{
IniClassini=newIniClass();
ini.IniFile(filename);
ini.WriteString("Login","LoginName",name);
}
publicvoidsetLoginPassWord(Stringpass)
{
IniClassini=newIniClass();
ini.IniFile(filename);
StringenPass=cp.EncodeBase64(pass);
ini.WriteString("Login","LoginPassword",enPass);
}
publicvoidsetAutoLogin(intautologin)
{
IniClassini=newIniClass();
ini.IniFile(filename);
ini.WriteInt("Login","AutoLogin",autologin);
}
}
}