/// <summary>
/// 登录管理类(单例模式),负责用户登录、注销及用户信息管理
/// </summary>
public class LoginMananger
{// 用于线程同步的锁对象static object _lockObj = new object();// 单例实例(延迟初始化)static LoginMananger loginMananger = null;// 用户数据库操作帮助类ELMeasure.Model.UserSqlHelp userSql;/// <summary>/// 当前登录用户信息(只读属性)/// </summary>public UserInfo LoginUser { get; private set; }/// <summary>/// 私有构造函数(防止外部实例化)/// </summary>private LoginMananger(){// 初始化默认用户状态LoginUser = new UserInfo() { Name = "未登录", Level = Model.RootLevel.None };// 创建数据库连接帮助类并建立连接userSql = new ELMeasure.Model.UserSqlHelp();userSql.Connect();}/// <summary>/// 获取单例实例(线程安全)/// </summary>/// <returns>LoginMananger的唯一实例</returns>public static LoginMananger GetInstance(){lock (_lockObj)  // 加锁确保线程安全{if (loginMananger == null)loginMananger = new LoginMananger();  // 延迟初始化}return loginMananger;}/// <summary>/// 用户登录验证/// </summary>/// <param name="user">用户名</param>/// <param name="password">密码</param>/// <returns>登录成功返回true,否则返回false</returns>public bool Login(string user, string password){if (userSql.IsConnected)  // 检查数据库连接状态{// 查询用户信息if (userSql.SelectUser(user, password, out UserInfo info)){// 更新当前登录用户信息LoginUser.Name = info.Name;LoginUser.Level = info.Level;return true;}elsereturn false;  // 用户验证失败}elsereturn false;  // 数据库未连接}/// <summary>/// 用户注销/// </summary>public void LoginOut(){if (LoginUser.Level != Model.RootLevel.None){// 重置用户状态为未登录LoginUser.Name = "未登录";LoginUser.Level = Model.RootLevel.None;}}/// <summary>/// 添加新用户/// </summary>/// <param name="userInfo">用户信息</param>/// <returns>操作成功返回true</returns>public bool AddUser(UserInfo userInfo){return userSql.AddUser(userInfo);}/// <summary>/// 删除用户/// </summary>/// <param name="userInfo">要删除的用户信息</param>/// <returns>操作成功返回true</returns>public bool DeleteUser(UserInfo userInfo){return userSql.DeleteUser(userInfo);}/// <summary>/// 修改用户信息/// </summary>/// <param name="userInfo">修改后的用户信息</param>/// <returns>操作成功返回true</returns>public bool ChangeUser(UserInfo userInfo){return userSql.ChangeUser(userInfo);}/// <summary>/// 获取所有用户列表/// </summary>/// <returns>用户列表</returns>public List<UserInfo> SelectUser(){List<UserInfo> users = null;userSql.SelectUsers(out users);return users;}
}

这样做有什么好处?

 

  1. 单例模式实现

    • 通过私有构造函数 + GetInstance() 方法保证全局唯一实例

    • 使用 lock 确保多线程安全

  2. 核心功能

    • Login():验证用户凭据并更新登录状态

    • LoginOut():清除当前登录状态

    • 用户管理方法(Add/Delete/Change/Select)

  3. 状态管理

    • LoginUser 属性记录当前登录用户

    • 初始状态为"未登录"

  4. 数据库依赖

    • 通过 UserSqlHelp 类封装所有数据库操作

    • 在构造函数中初始化数据库连接

  5. 线程安全

    • 所有对单例实例的访问都通过加锁保护

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87967.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87967.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87967.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瑞斯拜考研词汇课笔记

学习视频链接&#xff1a;瑞斯拜考研词汇系统课-外刊50篇- 第一讲_哔哩哔哩_bilibili Text 1 1.气候危机让普通人经历了额外六周的高温天气。 The climate crisis caused the average person to experience six extra weeks of hot days. 2.碳排放是全球变暖的重要原因之一。 C…

SqlServer安装后JDBC连接失败——TCP/IP

朋友公司接了个项目&#xff0c;甲方BaBa用的数据库是SqlServer 2022的Express版本&#xff0c;朋友让我帮忙验证下环境有没有什么问题&#xff0c;软件开发用的框架还是比较老的&#xff0c;spring的xml方式配置&#xff0c;用的c3p0的数据库连接池&#xff0c;启动项目连接池…

如何解决pip安装报错ModuleNotFoundError: No module named ‘datetime’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘datetime’问题 摘要 在日常Python开发中&#xff0c;我们常常需要通过pip install来安装第三方包&#xff0c;但有时会在PyCharm的控制台里遇到奇怪的ModuleN…

Windows 10 2016 长期服务版

系统介绍 Windows 10 2016 长期服务版。专为需要高度稳定性和最小功能变更的环境设计。它不仅适合专业领域&#xff0c;也是办公环境的理想选择。 系统特点 一、极致的稳定性 精简的系统组件&#xff1a;移除许多现代应用&#xff0c;只保留基础功能。 无强制功能更新&…

基于springboot的文件上传系统:重新定义大文件传输的可靠性边界

一、文件分块上传解析1、为什么传统文件上传已经无法满足现代需求&#xff1f;在云原生时代&#xff0c;文件上传不再是简单的"选择文件-点击上传"的过程。随着视频、设计图、数据集等大文件的普及&#xff0c;传统的单文件上传方式面临着诸多挑战&#xff1a;网络不…

系统学习Python——并发模型和异步编程:进程、线程和GIL

分类目录&#xff1a;《系统学习Python》总目录 在文章《并发模型和异步编程&#xff1a;基础知识》我们简单介绍了Python中的进程、线程和协程。本文就着重介绍Python中的进程、线程和GIL的关系。 Python解释器的每个实例都是一个进程。使用multiprocessing或concurrent.futu…

【playwright篇】教程(十七)[html元素知识]

1 html中&#xff0c;button元素中的aria-describedby"tooltip-r1k"属性&#xff0c;主要用来做什么&#xff1f;在 HTML 中&#xff0c;button 元素中的 aria-describedby"tooltip-r1k" 属性主要用于提升网页的可访问性&#xff08;Accessibility&#xf…

Python: 正则表达式

正则表达式是处理文本数据的强大工具&#xff0c;Python通过re模块提供了完整的正则表达式功能。本文将详细介绍Python正则表达式的使用方法&#xff0c;包括基础语法、高级技巧和re模块API的详细解析。一、正则表达式基础1.1 什么是正则表达式正则表达式(Regular Expression)是…

pytest合并allure报告解决方案

背景 在执行自动化测试的过程中&#xff0c;为了实现自动化的高通过率&#xff0c;可能会反复的重试&#xff0c;直至大多数甚至全部用例执行通过&#xff0c;以此来需要人为分析的用例量&#xff0c;减少人力投入&#xff0c;提高执行效率&#xff1b; 在用例少或者资源消耗小…

Pr插件图文安装教程

Pr插件图文安装教程 Adobe Premiere Pro&#xff0c;简称Pr&#xff0c;是由Adobe公司开发的一款视频编辑软件。Adobe Premiere有较好的兼容性&#xff0c;且可以与Adobe公司推出的其他软件相互协作。这款软件广泛应用于广告制作和电视节目制作中&#xff0c;是视频编辑爱好者…

[netty5: HttpObjectEncoder HttpObjectDecoder]-源码解析

在阅读该篇文章之前&#xff0c;推荐先阅读以下内容&#xff1a; [netty5: HttpObject]-源码解析[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源码分析[netty5: ByteToMessageCodec & MessageToByteEncoder & Byte…

uniapp的navigator跳转功能

接下来&#xff0c;我将围绕一个常见的电商小程序来构建一系列连贯的使用场景。在这个过程中&#xff0c;我们将把 <navigator> 组件的所有关键属性和方法都串联起来&#xff0c;并详细解释它们在每个环节所扮演的角色和作用。 核心场景&#xff1a;构建一个电商小程序的…

v-for的用法及案例

目录 一.v-for的用法 1.举例1 2.举例2 二.购物车案例 1.代码 2.存在的问题&#xff1a;复选框错位 3.解决方案&#xff1a; 赋值给key属性一个唯一的值 一.v-for的用法 1.举例1 <template><view><view v-for"(item,index) in 10" :key"…

BigQuery对象引用(ObjectRef)全面指南:一站式整合结构化与非结构化多模态数据分析

引言 企业需要同时管理有组织表格中的结构化数据&#xff0c;以及日益增长的非结构化数据&#xff08;如图片、音频和文档&#xff09;。传统上&#xff0c;联合分析这些多样化数据类型非常复杂&#xff0c;通常需要使用不同的工具。非结构化媒体通常需要导出到专门的服务进行…

【开源品鉴】FRP源码阅读

frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透&#xff0c;支持多种协议和 P2P 通信功能&#xff0c;目前在 GitHub 上已有 80k 的 star。本文将深入探讨其源码&#xff0c;揭示其背后的实现原理。1. 前言 frp 是一款高性能的反向代理应用&#xff0c;专注于内网…

day048-系统负载高排查流程与前后端分离项目

文章目录 0. 老男孩思想1. 系统负载高排查流程1.1 进程/线程相关命令1.1.1 jps1.1.2 jstack1.1.3 jmap1.1.4 top -Hp pid 1.2 排查流程图 2. 前后端分离项目2.1 项目说明2.2 负载均衡2.3 数据库配置2.3.1 安装数据库服务2.3.2 配置数据库环境 2.4 后端配置2.5 四层负载均衡配置…

Spring Boot 牵手EasyExcel:解锁高效数据处理姿势

引言 在日常的 Java 开发中&#xff0c;处理 Excel 文件是一个极为常见的需求。无论是数据的导入导出&#xff0c;还是报表的生成&#xff0c;Excel 都扮演着重要的角色。例如&#xff0c;在企业的财务管理系统中&#xff0c;需要将每月的财务数据导出为 Excel 报表&#xff0…

【ARM AMBA AXI 入门 21 -- AXI partial 访问和 narrow 访问的区别】

文章目录 Overview一、定义区别二、AXI 信号层面对比三、举例说明示例一:Partial Access示例二:Narrow Access四、硬件/系统处理角度五、AXI 总线接口信号举例对比Partial Write 事务:Narrow Write 事务(32-bit Master on 64-bit Bus):六、总结对比表七,软件判断判断 Pa…

使用Ideal创建一个spring boot的helloWorld项目

说明&#xff1a;本篇将介绍如何使用Ideal2024.2.1去创建一个spring boot的helloWorld项目&#xff0c;本篇将包含创建的详细步骤以及spring boot项目的目录结构说明&#xff0c;创建过程中的选项说明等。详细步骤如下&#xff1a;第一步&#xff1a;点击文件——新建——项目&…

国内Ubuntu访问不了github等外网

各位小伙伴们&#xff0c;大家好呀。 大家是不是经常遇到访问不了外网的情况呀。 在Ubuntu中可以这样做。 访问这个网站网站测速-Ping检测-Trace查询-Dig查询-路由跟踪查询-tools.ipip.net&#xff0c; 对于github.com&#xff0c;在这个网站输入github.com&#xff0c;会返…