Обычную переменную заменить массивом или списком и реализовать события - C#
Формулировка задачи:
Есть программа, в ней кроме самого тела Main имеется 2 класа:
1) нужно сделать так, чтобы из обычной перменной сделать перечислимый объект, можно сделать любым способом, на массиве, на листе или на индексаторе, последний никогда не пробовал использовать. У меня что-то не получилось, не знаю что не так, Name надо сделать несколько шт, там закоментировано, переменная для индекса NameID;
2) в методах, если условие не выполняется вместо ...else Console.WriteLine(%blabla%); реализовать события, дабы весь вывод на экран сплавиь в отдельный класс;
До кучи нужен аналог С++ fflush(stdin); (очистка потока ввода)
Program.cs
Account.cs
Bank.cs
using System;
using System.Collections.Generic;
namespace VP2_13a {
class Program {
static public Int32 NameID = 0, AccID = -1; // ID банка, внутренний ID массива
static public Bank Name = new Bank();
//static public Bank[] Name = new Bank[1];
//static public List<Bank> Name = new List<Bank>();
static void Main(string[] args) {
UInt32? ID; String Familiaq; Decimal? Nomer; float? Procqent; Decimal? Summa;
Account[] L = new Account[0]; Account H; String Str; bool f; Decimal Num;
Name.Kurs = (Decimal?)99.00;
Array.Resize(ref L, 11);
L[0] = new Account(2, "Пупкин", (Decimal)782389, (float)15.7, (Decimal)123.65);
L[1] = new Account(3, "Иванов", (Decimal)345564, (float)15.0, (Decimal)542.43);
L[2] = new Account(4, "Петров", (Decimal)235463, (float)14.8, (Decimal)557.83);
L[3] = new Account(7, "Сидоров", (Decimal)436789, (float)16.0, (Decimal)865.59);
L[4] = new Account(8, "Петечкин", (Decimal)238747, (float)15.7, (Decimal)684.64);
L[5] = new Account(9, "Калачёв", (Decimal)771281, (float)3.5, (Decimal)330.42);
L[6] = new Account(11, "Грибов", (Decimal)442164, (float)19.6, (Decimal)125.74);
L[7] = new Account(12, "Елизаров", (Decimal)388225, (float)13.5, (Decimal)238.00);
L[8] = new Account(15, "Звягинцев", (Decimal)730080, (float)15.4, (Decimal)849.11);
L[9] = new Account(20, "Корольков", (Decimal)355698, (float)16.5, (Decimal)201.87);
L[10] = new Account(21, "Федосов", (Decimal)990711, (float)8.4, (Decimal)943.11);
// сохраняем мссив в лист и обновляем число элементов в нём
Name.Acc.AddRange(L); AccID = Name.Acc.Count - 1;
// добавление новой записи
H = L[0]; ID = 1; Familiaq = "Тыдыщь"; Nomer = (Decimal)149489;
Procqent = (float)6.5; Summa = (Decimal)619.83;
H.set(ID, Familiaq, Nomer, Procqent, Summa);
// сохраняем новую запись в лист
if (H.ID != 0) Name.Acc.Add(H);
// редактирование записи
AccID = Name.Acc.Count - 1; Familiaq = "Бдыщь"; Procqent = (float)6.6;
Name.Acc[AccID].Vary(ID, Familiaq, Nomer, Procqent, Summa);
Console.WriteLine("Вывод всех вкладчиков на экран: \n");
foreach (Account Vkl in Name.Acc) Vkl.get();
Console.WriteLine("Всего вкладчиков: {0} шт \n", Name.Acc.Count);
while (true) { // вывод на экран
Console.Write("Введите имеющийся ID для показа: ");
Str = Console.ReadLine();
if (Str.Length > 0) f = Int32.TryParse(Str, out AccID); else { AccID = -1; continue; }
AccID = (f ? Name.FindID(AccID) : -1); if (AccID > 0) break;
} Name.Acc[AccID].get();
// получаем данные акка
Name.Acc[AccID].Read(out ID, out Familiaq, out Nomer, out Procqent, out Summa);
while (true) { // смена владельца
Console.Write("Введите новую фамилию владельца ID #{0} счёта №{1}: ", ID, Nomer);
Familiaq = Console.ReadLine();
if (Familiaq.Length == 0) continue; else break;
} Name.UstanovitxVladelxcqa(ID, Familiaq, Nomer); Name.Acc[AccID].get();
while (true) { // снять деньги
Console.Write("Введите снимаемую сумму с ID #{0} счёта №{1}: ", ID, Nomer);
Str = Console.ReadLine();
if (Str.Length > 0) f = Decimal.TryParse(Str, out Num); else continue;
if (f) break;
} Name.SnaqtxDenxgi(Nomer, Num); Name.Acc[AccID].get();
while (true) { // положить деньги
Console.Write("Введите вкладываемую сумму в ID #{0} счёт №{1}: ", ID, Nomer);
Str = Console.ReadLine();
if (Str.Length > 0) f = Decimal.TryParse(Str, out Num); else continue;
if (f) break;
} Name.PologqitxDenxgi(Nomer, Num); Name.Acc[AccID].get();
// начислеие процентов
Console.WriteLine("Начисление процентов на ID #{0} счёте №{1}: ", ID, Nomer);
Name.NacislenieProcqentov(Nomer, Procqent); Name.Acc[AccID].get();
// сумма в долларах
Console.WriteLine("Вывод суммы в долларах на ID #{0} счёте №{1}: ", ID, Nomer);
Name.Dollar(Name.Kurs);
Console.WriteLine("Нажмите любую клавишу..."); Console.ReadKey();
}
}
}using System;
namespace VP2_13a {
class Account {
public UInt32? ID { set; get; }
public String Familiaq { set; get; }
public Decimal? Nomer { set; get; }
public float? Procqent { set; get; }
public Decimal? Summa { set; get; }
public Account(UInt32? _ID, String _Familiaq, Decimal? _Nomer, float? _Procqent, Decimal? _Summa) {
this.ID = _ID;
this.Familiaq = _Familiaq;
this.Nomer = _Nomer;
this.Procqent = _Procqent;
this.Summa = _Summa;
}
public void set(UInt32? ID, String Familiaq, Decimal? Nomer, float? Procqent, Decimal? Summa) {
if (Familiaq != "" && Nomer != null && Procqent != null && Summa != null) {
if (ID >= Program.Name.Acc[Program.Name.Acc.Count - 1].ID)
this.ID = (UInt32?)Program.Name.Acc.Count; else
if (Program.AccID > 0 && Program.AccID < Program.Name.Acc.Count - 1 &&
ID > Program.Name.Acc[Program.AccID - 1].ID && ID < Program.Name.Acc[Program.AccID + 1].ID)
this.ID = ID; else
if (Program.AccID == 0 && ID < Program.Name.Acc[Program.AccID + 1].ID)
this.ID = ID; else
if (Program.AccID == Program.Name.Acc.Count - 1 && ID > Program.Name.Acc[Program.AccID - 1].ID)
this.ID = ID;
this.Familiaq = Familiaq;
this.Nomer = Nomer;
this.Procqent = Procqent;
this.Summa = Summa;
} else Console.WriteLine("Пустые поля не допускаютя. Изменения не внесены.");
}
public void get() {
Console.WriteLine("ID: {0} \nFamiliaq: {1} \nNomer: {2} \nProcqent: {3} \nSumma: {4} \n",
this.ID, this.Familiaq, this.Nomer, this.Procqent, this.Summa);
}
public void Vary(UInt32? ID, String Familiaq, Decimal? Nomer, float? Procqent, Decimal? Summa) {
if (this.ID != null || this.Familiaq != "" || this.Nomer != null || this.Procqent != null || this.Summa != null) {
if (ID != null) this.ID = ID;
if (Familiaq != "") this.Familiaq = Familiaq;
if (Nomer != null) this.Nomer = (Decimal)Nomer;
if (Procqent != null) this.Procqent = (float)Procqent;
if (Summa != null) this.Summa = (Decimal)Summa;
} else Console.WriteLine("Нельзя изменить пустую карточку, необходимо использовать метод Set. \n");
}
public void Read(out UInt32? ID, out String Familiaq, out Decimal? Nomer, out float? Procqent, out Decimal? Summa) {
ID = this.ID; Familiaq = this.Familiaq; Nomer = this.Nomer; Procqent = this.Procqent; Summa = this.Summa;
}
}
}using System;
using System.Collections.Generic;
namespace VP2_13a {
class Bank {
public List<Account> Acc = new List<Account>(); /**/
public Decimal? Kurs; /**
public Decimal? Kurs { set; get; }
public Bank() { }
public Bank(Decimal? _Kurs) { this.Kurs = _Kurs; }
public void set(Decimal? Kurs) { this.Kurs = Kurs; }
public void get(out Decimal? Kurs) { Kurs = this.Kurs; }
public Decimal? get() { return this.Kurs; } /**/
public Int32 FindID(Int32 enID) {
Int32 Lpos, Rpos, min, max, fnd, j = Acc.Count - 1;
max = Convert.ToInt32(Acc[j].ID);
if (enID > 0 && enID <= max) {
Rpos = (enID <= j ? enID - 1 : j);
max = (Int32)Acc[Rpos].ID;
Lpos = Rpos + enID - max; if (Lpos < 0) Lpos = 0;
min = (Int32)Acc[Lpos].ID;
while (enID >= min && Rpos - Lpos > 1) {
j = Convert.ToInt32(Convert.ToUInt32(Lpos + Rpos) >> 1);
fnd = (Int32)Acc[j].ID;
if (fnd > enID) { Rpos = j; max = fnd; }
else { Lpos = j; min = fnd; }
}
if (Acc[Lpos].ID != enID) Lpos = -1;
if (Acc[Rpos].ID == enID) { Lpos = Rpos; Console.WriteLine(""); }
} else Lpos = -1;
return Lpos;
}
public void UstanovitxVladelxcqa(UInt32? ID, String Familiaq, Decimal? Nomer) {
if (Familiaq != "" && Acc[Program.AccID].Nomer == Nomer) Acc[Program.AccID].Familiaq = Familiaq;
else Console.WriteLine("Фамилия не можжет быть пустой. Изменения не произведены. \n");
}
public void SnaqtxDenxgi(Decimal? Nomer, Decimal? Summa) {
if (Acc[Program.AccID].Nomer == Nomer && Summa != null && Summa > 0 && Acc[Program.AccID].Summa > 0 && Acc[Program.AccID].Summa >= Summa)
Acc[Program.AccID].Summa -= Summa;
else {
if (Summa < 0) Console.WriteLine("Сумма снятия должна быть болше нуля. \n");
if (Summa == 0 || Summa == null) Console.WriteLine("Укажите желаемую суумму для снятия. \n");
else Console.WriteLine("Недостаточно средств. На счёте имеется только: {0} \n", Acc[Program.AccID].Summa);
}
}
public void PologqitxDenxgi(Decimal? Nomer, Decimal? Summa) {
if (Summa != null && Summa > 0)
Acc[Program.AccID].Summa += Summa;
else {
if (Summa < 0) Console.WriteLine("Сумма вклада должна быть болше нуля. \n");
else Console.WriteLine("Укажите желаемую суумму для вклада. \n");
}
}
public void NacislenieProcqentov(Decimal? Nomer, float? Procqent) {
if (Acc[Program.AccID].Nomer == Nomer && Procqent != null && Procqent > 0) Acc[Program.AccID].Summa *= (Decimal)(1.0 + Procqent / 100.0);
else if (Procqent == null) Console.WriteLine("Укажите процентную ставку. \n");
}
public void Dollar(Decimal? Kurs) {
if (Kurs != null && Kurs > 0) Console.WriteLine("Сумма на счету в долларах составляет: {0} \n", Acc[Program.AccID].Summa / Kurs);
else Console.WriteLine("Курс не задан или задан неверно. \n");
}
}
}Решение задачи: «Обычную переменную заменить массивом или списком и реализовать события»
textual
Листинг программы
... else throw new Exception("Пустые поля не допускаютcя.")