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

一、创建数据库

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

Users表

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

Field Type
id int (PK)
username varchar(50)
password varchar(50)

Messages表

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

Field Type
id int (PK)
title varchar(50)
content varchar(500)
created_time datetime

UserMessageStatus表

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

Field Type
id int (PK)
user_id int (FK)
message_id int (FK)
status varchar(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、再次运行程序查看,状态修改成功

猜你喜欢

转载自blog.csdn.net/chentiebo/article/details/131088497