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

一、创建数据库

首先,可以使用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、再次运行程序查看,状态修改成功

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值