Простая система регистрации с 3 операциями - C#

Узнай цену своей работы

Формулировка задачи:

Решил сделать одно тестовое задание. Нужно реализовать простую систему регистрации с 3 операциями:
  1. «register username password» — зарегистрировать нового пользователя с именем «username» и установить для него пароль «password». Если такой пользователь уже есть в базе данных, необходимо выдать ошибку «fail: user already exists». Иначе нужно вывести сообщение «success: new user added».
  2. «login username password» — войти в систему от имени пользователя «username» с паролем «password». Если такого пользователя не существует в базе данных, необходимо выдать «fail: no such user». Иначе, если был введен неправильный пароль, нужно выдать «fail: incorrect password». Иначе, если пользователь уже находится в системе в данный момент, необходимо вывести «fail: already logged in». Иначе нужно вывести сообщение «success: user logged in».
  3. «logout username» — выйти из системы пользователем «username». Если такого пользователя не существует, необходимо вывести «fail: no such user». Иначе, если пользователь не находится в системе в данный момент, следует выдать «fail: already logged out». Иначе необходимо выдать сообщение «success: user logged out».
Вроде всё учёл в коде, но при проверке пишет, что выводится неверный ответ, и я понятия не имею, где может быть ошибка. Может кто увидит?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            int k = int.Parse(Console.ReadLine());      // кол-во вводимых строк
            List<string> logged = new List<string>();
            Dictionary<string, string> d = new Dictionary<string, string>();
            for (int i = 0; i < k; i++)
            {
                string[] s = Console.ReadLine().Split();
                string l = s[1];
                switch (s[0])
                {
                    case "register":
                        if (d.ContainsKey(l))
                            Console.WriteLine("fail: user already exists");
                        else
                        {
                            d.Add(l, s[2]);
                            Console.WriteLine("success: new user added");
                        }
                        break;
                    case "login":
                        string p = s[2];
                        if (d.ContainsKey(l))
                        {
                            string pass;
                            d.TryGetValue(l, out pass);
                            if (!logged.Contains(l))
                                if (p == pass)
                                {
                                    Console.WriteLine("success: user logged in");
                                    logged.Add(l);
                                }
                                else Console.WriteLine("fail: incorrect password");
                            else Console.WriteLine("fail: already logged in");
                        }
                        else Console.WriteLine("fail: no such user");
                        break;
                    case "logout":
                        if (d.ContainsKey(l))
                            if (logged.Contains(l))
                            {
                                Console.WriteLine("success: user logged out");
                                logged.Remove(l);
                            }
                            else Console.WriteLine("fail: already logged out");
                        else Console.WriteLine("fail: no such user");
                        break;
                }
            }
 
            Console.ReadKey();
        }
    }
}

Решение задачи: «Простая система регистрации с 3 операциями»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {
            RegSystem registerSystem = new RegSystem();
            registerSystem.LogMessage += registerSystem_LogMessage;
 
            //you code goes here
        }
 
        static void registerSystem_LogMessage(string msg)
        {
            Console.WriteLine(msg);
        }
    }
 
    public class RegSystem
    {
        private HashSet<UserInfo> _db;
 
        public RegSystem()
        {
            _db = new HashSet<UserInfo>();
        }
 
        public void Register(string username, string password)
        {
            var user = _db.FirstOrDefault(x => x.Name == username);
 
            if (user == null)
            {
                _db.Add(new UserInfo(username, password));
                OnLogMessage("success: new user added");
            }
            else
            {
                OnLogMessage("fail: user already exists");
            }
        }
 
        public void Login(string username, string password)
        {
            var user = _db.FirstOrDefault(x => x.Name == username);
 
            if (user == null)
            {
                OnLogMessage("fail: no such user");
                return;
            }
 
            if (user.Password != password)
            {
                OnLogMessage("fail: incorrect password");
                return;
            }
 
            if (user.Online)
            {
                OnLogMessage("fail: already logged in");
                return;
            }
 
            user.Online = true;
            OnLogMessage("success: user logged in");
        }
 
        public void Logout(string username)
        {
            var user = _db.FirstOrDefault(x => x.Name == username);
 
            if (user == null)
            {
                OnLogMessage("fail: no such user");
                return;
            }
 
            if (!user.Online)
            {
                OnLogMessage("fail: already logged out");
                return;
            }
 
            user.Online = false;
        }
 
        #region log
 
        public event Action<string> LogMessage;
 
        private void OnLogMessage(string cause)
        {
            if (LogMessage != null)
                LogMessage(cause);
        }
 
        #endregion log
    }
 
    public class UserInfo
    {
        public string Name { get; set; }
        public string Password { get; set; }
        public bool Online { get; set; }
 
        public UserInfo(string name, string password)
        {
            Name = name;
            Password = password;
            Online = false;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы