1青岛理工大学课程实验报告课程名称软件设计与体系结构班级软件122实验日期2015.03.302015.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和ModelDAL引用Common和Library文件夹中的3个dll文件:SQLite.Designer.dll、System.Data.SQLite.dll和System.Data.SQLite.Linq.dllModel引用Common和DAL2UI引用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点击事件的处理代码检验登录帐号和密码记录登录状态到配置文件中3调试过程及实验结果总结本次试验主要考察的是三层架构开发模式,即表示层、业务逻辑层、数据访问层。通过本次试验对三层架构开发模式有了新的认识,不再是仅仅局限于课本上枯燥的知识,本次实验后有了更加生动的认识。附录UI部分代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingMyFirstSolution.BLL;usingMyFirstSolution.Common;4namespaceMyFirstSolution.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(登?录?失骸?败悒?);}5}privatevoidForm1_Load(objectsender,EventArgse){opIni=newMyConfig(this.file);this.count=opIni.getLoginName();this.pass=opIni.getLoginPassword();this.autoLogin=opIni.getAutoLogin();//this.autoLogin=opIni.getif(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{publicclassUserManager6{Useruse;Stringname;publicUserManager(Stringname){this.name=name;}publicBooleancheckPass(Stringpass){use=newUser(name);if(pass==use.getPass())returntrue;elsereturnfalse;}}}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);}}}7DAL的代码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;}}8}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);returnorgSt