27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
1

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

15.03.2016, 22:02. Показов 481. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программа, в ней кроме самого тела Main имеется 2 класа:

1) нужно сделать так, чтобы из обычной перменной сделать перечислимый объект, можно сделать любым способом, на массиве, на листе или на индексаторе, последний никогда не пробовал использовать. У меня что-то не получилось, не знаю что не так, Name надо сделать несколько шт, там закоментировано, переменная для индекса NameID;

2) в методах, если условие не выполняется вместо ...else Console.WriteLine(%blabla%); реализовать события, дабы весь вывод на экран сплавиь в отдельный класс;

До кучи нужен аналог С++ fflush(stdin); (очистка потока ввода)

Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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");
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2016, 22:02
Ответы с готовыми решениями:

из массива в обычную переменную
есть char'овский массив такого содержания &quot;100&quot; как перенести этот массив в обычную переменную...

Как лучше реализовать большую таблицу? Массивом или по другому?
Здравствуйте, подскажите как правильно сделать вот такую таблицу? передавать 60 переменных в...

Как обычную переменную сделать константой
Как можно константой сделать обычную переменную, а то хочу создать матрицу nxn а мне VS требует что...

Как из переменной окружения сделать обычную переменную?
В общем, такая ситуация: нужно переменную окружения PATH сделать обычной переменной. Каким образом...

7
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
20.03.2016, 17:19  [ТС] 2
поможет кто-нибудь?
0
Эксперт .NETАвтор FAQ
10409 / 5139 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
20.03.2016, 17:46 3
Цитата Сообщение от Ваю Посмотреть сообщение
поможет кто-нибудь?
1) Код плохо отформатирован. Тяжел.
2) Именование методов - нечитабельно. Пока я понял что Name это банк, прошло пару минут.
3) Логика не отделена от интерфейса. Пока у вас в классах будут все вот эти Console.WriteLine - читать все вот это категорически не хочется.
Цитата Сообщение от Ваю Посмотреть сообщение
нужно сделать так, чтобы из обычной перменной сделать перечислимый объект
Сформулируйте вопрос внятно.
Цитата Сообщение от Ваю Посмотреть сообщение
в методах, если условие не выполняется вместо ...else Console.WriteLine(%blabla%); реализовать события, дабы весь вывод на экран сплавиь в отдельный класс;
Легче все заново переписать.
Цитата Сообщение от Ваю Посмотреть сообщение
До кучи нужен аналог С++ fflush(stdin); (очистка потока ввода)
Не нужно "до кучи". Сначала кучу нужно разобрать.
2
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
20.03.2016, 17:53  [ТС] 4
Код я специально пишу плотно - я так вынужден, наименования такие потому, что это мой собственый транслит, да он нестандартный, к нему нужно привыкать, но у него свои достоинства, дело не в этом. Логика не отделена потому, что в этом вопрос, я спрашивал как это сделать. До кучи вопрос, а не то, что вы подумали
0
Эксперт .NETАвтор FAQ
10409 / 5139 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
20.03.2016, 19:13 5
Цитата Сообщение от Ваю Посмотреть сообщение
Код я специально пишу плотно - я так вынужден, наименования такие потому, что это мой собственый транслит
Ну ладно наименования, но зачем код-то сжимать? У вас что, места на экране не хватает? Зато у вас уже есть проблема - вам не помогают в частности потому что в коде ничего невозможно разобрать.
А касаемо транслита - эта проблема решается использованием английского языка, который понимает подавляющее большинство программистов.
Цитата Сообщение от Ваю Посмотреть сообщение
Логика не отделена потому, что в этом вопрос, я спрашивал как это сделать.
Если вы имеете ввиду как вынести вот эти else
C#
1
... else Console.WriteLine("Пустые поля не допускаютя. Изменения не внесены.");
то вместо них нужно генерировать исключения (потому что это и есть исключительная ситуация):
C#
1
... else throw new Exception("Пустые поля не допускаютcя.")
Исключения нужно ловить через try/catch в методе Main. И там же выводить на экран пользователю.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
20.03.2016, 19:22  [ТС] 6
Цитата Сообщение от Storm23 Посмотреть сообщение
но зачем код-то сжимать
тунельное зрение, наглухо тунельное, но это не единственная моя проблема
Цитата Сообщение от Storm23 Посмотреть сообщение
английского языка
я не умею читать, но знаю несколько сотен слов (написание, по визуальной памяти), гуманитарной части у меня нет вообще, в общем нет, а не по естественным языкам
Цитата Сообщение от Storm23 Посмотреть сообщение
Если вы имеете ввиду как вынести вот эти else
да, я именно это и спрашивал, в мсдн не разобрался, целая куча всего необходимого, чтобы их заюзать, в VB это делается ровно одной строчкой, а не протынёй кода
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
20.03.2016, 20:46 7
А что вообще нужно сделать. Я имею в виду по ТЗ... У меня есть проект по аккаунтам банка. Правда, он не закомментирован - так что разбираться там тоже плохо.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
20.03.2016, 20:57  [ТС] 8
baliar, у меня не получилось сделать несколько банков с использованием перечислимого типа данных, т.е массивы или листы, так же появились проблемы с генерацией событий. Когда я стал читать код примера со словом "throw" там всё оказалось сложнее, чем в VB.Net, который я немного учил в предыдущем семестре, часов было очень мало, он конечно наркоманский, но очень простой и интуитивно понятен, покрайней мере для начального уровня
0
20.03.2016, 20:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2016, 20:57
Помогаю со студенческими работами здесь

Как обычную переменную на время сделать константой?
Как обычную переменную на время сделать константой?

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

Как сохранить значение адреса указателя в обычную переменную?
Всем привет. Пишу лабиринт на C++. С языком знаком мало. В общем, я в курсе, что можно в функцию...

Как реализовать работу со списком строк и списком цифр в классе List?
Добрый день! Проблема такая Есть класс-список: #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru