C#系统开发案例(windows应用程序)一、生成项目模版二、项目属性设定三、主窗体属性设定增加菜单给菜单项编程增加窗体登录窗体设计“密码”文本属性设置项目启动顺序登录系统总控窗体调用方法•在主窗口的构造法中,调用登录窗口publicFrm_Main(){InitializeComponent();//优先加载登录窗体,实现基本权限的控制//1.创建一个窗体对象Frm_Loginflogin=newFrm_Login();//其中的Frm_Login是一个建立好的登录窗体模版。flogin为该类窗体的实例。flogin.ShowDialog();//将一个窗体对象显示出来。成为“活动”窗体。}登录实现细节•1.控件属性设定完善登录功能•1.设置登录次数控制•counter=counter+1;•if(counter=3)•{•MessageBox.Show(this,登录次数已经达到3,系统自动关闭!,系统提示,MessageBoxButtons.OK,MessageBoxIcon.Question);•Application.Exit();•return;•}完善登录功能•2.用户名、密码大小写忽略功能。•if((this.textBox_userName.Text==“abc”)&&(this.textBox_PassWord.Text==“123”))•修改为:•if((this.textBox_userName.Text.ToLower()==abc)•增加自动转换为小写字串功能。完善登录功能•2.从数据库,提取用户名、密码比对判定。•主要步骤:•增加名字空间:usingSystem.Data.SqlClient;–连接–发送查询–提取记录,比对–关闭连接•(select*fromt_userwhereFuserName='+this.textBox_userName.Text.ToLower()+');数据库访问核心代码分析•//方法2.从数据库,提取用户表记录,判定登录合法性。•SqlConnectionmyconn=null;•Stringconstr=DataSource=127.0.0.1;InitialCatalog=lib_SYS;PersistSecurityInfo=True;UserID=sa;PWD=sa;•myconn=newSqlConnection(constr);•myconn.Open();//如果没有意外发生,该数据库将被联系到本程序。•//建立一个访问数据库的查询命令数据库访问核心代码分析•//建立一个访问数据库的查询命令•SqlCommandcomm=newSqlCommand(select*fromt_user•whereFuserName='+this.textBox_userName.Text.ToLower()+',myconn);•SqlDataReaderdr=comm.ExecuteReader();••//实际查询到哪些记录数据表中实例登录功能完善•采用登录名,使用数据,字母组合,便于输入,(一般不要采用中文用户名,输入麻烦)•进一步完善,用户名“记忆”式登录登录功能完善privatevoidFrm_Login_Load(objectsender,EventArgse){//本方法是在窗体调用时,自动执行/*这里,我们增加一个对用户名列表,自动按系统数据库中的用户信息,填入该控件中。**不用用户手工输入,同时,可以避免输入不存在的用户名*该策略适用于用户数量不大的系统*/}设定登录窗体屏幕居中从存在的文本中读上次用户名//假定读入了一个用户记忆名1.StreamReaderdin=File.OpenText(tmp.txt);2.StringUSERNAME=din.ReadLine();3.this.comb_UserName.Text=USERNAME;4.din.Close();写入用户名//将当前这一次成功的登录名,存入临时文本文件中,以便下一次登录时,自动填入用户名称控件中。1.StreamWriterdout=newStreamWriter(tmp.txt);2.StringUSERNAME=this.comb_UserName.Text;3.dout.WriteLine(USERNAME);4.dout.Close();//在关闭时,写磁盘数据库访问核心代码分析•//实际查询到哪些记录•if(!dr.HasRows)•{•MessageBox.Show(this,用户名不存在,重新输入,系统提示,MessageBoxButtons.OK,MessageBoxIcon.Question);•this.textBox_userName.Clear();•this.textBox_userName.Focus();•return;数据库访问核心代码分析••else•{•Class_Global.login_Status=true;•myconn.Close();•this.Close();//关闭当前窗口•}总结登录模块•窗体居屏幕中央;•密码字符返显为*•登录次数控制(3次以内)•用户名自动初始化到下拉列表中•成功登录名自动记忆(临时文本存储)窗体布局设计•解决窗体总体布局•采用分层面板(模版)套用的方式•面板的停靠(DOCK)属性DOCK对话框