Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <windows.h>
- #include <conio.h>
- #include <stdlib.h>
- struct Sity
- {
- char* name;
- int year;
- int peoples;
- bool metro;
- };
- int Write_int(bool zero = false)
- {
- char str[10];
- int value = 0;
- while(true)
- {
- scanf("%s", str);
- // ?: - Это тернарный оператор Одним из существенных отличий обычного оператора if … else это то,
- //что результат операции ?: можно сохранять в переменную.
- value = abs(atoi(str))? abs(atoi(str)) : 0;
- if (zero) break;
- if (!zero && value > 0)
- break;
- else
- printf("Введите значение |n| > 0: ");
- }
- return value;
- }
- char* strEdit()
- {
- char* cloneStr = NULL;
- char* str = NULL;
- int Size = 0;
- while(true)
- {
- int symbol = _getch();
- cloneStr = new char[Size + 1];
- for (int i = 0; i < Size; i++)
- if (str[i] != '\0')
- cloneStr[i] = str[i];
- str = new char[Size + 1];
- for (int i = 0; i < Size; i++)
- str[i] = cloneStr[i];
- delete[] cloneStr;
- if ((symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z') || (symbol >= '0' && symbol <= '9'))
- {
- str[Size] = symbol;
- Size++;
- }
- if(symbol == 32)
- {
- str[Size] = '_';
- Size++;
- }
- if (symbol == 8 && Size > 0)
- {
- str[Size] = ' ';
- Size--;
- }
- if (symbol == 13)
- {
- str[Size] = '\0';
- break;
- }
- }
- return str;
- }
- Sity* SityRemove(Sity* sitys, int &Size)
- {
- if(Size == 0)
- {
- printf("Нечего удалять.\n\n");
- return sitys;
- }
- printf("\nИндекс удаляемого города от 1..%d: ", Size);
- int Index = Write_int();
- Index--;
- if(Index >= Size)
- {
- printf("Индекс не входит в деапазон городов!\n\n");
- return sitys;
- }
- Size--;
- Sity* copySitys = new Sity[Size];
- for (int i = 0; i < Index; ++i)
- copySitys[i] = sitys[i];
- for (int i = Index; i < Size; ++i)
- copySitys[i] = sitys[i + 1];
- delete[] sitys;
- printf("Город под индексом %d удалён!\n\n", Index + 1);
- return copySitys;
- }
- Sity* SityAdd(Sity* sitys, int &Size)
- {
- Sity sity;
- printf("\n[Добавление в список]:\n");
- printf("Название города: ");
- sity.name = strEdit();
- printf("%s\n", sity.name);
- printf("Год основания: ");
- sity.year = Write_int();
- printf("Население: ");
- sity.peoples = Write_int();
- printf("Наличие метро( 1>= Да, 0 Нет): ");
- int metro = Write_int(true);
- if(metro > 0)
- sity.metro = true;
- else
- sity.metro = false;
- Size++;
- Sity* copySitys = new Sity[Size];
- for (int i = 0; i < Size - 1; i++)
- copySitys[i] = sitys[i];
- copySitys[Size - 1].name = sity.name;
- copySitys[Size - 1].year = sity.year;
- copySitys[Size - 1].peoples = sity.peoples;
- copySitys[Size - 1].metro = sity.metro;
- delete[] sitys;
- printf("Город добавлен в список.\n\n");
- return copySitys;
- }
- void Output(Sity* sitys, int Size){
- printf("[Вывод]:\n");
- if(Size == 0)
- printf("Список пуст...\n\n");
- else
- for (int i = 0; i < Size; i++)
- {
- printf("%d) %s %d %d ", i + 1, sitys[i].name, sitys[i].year, sitys[i].peoples);
- if(sitys[i].metro)
- printf("Есть метро. ");
- else
- printf("Отсутствует метро. ");
- if(!sitys[i].metro && sitys[i].peoples >= 1000000)
- printf("Необходимо построить метро! \n\n");
- else
- printf("\n");
- }
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int Size = 0;
- Sity* sitys = NULL;
- bool RUN = true;
- while(RUN){
- printf("[Меню]:\n");
- printf("*************\n");
- printf("*1.Вывод *\n");
- printf("*2.Добавить *\n");
- printf("*3.Удалить *\n");
- printf("*4.Выход *\n");
- printf("*************\nВыбор: ");
- switch(Write_int()){
- case 1:
- {
- Output(sitys, Size);
- break;
- }
- case 2:
- {
- sitys = SityAdd(sitys, Size);
- break;
- }
- case 3:
- {
- sitys = SityRemove(sitys, Size);
- break;
- }
- case 4:
- RUN = false;
- break;
- }
- }
- delete[] sitys;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement