使用 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类
    {
        // 静态字段,用于存储用户ID
        static 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;
        }

        // 属性,用于获取用户ID
        public 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对象,用于执行查询并填充DataTable
                SqlDataAdapter Consultantdataadapter = new SqlDataAdapter(SQL, con);
                // 填充DataTable
                Consultantdataadapter.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表;您将得到如下结果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue+mybatis教师工作审核系统+PPT+论文+讲解+售后

随着社会不断进步与发展,生活节奏不断加快,信息已经成为我们生活中不可缺少的一部分,很多学校需要掌握大量的信息来了解特定学生的需求,传统的做法是组织大量的人力物力对学生散发调查表,然后对收集的信息进行统计并得…

PHP调用阿里云OSS的SDK封装成服务的完整指南与问题解决

在现代Web开发中,使用云存储来管理和存储大量的静态文件已经成为常态。阿里云OSS(对象存储服务)是其中一个非常受欢迎的选择。在这篇文章中,我们将详细讲解如何在PHP项目中集成并使用阿里云OSS SDK。 #### 一、前期准备 在开始之…

SSH概念、用途、详细使用方法

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

【安装笔记-20240616-Windows-Gpg4win 证书管理器】

安装笔记-系列文章目录 安装笔记-20240616-Windows-Gpg4win 证书管理器 文章目录 安装笔记-系列文章目录安装笔记-20240616-Windows-Gpg4win 证书管理器 前言一、软件介绍名称:Gpg4win主页官方介绍 二、安装步骤测试版本:Gpg4win 4.3.1下载链接安装界面…

调用第三方系统的签名设计与校验实例讲解与实践

在现代软件开发中,调用第三方系统API已经成为常见需求。为了保证数据传输的安全性和完整性,许多API采用了签名机制。本文将详细讲解如何设计与校验调用第三方系统的签名,以确保双方通信的安全和可靠。 #### 一、签名机制的意义 签名机制主要…

ElasticSearch地理空间数据了解

ElasticSearch地理空间数据了解 使用场景 Elasticsearch 的地理空间数据处理功能在现代社会中有着广泛的应用,以下是一些常见的使用场景和方向: 1. 位置搜索和导航 本地服务发现:应用程序可以使用 Elasticsearch 查找用户附近的餐馆、商店…

awd工具安装

fscan(漏洞扫描) 下载 下载地址: Releases shadow1ng/fscan GitHub 把下载的文件放到指定文件目录里, 在文件的位置打开cmd 输入 fscan64.exe -h 192.168.1.1/24 ok了 接下来说说fscan的使用 使用 1.信息搜集: 存活探测(icmp) 端口扫描 2.爆破功能: 各类服务爆破(…

Django REST framework视图集与路由详解:深入理解ViewSet、ModelViewSet与路由映射器

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

Java | Leetcode Java题解之第160题相交链表

题目: 题解: public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA null || headB null) {return null;}ListNode pA headA, pB headB;while (pA ! pB) {pA pA null ? headB : pA.next;pB …

几何公差的设计和选用

保证轴承的旋转精度,提出圆柱度; 这里的轴肩部面 为了测量方便,使用圆跳动代替垂直度公差方便一些。

胡说八道(24.6.10)——数电与STM32

至此,信号与系统的简单笔记已经全部都写完了。其实,信号与系统的知识远远不只这些,总之,我的老师没讲完。其真实的原因是不在考试大纲里面。今天,看到一个短视频——学习的意义。其中有句话说,“因为考试不…

Spring MVC详解(上)

一、Spring MVC初步认识 1.1介绍 Spring MVC是Spring Framework提供的Web组件,全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架,提供前端路由映射、视图解析等功能 Java Web开发者必须要掌握的技术框架 1.2MVC是什么 MVC是一种软件架构思想…

证明 指数分布 的期望和方差

指数分布 指数分布(Exponential Distribution)是一种常见的连续型概率分布,通常用于描述事件之间的时间间隔。假设随机变量 ( X ) 服从参数为 ( \lambda ) 的指数分布,记作 指数分布的概率密度函数(PDF)…

【教程】设置GPU与CPU的核绑(亲和力Affinity)

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 简单来说,核绑,或者叫亲和力,就是将某个GPU与指定CPU核心进行绑定,从而尽可能提高效率。 推荐与进程优先…

Linux源码阅读笔记02-进程原理及系统调用

进程和进程的生命周期 进程:指计算机中已运行的程序。进程本身不是基本的运行单位,而是线程的容器。程序本身不是基本的运行单位,而是线程的容器。程序是指令、数据和组织形式的描述,进程才是程序的真正运行实例。Linux内核把进程…

《人生海海》读后感

麦家是写谍战的高手,《暗算》《风声》等等作品被搬上荧屏后,掀起了一阵一阵的收视狂潮。麦家声名远扬我自然是知道的,然而我对谍战似乎总是提不起兴趣,因此从来没有拜读过他的作品。这几天无聊时在网上找找看看,发现了…

使用 Oracle SQL Developer 导入数据

使用 Oracle SQL Developer 导入数据 1. 导入过程 1. 导入过程 选择要导入数据的表, 然后单击右键,选择"导入数据", 浏览本地文件,选择正确的工作表, 按默认, 按默认, 根据情况修改&…

HarmonyOS Next 系列之从手机选择图片或拍照上传功能实现(五)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现(一) HarmonyOS Next 系列之验证码输入组件实现(二) HarmonyOS Next 系列之底部标签栏TabBar实现(三) HarmonyOS Next 系列之HTTP请求封装和Token…

践行国产化替代,优刻得私有云勇当先锋

编辑:阿冒 设计:沐由 阳泉,十万火急! 位于太行山西麓的山西省阳泉市,是一座历史悠久、底蕴深厚、资源丰富的名城,拥有超百万常住人口,国内生产总值在2022年成功跨越千亿元大关。然而&#xff0c…

IDEA上MySQL的jar包导入教程

jar包下载网址——》https://mvnrepository.com/ 1.进入界面,点击搜索框,搜索mysql: 外国网站,可能有点慢,耐心等待即可。 2.点击查询结果: 进入界面,点击前两个结果的其中一个,两个都可以 …