Трудности с архитектурой взаимодействия классов - C#

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

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

Привет! На днях стал делать лабораторную работу по Си шарп, и столкнулся со значительной проблемой в разработке архитектуры. У меня есть три класса: 1)один из классов содержит точку входа + организует работу пользователя с консолькой.
using System;
namespace Sharp
{

    class MainClass
    {
        private void ShowMenu()
        {
            Console.WriteLine("1. Добавить данные нового сотрудника");
            Console.WriteLine("2. Удалить данные сотрудника");
            Console.WriteLine("3. Показать всех сотрудников");
            Console.WriteLine("4. Выйти из программы");
        }

        private void AddMenu(SetOfEmployees emp)
        {
            PostTypes post;

            emp.CheckCapacity();
 
            Console.WriteLine("Введите имя нового сотрудника");
            string Name = Console.ReadLine();
            emp.AddName(Name);
 
            Console.WriteLine("Введите фамилию нового сотрудника");
            string Surname = Console.ReadLine();
            emp.AddSurname(Surname);
 
            Console.WriteLine("Введите отчество нового сотрудника");
            string Patronymic = Console.ReadLine();
            emp.AddPatronymic(Patronymic);

            Console.WriteLine("Введите должность нового сотрудника");
            #region
            for (post = PostTypes.Developer; post <= PostTypes.Administrator; post++)
            {
                Console.WriteLine((int)(post) + ")" + post);
            }

            int num_post = Convert.ToInt32(Console.ReadLine());
 
            while (!emp.AddPost(num_post))
            {
                Console.WriteLine("Пожалуйста, введите должность правильно");
                num_post = Convert.ToInt32(Console.ReadLine());
 
            }
            #endregion
 
            Console.WriteLine("Введите дату рождения нового сотрудника");
 
            string DateBirth = Console.ReadLine();
            #region
            while (!emp.CheckDateBirth(DateBirth))
            {
                Console.WriteLine("Введите дату рождения в соответствии с форматом дд.мм.год");
                DateBirth = Console.ReadLine();
 
            }
            #endregion
            emp.Add();
 
        }
 
        private void ShowMenu(SetOfEmployees emp)
        {
            Employee[] temp; 
            temp = emp.GetEmployees;
            int i = 0;
            if (emp.getSize() != 0)
            {
                while (i < emp.getSize())
                {
                    Console.WriteLine(temp[i].surname + " " + temp[i].dateBirth);
                    i++;
                    
                }
 
            }
            else
                Console.WriteLine("Элементов нет");
        }

        private void DeleteMenu(SetOfEmployees emp)
        {
            Console.WriteLine("Введите фамилию увольняемого сотрудника");
            string Surname = Console.ReadLine();
            int temp = emp.Delete(Surname);
            if (temp == -1 || temp == 0)
                Console.WriteLine("Элемент не найден / или список пуст");
            else
                Console.WriteLine("Удаление прошло успешно");
           
        }

        static void Main()
        {
 
            SetOfEmployees ProgramObject = new SetOfEmployees();
            MainClass meth = new MainClass();
            while (true)
            {
                meth.ShowMenu();
 
                int IntKey = Convert.ToInt32(Console.ReadLine());
 
                switch (IntKey)
                        {
                            case 1:
                                meth.AddMenu(ProgramObject);
                                break;
                            case 2:
                                meth.DeleteMenu(ProgramObject);
                                break;
                            case 3:
                                meth.ShowMenu(ProgramObject);
                                break;
                            case 4:
                                break;
                        }
                        if (IntKey == 4)
                        {        //5 - ключ выхода
                            break;
                        }
                        Console.ReadKey();
                        Console.Clear();
 
                    }
                }
 
    }

}
2) Второй класс описывает предметную область - в моем случае это "Сотрудник" с такими полями данных как имя, фамилия, отчество и т.д. Этот класс по условию должен содержать параметризированный конструктор, инициализирующий поля данных этого класса
using System;

namespace Sharp
{
    public class Employee
    {
        public string name;
        public string surname;
        public string patronymic;
        public string dateBirth;
        public int post;
 
        public Employee(String Name, String Surname, String Patronymic, string DateBitrh, int Post)
        {
            name = Name;
            surname = Surname;
            patronymic = Patronymic;
            post = Post;
            dateBirth = DateBitrh;
        }

    }
}
3)Третий класс - класс, собственно, инкапсулирующий данные из второго класса и осуществляющий такие действия, как удаление, поиск, добавление новых элементов.
using System;

namespace Sharp
{
    public class SetOfEmployees
    {
 
        private Employee[] emp = new Employee[10];
        private int _lastIndex = 0;
        string tempName, tempSurname, tempPatr, tempDateBirth;
        int tempPost;

        //Метод, проверяющий размер массива, и увеличивающий его в случае недостаточного размера
        public void CheckCapacity() 
        {
 
            if (_lastIndex == emp.Length - 1)
            {
                Array.Resize(ref emp, emp.Length * 2);
            }        

        }

        //добавляет имя
        public void AddName(string name)
        {
            tempName = name;           
        }
 
        public void AddSurname(string surname)
        {
            tempSurname = surname;
        }
 
        public void AddPatronymic(string patronymic)
        {
            tempPatr = patronymic;
        }
        //проверяет, если ли соответствие введенному пользователем номеру в перечислении
        public bool AddPost(int post)
        {
            if (post >= 4)
                return false;
            else
            {
                tempPost = post;
                return true;
            }
 
        }
        //проверяется, правильно ли пользователь ввел дату
        public bool CheckDateBirth(string DateBirth)
        {
            DateTime DateValid;
 
            if (!DateTime.TryParse(DateBirth, out DateValid))
                return false;
            else
                tempDateBirth = DateBirth;
                return true;
 
        }
        //метод, выывающий параметризированный конструктор
        public void Add()
        {
                emp[_lastIndex] = new Employee(tempName, tempSurname, tempPatr, tempDateBirth, tempPost);
                 _lastIndex++;
        }

        //Метод,удаляющий элемент по ключу "Surname"
        public int Delete(string surname)
        {
            int flag = 0;
            if (_lastIndex == 0)
                return -1;
            else
            {
                for (int i = 0; i < _lastIndex; i++)
                {
                    if (emp[i].surname == surname)
                    {
                        flag = 1;
                        Array.Resize(ref emp, _lastIndex-1);
                        _lastIndex--;
                        
                    }
                        
                }
            }
            if (flag == 0)
                return 0;
            else
                return 1;
 
        }
        //доступ к полям данных(только чтение)
        public Employee[] GetEmployees
        {
            get
            {
                return emp;
            }
        }
        //возвращает текущий размер массива данных
        public int getSize()
        {
            return _lastIndex;
        } 

    }
}
Ну, собственно, вы видите, какие костыли у меня в третьем классе. Мне приходится содержать переменные, которые принимают данные, введенные пользователем, и все только потому, что мне нужно передать конструктору аргументы одновременно. А препод сказал, что сделать это нужно напрямую, без промежуточных переменных. Был бы очень рад, если бы вы дали мне советы по тому, как можно ее модернизировать так сказать по правилам хорошего кода. Заранее огромной спасибо!

Решение задачи: «Трудности с архитектурой взаимодействия классов»

textual
Листинг программы
foreach (var employee in tmp)
            {
                employee.ToString();
            }

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


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

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

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