Простая система регистрации с 3 операциями - C#
Формулировка задачи:
Решил сделать одно тестовое задание. Нужно реализовать простую систему регистрации с 3 операциями:
- «register username password» — зарегистрировать нового пользователя с именем «username» и установить для него пароль «password». Если такой пользователь уже есть в базе данных, необходимо выдать ошибку «fail: user already exists». Иначе нужно вывести сообщение «success: new user added».
- «login username password» — войти в систему от имени пользователя «username» с паролем «password». Если такого пользователя не существует в базе данных, необходимо выдать «fail: no such user». Иначе, если был введен неправильный пароль, нужно выдать «fail: incorrect password». Иначе, если пользователь уже находится в системе в данный момент, необходимо вывести «fail: already logged in». Иначе нужно вывести сообщение «success: user logged in».
- «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;
}
}
}