Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#define _CRT_SECURE_NO_WARNINGS
- #include "stdafx.h"
- #include <iostream>
- #include <ctime>
- using namespace std;
- struct TAddress
- {
- char Street[40];
- unsigned short NumHouse, NumApart;
- };
- struct TResident
- {
- char Fam[40];
- char City[40];
- TAddress Address;
- };
- void RndFill(TResident * mas, int Len); // Заполняет массив записей случайными значениями.
- void OutNum(TResident * mas, int Num); // Выводит запись под номером Num.
- void OutAll(TResident * mas, int Len); // Выводит массив записей.
- int InNum(int Len); // Проверяет и возвращает значение Num.
- void Fill(TResident * mas, int Num); // Заполняет запись под номером Num.
- int Add(TResident * mas, int Len); // Добавляет в массив записей новый элемент. Вызывает Fill от этого элемента. Возвращает новую длинну массива (Len).
- void Sort(TResident * mas, int Len); // Сортирует записи методом вставки по алфавиту (по фамилии).
- void NewYear(TResident * mas, int Len); // Выводит на экран по две фамилии с одинаковыми адресами, но разными городами.
- int main()
- {
- //setlocale(LC_ALL, "Russian");
- //SetConsoleCP(1251);
- //SetConsoleOutputCP(1251);
- srand(time(0));
- int Len;
- cout << " Введите кол-во записей: ";
- cin >> Len;
- TResident * mas = new TResident[Len];
- RndFill(mas, Len);
- char Task;
- do
- {
- cout << endl;
- cout << " 1 - Вывести на экран все записи." << endl;
- cout << " 2 - Вывести на экран одну запись." << endl;
- cout << " 3 - Изменить одну запись." << endl;
- cout << " 4 - Добавить новую запись." << endl;
- cout << " 5 - Сортировка записей по алфавиту." << endl;
- cout << " 6 - Режим \"Ирония судьбы\"." << endl;
- cout << "\n Что вы хотите сделать? : ";
- cin >> Task;
- cout << endl;
- switch (Task)
- {
- case '1':
- {
- OutAll(mas, Len);
- break;
- }
- case '2':
- {
- OutNum(mas, InNum(Len));
- break;
- }
- case '3':
- {
- Fill(mas, InNum(Len));
- break;
- }
- case '4':
- {
- Len = Add(mas, Len);
- break;
- }
- case '5':
- {
- Sort(mas, Len);
- break;
- }
- case '6':
- {
- NewYear(mas, Len);
- break;
- }
- default:
- {
- cout << " Такого задания я не готовил. :с" << endl;
- break;
- }
- }
- } while (1 != 0);
- return 0;
- }
- void RndFill(TResident * mas, int Len)
- {
- const char * MFam[] = { "Rasputin", "Pyrkin", "Putin", "Medvedev", "Navalnyi" , "Tolstoi" , "Maier" , "Veber" , "Braun", "Torres", "Garsia", "Bernar", "German", "Fisher", "Robinson", "Teilor", "Abamelek", "Romanova", "Saltykova", "Razumovskaya" };
- const char * MCity[] = { "Lyubercy", "ZHukovskii", "Moskva" , "Piter" , "Sankt-Peterburg" , "Kaluga" , "Kirov" , "Sarov" , "Saransk" , "Balashiha" , "Belgorod" , "Sokol" , "Sochi" , "Kostroma" , "Bilibino" , "Krasnoyarsk" , "Starica" , "Suzdal'" , "Suksun" , "Sulak" };
- const char * MStreet[] = { "SHosseinaya", "Komsomolskaya", "Centralnaya" , "Molodezhnaya" , "SHkolnaya" , "Lesnaya" , "Sovetskaya" , "Novaya" , "Sadovaya" , "Naberezhnaya" , "Zarechnaya" , "Zelenaya" , "Mira" , "Lenina" , "Polevaya" , "Lugovaya" , "Oktyabrskaya" , "Gagarina" , "Pervomaiskaya" , "Severnaya" };
- srand(time(0));
- for (int i = 0; i < Len; i++)
- {
- strcpy(mas[i].Fam, MFam[0 + rand() % 19]);
- strcpy(mas[i].City, MCity[0 + rand() % 19]);
- strcpy(mas[i].Address.Street, MStreet[0 + rand() % 19]);
- mas[i].Address.NumHouse = (1 + rand() % 20);
- mas[i].Address.NumApart = (1 + rand() % 50);
- }
- }
- int InNum(int Len)
- {
- do
- {
- int Num;
- cout << " Введите номер записи: ";
- cin >> Num;
- if (Num - 1 >= 0 && Num - 1 < Len)
- {
- cout << endl;
- return Num - 1;
- }
- else cout << " Записи под этим номером не существует." << endl;
- } while (1 != 0);
- }
- void OutNum(TResident * mas, int Num)
- {
- cout << "№ " << Num + 1 << "; Фамилия: " << mas[Num].Fam << "; Место жительства: г. " << mas[Num].City << ", ул. " << mas[Num].Address.Street << ", дом " << mas[Num].Address.NumHouse << ", кв. " << mas[Num].Address.NumApart << endl;
- }
- void OutAll(TResident * mas, int Len)
- {
- for (int Num = 0; Num < Len; Num++)
- {
- OutNum(mas, Num);
- }
- }
- void Fill(TResident * mas, int Num)
- {
- cout << "Введите новые значения.\n\n Фамилия: ";
- cin >> mas[Num].Fam;
- cout << " Город: ";
- cin >> mas[Num].City;
- cout << " Улица: ";
- cin >> mas[Num].Address.Street;
- cout << " Номер дома: ";
- cin >> mas[Num].Address.NumHouse;
- cout << " Номер квартиры: ";
- cin >> mas[Num].Address.NumApart;
- }
- int Add(TResident * mas, int Len)
- {
- Len++;
- memcpy(mas, mas, Len);
- Fill(mas, Len - 1);
- return Len;
- }
- void Sort(TResident * mas, int Len)
- {
- for (int i = 1; i < Len; i++)
- {
- for (int j = i; j > 0 && strcmp(mas[j - 1].Fam, mas[j].Fam) > 0; j--)
- {
- swap(mas[j - 1], mas[j]);
- }
- }
- }
- void NewYear(TResident * mas, int Len)
- {
- for (int i = 0; i < Len; i++)
- {
- for (int j = i + 1; j < Len; j++)
- {
- if (strcmp(mas[i].Address.Street, mas[j].Address.Street) == 0 && mas[i].Address.NumHouse == mas[j].Address.NumHouse && mas[i].Address.NumApart == mas[j].Address.NumApart && strcmp(mas[i].City, mas[j].City) != 0)
- {
- cout << mas[i].Fam << " (№" << i + 1 << ") и " << mas[j].Fam << " (№" << j + 1 << ")\n";
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement