Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2017, 14:26   #1
Wektor9911
Пользователь
 
Регистрация: 09.12.2017
Сообщений: 18
По умолчанию Реализовать программу с использованием структур и перечислений

Помогите, пожалуйста, сократить программу, что бы она была реализована Только с помощью структур и перечислений:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
 
namespace ConsoleApp32
{
    public enum Position
    {
        [Description("Главнюк")]
        CEO = 1,
        [Description("Клерк")]
        Manager = 2,
        [Description("Работяга")]
        Worker = 3
    }
 
    public enum Action
    {
        Add = 1,
        PrintAll = 2,
        Print = 3,
        Exit = 4
    }
 
    public class Employee
    {
        public string LastName { get; set; }
        public int Age { get; set; }
        public Position Position { get; set; }
        public int Experience { get; set; }
        public int Pension { get; set; }
    }
 
    class Program
    {
        static List<Employee> employes = new List<Employee>();
 
        static void Main(string[] args)
        {
            Func<Employee, string> selector = x => $"Фамилия: {x.LastName,-20}\tВозраст: {x.Age,2}\tДолжность: {GetEnumDescription(x.Position),-10}\tСтаж: {x.Experience,2}\tПенсия: {x.Pension,2}";
 
            while (true)
            {
                var action = SelectAction();
 
                if (action == Action.Exit) Environment.Exit(0);
 
                if (action == Action.Add)
                {
                    Console.Clear();
                    employes.Add(AddEmployee());
 
                    Console.Clear();
                    Console.WriteLine("Запись добавлена.\n");
                }
 
                if (action == Action.PrintAll)
                {
                    Console.Clear();
                    Console.WriteLine(string.Join("\n", employes.Select(selector)));
                    Console.WriteLine();
                }
 
                if (action == Action.Print)
                {
                    Console.Clear();
                    Console.WriteLine(string.Join("\n", employes.Where(x => x.Pension <= 15).Select(selector)));
                    Console.WriteLine();
                }
            }
 
        }
 
        static Employee AddEmployee()
        {
            Employee error()
            {
                Console.Clear();
                Console.WriteLine("Ошибка ввода. Начните заново :)");
 
                return AddEmployee();
            };
 
            var empl = new Employee();
 
            Console.Write("Фамилия: ");
            empl.LastName = Console.ReadLine();
 
            Console.Write("Возраст: ");
            if (!int.TryParse(Console.ReadLine(), out int age)) return error();
            empl.Age = age;
 
            Console.WriteLine("Должность (выберите из списка): ");
            foreach (var item in Enum.GetValues(typeof(Position)))
            {
                Console.WriteLine($"[{(int)item}] {GetEnumDescription((Position)item)}");
            }
            if (!int.TryParse(Console.ReadLine(), out int position) || !Enum.GetValues(typeof(Position)).Cast<Position>().Any(x => x == (Position)position)) return error();
            empl.Position = (Position)position;
 
            Console.Write("Стаж: ");
            if (!int.TryParse(Console.ReadLine(), out int exp)) return error();
            empl.Experience = exp;
 
            Console.Write("Лет до пенсии: ");
            if (!int.TryParse(Console.ReadLine(), out int pension)) return error();
            empl.Pension = pension;
 
            return empl;
        }
 
        static Action SelectAction()
        {
            Console.WriteLine("Выберите действие:");
            Console.WriteLine($"[{(int)Action.Add}] Добавить запись.");
            Console.WriteLine($"[{(int)Action.PrintAll}] Показать всех.");
            Console.WriteLine($"[{(int)Action.Print}] Показать кому осталось менее 15 лет до пенсии.");
            Console.WriteLine($"[{(int)Action.Exit}] Выход.");
 
            var input = Console.ReadLine();
 
            if (!int.TryParse(input, out int result) || !Enum.GetValues(typeof(Action)).Cast<Action>().Any(x => x == (Action)result))
            {
                Console.Clear();
                Console.WriteLine("Ошибка ввода!!!\n");
 
                return SelectAction();
            }
 
            return (Action)result;
        }
 
        static string GetEnumDescription(Enum value)
        {
            var fi = value.GetType().GetField(value.ToString());
            var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
 
            if (attributes != null && attributes.Length > 0)
            {
                return attributes[0].Description;
            }
            else
            {
                return value.ToString();
            }
        }
    }
}

Последний раз редактировалось Wektor9911; 09.12.2017 в 14:38.
Wektor9911 вне форума Ответить с цитированием
Старый 09.12.2017, 14:35   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это приказ?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.12.2017, 14:39   #3
Wektor9911
Пользователь
 
Регистрация: 09.12.2017
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Это приказ?
Нет, просто я не очень хорошо проникся именно этим форумом, на прошлом, такие слова, как "Пожалуйста", "Помогите" были запрещены) Извеняюсь
Wektor9911 вне форума Ответить с цитированием
Старый 09.12.2017, 14:53   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Скорее всего там были запрещены не слова, а темы состоящие только из задания и этих слов.
То есть примерно как и тут, это ж форум, а не решатель задач

Покажите свои наработки, конкретные вопросы и т.п.
http://www.programmersforum.ru/announcement.php?f=31

Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.12.2017, 14:59   #5
Wektor9911
Пользователь
 
Регистрация: 09.12.2017
Сообщений: 18
По умолчанию

Задание такое: "Дан список не менее 8 рабочих. Ввести фамилию, возраст, должность, стаж работы, сколько до пенсии. Вывести сведения о тех рабочих, кому осталось меньше 15 лет до пенсии. Должности предприятия оформить в виде констант перечисления." Программу я составил, но задание основано на программировании с помощью структур и перечислений. Получилось не совсем то, что нужно, прошу помощи)
Wektor9911 вне форума Ответить с цитированием
Старый 09.12.2017, 17:17   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

"Только с помощью структур и перечислений" это как вообще? Заменить первое слово class на struct?

Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.12.2017, 17:21   #7
Wektor9911
Пользователь
 
Регистрация: 09.12.2017
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
"Только с помощью структур и перечислений" это как вообще? Заменить первое слово class на struct?

Мне сказали, что программа слишком большая, можно сократить, и плюс что бы в ней присутствовали структуры и перечисления, так правильнее будет объяснить
Wektor9911 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать программу с использованием шаблона dima2308 Общие вопросы C/C++ 6 18.05.2017 19:55
Помогите Реализовать программу математического типа с использованием ветвления или цикла Алексей95 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.05.2014 11:18
Напишите программу с использованием динамических структур(списка) netiv Паскаль, Turbo Pascal, PascalABC.NET 0 14.05.2012 22:51
Напишите программу с использованием динамических структур netiv Паскаль, Turbo Pascal, PascalABC.NET 2 02.03.2012 12:51
Реализовать программу с использованием библиотеки GGI. rjj Помощь студентам 0 29.02.2012 01:45