· 6 years ago · Dec 17, 2019, 10:52 AM
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6
7
8namespace dopusk
9{
10 /* #36
11 #36
12 Создать приложение для учета данных автосалона, в котором есть следующие элементы:
13 1. Автомобиль со следующими атрибутами: 1скидка, 1длина, 1стоимость, 1высота, 1модель, 1название, 1гарантия до, 1год выпуска, 1тип_кпп,
14 1тип привода.
15 2. Автосалон со следующими атрибутами: прибыль, название, дата открытия, класс.
16 3. Рабочий со следующими атрибутами: отчество, дата рождения, дата приема на работу, должность, зарплата, премия, email, адрес проживания, телефон,
17
18 Также приложение должно реализовывать следующий функционал:
19 1. Вывести список магазинов по атрибуту <дата открытия> позже Х
20 2. Вывести список сотрудников, где <должность> равняется Х
21 3. Реализовать ручное заполнение данными для автомобиля
22 */
23
24 class Program
25 {
26
27 public struct Shop
28 {
29 public string name;
30 public DateTime date;
31 public int cash;
32 public string type;
33 public List<Employee> emps; //каждый автосалон хранит в себе список рабочих
34 public List<Car> cars;//каждый автосалон хранит в себе список автомобилей
35 public Shop(string name, DateTime date, int cash, string type)
36 {
37 this.name = name;
38 this.date = date;
39 this.cash = cash;
40 this.type = type;
41 emps = new List<Employee>(); //инициализация списка происходит только в конструкторе
42 cars = new List<Car>();
43 }
44 }
45
46 static List<Shop> shops = new List<Shop>();
47 public static Random rand = new Random();
48 public struct Car
49 {
50 public string name;
51 public string model;
52 public int date;
53 public DateTime garantee;
54 public int price;
55 public string kpp;
56 public string privod;
57 public int discount;
58 public double length;
59 public double height;
60 }
61 public struct Employee
62 {
63 public string otch;
64 public DateTime birth;
65 public DateTime come;
66 public string role;
67 public int salary;
68 public int premy;
69 public string email;
70 public string adress;
71 public string phone;
72
73 public Employee(string otch, DateTime birth, DateTime come, string role, int salary, int premy, string email, string adress, string phone)
74 {
75 this.otch = otch;
76 this.birth = birth;
77 this.come = come;
78 this.role = role;
79 this.salary = salary;
80 this.premy = premy;
81 this.email = email;
82 this.adress = adress;
83 this.phone = phone;
84 }
85 }
86
87 public static void shop_make()
88 {
89 Shop shop = new Shop();
90 shop.name = randomly();
91 shop.type = randomly();
92 shop.cash = rand.Next(500, 400000);
93 shop.emps = new List<Employee>();//при создании нового автосалона у него создаётся два списка - рабочих и автомобилей
94 shop.cars = new List<Car>();
95 int year = rand.Next(1980, 2020);
96 int month = rand.Next(1, 12);
97 int day = rand.Next(1, DateTime.DaysInMonth(year, month));
98 shop.date = new DateTime(year, month, day);
99 shops.Add(shop);
100 Console.WriteLine($"{shops.Count}-й автосалон успешно создан.\n");
101 }
102 public static void car_make()
103 {
104 if (shops.Count != 0)
105 {
106 Console.WriteLine("В какой автосалон добавить автомобиль?");
107 printer();
108 int chosen_id = int.Parse(Console.ReadLine());
109 int id = chosen_id - 1;
110 Car car = new Car();
111 car.name = promt("название: ");
112 car.model = promt("Модель: ");
113 car.length = Convert.ToDouble(promt("Длина: "));
114 car.height = Convert.ToDouble(promt("Высота: "));
115 Console.WriteLine("Дата выпуска:");
116 car.date = int.Parse(promt("Год: "));
117 while (car.date < 1885 || car.date > 2019)
118 {
119 Console.WriteLine("Введён неправильный год. Введите ещё раз.");
120 car.date = int.Parse(promt("Год: "));
121 }
122
123 int year, month, day;
124 Console.WriteLine("Гарантия до:");
125 year = int.Parse(promt("Год: "));
126 while (year < car.date || year < 0)
127 {
128 Console.WriteLine("Назначен неправильный год истечения гарантии. Введите снова:");
129 year = int.Parse(promt("Год: "));
130 }
131 month = int.Parse(promt("Месяц: "));
132 while (month < 1 || month > 12)
133 {
134 Console.WriteLine("Назначен неправильный месяц истечения гарантии. Введите снова:");
135 month = int.Parse(promt("Месяц: "));
136 }
137 day = int.Parse(promt("День: "));
138 while (day < 1 || day > DateTime.DaysInMonth(year, month))
139 {
140 Console.WriteLine("Назначен неправильный день истечения гарантии. Введите снова:");
141 day = int.Parse(promt("День: "));
142 }
143
144 car.garantee = new DateTime(year, month, day);
145 car.price = Convert.ToInt32(promt("Цена: "));
146 if (int.Parse(promt("Выберите тип коробки передач: 1)Механика 2)Автомат: ")) == 1)
147 {
148 car.kpp = "Механика";
149 }
150 else
151 {
152 car.kpp = "Автомат";
153 }
154
155 switch (int.Parse(promt("Выберите тип привода: 1)Задний 2)Передний 3)Полный: ")))
156 {
157 case 1:
158 car.privod = "Задний";
159 break;
160 case 2:
161 car.privod = "Передний";
162 break;
163 case 3:
164 car.privod = "Полный";
165 break;
166 }
167 car.discount = int.Parse(promt("Скидка(от 1 до 100): "));
168 while (car.discount < 0 || car.discount > 100)
169 {
170 Console.WriteLine("Введена неправильная скидка. Введите ещё раз");
171 car.discount = int.Parse(promt("Скидка(от 0 до 100): "));
172 }
173 shops[id].cars.Add(car);
174 }
175 else Console.WriteLine("Невозможно добавить автомобиль. Нет ни одного автосалона.");
176 }
177 public static string[] roles = new string[] { "Электрик", "Слесарь", "Механик", "Приемщик", "Начальник автосервиса", "Логист", "Менеджер", "бухгалтер", "Администратор", "Начальник отдела продаж", "Директор" };
178 public static void employee_make()
179 {
180 if (shops.Count != 0)
181 {
182 Console.WriteLine("\nВ какой автосалон определить рабочего?\n");
183 printer();//выводится список автосалонов
184 int chosen_id = int.Parse(Console.ReadLine());
185 int id = chosen_id - 1;
186 Employee employee = new Employee();
187
188 employee.otch = randomly();
189 employee.phone = random_num();
190 employee.role = roles[rand.Next(0, 10)];
191 employee.salary = rand.Next(10000, 1000000);
192 employee.premy = rand.Next(10000, 1000000);
193 int year = rand.Next(1940, 2002);
194 int month = rand.Next(1, 12);
195 int day = rand.Next(1, DateTime.DaysInMonth(year, month));
196 employee.birth = new DateTime(year, month, day);
197 year = rand.Next(2000, 2020);
198 month = rand.Next(1, 12);
199 day = rand.Next(1, 31);
200 employee.come = new DateTime(year, month, day);
201 employee.adress = randomly();
202 employee.email = $"{randomly()} + @gmail.com";
203 shops[id].emps.Add(employee);
204 Console.WriteLine("Успешно создан");
205 }
206 else Console.WriteLine("Невозможно добавить рабочего. Нет ни одного автосалона.");
207 }
208
209 public static string promt(string msg)
210 {
211 Console.Write($"{msg}");
212 return Console.ReadLine();
213 }
214 public static string randomly()
215 {
216 string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
217 char[] stringChars = new char[8];//массив из char
218 stringChars[0] = chars[rand.Next(0, 26)];//Первая буква - большая
219 for (int i = 1; i < stringChars.Length; i++)
220 {
221 stringChars[i] = chars[rand.Next(27, chars.Length)];//остальные буквы - маленькие
222 }
223 string finalString = new String(stringChars);
224 return finalString;
225 }
226 public static string random_num()//рандомный номер телефона
227 {
228 string chars = "0123456789";
229 char[] stringChars = new char[11];//строка состоящая из 11 цифр
230 Random random = new Random();
231 stringChars[0] = '8';//первая цифра - восьмёрка
232
233 for (int i = 1; i < stringChars.Length; i++)
234 {
235 stringChars[i] = chars[random.Next(chars.Length)];
236 }
237 string finalString = new String(stringChars);
238 return finalString;
239 }
240
241 public static void printer()
242 {
243 Console.WriteLine("Автосалоны:");
244 int c = 0;
245 foreach (Shop i in shops)//массив идёт по всем автосалонам
246 {
247 Console.WriteLine($"{++c}) {i.name} - {i.date.ToShortDateString()}");
248 }
249 Console.WriteLine("\n");
250 }
251
252 public static DateTime datenter()
253 {
254 int y, m, d;
255 y = int.Parse(promt("Год: "));
256 while (y < 0)
257 {
258 Console.WriteLine("Назначен неправильный год. Введите снова:");
259 y = int.Parse(promt("Год: "));
260 }
261 m = int.Parse(promt("Месяц: "));
262 while (m < 1 || m > 12)
263 {
264 Console.WriteLine("Назначен неправильный месяц. Введите снова:");
265 m = int.Parse(promt("Месяц: "));
266 }
267 d = int.Parse(promt("День: "));
268 while (d < 1 || d > DateTime.DaysInMonth(y, m))
269 {
270 Console.WriteLine("Назначен неправильный день. Введите снова:");
271 d = int.Parse(promt("День: "));
272 }
273 DateTime date = new DateTime(y, m, d);
274 return date;
275 }
276 public static void task1(DateTime userdate)
277 {
278 int count = 0;
279 foreach (Shop i in shops)//цикл идёт по всем автосалонам в списке автосалонов
280 {
281 if (i.date > userdate) //если дата позже даты, введённой юзером через метод datenter, то происходит вывод названия
282 {
283 Console.WriteLine($"{++count}) {i.name}");
284 }
285 }
286 if (count == 0) Console.WriteLine("Автосалонов, открытых позже заданной даты, не найдено.");
287 Console.WriteLine("\n");
288 }
289 public static void task2()
290 {
291 Console.WriteLine("Вывод списка сотрудников, где должность равняется X.\nДолжности:");
292 for (int i = 0; i < roles.Length; i++)
293 {
294 Console.WriteLine($"{i + 1}) {roles[i]}");
295 }
296 int count = 0;
297 Console.WriteLine("Введите должность сотрудника:");
298 string userole = Console.ReadLine();
299 userole = userole.Trim();//избавление от лишних пробелов
300 foreach (Shop i in shops)
301 {
302 foreach (Employee j in i.emps)
303 {
304 if (userole == j.role)
305 {
306 Console.WriteLine($"{++count}) Отчество: {j.otch}, Должность: {j.role} - его отдел: {i.name}");
307 }
308 }
309 }
310 if (count == 0) Console.WriteLine("Не найдено.");
311 Console.WriteLine("\n");
312 }
313
314 static void Main(string[] args)
315 {
316 int type = 0;//действие которые выбирает пользователь
317 while (type != 9)//При введении 9 программа завершает работу
318 {
319 Console.WriteLine("1)task1: Вывести список магазинов по атрибуту <дата открытия> позже Х\n2)task2: Вывести список сотрудников, где <должность> равняется Х\n3)task3: Реализовать ручное заполнение данными для автомобиля\n4)Создать новый автосалон\n5)Добавить рабочего\n6)Список всех рабочих\n7)Список всех салонов\n8)Список всех автомобилей\n9)Выход");
320 type = int.Parse(Console.ReadLine());
321 switch (type)
322 {
323 case 1://task1
324 if (shops.Count == 0)//если List автосалонов пуст, то появляется предупреждение:
325 {
326 Console.WriteLine("Для начала нужно создать хотя бы один автосалон\n");
327 break;
328 }
329 task1(datenter());
330 break;
331 case 2://task2
332 if (shops.Count == 0)//если не создан ни один автосалон, то не получится проверить сотрудников
333 {
334 Console.WriteLine("Для начала нужно создать хотя бы один автосалон\n");
335 break;
336 }
337 bool check = false;//станет true, если найдётся хотя бы один сотрудник
338 foreach (Shop i in shops)
339 {
340 if (i.emps.Count > 0) check = true;
341 }
342 if (check)//если найден хотя бы один сотрудник, то начинается выполнение метода task2
343 {
344 task2();
345 break;
346 }
347 else Console.WriteLine("Для начала нужно создать хотя бы одного сотрудника.\n");
348 break;
349 case 4:
350 shop_make();
351 break;
352 case 3:
353 car_make();
354 break;
355 case 5:
356 employee_make();
357 break;
358 case 6: //Все рабочие
359 int count = 0;
360 foreach (Shop i in shops) //цикл идёт по всем автосалонам
361 {
362 foreach (Employee j in i.emps)//в каждом автосалоне рассматривается каждый рабочий
363 {
364 Console.WriteLine($"{++count}) Отчество: {j.otch}, Должность: {j.role}, Автосалон: {i.name}");
365 }
366 }
367 if (count == 0) Console.WriteLine("Рабочих нет");
368 Console.WriteLine("\n");
369 break;
370
371 case 7://все автосалоны
372 printer();
373 break;
374 case 8://Все авто
375 for (int i = 0; i < shops.Count; i++)
376 {
377 for (int j = 0; j < shops[i].cars.Count; j++)
378 {
379 Console.WriteLine($"Название: {shops[i].cars[j].name}\nМодель: {shops[i].cars[j].model}\nДлина: {shops[i].cars[j].length}\nВысота: {shops[i].cars[j].height}\nКПП: {shops[i].cars[j].kpp}\nПривод: {shops[i].cars[j].privod}\nГод выпуска: {shops[i].cars[j].date}\nГарантия до: {shops[i].cars[j].garantee.ToShortDateString()}\nСтоимость: {shops[i].cars[j].price}\nСкидка: {shops[i].cars[j].discount}%\n");
380 }
381 }
382 break;
383 }
384 }
385 }
386 }
387}