Обычную переменную заменить массивом или списком и реализовать события - C#

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

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

Есть программа, в ней кроме самого тела Main имеется 2 класа: 1) нужно сделать так, чтобы из обычной перменной сделать перечислимый объект, можно сделать любым способом, на массиве, на листе или на индексаторе, последний никогда не пробовал использовать. У меня что-то не получилось, не знаю что не так, Name надо сделать несколько шт, там закоментировано, переменная для индекса NameID; 2) в методах, если условие не выполняется вместо ...else Console.WriteLine(%blabla%); реализовать события, дабы весь вывод на экран сплавиь в отдельный класс; До кучи нужен аналог С++ fflush(stdin); (очистка потока ввода) Program.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();
        }
    }
}
Account.cs
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; 
        }
    }
}
Bank.cs
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я.")

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


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

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

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