Помогите, с заданием

182
20 января 2019, 05:30

Нужно, чтобы в кейсах можно было взаимодействовать в имеющимися у меня методами. То есть, когда выбираешь, например, увеличить или уменьшить остаток, в обоих кейсах считало из метода. Я понятия не имею, как подключить методы в мeйне.

public enum Bank_name { Sberbank, VTB24, Avangard}; // перечисления банков
class Schetvbanke // класс счет в банке
{
    public int Number; // номер
    public double ostatok; // остаток
    public Bank_name Name; // банк
    // конструктор
    public Schetvbanke(int Number, double ostatok, Bank_name Name)
    {
        this.Number = Number;
        this.ostatok = ostatok;
        this.Name = Name;
    }
}
class Program // рабочий класс
{
    public static void New_ostatok(Schetvbanke ost1, double newostatok) // передача нового остатка в метод
    {
        ost1.ostatok = newostatok;
    }
    public static void Percent(Schetvbanke ost1, int percent, char dir) // процент от остатка
    {
        double perc = ost1.ostatok * percent / 100; // процент от числа (остатка)
        if (dir == 'p') // для увеличения суммы
            ost1.ostatok = ost1.ostatok + perc;
        else if (dir == 'm') // для уменьшения суммы
            ost1.ostatok = ost1.ostatok - perc;
    }
    static void Main(string[] args) // точка входа
    {
        Schetvbanke schet1 = new Schetvbanke(1232342, 50, Bank_name.VTB24); // создание первого типа
        //schet1.Name = Bank_name.VTB24;
        Schetvbanke schet2 = new Schetvbanke(445453, 340, Bank_name.Avangard); // второй тип
        //schet2.Name = Bank_name.Avangard;
        Schetvbanke schet3 = new Schetvbanke(87654332, 0, Bank_name.Sberbank); // третий тип
        //schet3.Name = Bank_name.Sberbank;
        bool exit = false;
        while (exit == false)
        {
            Console.WriteLine("Выберите счет:\n\t1. Имя: {0}, Номер: {1}, Остаток: {2}\n\t2. Имя: {3}, Номер: {4}, Остаток: {5}\n\t3. Имя: {6}, Номер: {7}, Остаток: {8}", 
                schet1.Name, schet1.Number, schet1.ostatok, schet2.Name, schet2.Number, schet2.ostatok, schet3.Name, schet3.Number, schet3.ostatok );
            int chooseSchet = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Выберите операцию:\n\t1. Задать остаток\n\t2. Увеличить/уменьшить на %\n\t3. Выход");
            int chooseAction = Convert.ToInt32(Console.ReadLine());
            switch (chooseAction)
            {
                case 1: // остаток
                    {
                        break;
                    }
                case 2: // проценты
                    {
                        Console.WriteLine("Выберите операцию:\n\t1. Увеличить\n\t2. Уменьшить");
                        int chActPercent = Convert.ToInt32(Console.ReadLine());
                        switch (chActPercent)
                        {
                            case 1: // увеличить
                                {
                                    break;
                                }
                            case 2: // уменьшить
                                {
                                    Console.WriteLine();
                                    break;
                                }
                            default:
                                {
                                    Console.WriteLine("Неправильно выбрано действие!");
                                    break;
                                }
                        }
                        break;
                    }
                case 3:
                    {
                        exit = true;
                        break;
                    }
                default:
                    {
                        Console.WriteLine("Неправильно выбрано действие!");
                        break;
                    }
            }
        }
    }
}
Answer 1

/// <summary>
/// Банки
/// </summary>
enum BankType
{
    Sberbank,
    VTB24,
    Avangard
}
/// <summary>
/// Счет в банке
/// </summary>
class Account
{
    public int Number { get; private set; }
    public BankType Bank { get; private set; }
    //сумма счета
    public decimal Amount { get; private set; }
    //ctor
    public Account(BankType bankType, int number, decimal amount)
    {
        Bank = bankType;
        Number = number;
        Amount = amount;
    }

    /// <summary>
    /// Положить на счет
    /// </summary>
    /// <param name="amount">сумма для начисления</param>
    /// <returns>true if OK</returns>
    public bool Deposit(decimal amount)
    {
        if (amount < 1.00M)
        {
            var message = "Ошибка операции:" +
                "сумма начисления не может быть меньше одного рубля!";
            Console.WriteLine(message);
            return false;
        }
        Amount += amount;
        return true;
    }

    /// <summary>
    /// Снять со счета
    /// </summary>
    /// <param name="amount">сумма для снятия</param>
    /// <returns>true if OK</returns>
    public bool Withdraw(decimal amount)
    {
        if (amount < 1.00M)
        {
            var message = "Ошибка операции:" +
                "сумма снятия не может быть меньше одного рубля!";
            Console.WriteLine(message);
            return false;
        }
        if (amount > Amount)
        {
            var message = "Ошибка операции:" +
                "сумма снятия превышает сумму текущего счета!";
            Console.WriteLine(message);
            return false;
        }
        Amount -= amount;
        return true;
    }
}

Класс для сообщений и пользовательского ввода

static class AppView
{
    public enum OperationType
    {
        Exit, //выход из программы
        Deposit, //положить на счет
        Withdraw, //взять со счета
        SelectOtherAccount, //выбрать другой счет
        ShowAllAccounts, //показать список всех счетов
    }
    /// <summary>
    /// Вывод списка всех счетов
    /// </summary>
    /// <param name="accounts"></param>
    public static void ListAccounts(List<Account> accounts)
    {
        Console.WriteLine("Ваши счета:");
        Console.WriteLine(new string('_', 60));
        Console.WriteLine("{0,6} {1,20} {2,20}", "Банк", "Сумма на счете", "Номер счета");
        Console.WriteLine(new string('-', 60));
        foreach (var acc in accounts)
        {
            Console.WriteLine("{0,6} {1,17:C} {2,20}", acc.Bank, acc.Amount, acc.Number);
        }
        Console.WriteLine(new string('_', 60));
    }
    /// <summary>
    /// Получение номера счета
    /// </summary>
    /// <returns>номер счета или -1 при неправильном вводе</returns>
    public static int GetAccountNumber()
    {
        Console.WriteLine("Укажите номер счета или \"0\" для выхода и нажмите клавишу \"Ввод\"");
        string input = Console.ReadLine();
        int result;
        if (int.TryParse(input, out result))
        {
            //если удалось спарсить число, возвращаем его
            return result;
        }
        else
        {
            return -1;
        }
    }
    /// <summary>
    /// Сообщение об окончании работы
    /// </summary>
    public static void End()
    {
        Console.WriteLine("Работа программы завершена. Спасибо.");
        Console.ReadLine();
    }
    /// <summary>
    /// Сообщение об ошибочном номере счета
    /// </summary>
    /// <param name="accNumber"></param>
    public static void AccountNotFound(int accNumber)
    {
        Console.WriteLine("Счета с номером {0} не существует!", accNumber);
    }
    /// <summary>
    /// Вывод данных по рабочему счету
    /// </summary>
    /// <param name="account"></param>
    public static void CurrentStateAccount(Account account)
    {
        Console.WriteLine("Текущий рабочий счет:");
        Console.WriteLine(new string('_', 60));
        Console.WriteLine("{0,6} {1,20} {2,20}", "Банк", "Сумма на счете", "Номер счета");
        Console.WriteLine(new string('-', 60));
        Console.WriteLine("{0,6} {1,17:C} {2,20}", account.Bank, account.Amount, account.Number);
        Console.WriteLine(new string('_', 60));
    }
    /// <summary>
    /// Выяснение дальнейших действий
    /// </summary>
    /// <returns></returns>
    public static OperationType GetOperation()
    {
        int index = -1;
        do
        {
            Console.WriteLine(@"Вы желаете: Выйти-""0"", Внести-""1"", Снять-""2"", Другой счет-""3"", Список счетов-""4""");
            var input = Console.ReadKey(true).Key;
            switch (input)
            {
                case ConsoleKey.D0:
                    index = 0;
                    break;
                case ConsoleKey.D1:
                    index = 1;
                    break;
                case ConsoleKey.D2:
                    index = 2;
                    break;
                case ConsoleKey.D3:
                    index = 3;
                    break;
                case ConsoleKey.D4:
                    index = 4;
                    break;
                default:
                    index = -1;
                    break;
            }
            //Console.WriteLine();
            if (index < 0)
            {
                Console.WriteLine($"Неверный выбор. Попробуйте еще раз.");
            }
        } while (index < 0);
        return (OperationType)index;
    }
    /// <summary>
    /// Запрос у пользователя суммы для начисления или снятия
    /// </summary>
    /// <param name="forDeposit">true если для начисления</param>
    /// <returns>сумма или -1 при неправильном вводе</returns>
    public static decimal GetAmount(bool forDeposit)
    {
        if (forDeposit)
        {
            Console.WriteLine(@"Введите сумму начисления на счет или ""0"" и нажмите ""Ввод""");
        }
        else
        {
            Console.WriteLine(@"Введите сумму для снятия со счета или ""0"" и нажмите ""Ввод""");
        }
        string input = Console.ReadLine();
        decimal result;
        if (decimal.TryParse(input, out result))
        {
            //если удалось спарсить число, возвращаем его
            return result;
        }
        else
        {
            return -1;
        }
    }
    public static void ShowWrongAmount()
    {
        Console.WriteLine("Введена неверная сумма.");
    }
    public static void ShowSuccessDeposit()
    {
        Console.WriteLine("Успешно начислено на счет.");
    }
    public static void ShowUnsuccessfulDeposit()
    {
        Console.WriteLine("Ошибка начисления на счет.");
    }
    public static void ShowSuccessWithdraw()
    {
        Console.WriteLine("Успешно cнято со счета.");
    }
    public static void ShowUnsuccessfulWithdraw()
    {
        Console.WriteLine("Ошибка снятия со счета.");
    }
}

И основная реализация алгоритма

class Program
{
    static void Main(string[] args)
    {
        List<Account> accounts = new List<Account>
        {
            new Account(BankType.Avangard, 12345, 234001.85M),
            new Account(BankType.Sberbank, 123986, 554010.70M),
            new Account(BankType.VTB24, 5697054, 4001.34M),
        };
        //задаем кодировку, чтоб символ рубля отображался правильно
        Console.OutputEncoding = Encoding.UTF8;
        //выводим счета
        AppView.ListAccounts(accounts);
        //текущий рабочий счет
        Account account = null;
        //спрашиваем какой счет выбирает пользователь
        //в результате вернется тип операции, а account получит значение
        AppView.OperationType operation = SelectAccount(accounts, ref account);
        //если пользователь не выбрал счет, а выход из программы
        if (operation == AppView.OperationType.Exit)
        {
            AppView.End();
            return;
        }
        //рабочий цикл хождений по выбору операций
        do
        {
            //запросим пользователя о дальнейших действиях
            operation = AppView.GetOperation();
            switch (operation)
            {
                case AppView.OperationType.Deposit:
                    MakeDeposit(account);
                    AppView.CurrentStateAccount(account);
                    break;
                case AppView.OperationType.Withdraw:
                    MakeWithdraw(account);
                    AppView.CurrentStateAccount(account);
                    break;
                case AppView.OperationType.ShowAllAccounts:
                    AppView.ListAccounts(accounts);
                    AppView.CurrentStateAccount(account);
                    break;
                case AppView.OperationType.SelectOtherAccount:
                    AppView.ListAccounts(accounts);
                    operation = SelectAccount(accounts, ref account);
                    break;
            }
        } while (operation != AppView.OperationType.Exit);
        //прощальные слова
        AppView.End();
        Console.ReadLine();
    }
    /// <summary>
    /// Выбор рабочего счета
    /// </summary>
    /// <param name="accounts">список счетов</param>
    /// <param name="account">ссылка на рабочий счет</param>
    /// <returns>Print.OperationType.ShowAllAccounts говорит о том, что счет выбран</returns>
    private static AppView.OperationType SelectAccount(List<Account> accounts, ref Account account)
    {
        //выясняем с каким счетом хотим работать
        account = GetAccount(accounts);
        //проверяем
        if (account == null)
        {
            //значит пользователь выбрал выход из программы
            return AppView.OperationType.Exit;
        }
        //выведем данные по выбранному счету
        AppView.CurrentStateAccount(account);
        return AppView.OperationType.ShowAllAccounts;
    }
    /// <summary>
    /// Операция начисления на счет
    /// </summary>
    /// <param name="account">сумма начисления</param>
    private static void MakeDeposit(Account account)
    {
        decimal amount = -1;
        do
        {
            amount = AppView.GetAmount(forDeposit: true);
            if (amount < 0) AppView.ShowWrongAmount();
        } while (amount < 0);
        //если пользователь передумал делать начисление на счет
        if (amount == 0) return;
        if (account.Deposit(amount))
        {
            AppView.ShowSuccessDeposit();
        }
        else
        {
            AppView.ShowUnsuccessfulDeposit();
        }
    }
    /// <summary>
    /// Операция снятия со счета
    /// </summary>
    /// <param name="account">сумма снятия</param>
    private static void MakeWithdraw(Account account)
    {
        decimal amount = -1;
        do
        {
            amount = AppView.GetAmount(forDeposit: false);
            if (amount < 0) AppView.ShowWrongAmount();
        } while (amount < 0);
        //если пользователь передумал делать начисление на счет
        if (amount == 0) return;
        if (account.Withdraw(amount))
        {
            AppView.ShowSuccessWithdraw();
        }
        else
        {
            AppView.ShowUnsuccessfulWithdraw();
        }
    }
    /// <summary>
    /// Получение рабочего счета
    /// </summary>
    /// <param name="accounts">список счетов</param>
    /// <returns>выбранный счет или null</returns>
    private static Account GetAccount(List<Account> accounts)
    {
        Account result = null;
        int accNumber = -1;
        do
        {
            //просим указать номер счета
            accNumber = AppView.GetAccountNumber();
            //если ввели 0 для выхода
            if (accNumber == 0) break;
            //пытаемся найти счет с таким номером
            //если нашли, то выходим из цикла
            if (TryGetAccount(accounts, accNumber, out result)) break;
            //сообщаем что не нашли такой
            AppView.AccountNotFound(accNumber);
            accNumber = -1;
        } while (accNumber < 0);
        return result;
    }
    /// <summary>
    /// Поиск счета по номеру
    /// </summary>
    /// <param name="accounts">список счетов</param>
    /// <param name="accNumber">номер искомого счета</param>
    /// <param name="account">выходной результат экземл. счета</param>
    /// <returns>true if OK</returns>
    private static bool TryGetAccount(List<Account> accounts, int accNumber, out Account account)
    {
        bool result = false;
        account = null;
        foreach (var acc in accounts)
        {
            //если нашли с таким номером
            if (acc.Number == accNumber)
            {
                result = true;
                account = acc;
                break;
            }
        }
        return result;
    }
}

Пример можно скачать здесь

READ ALSO
Как поднять приоритет слоя Ignore Raycast?

Как поднять приоритет слоя Ignore Raycast?

На Terrain стоит rigitbody объект с Mesh RendererПри перемещении его с помощью курсора мыши мы временно меняем его слой на Ignore Raycast и он частично погружается...

173
Отменить remote валидацию для определённого action

Отменить remote валидацию для определённого action

Можно ли как нибудь отменить действие валидации Remote на определённой странице представления?

169
Как отрисовать данную ветку интерфейса WPF

Как отрисовать данную ветку интерфейса WPF

Имеется данный кусочек интерфейса, нужно его отрисовать, но не знаю как, подскажитеБыл бы благодарен если ещё и с объяснением, сфера новая,...

161