C#:不同登录用户阅读状态的修改:不同的登录用户,登录用户修改阅读状态后,状态变为已读,未修改阅读状态的用户,依然显示未读的程序实例

news2025/1/16 4:00:40

一、创建数据库

首先,可以使用SQL Server Management Studio创建一个新的数据库(MyDatabase) 以及三个表(Users, Messages, UserMessageStatus),分别用于存储用户信息,消息信息以及用户消息状态。

Users表

该表包含了所有注册用户的信息。

FieldType
idint (PK)
usernamevarchar(50)
passwordvarchar(50)

Messages表

该表存储了所有的消息信息。

FieldType
idint (PK)
titlevarchar(50)
contentvarchar(500)
created_timedatetime

UserMessageStatus表

该表用于记录每个用户与每个消息的关系,以及他们对消息的阅读状态。

FieldType
idint (PK)
user_idint (FK)
message_idint (FK)
statusvarchar(10)

其中,FK代表外键。

  1. 添加数据

在Users和Messages表中添加数据。

INSERT INTO Users VALUES (1, 'user1', 'password1') INSERT INTO Users VALUES (2, 'user2', 'password2')

INSERT INTO Messages VALUES (1, 'Message 1', 'This is message 1', '2023-06-06 10:00:00') INSERT INTO Messages VALUES (2, 'Message 2', 'This is message 2', '2023-06-05 10:00:00') INSERT INTO Messages VALUES (3, 'Message 3', 'This is message 3', '2023-06-04 10:00:00')

二、构建应用程序

现在,可以使用C#编写一个程序来实现用户登录以及消息的阅读状态更新。

首先,创建一个User类,用于表示用户信息。

public class User
{
   public int Id { get; set; }
   public string Username { get; set; }
   public string Password { get; set; }
}

然后,创建一个Message类,用于表示消息信息。

public class Message
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public DateTime CreatedTime { get; set; }
}

创建一个UserMessageStatus类,用于表示用户与消息之间的关系。

public class UserMessageStatus
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public int MessageId { get; set; }
    public string Status { get; set; }
}

接下来,定义一个数据访问类,用于操作数据库中的数据。

public class DataAccess
{
   private readonly string connectionString = "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;";

   public List<User> GetUsers()
   {
      string query = "SELECT * FROM Users";
      using (SqlConnection connection = new SqlConnection(connectionString))
      {
          List<User> users = connection.Query<User>(query).ToList();
          return users;
      }
   }

   public List<Message> GetMessages()
   {
      string query = "SELECT * FROM Messages";
      using (SqlConnection connection = new SqlConnection(connectionString))
      {
          List<Message> messages = connection.Query<Message>(query).ToList();
          return messages;
      }
   }

   public List<UserMessageStatus> GetUserMessageStatus(int userId)
   {
      string query = $"SELECT * FROM UserMessageStatus WHERE user_id = {userId}";
      using (SqlConnection connection = new SqlConnection(connectionString))
      {
          List<UserMessageStatus> userMessageStatuses = connection.Query<UserMessageStatus>(query).ToList();
          return userMessageStatuses;
      }
   }

   public void UpdateUserMessageStatus(int userId, int messageId)
   {
      string query = $"UPDATE UserMessageStatus SET status = 'Read' WHERE user_id = {userId} AND message_id = {messageId}";
      using (SqlConnection connection = new SqlConnection(connectionString))
      {
          connection.Execute(query);
      }
   }
}

其中,GetUsers() 用于获取所有注册用户;GetMessages() 用于获取所有消息;GetUserMessageStatus(userId) 用于获取给定用户的所有消息状态;UpdateUserMessageStatus(userId, messageId) 用于将给定消息标记为已读。

最后,创建一个主程序,以便用户可以登录,查看消息并标记为已读。

class Program
{
   static void Main(string[] args)
   {
      DataAccess dataAccess = new DataAccess();

      Console.WriteLine("Please log in:");
      Console.Write("Username: ");
      string username = Console.ReadLine();
      Console.Write("Password: ");
      string password = Console.ReadLine();

      List<User> users = dataAccess.GetUsers();
      User user = users.SingleOrDefault(u => u.Username == username && u.Password == password);
      if (user == null)
      {
         Console.WriteLine("Invalid user.");
         return;
      }

      List<Message> messages = dataAccess.GetMessages();
      foreach (Message message in messages)
      {
         List<UserMessageStatus> userMessageStatuses = dataAccess.GetUserMessageStatus(user.Id);
         UserMessageStatus userMessageStatus = userMessageStatuses.SingleOrDefault(ums => ums.MessageId == message.Id);
         if (userMessageStatus != null && userMessageStatus.Status == "Read")
         {
             Console.WriteLine("[Read] {0} - {1} ({2})", message.CreatedTime, message.Title, message.Content);
         }
         else
         {
             Console.WriteLine("[Unread] {0} - {1} ({2})", message.CreatedTime, message.Title, message.Content);
         }
      }

      Console.Write("Enter the ID of the message you want to mark as read: ");
      int messageId = int.Parse(Console.ReadLine());

      dataAccess.UpdateUserMessageStatus(user.Id, messageId);

      Console.WriteLine("Message marked as read.");
    }
}

该程序首先要求用户进行登录,然后加载所有的消息并将它们按阅读状态分组。如果该消息已被该用户标记为已读,则显示[Read]标记。否则,显示[Unread]标记。最后,用户可以输入要将其标记为已读的消息的 ID。

在用户将消息标记为已读后,程序将调用UpdateUserMessageStatus方法,并将消息的ID和用户的ID传递给该方法,以便将消息的状态更新为“Read”。

三、效果演示:

1、运行程序,首先登录账号user2,password2,登录后可以看到有3条未读信息,如下所示:

 2、选择第3条数据设置为已读,输入3后点回车后程序会关闭,如下所示:

 3、再次运行程序查看,状态修改成功

 

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

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

相关文章

Es elasticsearch 十七 Java api 实现聚合 几个聚合示例 sql 开启许可 新特效 java 实现es7 sql 功能

目录 Java api 实现聚合 依赖 简单聚合按照颜色分组获取每个卖出数量 聚合每个颜色卖出数量&#xff0c;及平均价格&#xff08;每个分桶子聚合&#xff09; 按照颜色分组 &#xff0c;获取销售数量&#xff0c;avg min max sum 按照600区间价格范围分组&#xff0c;算出…

你学习web安全的路线可以介绍是吗

学习网络安全一定要选好一个方向去下功夫&#xff0c;如果不清楚自己究竟适合什么方向&#xff0c;可以都稍微尝试一下再来做选择&#xff0c;实战能力才是重点&#xff0c;所以你最应该找平台&#xff0c;多多实战&#xff0c;完成实际项目&#xff01; 书籍推荐&#xff1a;…

『赠书活动 | 第九期』清华社赞助 | 《Java系列丛书》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第九期』 本期书籍&#xff1a;《Java系列丛书》 公众号赠书&#xff1a;第一期 参与方式&#xff1a;关注公众号&#xff1a;低调而奢华 …

react-router V6 传递参数的三种方式

react-router V6 传递参数的三种方式 路由跳转使用navigate()路由传参1&#xff0c;searchParams传参2&#xff0c;params 传参3&#xff0c;state传参总结 路由跳转使用navigate() 编程式导航 导入一个 useNavigate钩子函数执行 useNavigate 函数得到 跳转函数在事件中执行跳…

服务器PING值不稳定是什么情况?

​  服务器ping值不稳定是指服务器在不同时间段内&#xff0c;对同一IP地址进行ping测试时&#xff0c;返回的延迟时间不同&#xff0c;存在波动的情况。这种情况会对服务器的性能和稳定性产生影响&#xff0c;影响用户的使用体验。下面我们来分析一下服务器ping值不稳定的原…

模拟IC方向面试常考问题及答案汇总,IC人必看

有不少小伙伴说想了解模拟IC方向的面试题目&#xff0c;这不就来了&#xff01;&#xff08;文末可领全部面试题目&#xff09; 1. 基尔霍夫定理的内容是什么&#xff1f; 电流定律&#xff1a;在集总电路中&#xff0c;任何时刻&#xff0c;对任一节点&#xff0c;所有流出节…

怎样让你的客户服务更高效

随着商业环境的变化&#xff0c;越来越多的企业开始意识到客户服务对于企业的重要性。高效的客户服务能够促进客户满意并增加销售额&#xff0c;从而帮助企业获得更大的成功。但是&#xff0c;怎样才能让您的客户服务更高效呢&#xff1f;以下是一些建议。 建立一个完善的客户…

浅水域三维探地雷达数值模拟研究

Gprmax浅水域三维地质雷达数值模拟研究 前言 浅水域地下不良地质体的探测一直是工程勘察的难点&#xff0c;地质雷达具有仪器轻便、操作简洁、分辨率高的优势&#xff0c;在浅水域勘察中具有很大的应用前景。目前&#xff0c;二维地质雷达已经有不少应用&#xff0c;三维地质…

面试专题:设计模式

面试时常见的就是的就是让你手写一个单例模式&#xff08;注意单例模式的几种不同的实现方法&#xff09;或者让你说一下某个常见的设计模式在你的项目中是如何使用的&#xff0c;另外面试官还有可能问你抽象工厂和工厂方法模式的区别、工厂模式的思想这样的问题。 建议把代理模…

C++核心编程——详解运算符重载

文章目录&#x1f4ac; 一.运算符重载基础知识①基本概念②运算符重载的规则③运算符重载形式④运算符重载建议 二.常用运算符重载①左移(<<)和右移(>>)运算符重载1️⃣重载后函数参数是什么&#xff1f;2️⃣重载的函数返回类型是什么&#xff1f;3️⃣重载为哪种…

Web测试有哪些基本要点?软件测试找第三方软件检测机构靠谱吗?

互联网时代的到来&#xff0c;让Web应用成为了人们生活和工作中不可或缺的一部分。随着Web应用的快速发展&#xff0c;Web测试也变得越来越重要。本文将从Web测试的基本要点和第三方软件检测机构的可靠性两方面进行讨论。 一、Web测试的基本要点 1. 安全性测试&#xff1a;评…

JVM(Java Virtual Machine)

JVM &#x1f50e;内存区域划分Program Counter Register(程序计数器)Native Method Stacks(本地方法栈)JVM Stacks(虚拟机栈)区分虚拟机栈与本地方法栈&#x1f36d;栈是线程私有的&#x1f36d; Heap(堆区)Metaspace(元数据区)总结 &#x1f50e;类加载类加载的流程加载验证准…

【Apache-Flink零基础入门】「入门到精通系列」手把手+零基础带你玩转大数据流式处理引擎Flink(有状态的流式处理)

手把手零基础带你玩转大数据流式处理引擎Flink&#xff08;有状态的流式处理&#xff09; 传统批处理批处理的特点批处理执行原理理想方法 流式处理分布式流式处理有状态分布式流式处理有状态分散式流式处理 总结分析 传统批处理 传统批处理数据是指一种数据处理方式&#xff…

什么是文件描述符以及重定向的本质和软硬链接(Linux)

目录 1 什么是文件&#xff1f;什么是文件操作&#xff1f;认识系统接口open 什么是文件描述符认识Linux底层进程如何打开的文件映射关系重定向的本质理解软硬链接扩展问题 1 什么是文件&#xff1f;什么是文件操作&#xff1f; 文件 文件内容 文件属性&#xff08;文件属性…

暴力递归到动态规划(二)

⭐️前言⭐️ 本篇文章是由暴力递归到动态规划篇章的第二篇。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源…

扫码出入库系统在哪些行业使用率最高?服务业绑得最紧密

什么是扫码出入库系统 扫码出入库系统是一种流行的库存管理系统&#xff0c;它使用二维码、条形码或RFID等技术来管理仓库内的物品出入库情况。 使用扫码出入库系统&#xff0c;用户可以通过扫描物品的二维码或条形码&#xff0c;快速地将物品信息录入系统中&#xff0c;同时…

采用sysbench压测mysql详解

文章目录 安装sysbench工具基于sysbench构造测试表和测试数据数据库读写性能测试数据库读性能测试数据库删除性能测试数据库更新索引字段性能测数据库更新非索引字段性能测试数据库插入数据性能测试数据库写性能测试执行完成压测之后可以将run改成cleanup&#xff0c;清除数据 …

LegalAI公开数据集的整理、总结及介绍(持续更新ing…)

诸神缄默不语-个人CSDN博文目录 最近更新日期&#xff1a;2023.6.7 最早更新日期&#xff1a;2023.6.7 文章目录 1. 司法判决预测2. 通用语料3. 其他集成项目4. 推理5. NLU6. NLG1 QA2 文本摘要 7. 信息抽取1 命名实体识别2 句子边界检测&#xff08;分句&#xff09; 1. 司法…

青岛科技大学|物联网工程|物联网定位技术(第二讲)|15:00

目录 物联网定位技术&#xff08;第二讲&#xff09; 1. 卫星的轨道高度与覆盖区域有何关系&#xff0c;试画图给予说明覆盖区地心角与覆盖面积的关系 2. 试给出实际的卫星地面覆盖区和用户空间可视区所对应的半地心角的公式并请给予解释 3. 定位导航卫星为什么一般不采用同…

【集群】LVS负载均衡群集

文章目录 前言一、企业群集应用概述1. 群集的含义1.1 群集的特点1.2 扩展服务器的方式 2. 群集的类型2.1 负载均衡群集&#xff08;Load Balance Cluster&#xff09;2.2 高可用群集&#xff08;High Availability Cluster&#xff09;2.3 高性能运算群集&#xff08;High Perf…