Нужно, чтобы в кейсах можно было взаимодействовать в имеющимися у меня методами. То есть, когда выбираешь, например, увеличить или уменьшить остаток, в обоих кейсах считало из метода. Я понятия не имею, как подключить методы в м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;
}
}
}
}
}
/// <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;
}
}
Пример можно скачать здесь
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Код на Си:
На Terrain стоит rigitbody объект с Mesh RendererПри перемещении его с помощью курсора мыши мы временно меняем его слой на Ignore Raycast и он частично погружается...
Можно ли как нибудь отменить действие валидации Remote на определённой странице представления?
Имеется данный кусочек интерфейса, нужно его отрисовать, но не знаю как, подскажитеБыл бы благодарен если ещё и с объяснением, сфера новая,...