C#简易电影记录管理系统:开发七[用户分类]

本期概述

在绝大部分数据管理系统中,管理员和普通用户这2类用户通常是必不可少的,当然还有更细的分类.前几期,我们用到的系统用户只有普通用户一类.那么在这一期,我们将在系统中设置2类用户, 管理员Administrator 和普通用户NormalUser.

我们在这里分类用户的目的是为了区分不同用户的功能权限,通常管理员拥有所有功能的使用权限,而普通用户只能限制性的使用部分功能(比如只能查看数据,而不修改数据). 当然,管理员可以赋予普通用户更多的功能权限,这个在后期随笔里面会继续说明.

 

原理

原理很简单,我在之前的用户登录界面FrmLogin 里新增了一个全局变量 UserType 用于获取当前登录用户的用户类型,在判断登录成功的代码里赋给一个登录用户类型(登录类型来自数据库里存储的用户类型)-Administrator或者NormalUser,在获取登录用户类型后, 我们需要设置普通用户的功能使用权限, 在那些需要屏蔽相应功能按钮的窗体里来获取全局变量 UserType,然后判断是否为 NormalUser;如果是,则将相应功能按钮的 Enabled 属性设置为 false.

 

首先,我们需要对数据库做些小的调整,在原先的数据库表MovieAccount 和Log 里分别新增一列用户类型 UserType.

 

 

数据库修改完了,我们开始写代码.

首先,在登录窗体类FrmLogin.cs 里新增一条 全局变量UserType, 用于获取 当前登录用户的用户类型.

//定义一个登录全局变量 用来获取 "登录" 或是"退出"
public static string Situation;
//---------------------新增代码----------------------//
//定义一个全局变量UserType 用来获 登录用户的类型
public static string UserType;
//---------------------新增代码----------------------//

 

然后将之前的sql语句稍作修改,增加一个 UserType 字段.

// 注释掉之前的select语句 string sql = "select MUserPwd from MovieAccount where MUserName ='" + txtName.Text + "'";
//---------------------新增代码----------------------//
//这里新增了 从数据库里 获取UserType 这列的内容 
 string sql = "select MUserPwd,UserType from MovieAccount where MUserName ='" + txtName.Text + "'";
//---------------------新增代码----------------------//

 

通过SqlDataReader sdr 来从数据库中读取该用户的类型 并传给字符串 uType.

//则将对应该用户名下的 第一个字段 即使密码(MUserPwd为select的第一个字段) 赋给 字符串pwd  ,并且依次往后读取 所有的密码
//Trim()方法为移除字符串前后的空白
string pwd =sdr.GetString(0).Trim();
//---------------------新增代码-------------------------------//
//读取器sdr获取了2列数据 第1列为密码 第2列 即索引为1的是用户类型
string uType = sdr.GetString(1);
//---------------------新增代码-------------------------------//

 

在登录成功后,将字符串 uType 获取的登录类型 赋给全局变量 UserType.

//添加获取当前登录情况的代码
//获取当前用户登录的情况
Situation = "登录";
//---------------------新增代码-------------------------------//
//将登录成功的用户类型 赋给全局变量UserType
//用于获取当前登录 用户的类型
UserType = uType;
//---------------------新增代码-------------------------------//

 

这样当用户登录系统后,系统就能获得 登录系统的用户类型了; 我们到主窗体FrmMain上做个小测试.

我们现在主窗体FrmMain界面新增一个label框(name:lblSayHi) 用于获得登录的用户类型.

 

然后,在加载窗体下添加如下代码.

//当窗体加载的时候 自动运行
private void FrmMain_Load(object sender, EventArgs e)
{
    //------------------------------新增代码----------------------------------//
    //这里 新增来一个用户类型 判断  FrmLogin.UserType
    //将当前登录用户名和登录时间赋给label的text属性
    //并在当前主界面窗体加载的时候 显示在label框上
    lblCurrentUser.Text = "当前登录用户为:" + FrmLogin.Uid + " 用户类型 " + FrmLogin.UserType + "  登录时间为:" + FrmLogin.Time;
    //------------------------------新增代码----------------------------------//

    //------------------------------新增代码----------------------------------//
    //给当前用户打招呼 
    //这里通过获取当前用户电脑上的时间 以及判断登录用户的类型 来给不同类型的用户打招呼  
    // 定义整型变量 intTime 来获取 用户电脑上的具体小时数 然后在如下进行判断
    int intTime = FrmLogin.Time.Hour;
    //获取FrmLogin窗体的全局变量 UserType 用户类型, 用于一下给不同类型的用户打招呼
    string uType = FrmLogin.UserType;
    //在凌晨0-6点的时候
    if (intTime >= 0 && intTime < 6)
    {
        if (uType == "Administrator")
            lblSayHi.Text = "尊敬的  " + FrmLogin.Uid + " 深夜了,该休息了!";
        else if (uType == "NormalUser")
            lblSayHi.Text = "亲爱的  " + FrmLogin.Uid + "凌晨了,要赶紧休息哦!";
    }
    //早上6点-中午12点的时候
    else if (intTime >= 6 && intTime < 12)
    {
        if (uType == "Administrator")
            lblSayHi.Text = "尊敬的  " + FrmLogin.Uid + "  早上好!";
        else if (uType == "NormalUser")
            lblSayHi.Text = "亲爱的  " + FrmLogin.Uid + " 早上好!";
    }
    //中午12点-下午6点的时候
    else if (intTime >= 12 && intTime < 18)
    {
        if (uType == "Administrator")
            lblSayHi.Text = "尊敬的  " + FrmLogin.Uid + " 下午好!";
        else if (uType == "NormalUser")
            lblSayHi.Text = "亲爱的  " + FrmLogin.Uid + " 下午好!";
    }
    //晚上
    else if (intTime >= 18 && intTime < 24)
    {
        if (uType == "Administrator")
            lblSayHi.Text = "尊敬的  " + FrmLogin.Uid + " 晚上好!";
        else if (uType == "NormalUser")
            lblSayHi.Text = "亲爱的  " + FrmLogin.Uid + " 晚上好!";
    }
    else //否则 默认为 
        lblSayHi.Text = "欢迎使用 电影记录管理系统" + FrmLogin.Uid;
    //------------------------------新增代码----------------------------------//

    //------------------------------新增代码----------------------------------//
    //判断用户类型 并给用户设置功能权限
    if (uType == "NormalUser")
    {
        tsbRegistration.Enabled = false;
        tsbLog.Enabled = false;
    }
    //------------------------------新增代码----------------------------------//
}

 

我们来做个小测试,测试之前,你需要在数据库 MovieAccount表的 UserType列里手动插入几条用户类型.这里我得admin1的用户类型为Administrator.

管理员 admin1 登录

 

 

普通用户 user1 登录

 

 
在用户类型获取成功之后,我们需要给管理员和普通用户 分配相应的功能权限 (管理员默认是拥有所有功能的使用权限,普通用户有些功能无法使用).

首先,我们在主窗体FrmMain上对普通用户禁用几个功能按钮,(将按钮的Enabled属性设置为 false). 

这里禁用了 用户注册 和 日志查看 2个按钮的功能,(将如下代码 添加到加载窗体下).

//------------------------------新增代码----------------------------------//
//判断用户类型 并给用户设置功能权限
if (uType == "NormalUser")
{
    tsbRegistration.Enabled = false;
    tsbLog.Enabled = false;
}
//------------------------------新增代码----------------------------------//

 

我们再来测试下,使用 用户类型为NormalUser user1登录系统. 

 

user1 登录后,用户注册和日志查询变为不可用.

 

然后,在管理界面里 普通用户设置权限为 可以查看数据 但不能增删改.

//当系统加载的时候自动显示DataGridView的数据
private void FrmManager_Load(object sender, EventArgs e)
{
    //调用刷新数据的方法
    Refresh();
    cmbforTypeSelecting.Text = "全局搜索";
    cmbforTypeSelecting.Items.Add("全局搜索");
    cmbforTypeSelecting.Items.Add("编号");
    cmbforTypeSelecting.Items.Add("电影名称");
    cmbforTypeSelecting.Items.Add("导演");
    cmbforTypeSelecting.Items.Add("发行时间");

    //----------------------新增代码-------------------//
    //添加对用户 类型的判断 用来设置功能按钮的使用权限
    if (FrmLogin.UserType == "NormalUser")
    {
        btnDelete.Enabled = false;
        btnAdd.Enabled = false;
        btnSave.Enabled = false;
    }
    //----------------------新增代码-------------------//
}

 

我们再来测试下,用的还是 普通用户 user1.但 添加 删除 和 保存记录 3个按钮 变得置灰(不可用)了.

 

当然,由于新增了一列UserType,之前的用户注册功能(没有分类用户) 所以我们得稍作修改.

我们在 用户注册窗体FrmRegistration上增加2个radiobutton,用于注册的时候进行用户分类注册. 

一个是管理员name:rdoAdministrator  一个是普通用户name: rdoNormalUser  

 

然后,修改之前的用户注册代码.很简单,主要是在radiobutton的CheckedChanged事件下 增加了 一个uType 类型 用于获取当前的用户类型.

然后在之前的Sql插入语句里 新增了一列 UserType.

//----------------------新增代码-------------------------//
//new一个 uType 来获取 radiobutton 点击事件下 触发的用户类型赋值
string uType = "";
if (rdoAdministrator.Checked)  //当管理员的radiobutton被点击后
    uType = "Administrator";   //传给 uType 一个管理员
else if (rdoNormalUser.Checked)  //同理
    uType = "NormalUser";
else                             //若不点击 则默认为普通用户注册 
    uType = "NormalUser";
//sql 插入语句  我们新增了 一列 UserType
string sqlInsert = "insert into MovieAccount(MUserName,MUserPwd,UserType) values(@MUserName,@MUserPwd,@UserType) ";
//使用1个SQL参数数组 来装载 需要插入的数据
SqlParameter[] param = {
                        new SqlParameter("@MUserName",txtUid.Text),
                        new SqlParameter("@MUserPwd",txtPwd.Text),  
                        new SqlParameter("@UserType",uType)   //新增了1个sql参数 uType
                    };
//----------------------新增代码-------------------------//

 

好了,我们来简单测试下 新做好的用户分类注册.

先注册个管理员用户 admin03

然后,数据库里多了一行数据 admin03, 用户类型是 Administrator.

 

我们再注册一个 普通用户 user03.

 

数据库里多了 一条user03  用户类型为 NormalUser

 

这样,我们的用户分类和简单的功能权限设置就完成.感兴趣的朋友可以自己动手在日志查询那里新增一列-用户类型,这里就不讲了.

 

附上源代码

MovieRecordManagementSystem07.zip

相关推荐 [点此查看目录]

posted @ 2011-12-18 07:55  SilverSky(Jason)  阅读(4654)  评论(14编辑  收藏  举报