1.目的
image.png2.异常处理
2.1 常见异常
image.pngimage.png
2.2 异常处理使用
image.png-
自定义异常
image.png
3. 程序模块的封装
3.1 添加类库
-
问题:
两个程序员开发计算器,A开发其他的模块,B开发calculator类,开发互不影响 -
添加一个类库
image.png
image.png -
添加给CalDemo添加类库引用
image.png -
其他项目使用
复制这个dll就可以了
image.png
4. 用户登录
4.1管理员
- DLL层
SysAdminService.cs
namespace DAL
{
/// <summary>
/// 管理员数据访问类
/// </summary>
public class SysAdminService
{
/// <summary>
/// 根据登录账号和密码登录
/// </summary>
/// <param name="objAdmin">封装了登录账号和密码的管理员对象</param>
/// <returns>返回包含管理员信息的对象</returns>
public SysAdmin AdminLogin(SysAdmin objAdmin)
{
//组合SQL语句
string sql = "select AdminName from Admins where LoginId={0} and LoginPwd='{1}'";
sql = string.Format(sql, objAdmin.LoginId, objAdmin.LoginPwd);
//从数据库中查询
SqlDataReader objReader = SQLHelper.GetReader(sql);
if (objReader.Read())
{
objAdmin.AdminName = objReader["AdminName"].ToString();
}
else
{
objAdmin = null;//如果登录不成功,则将当前对象清空
}
objReader.Close();
//返回结果
return objAdmin;
}
}
}
注意:面向对象的思维就是,传进来的是对象,封装处理的也是对象,最后返回的也是对象,不管什么时候处理数据,都应该以对象为中心
- Models层
SysAdmin.cs
namespace Models
{
/// <summary>
/// 管理员实体类
/// </summary>
public class SysAdmin
{
public int LoginId { get; set; }
public string AdminName { get; set; }
public string LoginPwd { get; set; }
}
}
- 业务层
FrmUserLogin.cs
部分登录逻辑
//登录
private void btnLogin_Click(object sender, EventArgs e)
{
//【1】数据验证
if (this.txtLoginId.Text.Trim().Length == 0)
{
MessageBox.Show("请输入登录账号!", "登录提示");
this.txtLoginId.Focus();
return;
}
if (this.txtLoginPwd.Text.Trim().Length == 0)
{
MessageBox.Show("请输入登录密码!", "登录提示");
this.txtLoginPwd.Focus();
return;
}
//【2】封装对象(实际封装的是用户登录账号和密码)
SysAdmin objAdmin = new SysAdmin()
{
LoginId = Convert.ToInt32(this.txtLoginId.Text.Trim()),
LoginPwd = this.txtLoginPwd.Text.Trim()
};
//【3】和后台交互,判断登录信息是否正确
try
{
objAdmin = objAdminService.AdminLogin(objAdmin);
if (objAdmin != null)//如果登录成功
{
//保存登录信息
Program.objCurrentAdmin = objAdmin;
//设置登录窗体的返回值
this.DialogResult = DialogResult.OK;
//关闭窗体
this.Close();
}
else
{
MessageBox.Show("登录账号或密码有误!", "登录提示");
}
}
catch (Exception ex)
{
MessageBox.Show("数据访问出现异常,登录失败!具体原因:" + ex.Message);
}
}
//关闭
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
- 定义全局变量,保存用户对象
public static Models.SysAdmin objCurrentAdmin = null;
4.2 编写通用验证类
各种注册,表格的长度和字符限制;例如姓名不能超过8个字符
image.png
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace StudentManager.Common
{
/// <summary>
/// 通用验证类
/// </summary>
class DataValidate
{
/// <summary>
/// 验证正整数
/// </summary>
public static bool IsInteger(string txt)
{
Regex objReg = new Regex(@"^[1-9]\d*$");
return objReg.IsMatch(txt);
}
/// <summary>
/// 验证是否是Email
/// </summary>
public static bool IsEmail(string txt)
{
Regex objReg = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
return objReg.IsMatch(txt);
}
/// <summary>
/// 验证身份证
/// </summary>
public static bool IsIdentityCard(string txt)
{
Regex objReg = new Regex(@"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");
return objReg.IsMatch(txt);
}
//...其他正则表达式的验证,请学员自己根据所给正则表达式自己添加相应的方法
}
}
- 使用
if (!Common.DataValidate.lsldentityCard(this.txtStudentldNo.Text.Trim())
{
MessageBox.Show("身份证号不符合要求!”,"验证提示");
this.txtStudentldNo.Focus();
return;
}
5. 基于OOP实现功能
一般从底层开始往上层写
网友评论