使用 C# 进行面向对象编程:第 9 部分

使用 OOP 的用户活动日志

应用程序背后的关键概念

在这一部分中,我们将使用之前学到的一些 OOP 概念。我们将创建一个小型应用程序。在继续之前,请阅读我的文章user-activity-log-using-C-Sharp-with-sql-server/。在本课程中,我们将再次使用以下概念重新设计同一个应用程序。它将帮助我们更清楚地理解这些概念以及如何在我们自己的应用程序中实现它们。

  1. 成员变量
  2. 只读属性
  3. 方法
  4. 目的
  5. 默认构造函数
  6. 构造函数重载

应用详情

在数据库管理系统中跟踪用户活动。特别是在客户端-服务器环境中工作时,我们需要跟踪系统 IP/系统名称、登录 ID、时间戳以及在任何数据库应用程序上执行的操作。用户编辑任何客户端记录或进行转换等。

步骤 1. 创建名为 User_Activity_Log 的表。

CREATE TABLE [dbo].[User_Activity_Log](NOT NULL,[UAL_Timestamp] [datetime] NOT NULL,[UAL_Function_Performed] [nvarchar](100) NOT NULL,[UAL_Other_Information] [nvarchar](100) NULL,[UAL_IP_Address] [nvarchar](15) NOT NULL,PRIMARY KEY CLUSTERED([UAL_User_Id] ASC,[UAL_Timestamp] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO
SET ANSI_PADDING OFF

步骤 2. 创建登录表。

CREATE TABLE [dbo].Login_Client(NULL,NULL,[LON_Employee_No] [varchar](10) NULL,[LON_Login_Password] [varchar](20) NULL,NULL,NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF

步骤 3. 现在在登录表中插入一条记录。

INSERT INTO PSH.[dbo].[Login_Client]
VALUES ('Naveed Zaman', 'naveed.zaman', '22339', 'khan@123', 'A', 'Active')

步骤 4. 启动Visual Studio并创建一个名为“UserActivityLog_OOP_Concept”的新桌面项目。


步骤 5. 首先,我们创建登录表单,这将有助于我们理解主题的基本概念。创建如图所示的表单。


步骤 6. 创建另一个名为frmActivity的表单。


步骤 7. 现在添加一些按钮。例如,在表单上添加“添加新”、“保存”、“放弃”和“注销”按钮,如下图所示。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤 8. 添加一个名为“Main”的新类。


步骤 9. 现在我们将创建函数 GetDBConnection。它是一个公共函数,因此可以从项目中的任何位置访问它。但您必须修改与您自己的设置相关的数据源设置。

例如

SQL Server 实例名称。(.\CRMIS)
SQL Server 用户名和密码。(用户 ID sa 密码。###Reno123)
初始目录 = PSH (数据库名称)
将公共静态类添加到“Main.cs”。

public static SqlConnection GetDBConnection()
{SqlConnection conn = new SqlConnection("Data Source=.\\CRMIS;Initial Catalog=PSH;User ID=sa;Password=###Reno321");return conn;
}

步骤 10. 现在我们将创建另一个类登录,它将帮助我们验证用户的授权。提供用户名和密码后。


步骤 11. 在类登录中插入以下代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;namespace UserActivityLog_OOP_Concept // 命名空间,用于组织代码
{class Login // 定义一个Login类{// 静态字段,用于存储用户IDstatic string userid;// 静态字段,用于存储密码static string password;// 静态字段,用于存储IP地址static string ip;// 公有字段,用于存储员工编号public string EmpNo = string.Empty;// SqlConnection对象,用于数据库连接SqlConnection con = Main.GetDBConnection();// 默认构造函数public Login() {}// 带参数的构造函数public Login(string _userid, string _password, string _ip) {// 初始化userid字段userid = _userid;// 初始化password字段password = _password;// 初始化ip字段ip = _ip;}// 属性,用于获取用户IDpublic string getidinfo {get {return userid;}}// 属性,用于获取密码public string getpassinfo {get {return password;}}// 属性,用于获取IP地址public string getipinfo {get {return ip;}}// 验证方法,用于验证用户凭证public string Validation() {try {// 创建DataTable对象,用于存储查询结果DataTable consultanttable = new DataTable();// 定义SQL查询语句string SQL = @"SELECT LON_Employee_No FROM Login_Client where LON_Login_Name = '" + userid + "' AND LON_Login_Password = '" + password + "'";// 创建SqlDataAdapter对象,用于执行查询并填充DataTableSqlDataAdapter Consultantdataadapter = new SqlDataAdapter(SQL, con);// 填充DataTableConsultantdataadapter.Fill(consultanttable);// 遍历查询结果foreach(DataRow myrow in consultanttable.Rows) {// 获取员工编号EmpNo = (myrow[0].ToString());}} catch (InvalidCastException e) {// 捕获并重新抛出异常throw (e);}// 返回员工编号return EmpNo;}}
}

请仔细检查代码。


我们创建了类 login,并在该类中定义了四个成员变量,其中三个是静态的,一个是公共的。我们已经在之前的文章中讨论过访问修饰符。之后,我们创建了在步骤 6 中定义的类 Main 的对象图标。它将帮助我们在 C# 和 SQL Server 之间建立连接。

之后我们定义了一个Login类的默认构造函数,并用两个参数重载了该构造函数。

理解重载构造函数的重要性非常重要。每当我们用两个参数(用户 ID 和密码)创建类的对象时,它都会被初始化。我们还定义了一个默认构造函数,当我们需要一个没有参数的类对象时,它将为我们提供帮助。


此外,我们定义了类登录的只读属性,这将有助于我们读取成员变量。


在本次课程中,我们定义了一个类登录的方法验证,它将帮助我们验证登录信息并返回 EmpNo。

步骤 12. 请在UserActivityLog类中插入以下代码。

区块A

  • 我们定义了两个成员变量。
  • 我们定义了 User_Activity_Log 类的构造函数,它有两个参数,用于初始化该类的成员变量。

B座

  • 方法任务将用于将数据插入数据库,因此我们需要在主类上使用图标名称创建对象。
  • 使用插入语句,我们可以将新行插入数据库,该数据库将获取参数操作,可以是“登录”,“添加新”,“保存”等等。

步骤 13. 请在表格中插入以下代码。

区块A

  • 我们已经初始化了表单的位置。
  • 字符串变量主机通过名称查找主机系统。
  • 获取与主机关联的 IP 地址列表。
  • 将 IP 地址分配给 CIP。
  • lblCP.文本将 IP 地址分配给将显示 IP 信息的标签。

B座

关闭登录窗口。

C 座

检查文本框是否不为空。

D 座

  • 创建对象 LG,它将使用三个参数激活类登录的构造函数。
  • 使用对象 LG 调用方法验证。
  • 使用“LG.EmpNo”公共变量我们可以正确检查用户和密码。
  • 如果信息不正确,则显示消息框。
  • 如果信息正确,那么我们将创建 UserActivityLog 类的对象“alog”;它调用具有四个参数的构造函数。
  • 使用“log”对象,我们调用将数据插入数据库的方法任务。
  • FrmActivity创建表单的对象。
  • 使用对象名称加载表单依然存在。

步骤 14. 将以下代码插入FrmActivity表单。


区块A

  • 我们已经初始化了表单的位置。
  • 我们为 UserActivityLog 类创建对象“alog”,它将使用三个参数初始化 UserActivityLog 类的成员变量,参数的值是登录类的属性。
  • 下一步是使用 UserActivityLog 类的方法“task”及其参数“添加新记录”。
    B座
  • 我们已经初始化了表单的位置。
  • 我们为 UserActivityLog 类创建一个对象“alog”,它将使用三个参数初始化 UserActivityLog 类的成员变量,参数的值是登录类的属性。
  • 下一步是使用 UserActivityLog 类的方法“task”和参数“保存记录”。
    区块 C、D 和 E 也同样如此。

步骤 15 现在按 F5。您将看到登录屏幕;只需输入即可。

  • 用户名: Naveed.zaman
  • 用户名: khan@123


单击登录按钮。


现在按“添加新”按钮、“保存”按钮、“放弃”按钮,然后按“登录”按钮。

步骤 16 现在打开SQL Server表;您将得到如下结果。

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

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

相关文章

测试人员遇到需求变更 4大处理技巧

测试人员有效的需求变更管理,可以确保即使在需求频繁变化的情况下,测试工作仍然能够覆盖所有必要的功能点,从而保障最终产品的质量。如果没有合理的需求变更处理技巧,可能会造成不必要的返工和重复测试,无法维持项目的…

平安养老险浙江分公司开展防范非法集资宣传,守护群众“钱袋子”

为进一步提高群众对非法集资的防范意识的鉴别能力,近期,平安养老保险股份有限(以下简称“平安养老险”)浙江分公司以“守住钱袋子、护好幸福家”为宣传主题,深入居民社区、办公职场等公共场所开展的宣传活动。 平安养老…

看完再买不后悔!希喂、小米、霍尼韦尔宠物空气净化器性价比比拼

在忙碌的工作之余,养一只猫真的能治愈一切的不快,让我们的心灵得到片刻的宁静。然而,这份宁静背后,却隐藏着一些不易察觉的烦恼——猫浮毛和异味。 猫浮毛,这个看似微不足道的小问题,实则给许多宠物主人带…

PS选不了颜色和路径描边?PS不知为何才能描边任意路径,这个办法让你秒懂

在选中路径的情况下,按图下操作,即可制作路径(不会让你选不了颜色和路径描边)

第4章 工程经济评价指标 作业

第4章 工程经济评价指标 作业 一单选题&#xff08;共27题&#xff0c;100分&#xff09; (单选题)利息备付率是指( )与应付利息费用的比值。 A. 息税前利润 B. 利润总额 C. 净利润 D. 营业收入 正确答案: A:息税前利润; (单选题)当净现值( )0时,该项目不可行。 A. < B. …

leetcode:557. 反转字符串中的单词 III(python3解法)

难度&#xff1a;简单 给定一个字符串 s &#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1&#xff1a; 输入&#xff1a;s "Lets take LeetCode contest" 输出&#xff1a;"steL ekat edoCteeL tsetnoc…

分布式光纤测温DTS使用的单模光纤与多模光纤有何区别?

分布式光纤测温DTS中使用的单模光纤和多模光纤之间存在着本质区别。单模光纤是一种在光纤通信中应用广泛的光纤类型&#xff0c;几乎所有的光纤入户和主干线通信都采用单模光纤。从通信的角度来看&#xff0c;单模光纤就好比一条单行道的高速铁路&#xff0c;而多模光纤则类似于…

Leetcode - 周赛401

目录 一&#xff0c;3178. 找出 K 秒后拿着球的孩子 二&#xff0c;3179. K 秒后第 N 个元素的值 三&#xff0c;3180. 执行操作可获得的最大总奖励 I 四&#xff0c;3181. 执行操作可获得的最大总奖励 II 一&#xff0c;3178. 找出 K 秒后拿着球的孩子 本题可以直接模拟&a…

新手必读:平面设计自学全攻略

据说平面设计的门槛很低&#xff0c;零基础也很容易上手。但是据我所知许多初学者在自学平面设计时面临以下瓶颈&#xff1a;为什么跟着大神自学平面设计帖子依旧学不会呢&#xff0c;明明报了许多平面设计自学课程&#xff0c;但仍然不会自主设计&#xff0c;初学者到底从哪里…

XMind 2024软件最新版下载及详细安装教程

​人所共知的是XMind 在公司和教育领域都有很广泛的应用&#xff0c;在公司中它能够用来进行会议管理、项目管理、信息管理、计划和XMind 被认为是一种新一代演示软件的模式。也就是说XMind不仅能够绘制思维导图&#xff0c;还能够绘制鱼骨图、二维图、树形图、逻辑图、组织结构…

数字乡村:绘就乡村振兴的智慧新画卷

在乡村振兴战略的宏伟蓝图下&#xff0c;“数字乡村”作为新时代农村现代化的重要抓手&#xff0c;正悄然改变着中国乡村的面貌。本文旨在深度剖析数字乡村建设的核心价值、关键技术、成功案例以及未来展望&#xff0c;为乡村振兴战略提供前瞻性的思考与启示。 数字乡村的核心价…

SAP PI/PO获取文件名及路径

Sender Adapter设置如下&#xff1a; UDF定义如下&#xff1a; DynamicConfiguration conf (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION); //get file name DynamicConfigurationKey keyFile…

什么是Amazon Relational Database Service(Amazon RDS)及实践体验

目录 前言亚马逊云服务免费体验中心三种优惠类型 Amazon RDS什么是Amazon RDS为什么选择 Amazon RDS&#xff1f;Amazon RDS 的优势关键功能详情工作原理Amazon RDSAmazon RDS CustomAmazon RDS on Amazon Outposts 实践创建并连接到 MySQL 数据库实例一、创建 EC2 实例二、创建…

SpringCloudAlibaba组件之间的版本兼容问题

我之前的SpringCloud项目以及使用的组件的版本是这些 但是我不知道具体的版本兼容问题&#xff0c;以及各种组件之间对应的版本 想要使用我们的springcloud和springcloudAlibaba组件&#xff0c;我们就要版本对应&#xff0c;不然就是一堆依赖报错&#xff0c;要不就是缺了这个…

百望云助力北京市首批“乐企平台”直连企业—北京城建集团成功开具乐企数电票

近日&#xff0c;北京城建集团完成i城建平台与国家税务总局乐企平台的对接&#xff0c;成功开具出建筑行业数电票。这意味着北京城建集团成为北京市首批实现乐企平台直连的企业&#xff0c;标志着集团在财税数字化上取得重要进展。 百望云作为项目服务方&#xff0c;共同见证了…

如何删除电脑自带的游戏

要删除电脑自带的游戏&#xff0c;如扫雷和纸牌&#xff0c;你可以按照以下步骤操作&#xff0c;这些步骤基于Windows操作系统&#xff1a; 对于Windows 7及其更早版本 打开控制面板选择“程序”打开或关闭Windows功能找到并取消勾选游戏 对于Windows 10及更高版本 打开“设…

SpringBoot 实现全局异常处理

为什么要使用全局异常处理&#xff1f; 减少冗余代码&#xff1a; 在不使用全局异常处理器的情况下&#xff0c;项目中各层可能会出现大量的try {…} catch {…} finally {…}代码块&#xff0c;这些代码块不仅冗余&#xff0c;还影响代码的可读性。全局异常处理器允许我们在一…

大润发超市购物卡怎么用?

收到大润发超市的礼品卡以后&#xff0c;我才发现&#xff0c;最近的大润发也得十来公里 为了100块的大润发打车也太不划算了 叫外送也不在配送范围内 最后没办法&#xff0c;在收卡云上出掉了&#xff0c;还好最近价格不错&#xff0c;也不亏&#xff0c;收卡云的到账速度也…

Windows反截屏开发实现

文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力&#xff0c;所谓反截屏就是我们无法通过截图软件&#xff08;微信&#xff0c;QQ&#xff0c;截图等程序&#xff09;截取桌面的…

redis 缓存jwt令牌设置更新时间 BUG修复

大家好&#xff0c;今天我又又又来了&#xff0c;hhhhh。 上文中 我们永redis缓存了token 但是我们发现了 一个bug &#xff0c;redis中缓存的token 是单用户才能实现的。 就是 我 redis中存储的键 名 为token 值 是jwt令牌 &#xff0c;但是如果 用户a 登录 之后 创建一个…