Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30

Консольное приложение CRUD для работы с файлом(не с БД)

29.06.2018, 12:54. Показов 2595. Ответов 17

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане! Заранее спасибо за то, что посетили эту тему и уделили мне своё драгоценное время. Перед тем, как озвучить свою проблему, с вашего позволения немного предыстории.
В данный момент я прохожу "производственную практику", где вынужден написать консольное приложение на ЯП C#. Эта программа должна выполнять CRUD действия, но не с БД, а с обычным файлом. Собственно сами действия CRUD мы "проходили" в 2 этапа, разделив их отдельно на Create/Read и Update/Delete.

Ниже публикую код программы, способной выполнять первый блок Create/Read. Она работает в соответствии с запросом преподавателя, то есть выполняет Create/Read. Тема для моей программы: "Сведения о клиентах автосервиса". Особой роли это не играет.

Кликните здесь для просмотра всего текста
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
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string file = "clients";
 
            Console.Write("Введите количество клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
 
            string[] strToWrite = new string[j];
 
            for (int i = 1; i <= j; i++)
            {
                Console.WriteLine("Клиент №:" + i);
                Console.Write("Введите ФИО: ");
                string infio = Console.ReadLine();
                Console.Write("Введите марку автомобиля: ");
                string inauto = Console.ReadLine();
                Console.Write("Введите стоимость ремонта: ");
                int incost = int.Parse(Console.ReadLine());
                Console.WriteLine();
 
                {
                    strToWrite[i - 1] = new Clients { num = i, fio = infio, auto = inauto, cost = incost }.ToString();
                }
            }
 
            File.WriteAllLines(file, strToWrite);
 
            Console.WriteLine("Укажите номер клиента:");
            int k = int.Parse(Console.ReadLine());
            if (k > 0 && k <= j)
            {
                Console.WriteLine(File.ReadAllLines(file)[k - 1]);
            }
            else
            {
                Console.WriteLine("Клиента с таким номер нет!");
            }
 
        }
    }
}




И класс Clients ниже.

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Clients
    {
        public string fio, auto;
        public int cost, num;
 
        public string ToString()
        {
            return "Клиент №:" + num + " - ФИО: " + fio + "; Автомобиль: " + auto + "; Стоимость ремонта: " + cost;
        }
    }
}


Собственно сама проблема, он же мой вопрос. Мне необходимо произвести ввод данных через консоль не в переменные infio, inauto, incost и после этого присваивать их значения полям класса, а сразу в поля класса (в переменные класса?) fio, auto, cost.

Перепробовал кучу способов, но решение для своей задачи я так и не нашёл. Прошу помогите с данным заданием.
Ещё раз спасибо за внимание!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2018, 12:54
Ответы с готовыми решениями:

Консольное приложение для работы с БД
Подскажите пример подключения, редактирования БД, и создание таблицы в SQL. Я новичек в этой теме, по этому чем больше будет объяснений -...

Разработать консольное приложение для работы с классом Person
Разработать консольное приложение для работы с классом Person с полями: name, adress, passport, age, role. Все поля класса сделать...

Консольное приложение работающие с xml файлом
у меня вот ниже консольное приложение которое работает с xml файлом. Это небольшая база даных авто. Как мне можно сделать чтобы можно было...

17
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
29.06.2018, 13:03
Можно все это сделать в конструкторе класса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Clients
    {
        public string fio { get; set; }
        public string auto { get; set; }
        public int cost { get; set; }
        public int num { get; set; }
 
        public Clients()
        {
            Console.WriteLine("Создание нового экземпляра");
            Console.WriteLine("Введите ФИО");
            fio = Console.ReadLine();
            Console.WriteLine("Введите Наименование авто");
            auto = Console.ReadLine();
            Console.WriteLine("Введите стоимость");
            cost = Convert.ToInt32(Console.ReadLine());
        }
 
        public string ToString()
        {
            return "Клиент №:" + num + " - ФИО: " + fio + "; Автомобиль: " + auto + "; Стоимость ремонта: " + cost;
        }
    }
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
29.06.2018, 13:19  [ТС]
В таком случае, в коде самой программы поля класса не распознаются, выдает ошибку "Invalid initializer member declarator", "The name 'fio' does not exist in the current context" и так для всех полей класса. Может быть я чего-то не понимаю?

Ниже прилагаю вариант исправленный по вашему методу.

Кликните здесь для просмотра всего текста
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
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string file = "clients";
 
            Console.Write("Введите количество клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
 
            string[] strToWrite = new string[j];
 
            for (int i = 1; i <= j; i++)
            {
                strToWrite[i - 1] = new Clients { num = i, fio, auto, cost }.ToString();
            }
 
            File.WriteAllLines(file, strToWrite);
 
            Console.WriteLine("Укажите номер клиента:");
            int k = int.Parse(Console.ReadLine());
            if (k > 0 && k <= j)
            {
                Console.WriteLine(File.ReadAllLines(file)[k - 1]);
            }
            else
            {
                Console.WriteLine("Клиента с таким номер нет!");
            }
 
        }
    }
}

Класс.
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Clients
    {
        public string fio { get; set; }
        public string auto { get; set; }
        public int cost { get; set; }
        public int num { get; set; }
 
        public Clients()
        {
            Console.WriteLine("Создание нового экземпляра");
            Console.WriteLine("Введите ФИО");
            fio = Console.ReadLine();
            Console.WriteLine("Введите Наименование авто");
            auto = Console.ReadLine();
            Console.WriteLine("Введите стоимость");
            cost = Convert.ToInt32(Console.ReadLine());
        }
 
        public string ToString()
        {
            return "Клиент №:" + num + " - ФИО: " + fio + "; Автомобиль: " + auto + "; Стоимость ремонта: " + cost;
        }
    }
}
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
29.06.2018, 13:24
При таком использовании конструктор надо изменить так:
C#
1
2
3
4
5
6
7
8
9
10
11
public Clients(int Number)
        {
            Console.WriteLine("Создание нового экземпляра");
            Console.WriteLine("Введите ФИО");
            fio = Console.ReadLine();
            Console.WriteLine("Введите Наименование авто");
            auto = Console.ReadLine();
            Console.WriteLine("Введите стоимость");
            cost = Convert.ToInt32(Console.ReadLine());
            num = Number;
        }
А вот как создавать объект в коде:
C#
1
strToWrite[i - 1] = (new Clients(i)).ToString();
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
29.06.2018, 13:43  [ТС]
Большое спасибо, милый человек! Оно работает, единственное VS выдает предупреждение " 'ConsoleApplication1.Clients.ToString()' hides inherited member 'object.ToString()'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword. "
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
29.06.2018, 13:47
C#
1
public override string ToString()
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
29.06.2018, 13:56  [ТС]
Я так и думал, что не хватает override. Прошу прощения за некую тупость

И конечно же, огромное спасибо в решении моей проблемы.

P.S. Забыл упомянуть, что с C# незнаком совершенно, но на практике вынужден писать на нём.
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
29.06.2018, 14:10
хорошая возможность познакомиться с ним поближе)))
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
02.07.2018, 09:23  [ТС]
И снова доброго времени суток, граждане. Программа не особо изменилась с моего последнего обращения здесь. Вопрос теперь в следующем. Вот как мне объявить переменную j в основной программе (для использования во всех case), либо как использовать значение j из метода New в классе Clients? В частности меня интересует использование j в строке:
C#
1
string[] strToWrite = new string[j];
Тут у нас основная программа:
Кликните здесь для просмотра всего текста
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
91
92
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string file = "clients";
            int i;
 
            int step = int.Parse(Console.ReadLine());
            switch (step)
            {
                //CREATE
                case 1: Console.WriteLine("Создать записи о новых клиентах");
                    string[] strToWrite = new string[j];
 
                    Console.WriteLine("Создание нового клиента...");
                    for (i = 1; i <= j; i++)
                    {
                        strToWrite[i - 1] = (new Clients(i)).ToString();
                    }
                    File.WriteAllLines(file, strToWrite);
                    break;
 
                //READ
                case 2: Console.WriteLine("Отображение");
 
                    Console.Write("Укажите номер клиента для отображения: ");
                    int read = int.Parse(Console.ReadLine());
                    if (read > 0 && read <= j)
                    {
                        Console.WriteLine(File.ReadAllLines(file)[read - 1]);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
                    break;
 
                //UPDATE
                case 3: Console.WriteLine("Редактирование");
 
                    string[] fileContent = File.ReadAllLines(file);
 
                    Console.Write("Укажите номер клиента для редактирования: ");
                    int update = int.Parse(Console.ReadLine());
                    if (update > 0 && update <= j)
                    {
                        var dataToUpdate = (new Clients(update));
                        fileContent[update - 1] = dataToUpdate.ToString();
                        File.WriteAllLines(file, fileContent);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
 
                    break;
                //DELETE
                case 4: Console.WriteLine("Удаление");
 
                    fileContent = File.ReadAllLines(file);
 
                    Console.Write("Укажите номер клиента для  удаления: ");
 
                    var fileToSave = new string[fileContent.Length - 1];
                    int delete = int.Parse(Console.ReadLine());
 
                    if (delete > 0 && delete <= j)
                    {
                        for (i = 0; i < fileContent.Length; i++)
                        {
                            if (i < delete - 1)
                                fileToSave[i] = fileContent[i];
                            else if (i > delete - 1)
                                fileToSave[i - 1] = fileContent[i];
                        }
                        File.WriteAllLines(file, fileToSave);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
 
                    break;
            }
        }
    }
}


А тут класс:
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Clients
    {
        public string fio;
        public string auto;
        public int cost;
        public int num;
 
        public int New() 
        {
            Console.Write("Введите количество клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
            return j;
        }
 
        public Clients(int Number)
        {
            num = Number;
            Console.Write("Введите ФИО: ");
            fio = Console.ReadLine();
            Console.Write("Введите марку автомобиля: ");
            auto = Console.ReadLine();
            Console.Write("Введите стоимость ремонта: ");
            cost = int.Parse(Console.ReadLine());
            Console.WriteLine();
        }
 
        public override string ToString()
        {
            return "Клиент №:" + num + " - ФИО: " + fio + "; Автомобиль: " + auto + "; Стоимость ремонта: " + cost;
        }
    }
}


Спасибо за уделенное мне и моему вопросу время и внимание!
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
02.07.2018, 09:41
Лучший ответ Сообщение было отмечено Bratushonok21 как решение

Решение

C#
1
string[] strToWrite = new string[Clients.New()];
Метод изменить так:
C#
1
2
3
4
5
6
7
public static int New() 
        {
            Console.Write("Введите количество клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
            return j;
        }
Но сразу скажу, что это неудачное решение, потому что у вас экземпляр класса Clients представляет из себя одного клента, а вы пытаетесь в этот класс засунуть метод, который отвечает за общее количество всех клиентов.

И на будущее. Правила форума предписывают на каждый новый вопрос создавать отдельную тему.
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
02.07.2018, 09:50  [ТС]
Оу, да, точно. Совсем забыл про это.
Коль не совсем правильно использовать метод для описания количества клиентов в классе, как мне это правильно сделать в самой программе?
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
02.07.2018, 10:22
Создать отдельно класс клиент, представляющий одного клиента. и класс-коллекцию клиентов, и в этом классе уже оперировать коллекцией
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
02.07.2018, 12:53  [ТС]
Отчасти проблема решена, но вопросов меньше не становиться

Я создал отдельный класс, для "уточнения" числа новых клиентов:

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Count
    {
        public static int newCount()
        {
            Console.Write("Укажите число новых клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
            int j2 = j;
            return j2;
        }
    }
}


И даже замудрил (скорее всего) с переменной j2, чтобы при каждом обращении к классу мне не было необходимости запускать его метод, а просто использовать значение j2(хотя наверное можно было и вернуть значение j, без ввода переменной j2). Но теперь вопрос в другом, как в основной программе, при проверке количества клиентов (например строка 55) мне передать и использовать это самое значение??? Ведь насколько я понял, если я просто сделаю обращение к методу, то он заново заставит меня ввести новое значение. Как быть?

Основная программа:

Кликните здесь для просмотра всего текста
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string file = "clients";
            int i, j2, step, secondStep;
 
            Console.WriteLine("...МЕНЮ...\r\n1.Создать новую запись\r\n2.Открыть запись\r\n3.Редактировать запись\r\n4.Удалить запись\r\n");
            Console.Write("Введите номер нужной команды: ");
            step = int.Parse(Console.ReadLine());
 
            switch (step)
            {
                //CREATE
                case 1:
                    Console.Clear();
                    Console.WriteLine("...Создание записи о новых клиентах...\r\n");
                    j2 = Count.newCount();
 
                    string[] strToWrite = new string[j2];
 
 
                    Console.WriteLine("Создание нового клиента:");
                    for (i = 1; i <= j2; i++)
                    {
                        strToWrite[i - 1] = (new Clients(i)).ToString();
                    }
                    File.WriteAllLines(file, strToWrite);
                    break;
 
                //READ
                case 2:
                    Console.Clear();
                    Console.WriteLine("...Открыть запись...");
 
                    Console.WriteLine("1.Вывести на экран всю запись\r\n2.Вывести на экран отдельного клиента\r\n");
                    Console.Write("Введите номер нужной команды: ");
                    secondStep = int.Parse(Console.ReadLine());
 
                    switch (secondStep)
                    {
                        case 1:
                            Console.WriteLine("Вывод на экран всей записи:");
                            Console.WriteLine(File.ReadAllLines(file));
                            break;
 
                        case 2:
                            Console.Write("Укажите номер клиента для отображения: ");
                            int read = int.Parse(Console.ReadLine());
                            if (read > 0 && read <= j2)
                            {
                                Console.WriteLine(File.ReadAllLines(file)[read - 1]);
                            }
                            else
                            {
                                Console.WriteLine("Клиента с таким номер нет!");
                            }
                            break;
                    }
 
                    break;
 
                //UPDATE
                case 3:
                    Console.Clear();
                    Console.WriteLine("Редактирование");
 
                    string[] fileContent = File.ReadAllLines(file);
 
                    Console.Write("Укажите номер клиента для редактирования: ");
                    int update = int.Parse(Console.ReadLine());
                    if (update > 0 && update <= j2)
                    {
                        var dataToUpdate = (new Clients(update));
                        fileContent[update - 1] = dataToUpdate.ToString();
                        File.WriteAllLines(file, fileContent);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
                    break;
                //DELETE
                case 4:
                    Console.Clear();
                    Console.WriteLine("Удаление");
 
                    fileContent = File.ReadAllLines(file);
 
                    Console.Write("Укажите номер клиента для  удаления: ");
 
                    var fileToSave = new string[fileContent.Length - 1];
                    int delete = int.Parse(Console.ReadLine());
 
                    if (delete > 0 && delete <= j2)
                    {
                        for (i = 0; i < fileContent.Length; i++)
                        {
                            if (i < delete - 1)
                                fileToSave[i] = fileContent[i];
                            else if (i > delete - 1)
                                fileToSave[i - 1] = fileContent[i];
                        }
                        File.WriteAllLines(file, fileToSave);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
                    break;
            }
        }
    }
}
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
02.07.2018, 12:59
При таком подходе можно изменить класс Count:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public static int j2;
public class Count
    {
        public static int newCount()
        {
            Console.Write("Укажите число новых клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
            j2 = j;
            return j2;
        }
    }
И доступ получать так:
C#
1
if (read > 0 && read <= Count.j2)
Но это все очень плохо, даже ужасно, уж простите...
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
02.07.2018, 13:17  [ТС]
Или проще говоря, как мне передать значение j(j2???) из класса Count, в каждый case основной программы, чтобы я не вводил при каждом обращении к классу новое значение j. А то у меня получается программа запускается, раз спрашивает: "Укажите число новых клиентов:" в принципе когда это нужно, а после и ещё раз и ещё раз и ещё раз, где я дал ссылку на метод класса, но мне нужно только значение j из этого класса.



Добавлено через 5 минут
Хорошо. А если я допустим сделаю так, избавлюсь от j2:

C#
1
2
3
4
5
6
7
8
9
10
11
public static int j;
public class Count
    {
        public static int newCount()
        {
            Console.Write("Укажите число новых клиентов: ");
            j = int.Parse(Console.ReadLine()); //int ведь уже не обязательно перед j?
            Console.WriteLine();
            return j;
        }
    }
И после буду обращаться именно к j, согласно вашему методу:

C#
1
if (read > 0 && read <= Count.j)
Как насчет такого? Плохо имеется ввиду, что я ввёл лишнюю j2 переменную или сам подход к решению данного вопроса? Возможно мне не хватает логики здесь и знания c#. Но увы меня просто закинули в котел с головой, без всякой подготовки, приходится вылезать на данных костылях. Это уж вы меня простите...

Добавлено через 11 минут
Toros1992, действительно получилось... ужасно. Теперь программа просто завершается, как только доходит до цикла создания новых клиентов (строка 28):

Кликните здесь для просмотра всего текста
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            const string file = "clients";
            int i, step, secondStep;
 
            Console.WriteLine("...МЕНЮ...\r\n1.Создать новую запись\r\n2.Открыть запись\r\n3.Редактировать запись\r\n4.Удалить запись\r\n");
            Console.Write("Введите номер нужной команды: ");
            step = int.Parse(Console.ReadLine());
 
            switch (step)
            {
                //CREATE
                case 1:
                    Console.Clear();
                    Console.WriteLine("...Создание записи о новых клиентах...\r\n");
 
                    string[] strToWrite = new string[Count.newCount()];
 
 
                    Console.WriteLine("Создание нового клиента:");
                    for (i = 1; i <= Count.j; i++)
                    {
                        strToWrite[i - 1] = (new Clients(i)).ToString();
                    }
                    File.WriteAllLines(file, strToWrite);
                    break;
 
                //READ
                case 2:
                    Console.Clear();
                    Console.WriteLine("...Открыть запись...");
 
                    Console.WriteLine("1.Вывести на экран всю запись\r\n2.Вывести на экран отдельного клиента\r\n");
                    Console.Write("Введите номер нужной команды: ");
                    secondStep = int.Parse(Console.ReadLine());
 
                    switch (secondStep)
                    {
                        case 1:
                            Console.WriteLine("Вывод на экран всей записи:");
                            Console.WriteLine(File.ReadAllLines(file));
                            break;
 
                        case 2:
                            Console.Write("Укажите номер клиента для отображения: ");
                            int read = int.Parse(Console.ReadLine());
                            if (read > 0 && read <= Count.j)
                            {
                                Console.WriteLine(File.ReadAllLines(file)[read - 1]);
                            }
                            else
                            {
                                Console.WriteLine("Клиента с таким номер нет!");
                            }
                            break;
                    }
 
                    break;
 
                //UPDATE
                case 3:
                    Console.Clear();
                    Console.WriteLine("Редактирование");
 
                    string[] fileContent = File.ReadAllLines(file);
 
                    Console.Write("Укажите номер клиента для редактирования: ");
                    int update = int.Parse(Console.ReadLine());
                    if (update > 0 && update <= Count.j)
                    {
                        var dataToUpdate = (new Clients(update));
                        fileContent[update - 1] = dataToUpdate.ToString();
                        File.WriteAllLines(file, fileContent);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
                    break;
                //DELETE
                case 4:
                    Console.Clear();
                    Console.WriteLine("Удаление");
 
                    fileContent = File.ReadAllLines(file);
 
                    Console.Write("Укажите номер клиента для  удаления: ");
 
                    var fileToSave = new string[fileContent.Length - 1];
                    int delete = int.Parse(Console.ReadLine());
 
                    if (delete > 0 && delete <= Count.j)
                    {
                        for (i = 0; i < fileContent.Length; i++)
                        {
                            if (i < delete - 1)
                                fileToSave[i] = fileContent[i];
                            else if (i > delete - 1)
                                fileToSave[i - 1] = fileContent[i];
                        }
                        File.WriteAllLines(file, fileToSave);
                    }
                    else
                    {
                        Console.WriteLine("Клиента с таким номер нет!");
                    }
                    break;
            }
        }
    }
}


А вот так я изменил класс:

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
        public class Count
    {
        public static int j;
        public static int newCount()
        {
            Console.Write("Укажите число новых клиентов: ");
            int j = int.Parse(Console.ReadLine());
            Console.WriteLine();
            return j;
        }
    }
}
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
02.07.2018, 13:21
Мне не за что прощать или не прощать. вы мне ничего не сделали. если так хотите делать, то уберите int в методе newCount() перед j. Плох весь подход.
У вас не хватает фундаментальных знаний. В объектно-ориентированном программировании все начинается с абстрактной модели. А основная особенность любой модели - это отражение свойств моделируемого объекта. Ваш объект - массив клиентов с возможностью создания, удаления, изменения и чтения информации о клиенте из этого массива.
Соответственно подходящая модель для этого может выглядеть так:
Класс-клиент и класс-коллекция клиентов. Экземпляр класса-клиента хранит в себе информацию об одном клиенте, а экземпляр класса-коллекции позволяет осуществлять запись, удаление, чтение и изменение любого клиента коллекции с помощью методов экземпляра, а так же хранит в себе информацию о количестве клиентов в массиве.

У вас же модель сейчас такова: Класс-клиент и класс-счетчик. И отдельно массив, но только он хранит не клиентов, а строки, которые описывают клиентов. Ваша модель не отражает свойств моделируемого вами объекта, соответственно возникают сложности в реализации. Мой совет: Почитайте литературу и вникните в суть ООП, потому что сейчас у вас каша в голове.

Добавлено через 4 минуты
В описанной мной подходящей модели, класс-коллекция конечно же должен еще хранить в себе сам массив клиентов
1
4 / 4 / 0
Регистрация: 28.12.2017
Сообщений: 30
02.07.2018, 13:28  [ТС]
Toros1992, я с удовольствием почитаю литературу по ООП, и полностью согласен, что у меня каша в голове, на данный момент. Но проблема в том, что дэдлайн горит ясным пламенем, и ООП я никогда не занимался, вариться в этом котле вынуждает практика. Если в данном случае выходит так, что моя модель некорректна для реализации, то придётся отказаться от интерактивного взаимодействия. Благо можно обойтись и без него.

Спасибо большое за внимание и за время, я вернусь к этому вопросу и постараюсь реализовать модель посоветованную вами, для начала.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.07.2018, 11:48
Bratushonok21, вот похожий вариант коллекции-обертки:
Добавление нескольких записей в файл
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2018, 11:48
Помогаю со студенческими работами здесь

Консольное приложение для работы с файловой базой данных "Легковые автомобили".
Разработать консольное приложение для работы с базой данных, содержащей сведения из произвольной области .Предметная область Легковые...

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

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

Как открыть консольное приложение в .NET через другое консольное приложение .NET
Есть один вопрос. Как открыть консольное приложение .NET через другое консольное приложение .NET, чтобы при этом второе приложение...

Консольное приложение для тестирования.
Добрый день! Получил задание разработать консольное приложение для тестирования, на основе готовых тестов. Тест представляет собой...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru