百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

【C#学习记录】用户设置模块设计与实现(winform)

liuian 2024-12-10 18:06 26 浏览

大家好,我是雷工!

最近练习实现一个企业人事管理系统,涉及到用户设置模块,将该模块的实现过程记录如下。

一、系统运行环境

本系统的程序运行环境具体如下。

(1)、系统开发平台:Microsoft Visual Studio 2019。

(2)、系统开发语言:C#。

(3)、数据库管理软件:Microsoft SQL Server 2008。

二、数据库表结构设计

本模块使用的数据表为:tb_Login(用户表)、tb_UserPope(用户权限表)两张数据表。

1、tb_Login表结构:

字段名

数据类型

是否主键

描述说明

ID

varchar(5)

用户编号

Name

varchar(20)

用户名

Pass

varchar(20)

密码


2、tb_UserPope表结构:

字段名

数据类型

是否主键

描述说明

AutoID

int

自动编号

ID

varchar(5)

操作员编号

PopeName

varchar(50)

权限名称

Pope

int

权限标识

三、用户设置界面设计及演示效果

用户设置模块主要对系统中的用户信息进行管理,包括对用户信息的添加、修改和删除等操作,而且还可以为指定的用户设置操作权限。另外,如果要对管理员信息进行修改、删除和设置操作权限等操作,系统会提示不能对管理员进行操作。

用户设置窗体运行效果如下图所示:


1、设计用户设置窗体

1>创建Windows窗体,命名为F_User.cs。

2>在窗体中添加控件,并布局。

2、实现添加\修改功能

1>创建Windows窗体,命名为F_UserAdd。

2>添加用户信息窗口运行效果:


3>修改用户信息窗口运行效果:


3、点击“添加”按钮,当用户名和密码为空时,演示效果:


4、当“添加”的用户名在tb_Login(用户表)里已经存在时,演示效果:


5、当添加用户成功时,演示效果:


6、当试图修改超级用户admin的信息时,演示效果:


7、当修改非超级用户时,演示效果:


8、当点击“删除”按钮时,演示效果:


9、当修改非超级用户的权限时,演示效果:


四、主要代码的实现与分析

1、“添加”/“修改”按钮功能

在F_User窗体中单击工具栏中的“添加”/“修改”按钮,实例化F_UserAdd窗体的一个对象,并分别为该对象的Tag属性赋值为1和2,以标识在F_UserAdd窗体中将执行哪种操作。

代码如下:

				//工具栏-添加按钮功能
        private void tool_UserAdd_Click(object sender, EventArgs e)
        {
            //实例化F_UserAdd窗体类对象
            PerForm.F_UserAdd FrmUserAdd = new PerForm.F_UserAdd();
            //设置F_UserAdd窗体的Tag属性为1,以标识执行添加操作
            FrmUserAdd.Tag = 1;
            FrmUserAdd.Text = "【雷工笔记】"+tool_UserAdd.Text + "用户";//设置F_UserAdd窗体的标题
            FrmUserAdd.ShowDialog(this);//以对话框形式显示窗体
        }
        //工具栏-修改按钮功能
        private void tool_UserAmend_Click(object sender, EventArgs e)
        {
            if(ModuleClass.MyModule.User_ID.Trim()=="0001")//判断选择的是不是超级用户
            {
                MessageBox.Show("不能修改超级用户。");
                return;
            }
            //实例化F_UserAdd窗体类对象
            PerForm.F_UserAdd FrmUserAdd = new PerForm.F_UserAdd();
            //设置F_UserAdd窗体的Tag属性为2,以标识执行修改操作
            FrmUserAdd.Tag = 2;
            FrmUserAdd.Text= "【雷工笔记】" + tool_UserAmend.Text + "用户";//设置F_UserAdd窗体的标题
            FrmUserAdd.ShowDialog(this);//以对话框形式显示窗体
        }

2、“保存”按钮功能

在F_UserAdd窗体中单击“保存”按钮,判断“用户名”文本框和“密码”文本框是否为空。如果为空,则弹出提示信息;否则,根据该窗体的Tag属性值判断是执行用户添加操作,还是执行用户修改操作。

代码如下:


        //保存按钮的实现代码
        private void button1_Click(object sender, EventArgs e)
        {
            if(text_Name.Text==""&&text_Pass.Text=="")//判断用户名和密码是否为空
            {
                MessageBox.Show("请将用户名和密码添加完整。");
                return;
            }
            DSet = MyDataClass.getDataSet("select Name from tb_Login where Name='" + text_Name.Text + "'", "tb_Login");
            //判断窗体的Tag属性是否为2,以执行修改操作
            if((int)this.Tag==2&&text_Name.Text==ModuleClass.MyModule.User_Name)
            {
                MyDataClass.getsqlcom("update tb_Login set Name='" + text_Name.Text + "',Pass='" + text_Pass.Text + "'where ID='" + ModuleClass.MyModule.User_ID + "'");
                MessageBox.Show("修改成功。");
                return;
            }
            if(DSet.Tables[0].Rows.Count>0)//判断用户是否已经存在
            {
                MessageBox.Show("当前用户名已存在,请重新输入。");//弹出提示信息
                text_Name.Text = "";
                text_Pass.Text = "";
                return;
            }
            //判断窗体的Tag属性是否为1,以执行添加操作
            if((int)this.Tag==1)
            {
                AutoID = MyMC.GetAutocoding("tb_Login", "ID");//自动生成编号
                //调用公共类中的方法添加用户信息
                MyDataClass.getsqlcom("insert into tb_Login (ID,Name,Pass) values('" + AutoID + "','" + text_Name.Text + "','" + text_Pass.Text + "')");
                MyMC.ADD_Pope(AutoID, 0);//为新添加的用户设置权限
                MessageBox.Show("添加成功。");
            }
            else
            {
                //调用公共类中的方法修改用户信息
                MyDataClass.getsqlcom("update tb_Login set Name='" + text_Name.Text + "',Pass ='" + text_Pass.Text + "'where ID='" + ModuleClass.MyModule.User_ID + "'");
                //判断新添加的用户编码号是否与登录用户的编号相同
                if (ModuleClass.MyModule.User_ID == DataClass.MyMeans.Login_ID)
                    DataClass.MyMeans.Login_Name = text_Name.Text;//设置登录用户名为“用户名”文本框的值
                MessageBox.Show("修改成功。");
            }
            this.Close();//关闭当前窗体
        }


3、“删除”按钮功能

在F_User窗体中单击工具栏中的“删除”按钮,判断要删除的用户是不是管理员。如果是,则弹出提示信息,提示不能修改管理员信息;否则,删除选中的用户信息,同时删除其权限信息。

代码如下:

        //工具栏中“删除”按钮的实现代码
        private void tool_UserDelete_Click(object sender, EventArgs e)
        {
            if (ModuleClass.MyModule.User_ID != "")
            {
                if (ModuleClass.MyModule.User_ID.Trim() == "0001")//判断要删除的用户是不是超级用户
                {
                    MessageBox.Show("不能删除超级用户。");
                    return;
                }
                //删除用户信息
                MyDataClass.getsqlcom("Delete tb_Login where ID='" + ModuleClass.MyModule.User_ID.Trim() + "'");
                //删除用户权限信息
                MyDataClass.getsqlcom("Delete tb_UserPope where ID='" + ModuleClass.MyModule.User_ID.Trim() + "'");
                //在数据库中查找所有用户信息,并将结果存储在DataSet数据集中
                MyDS_Grid = MyDataClass.getDataSet("select ID as编号,Name as 用户名 from tb_Login", "tb_Login");
                dataGridView1.DataSource = MyDS_Grid.Tables[0];//为DataGridView控件设置数据源
            }
            else
                MessageBox.Show("无法删除空数据表。");
        }


3、“权限”按钮功能

在F_User窗体中单击工具栏的“权限”按钮,弹出F_UserPope窗体(用户权限设置窗体)。

代码如下:

        //权限按钮功能
        private void tool_UserPopedom_Click(object sender, EventArgs e)
        {
            if (ModuleClass.MyModule.User_ID.Trim() == "0001")
            {
                MessageBox.Show("不能修改超级用户权限。");
                return;
            }
            F_UserPope FrmUserPope = new F_UserPope();
            FrmUserPope.Text = "用户权限设置";
            FrmUserPope.ShowDialog(this);
        }

用户权限设置窗体中可以设置用户的权限,在该窗体中选中要拥有权限的复选框,单击“保存”按钮,调用MyModule公共类中的Amend_Pope方法为用户设置权限,同时将MyMeans公共类中的静态变量Login_n设置为2,以便在调用“重新登录”窗体时,使用新设置的权限对其进行初始化。

代码如下:

        private void User_Save_Click(object sender, EventArgs e)
        {
            //调用公共类的Amend_Pope方法为指定的用户设置权限
            MyMC.Amend_Pope(groupBox2.Controls, ModuleClass.MyModule.User_ID);
            //判断登录用户的编号是否与修改的用户编号相同
            if (DataClass.MyMeans.Login_ID == ModuleClass.MyModule.User_ID)
                //将静态变量Login_n设置为2,以便在调用“重新登录”窗体时,使用新设置的权限对其进行初始化
                DataClass.MyMeans.Login_n = 2;
        }

五、总结

本篇主要介绍了练习项目企业人事管理系统中的用户设置模块,通过该模块的开发练习,对用户设置模块有了初步的认识,如果觉得有用欢迎点赞收藏,如果觉得有不对之处,欢迎评论区留言。

相关推荐

Optional是个好东西,如果用错了就太可惜了

原文出处:https://xie.infoq.cn/article/e3d1f0f4f095397c44812a5be我们都知道,在Java8新增了一个类-Optional,主要是用来解决程...

IDEA建议:不要在字段上使用@Autowire了!

在使用IDEA写Spring相关的项目的时候,在字段上使用@Autowired注解时,总是会有一个波浪线提示:Fieldinjectionisnotrecommended.纳尼?我天天用,咋...

Spring源码|Spring实例Bean的方法

Spring实例Bean的方法,在AbstractAutowireCapableBeanFactory中的protectedBeanWrappercreateBeanInstance(String...

Spring技巧:深入研究Java 14和SpringBoot

在本期文章中,我们将介绍Java14中的新特性及其在构建基于SpringBoot的应用程序中的应用。开始,我们需要使用Java的最新版本,也是最棒的版本,Java14,它现在还没有发布。预计将于2...

Java开发200+个学习知识路线-史上最全(框架篇)

1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...

年末将至,Java 开发者必须了解的 15 个Java 顶级开源项目

专注于Java领域优质技术,欢迎关注作者:SnailClimbStar的数量统计于2019-12-29。1.JavaGuideGuide哥大三开始维护的,目前算是纯Java类型项目中Sta...

字节跨平台框架 Lynx 开源:一个 Web 开发者的原生体验

最近各大厂都在开源自己的跨平台框架,前脚腾讯刚宣布计划四月开源基于Kotlin的跨平台框架「Kuikly」,后脚字节跳动旧开源了他们的跨平台框架「Lynx」,如果说Kuikly是一个面向...

我要狠狠的反驳“公司禁止使用Lombok”的观点

经常在其它各个地方在说公司禁止使用Lombok,我一直不明白为什么不让用,今天看到一篇文章列举了一下“缺点”,这里我只想狠狠地反驳,看到列举的理由我竟无言以对。原文如下:下面,结合我自己使用Lomb...

SpringBoot Lombok使用详解:从入门到精通(注解最全)

一、Lombok概述与基础使用1.1Lombok是什么Lombok是一个Java库,它通过注解的方式自动生成Java代码(如getter、setter、toString等),从而减少样板代码的编写,...

Java 8之后的那些新特性(六):记录类 Record Class

Java是一门面向对象的语言,而对于面向对象的语言中,一个众所周知的概念就是,对象是包含属性与行为的。比如HR系统中都会有雇员的概念,那雇员会有姓名,ID身份,性别等,这些我们称之为属性;而雇员同时肯...

为什么大厂要求安卓开发者掌握Kotlin和Jetpack?优雅草卓伊凡

为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡一、Kotlin:Android开发的现代语言选择1.1Kotlin是什么?Kotlin是由...

Kotlin这5招太绝了!码农秒变优雅艺术家!

Kotlin因其简洁性、空安全性和与Java的无缝互操作性而备受喜爱。虽然许多开发者熟悉协程、扩展函数和数据类等特性,但还有一些鲜为人知的特性可以让你的代码从仅仅能用变得真正优雅且异常简洁。让我们来看...

自行部署一款免费高颜值的IT资产管理系统-咖啡壶chemex

在运维时,ICT资产太多怎么办,还是用excel表格来管理?效率太低,也不好多人使用。在几个IT资产管理系统中选择比较中,最终在Snipe-IT和chemex间选择了chemex咖啡壶。Snip...

PHP对接百度语音识别技术(php对接百度语音识别技术实验报告)

引言在目前的各种应用场景中,语音识别技术已经越来越常用,并且其应用场景正在不断扩大。百度提供的语音识别服务允许用户通过简单的接口调用,将语音内容转换为文本。本文将通过PHP语言集成百度的语音识别服务,...

知识付费系统功能全解析(知识付费项目怎么样)

开发知识付费系统需包含核心功能模块,确保内容变现、用户体验及运营管理需求。以下是完整功能架构:一、用户端功能注册登录:手机号/邮箱注册,第三方登录(微信、QQ)内容浏览:分类展示课程、文章、音频等付费...