Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using System.Linq;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Text;
- namespace IMJunior
- {
- class Program
- {
- static UserRepository _users = new UserRepository();
- static void Main()
- {
- while (true)
- {
- string command = Console.ReadLine();
- switch (command)
- {
- case "Update":
- Console.WriteLine("Id:");
- int id = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Name:");
- string name = Console.ReadLine();
- Console.WriteLine("Money:");
- float money = (float)Convert.ToDouble(Console.ReadLine());
- Console.WriteLine(UpdateUser(id, name, money));
- break;
- case "Create":
- Console.WriteLine("Name:");
- string name2 = Console.ReadLine();
- Console.WriteLine("Money:");
- float money2 = (float)Convert.ToDouble(Console.ReadLine());
- Console.WriteLine(CreateUser(name2, money2));
- break;
- case "Show":
- Console.WriteLine(ShowUsers());
- break;
- }
- }
- }
- static string UpdateUser(int id, string name, float? money)
- {
- User user = _users.GetById(id);
- if (user == null) return "Вы не можете обновить это пользователя";
- if (name != null)
- {
- user.Name = name;
- }
- if (name != null)
- {
- user.Money = (float)money;
- }
- return "Обновление прошло успешно";
- }
- static string CreateUser(string name, float money)
- {
- User user = _users.Create();
- user.Name = name;
- user.Money = money;
- return "Пользователь создан";
- }
- static string ShowUsers()
- {
- StringBuilder response = new StringBuilder();
- foreach (var user in _users.GetAll())
- {
- response.Append($"[{user.Id}] {user.Name} - {user.Money}\n");
- }
- return response.ToString();
- }
- }
- class UserRepository
- {
- private readonly List<User> _users = new List<User>();
- public UserRepository()
- {
- using (var stream = File.Open($"database/users.database", FileMode.OpenOrCreate))
- {
- if (stream.Length == 0) return;
- IFormatter formater = new BinaryFormatter();
- _users = (List<User>)formater.Deserialize(stream);
- foreach (var user in _users)
- {
- user.OnDirty = Update;
- }
- }
- }
- public User[] GetAll()
- {
- return _users.ToArray();
- }
- public User GetById(int id)
- {
- return _users.FirstOrDefault((user) => user.Id == id);
- }
- public User Create()
- {
- int id = 0;
- if (_users.Count > 0)
- id = _users.Max((u) => u.Id) + 1;
- User user = new User(id);
- user.OnDirty = Update;
- _users.Add(user);
- SaveList();
- return user;
- }
- public void Update(User user)
- {
- //
- SaveList();
- }
- public void Delete(User user)
- {
- _users.Remove(user);
- SaveList();
- }
- private void SaveList()
- {
- using (var stream = File.Open($"database/users.database", FileMode.OpenOrCreate))
- {
- IFormatter formater = new BinaryFormatter();
- formater.Serialize(stream, _users);
- stream.Flush();
- }
- }
- }
- delegate void DirtyHandler(User user);
- [Serializable]
- class User
- {
- public int Id { get; private set; }
- private string _name;
- private float _money;
- [NonSerialized]
- public DirtyHandler OnDirty;
- public string Name {
- get => _name;
- set
- {
- _name = value;
- if(OnDirty != null)
- {
- OnDirty(this);
- }
- }
- }
- public float Money {
- get => _money;
- set
- {
- _money = value;
- if (OnDirty != null)
- {
- OnDirty(this);
- }
- }
- }
- public User(int id)
- {
- Id = id;
- }
- }
- }
Add Comment
Please, Sign In to add comment