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

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

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

大家好,我是雷工!

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

一、系统运行环境

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

(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;
        }

五、总结

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

相关推荐

Docker 47 个常见故障的原因和解决方法

【作者】曹如熙,具有超过十年的互联网运维及五年以上团队管理经验,多年容器云的运维,尤其在Docker和kubernetes领域非常精通。Docker是一种相对使用较简单的容器,我们可以通过以下几种方式...

电脑30个快问快答,解决常见电脑问题

1.强行关机/停电对电脑有影响吗?答:可能损坏硬盘(机械硬盘风险高)、未保存数据丢失,偶尔一次影响小,但频繁操作会缩短硬件寿命。2.C盘满影响速度吗?答:会!系统运行需C盘空间缓存临时数据,空间不...

使用Tcpdump包抓取分析数据包的详细用法

TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种...

电脑启动不了(BootDevice Not Found Hard Disk-3F0)解决方案

HP品牌机,开机启动不了,黑屏,开机取下主板电池恢复BIOS后,开机显示找不到启动盘。一、按F2键进入BIOS,出现硬盘内存检测界面的话,直接退出。就会出现这个界面,光标键向下,选择BIOSSetu...

电脑开机黑屏别慌!快码住!起底维修老师傅不能说的秘密

按下开机键却只收获黑屏大礼包?那些神秘的英文提示、刺耳的蜂鸣声,其实是电脑在给你发送求救信号!从按下电源到进入桌面的12秒里,你的电脑经历了史诗级的硬件自检与系统加载,今天我们就破译这段“摩斯电码”。...

电脑启动故障为何总要先看BIOS?新手必读的关键知识解析

最近在帮朋友们解答电脑无法正常开机的问题时,发现大家经常收到一句高频建议:“先检查BIOS”。对不少普通用户而言,BIOS依然是个神秘的存在。那么,BIOS到底是什么?电脑出现哪些故障会与它相关呢?本...

Windows 11 KB5053598更新:安全补丁还是系统噩梦?

2025年3月11日,微软发布了Windows1124H2的强制性更新KB5053598,作为“周二补丁日”(PatchTuesday)的一部分。然而,这款本应提升系统安全性的更新却引发了广泛的...

飞牛OS入门安装遇到问题,如何解决?

之前小编尝试了用旧电脑装飞牛OS安装之前特意查了一些硬件要求飞牛OS目前支持主流的x86架构硬件主机需能连网线飞牛OS暂时不支持只有无线网卡的安装貌似很多小伙伴在一开始安装就卡住了那今天咱们汇总分...

几种常见的电脑开机黑屏显示白色英文字母解决方法

当电脑开机出现黑屏并显示白色英文字母时,通常表示系统启动过程中遇到了错误。以下是几种常见原因及对应的解决方法,按照排查顺序整理:一、检查外接设备与硬件连接可能原因:外接U盘、移动硬盘等未拔出,或内部硬...

电脑启动出现问题,为什么都要先检查BIOS?

【ZOL中关村在线原创技巧应用】最近在回答问题的时候,总会发现很多朋友都在问“电脑无法正常开机怎么办?”这样类似的问题,而许多DIY大佬的回复总会出现一条高频建议“先检查BIOS”。但对于许多普通用户...

教你怎么用JavaScript检测当前浏览器是无头浏览器

什么是无头浏览器(headlessbrowser)?无头浏览器是指可以在图形界面情况下运行的浏览器。我可以通过编程来控制无头浏览器自动执行各种任务,比如做测试,给网页截屏等。为什么叫“无头”浏览器?...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

运维的报表之路,用 node.js 轻松发送 grafana 报表

在运维过程中,无论是监控还是报表,都会有一些通过邮件发送图表的需求,由于开源的zabbix,grafana和kibana等并不完全具有“想发送哪儿就发送哪儿”的图片生成功能,在grafana...

C#基于浏览器内核的高级爬虫(c#爬取网页内容)

基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序。可执行Javascript代码、触发各类事件、操纵页面Dom结构、甚至可以移除不喜欢的CSS样式。很多网站都用Ajax动态加...

如何优化一个秒杀项目?(秒杀实现思路)

问题1:使用jmeter性能压测,定位瓶颈代码步骤流程:线程组--->Http请求--->查看结果树--->聚合报告tips:host的文件--->优先调用映射,减少DNS的时...