Тема: клас Телефонний довідник
створити клас Довідник з полями :
Назва фірми
Власник
Телефон
Адреса
Вид діяльності
Реалізувати наступні функції:
Пошук по назві фірми
Пошук по власнику
Пошук по номеру телефону
Пошук по виду діяльності
Показ всіх записів і додавання
Вся інформацію зберігати у файлі з можливістю дозапису.
Допоможіть будь-ласка переробити програму для масиву фірм. Тобто щоб усі операції виконувались для багатьох фірм. Плюс там ще є помилки...
#include<iostream>
#include<string.h>
#include<fstream>
#include<ostream>
#include<ctime>
#include<vector>
#include<algorithm>
#include<windows.h>
using namespace std;
class Spravochnik
{
protected:
char NameFirm[100];
char Owner_Name[100];
char ADRESS[100];
int Phone;
char Type_Work[100];
public:
Spravochnik()
{
NameFirm[100] = NULL;
Owner_Name[100] = NULL;
ADRESS[100] = NULL;
Phone = 0;
Type_Work[100] = NULL;
}
Spravochnik(char N, char O, char A, int P, char T)
{
NameFirm[100] = N;
Owner_Name[100] = O;
ADRESS[100] = A;
Phone = P;
Type_Work[100] = T;
}
void Show()
{
cout << NameFirm << endl;
cout << Owner_Name << endl;
cout << ADRESS << endl;
cout << Phone << endl;
cout << Type_Work << endl;
}
void SetNameFirm(char * key)
{
cout << "введіть назву фірми";
cin >> NameFirm;
}
char GetNameFirm()
{
return NameFirm[100];
}
void SetNameOwner(char * key)
{
cout << "введіть ім'я власника" << endl;
cin >> Owner_Name;
}
char GetNameOwner()
{
return Owner_Name[100];
}
void SetAdress(char* key)
{
cout << "введіть адресу фірми" << endl;
cin >> ADRESS;
}
char GetAdress()
{
return ADRESS[100];
}
void SetPhone(int const & key)
{
cout << "введіть номер телефону " << endl;
cin >> Phone;
}
int GetPhone()
{
return Phone;
}
void SetTypeWork(char* key)
{
cout << "введіть вид діяльності" << endl;
cin >> Type_Work;
}
char GetTypeWork()
{
return Type_Work[100];
}
vector<Spravochnik>l;
void AddInfo()
{
Spravochnik tmp;
tmp.Owner_Name;
tmp.ADRESS;
tmp.NameFirm;
tmp.Phone;
tmp.Type_Work;
l.push_back(tmp);
}
//void Show_all()
//{
// /*char* str = new char[100];
// cin.getline(str, 100);
// for (int i = 0; i <l.size(); i++)
// {
// if (strcmp(l[i].GetNameFirm(), str) == 0)
// {
// cout << "Found:" << endl;
// l[i].Show();
// }
// }*/
//
// for (int i = 0; i < l.size(); i++)
// {
// cout << "Found:" << endl;
// l[i].Show();
// }
//}
friend std::istream& operator>>(istream& in, Spravochnik& obj)
{ //Перезавантаження оператора вводу в консоль
cout << "Додавання нових записів:\n\n";
cout << "Им'я.: "; in >> obj.Owner_Name;
cout << "Номер телефону: "; in >> obj.Phone;
cout << "Назва фірми: "; in >> obj.NameFirm;
cout << "вид діяльності"; in >> obj.Type_Work;
cout << "Адреса фірми"; in >> obj.ADRESS;
return in;
}
friend std:: ostream & operator<<(ostream& out, Spravochnik& obj)
{ //Перезавантаження оператора виводу в консоль
out << obj.Owner_Name<< "\n";
out << obj.ADRESS << "\n";
out << obj.Phone<< "\n";
out << obj.Type_Work << "\n";
out << obj.NameFirm<< "\n";
return out;
}
void clear() { //Функція очистки файла
ofstream in("input.txt", ios::out | ios::trunc);
in.close();
}
void clear_new() { //Функція очистки нового файла
ofstream in("input_new.txt", ios::out | ios::trunc);
in.close();
}
bool is_file_empty() { //Функція перевірки файла на пустоту
ifstream in("input.txt");
in.seekg(0, ios::end);
if (in.tellg() == 0) {
return true;
}
in.close();
return false;
}
void save_into_file() { //Функція збереження списка в файл
clear();
ofstream out("input.txt");
for (const Spravochnik& data :l) {
out << data.NameFirm<< "\n";
out << data.Owner_Name << "\n";
out << data.Phone << "\n";
out << data.Type_Work << "\n";
}
out.close();
}
void read_from_file(Spravochnik& data)
{ //Функція додавання записів із файла в список
ifstream in("input.txt");
while (in >> data) {
l.push_back(data);
}
in.close();
}
void output_from_file() { //Функція виводу записів із файлу в консоль
if (!is_file_empty()) {
ifstream in("input.txt");
if (in) {
int k = 0;
while (in >> *this) {
k++;
cout << "Запис #" << k << ":\n\n";
cout << *this;
cout << "\n";
}
in.close();
}
else {
cout << "Файл input.txt не знайдено!\n\n";
}
}
else {
cout << "Файл input.txt пуст!\n\n";
}
}
void output_from_new_file(Spravochnik& data) { //Функція виводу записів з нового файлу в консоль
ifstream in("input_new.txt");
if (in) {
int k = 0;
while (in >> data.NameFirm >> data.Owner_Name>>data.Phone>>data.ADRESS>>data.Type_Work) {
k++;
cout << "Запись #" << k << ":\n\n";
cout << data.NameFirm << "\n";
cout << data.Owner_Name << "\n\n";
cout << data.Phone << "\n\n";
cout << data.ADRESS << "\n\n";
cout << data.Type_Work << "\n\n";
}
in.close();
}
else {
cout << "Файл input_new.txt не знайдено!\n\n";
}
}
void add_client(Spravochnik& data) { //Додавання нового запису в список (записи додаються в кінец списку)
int k;
cout << "Введіть число записів, які треба додати: ";
cin >> k;
for (int i = 1; i <= k; i++) {
cout << "\nЗапись #" << i << ":\n";
cin >> data;
l.push_back(data);
}
cout << "\nЗаписи додані!\n\n";
save_into_file(); //зберігаємо результат в файл
}
void output_client(string *const key) { //Функція виводу списку клієнтів
ifstream in("input.txt");
bool flag = false;
cout << "виведення всіх записів: ";
for (auto it = l.begin(); it != l.end(); ++it)
{
cout << it->Owner_Name << "\n";
cout << it->NameFirm << "\n";
cout << it->ADRESS << "\n";
cout << it->Phone << "\n";
cout << it->Type_Work << "\n";
flag = true;
}
in.close();
if (!flag) {
cout << "клиентів не знайдено!\n\n";
}
}
};
void Menu_()
{
cout << "\tДля роботи з довідником додайте дані" << endl;
cout << "\tдовідник:" << endl;
cout << "1 - Додавання даних" << endl;
cout << "2 - пошук по назві фірми" << endl;
cout << "3 - пошук по імені власника" << endl;
cout << "4 - пошук по виду діяльності" << endl;
cout << "5 - пошук по номеру телефону" << endl;
cout << "6 - Показ всіх записів " << endl;
cout << "7 -запис інформації в файл " << endl;
cout << "8 - Exit" << endl;
}
int main()
{
setlocale(LC_ALL, "ua");
Spravochnik S;
int n;
char* key = new char[100];
n = 10;
int Menu = 0;
do
{
system("cls");
Menu_();
cin >> Menu;
cin.ignore();
switch (Menu)
{
case 1:
cout << "Додавання даних" << endl;
S.add_client(S);
break;
case 2:
cout << "пошук по назві фірми" << endl;
cout << "введіть назву фірми" << endl;
cin.getline(key, 100);
S.SetNameFirm(key);
cout << "В довідникунема такої фірми" << endl;
break;
case 3:
cout << "пошук по імені власника" << endl;
cout << "введіть ім'я власника" << endl;
cin.getline(key, 100);
S.SetNameOwner(key);
cout << "В довіднику нема такого власника" << endl;
break;
case 4:
cout << "пошук по виду діяльгості" << endl;
cout << "введіть вид діяльності" << endl;
cin.getline(key, 100);
S.SetTypeWork(key);
cout << "нема такого виду діяльності" << endl;
break;
case 5:
int str;
cout << "пошук по номеру телефона" << endl;
cout << "введіть номер телефона" << endl;
cin >> str;
S.SetPhone(746874186);
S.GetPhone();
if (S.GetPhone() == str)
cout << "нема такого номера телефона" << endl;
break;
case 6:
cout << "вывод всех записей" << endl;
S.output_from_file();
case 7:
cout << "запис інформації в файл" << endl;
S.save_into_file();
default:cout << "No such number menu item" << endl;
}
system("pause");
} while (Menu != 8);
system("pause");
return 0;
}