А, тут така ситуація... ні, боюся, вам на цьому форумі більше мало чим допоможуть. Тут мало фахівців з цієї мови. Зверніться на спеціалізований форум.
Яка ситуація?
Невже ніхто не може підказати як виправити помилки?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Повідомлення користувача sasha87
А, тут така ситуація... ні, боюся, вам на цьому форумі більше мало чим допоможуть. Тут мало фахівців з цієї мови. Зверніться на спеціалізований форум.
Яка ситуація?
Невже ніхто не може підказати як виправити помилки?
помилки:
Ошибка C2780 void std::sort(const _RanIt,const _RanIt): требует аргументов: 2, имеется: 3
Ошибка C3867 "Notebook::Lname": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
Ошибка C3867 "Notebook::SortBylname": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
Ошибка C2672 "std::sort": не найдена соответствующая перегруженная функция
#include<iostream>
#include<ostream>
#include<string>
#include<list>
#include<ctime>
#include<algorithm>
using namespace std;
class Аbonent
{
protected:
string fname;
string lname;
string e_mail;
string PhoneNumber;
string DateofBirth;
public:
/*Аbonent()
{
fname = "NULL";
lname = "NULL";
e_mail = "NULL";
PhoneNumber = "NULL";
DateofBirth = "NULL";
}*/
Аbonent()
{
fname=this->fname;
lname = this->lname;
e_mail =this->e_mail;
PhoneNumber = this->PhoneNumber;
DateofBirth = this->DateofBirth;
}
// void ShowByFewParameters(){}
void Setlname()
{
cout << "введите фамилию" << this->lname << endl;
cin >> lname;
}
string Getlname()
{
return lname;
}
void Setfname()
{
cout << "введите имя" << endl;
cin >> fname;
}
string Getfname()
{
return fname;
}
void Setemail()
{
cout << "введите адрес електронной почты" << this->e_mail << endl;
cin >> e_mail;
}
string Getemail()
{
return e_mail;
}
void SetPhone()
{
cout << "введите номер телефона " << this->PhoneNumber << endl;
cin >> PhoneNumber;
}
string GetPhone()
{
return PhoneNumber;
}
void SetDateofbirth()
{
cout << "введите дату рождения" << this->DateofBirth << endl;
cin >> DateofBirth;
}
string GetDateofBirth()
{
return DateofBirth;
}
void setallINFO()
{
Setlname();
Setfname();
Setemail();
SetPhone();
SetDateofbirth();
}
friend ostream& operator<< (ostream& out, Аbonent& obj);
friend istream& operator>>(istream& in, Аbonent& obj);
};
std::ostream& operator<< (std::ostream& out, Аbonent& obj)
{
out << obj.lname << endl;
out << obj.fname << endl;
out << obj.e_mail << endl;
out << obj.PhoneNumber << endl;
out << obj.DateofBirth << endl;
return out;
}
std::istream& operator>>(std::istream& in, Аbonent& obj)
{
in >> obj.lname;
in >> obj.DateofBirth;
in >> obj.fname;
in >> obj.e_mail;
in >> obj.PhoneNumber;
return in;
}
class Notebook
{
private:
list<Аbonent>Note
{
Аbonent()
};
public:
string lname = "NULL";
Notebook()
{
Note.clear();
}
void add_client()
{
//Добавление новой записи
Аbonent* tmp = new Аbonent();
tmp->setallINFO();
this->Note.push_back(*tmp);
delete tmp;
}
void add_client(Аbonent tmp)
//перегрузка метода добавления новой записи
{
this->Note.push_back(tmp);
}
//вывод всех записей
void Output()
{
list<Аbonent>::iterator IT = Note.begin();
for (; IT != Note.end(); IT++)
{
cout << *IT << endl;
}
}
void SearchByFname(string F)
{
bool f = false;
list<Аbonent>::iterator IT = Note.begin();
for (; IT != Note.end(); IT++)
{
if (F == (*IT).Getfname())
cout << *IT << endl;
f = true;
}
if (!f)
cout << "нет такого имени в записной книжке" << endl;
}
void SearchByLname(string L)
{
bool l = false;
list<Аbonent>::iterator IT = Note.begin();
for (; IT != Note.end(); IT++)
{
if (L == (*IT).Getlname())
cout << *IT << endl;
l = true;
}
if (!l)
cout << "нет такой фамилии в записной книжке" << endl;
}
void SearchByEmail(string E)
{
bool e = false;
list<Аbonent>::iterator IT = Note.begin();
for (; IT != Note.end(); IT++)
{
if (E == (*IT).Getemail())
cout << *IT << endl;
e = true;
}
if (!e)
cout << "нет такой електронной почты в записной книжке" << endl;
}
void SearchByPhoneNumber(string P)
{
bool p = false;
list<Аbonent>::iterator IT = Note.begin();
for (; IT != Note.end(); IT++)
{
if (P == (*IT).GetPhone())
cout << *IT << endl;
p = true;
}
if (!p)
cout << "нет такого номера телефона в записной книжке" << endl;
}
void SearchByDateofBirth(string D)
{
bool d = false;
list<Аbonent>::iterator IT = Note.begin();
for (; IT != Note.end(); IT++)
{
if (D == (*IT).Getemail())
cout << *IT << endl;
d = true;
}
if (!d)
cout << "нет такой даты в записной книжке" << endl;
}
bool Lname(Notebook& a1, Notebook& a2)
{
return a1.lname < a2.lname;
}
void sort() {}
void SortBylname()
{
list<Аbonent>::iterator IT = Note.begin();
std::sort(Note.begin(),Note.end(),Lname);
}
};
void Menu()
{
cout << "Заполните пожалуйста данные" << endl;
cout << "1 - Добавить новую запись" << endl;
cout << "2 - Показать информацию по имени" << endl;
cout << "3 - Показать информацию по фамилии" << endl;
cout << "4 - Показать информацию по Дате рождения" << endl;
cout << "5 - Показать информацию по електронной почте" << endl;
cout << "6 - Сортировать по фамилии" << endl;
cout << "7 - Показать информацию по нескольким признакам" << endl;
cout << "8 - Удалить информацию" << endl;
cout << "9 - EXIT" << endl;
}
int main()
{
setlocale(LC_ALL, "rus");
Аbonent A;
Notebook N;
string TMP;
list<Аbonent>::iterator tmp_abonent;
int Menu = 0;
int Sub_Menu;
do
{
system("cls");
cin >> Menu;
switch (Menu)
{
case 1:
cout << "добавление новой записи" << endl;
N.add_client();
case 2:
cout << "Показ информации по имени" << endl;
cout << "Введите имя" << endl;
cin >> TMP;
N.SearchByFname(TMP);
cout << "Введите другое имя" << endl;
case 3:
cout << "Показ информации по фамилии" << endl;
cout << "Введите фамилию" << endl;
cin >> TMP;
N.SearchByLname(TMP);
cout << "Введите другую фамилию" << endl;
case 4:
cout << "Показ информации по Дате Рождения" << endl;
cout << "Введите Дату Рождения" << endl;
cin >> TMP;
N.SearchByDateofBirth(TMP);
cout << "Введите другую дату рождения" << endl;
case 5:
cout << "Показ информации по Електронной почте" << endl;
cout << "Введите адрес електронной почты" << endl;
cin >> TMP;
N.SearchByEmail(TMP);
cout << "Введите другой адрес електронной почты" << endl;
case 6:
cout << "Сортировка по фамилии" << endl;
N.SortBylname;
case 7:
cout << "Показ информации по нескольким признакам" << endl;
cout << "выберите признак1";
cin >> Sub_Menu;
if (Sub_Menu == 0)
{
cout << "Выберите другой пункт меню" << endl;
}
}
} while (Menu != 9);
}
переробив трохи сортування, створив предикат. але помилка після Note.
bool Lname(Notebook& a1, Notebook& a2)
{
return a1.lname < a2.lname;
}
void SortBylname()
{
list<Аbonent>::iterator IT = Note.begin();
Note.sort(Note.begin(),Note.end(),Lname);
}
як покласти в case7 ті функції, які лежать в кейсах з 2 по 6. (показати інформацію по кільком параметрам одночасно - по прізвищу, імені, даті народження. тобто в одному пункті меню)?
А це хтось може підказати?
koala написав:Є в заголовку теми.
Заголовок виправив.
вседно є помилка
як покласти в case7 ті функції, які лежать в кейсах з 2 по 6. (показати інформацію по кільком параметрам одночасно - по прізвищу, імені, даті народження. тобто в одному пункті меню)?
а як зробити щоб було за тією?
Хочеться розібратись трохи, а не щоб для галочки і розуміти що до чого?
А в коді?
А є якісь помилки в логіці?
вибачаюсь...
так краще?
#include<iostream>
#include<ostream>
#include<string>
#include<fstream>
#include<list>
#include<ctime>
using namespace std;
class Аbonent
{
protected:
string fname;
string lname;
string e_mail;
string PhoneNumber;
string DateofBirth;
public:
Аbonent()
{
fname="NULL";
lname="NULL";
e_mail="NULL";
PhoneNumber="NULL";
DateofBirth="NULL";
}
Аbonent(string f, string l, string e, string P, string D)
{
fname = f;
lname = l;
e_mail = e;
PhoneNumber = P;
DateofBirth = D;
}
// void ShowByFewParameters(){}
void Setlname()
{
cout << "введите фамилию"<<this->lname<<endl;
cin >> lname;
}
string Getlname()
{
return lname;
}
void Setfname()
{
cout << "введите имя" << endl;
cin >> fname;
}
string Getfname()
{
return fname;
}
void Setemail()
{
cout << "введите адрес електронной почты" <<this->e_mail<< endl;
cin >> e_mail;
}
string Getemail()
{
return e_mail;
}
void SetPhone()
{
cout << "введите номер телефона " <<this->PhoneNumber<< endl;
cin >> PhoneNumber;
}
string GetPhone()
{
return PhoneNumber;
}
void SetDateofbirth()
{
cout << "введите дату рождения" <<this->DateofBirth<< endl;
cin >> DateofBirth;
}
string GetDateofBirth()
{
return DateofBirth;
}
void setallINFO()
{
Setlname();
Setfname();
Setemail();
SetPhone();
SetDateofbirth();
}
friend ostream& operator<< (ostream & out,Аbonent& obj);
friend istream& operator>>(istream &in, Аbonent& obj);
};
std::ostream& operator<< (std::ostream& out, Аbonent& obj)
{
out << obj.lname << endl;
out << obj.fname << endl;
out << obj.e_mail << endl;
out << obj.PhoneNumber << endl;
out << obj.DateofBirth<< endl;
return out;
}
std::istream& operator>>(std::istream &in, Аbonent & obj)
{
in>>obj.lname;
in>>obj.DateofBirth;
in>>obj.fname;
in>>obj.e_mail;
in>>obj.PhoneNumber;
return in;
}
class Notebook
{
private:
list<Аbonent>Note;
public:
friend class Abonent;
string lname="NULL";
Notebook()
{
Note.clear();
}
void add_client()
{
//Добавление новой записи
Аbonent* tmp = new Аbonent();
tmp->setallINFO();
this->Note.push_back(*tmp);
delete tmp;
}
void add_client(Аbonent tmp)
//перегрузка метода добавления новой записи
{
this->Note.push_back(tmp);
}
//вывод всех записей
void Output()
{
list<Аbonent>::iterator IT=Note.begin();
for (;IT!=Note.end();IT++)
{
cout<<*IT<<endl;
}
}
void SearchByFname(string F)
{
bool f=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(F==(*IT).Getfname())
cout<<*IT<<endl;
f=true;
}
if(!f)
cout<<"нет такого имени в записной книжке"<<endl;
}
void SearchByLname(string L)
{
bool l=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(L==(*IT).Getlname())
cout<<*IT<<endl;
l=true;
}
if(!l)
cout<<"нет такой фамилии в записной книжке"<<endl;
}
void SearchByEmail(string E)
{
bool e=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(E==(*IT).Getemail())
cout<<*IT<<endl;
e=true;
}
if(!e)
cout<<"нет такой електронной почты в записной книжке"<<endl;
}
void SearchByPhoneNumber(string P)
{
bool p=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(P==(*IT).GetPhone())
cout<<*IT<<endl;
p=true;
}
if(!p)
cout<<"нет такого номера телефона в записной книжке"<<endl;
}
void SearchByDateofBirth(string D)
{
bool d=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(D==(*IT).Getemail())
cout<<*IT<<endl;
d=true;
}
if(!d)
cout<<"нет такой даты в записной книжке"<<endl;
}
void SortbyLname()
{
Note.sort();
// показать всех
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
std::cout << (*IT).lname<<" "<< std::endl;
std::cin.get();
}
};
void Menu()
{
cout<<"Заполните пожалуйста данные"<<endl;
cout<<"1 - Добавить новую запись"<<endl;
cout<<"2 - Показать информацию по имени"<<endl;
cout<<"3 - Показать информацию по фамилии"<<endl;
cout<<"4 - Показать информацию по Дате рождения"<<endl;
cout<<"5 - Показать информацию по електронной почте"<<endl;
cout<<"6 - Сортировать по фамилии"<<endl;
cout<<"7 - Показать информацию по нескольким признакам"<<endl;
cout<<"8 - Удалить информацию"<<endl;
cout<<"9 - EXIT"<<endl;
}
int main()
{
setlocale(LC_ALL,"rus");
Аbonent A;
Notebook N;
string TMP;
list<Аbonent>::iterator tmp_abonent;
int Menu=0;
int Sub_Menu;
do
{
system("cls");
cin>>Menu;
switch (Menu)
{
case 1:
cout<<"добавление новой записи"<<endl;
N.add_client();
case 2:
cout<<"Показ информации по имени"<<endl;
cout<<"Введите имя"<<endl;
cin>>TMP;
N.SearchByFname(TMP);
cout<<"Введите другое имя"<<endl;
case 3:
cout<<"Показ информации по фамилии"<<endl;
cout<<"Введите фамилию"<<endl;
cin>>TMP;
N.SearchByLname(TMP);
cout<<"Введите другую фамилию"<<endl;
case 4:
cout<<"Показ информации по Дате Рождения"<<endl;
cout<<"Введите Дату Рождения"<<endl;
cin>>TMP;
N.SearchByDateofBirth(TMP);
cout<<"Введите другую дату рождения"<<endl;
case 5:
cout<<"Показ информации по Електронной почте"<<endl;
cout<<"Введите адрес електронной почты"<<endl;
cin>>TMP;
N.SearchByEmail(TMP);
cout<<"Введите другой адрес електронной почты"<<endl;
case 6:
cout<<"Сортировка по фамилии"<<endl;
N.SortbyLname();
case 7:
cout<<"Показ информации по нескольким признакам"<<endl;
cout<<"выберите признак1";
cin>>Sub_Menu;
if(Sub_Menu==0)
{
cout<<"Выберите другой пункт меню"<<endl;
}
else
}
while(Menu!=9);
}
весь код:
#include<iostream>
#include<ostream>
#include<string>
#include<fstream>
#include<list>
#include<ctime>
using namespace std;
class Аbonent
{
protected:
string fname;
string lname;
string e_mail;
string PhoneNumber;
string DateofBirth;
public:
Аbonent()
{
fname="NULL";
lname="NULL";
e_mail="NULL";
PhoneNumber="NULL";
DateofBirth="NULL";
}
Аbonent(string f, string l, string e, string P, string D)
{
fname = f;
lname = l;
e_mail = e;
PhoneNumber = P;
DateofBirth = D;
}
// void ShowByFewParameters(){}
void Setlname()
{
cout << "введите фамилию"<<this->lname<<endl;
cin >> lname;
}
string Getlname()
{
return lname;
}
void Setfname()
{
cout << "введите имя" << endl;
cin >> fname;
}
string Getfname()
{
return fname;
}
void Setemail()
{
cout << "введите адрес електронной почты" <<this->e_mail<< endl;
cin >> e_mail;
}
string Getemail()
{
return e_mail;
}
void SetPhone()
{
cout << "введите номер телефона " <<this->PhoneNumber<< endl;
cin >> PhoneNumber;
}
string GetPhone()
{
return PhoneNumber;
}
void SetDateofbirth()
{
cout << "введите дату рождения" <<this->DateofBirth<< endl;
cin >> DateofBirth;
}
string GetDateofBirth()
{
return DateofBirth;
}
void setallINFO()
{
Setlname();
Setfname();
Setemail();
SetPhone();
SetDateofbirth();
}
friend ostream& operator<< (ostream & out,Аbonent& obj);
friend istream& operator>>(istream &in, Аbonent& obj);
};
std::ostream& operator<< (std::ostream& out, Аbonent& obj)
{
out << obj.lname << endl;
out << obj.fname << endl;
out << obj.e_mail << endl;
out << obj.PhoneNumber << endl;
out << obj.DateofBirth<< endl;
return out;
}
std::istream& operator>>(std::istream &in, Аbonent & obj)
{
in>>obj.lname;
in>>obj.DateofBirth;
in>>obj.fname;
in>>obj.e_mail;
in>>obj.PhoneNumber;
return in;
}
class Notebook
{
private:
list<Аbonent>Note;
public:
friend class Abonent;
string lname="NULL";
Notebook()
{
Note.clear();
}
void add_client()
{
//Добавление новой записи
Аbonent* tmp = new Аbonent();
tmp->setallINFO();
this->Note.push_back(*tmp);
delete tmp;
}
void add_client(Аbonent tmp)
//перегрузка метода добавления новой записи
{
this->Note.push_back(tmp);
}
//вывод всех записей
void Output()
{
list<Аbonent>::iterator IT=Note.begin();
for (;IT!=Note.end();IT++)
{
cout<<*IT<<endl;
}
}
void SearchByFname(string F)
{
bool f=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(F==(*IT).Getfname())
cout<<*IT<<endl;
f=true;
}
if(!f)
cout<<"нет такого имени в записной книжке"<<endl;
}
void SearchByLname(string L)
{
bool l=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(L==(*IT).Getlname())
cout<<*IT<<endl;
l=true;
}
if(!l)
cout<<"нет такой фамилии в записной книжке"<<endl;
}
void SearchByEmail(string E)
{
bool e=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(E==(*IT).Getemail())
cout<<*IT<<endl;
e=true;
}
if(!e)
cout<<"нет такой електронной почты в записной книжке"<<endl;
}
void SearchByPhoneNumber(string P)
{
bool p=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(P==(*IT).GetPhone())
cout<<*IT<<endl;
p=true;
}
if(!p)
cout<<"нет такого номера телефона в записной книжке"<<endl;
}
void SearchByDateofBirth(string D)
{
bool d=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(D==(*IT).Getemail())
cout<<*IT<<endl;
d=true;
}
if(!d)
cout<<"нет такой даты в записной книжке"<<endl;
}
void SortbyLname()
{
Note.sort();
// показать всех
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
std::cout << (*IT).lname<<" "<< std::endl;
std::cin.get();
}
};
void Menu()
{
cout<<"Заполните пожалуйста данные"<<endl;
cout<<"1 - Добавить новую запись"<<endl;
cout<<"2 - Показать информацию по имени"<<endl;
cout<<"3 - Показать информацию по фамилии"<<endl;
cout<<"4 - Показать информацию по Дате рождения"<<endl;
cout<<"5 - Показать информацию по електронной почте"<<endl;
cout<<"6 - Сортировать по фамилии"<<endl;
cout<<"7 - Показать информацию по нескольким признакам"<<endl;
cout<<"8 - Удалить информацию"<<endl;
cout<<"9 - EXIT"<<endl;
}
int main()
{
setlocale(LC_ALL,"rus");
Аbonent A;
Notebook N;
string TMP;
list<Аbonent>::iterator tmp_abonent;
int Menu=0;
int Sub_Menu;
do
{
system("cls");
cin>>Menu;
switch (Menu)
{
case 1:
cout<<"добавление новой записи"<<endl;
N.add_client();
case 2:
cout<<"Показ информации по имени"<<endl;
cout<<"Введите имя"<<endl;
cin>>TMP;
N.SearchByFname(TMP);
cout<<"Введите другое имя"<<endl;
case 3:
cout<<"Показ информации по фамилии"<<endl;
cout<<"Введите фамилию"<<endl;
cin>>TMP;
N.SearchByLname(TMP);
cout<<"Введите другую фамилию"<<endl;
case 4:
cout<<"Показ информации по Дате Рождения"<<endl;
cout<<"Введите Дату Рождения"<<endl;
cin>>TMP;
N.SearchByDateofBirth(TMP);
cout<<"Введите другую дату рождения"<<endl;
case 5:
cout<<"Показ информации по Електронной почте"<<endl;
cout<<"Введите адрес електронной почты"<<endl;
cin>>TMP;
N.SearchByEmail(TMP);
cout<<"Введите другой адрес електронной почты"<<endl;
case 6:
cout<<"Сортировка по фамилии"<<endl;
N.SortbyLname();
case 7:
}
}
while(Menu!=9);
}
видає помилку - 'lname' is a protected member of 'Аbonent'
дана функція має сортувати список по прізвищу - lname.
допоможіть виправити помилку.
дане поле є захищеним полем іншого класу(protected)
void SortbyLname()
{
Note.sort();
// показать всех
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
std::cout << (*IT).lname<<" "<< std::endl;
std::cin.get();
}
є якісь помилки в коді? додавання елементів, пошук по критерію і тд.?
Питання полягає в тому, чи правильно описані методи пошуку по імені, пошті і тд.?
#include<iostream>
#include<istream>
#include<string>
#include<fstream>
#include<list>
using namespace std;
class Аbonent
{
protected:
string fname;
string lname;
string e_mail;
string PhoneNumber;
string DateofBirth;
public:
Аbonent()
{
fname="NULL";
lname="NULL";
e_mail="NULL";
PhoneNumber="NULL";
DateofBirth="NULL";
}
Аbonent(string f, string l, string e, string P, string D)
{
fname = f;
lname = l;
e_mail = l;
PhoneNumber = P;
DateofBirth = D;
}
// void ShowByFewParameters(){}
void Setlname()
{
cout << "введіть фамілію";
cin >> lname;
}
string Getlname()
{
return lname;
}
void Setfname()
{
cout << "введіть ім'я" << endl;
cin >> fname;
}
string Getfname()
{
return fname;
}
void Setemail()
{
cout << "введіть адресу електронної пошти" << endl;
cin >> e_mail;
}
string Getemail()
{
return e_mail;
}
void SetPhone()
{
cout << "введіть номер телефону" << endl;
cin >> PhoneNumber;
}
string GetPhone()
{
return PhoneNumber;
}
void SetDateofbirth()
{
cout << "введіть дату народження" << endl;
cin >> DateofBirth;
}
string GetDateofBirth()
{
return DateofBirth;
}
void setallINFO()
{
Setlname();
Setfname();
Setemail();
SetPhone();
SetDateofbirth();
}
friend ostream& operator<< (ostream & out,Аbonent& obj);
friend istream& operator>>(istream &in, Аbonent& obj);
};
ostream& operator<< (ostream& out, Аbonent& obj)
{
out << obj.lname << endl;
out << obj.fname << endl;
out << obj.e_mail << endl;
out << obj.PhoneNumber << endl;
out << obj.DateofBirth<< endl;
return out;
}
class Notebook
{
private:
list<Аbonent>Note;
public:
Notebook()
{
Note.clear();
}
void add_client()
{
//створення нового запису
Аbonent* tmp = new Аbonent();
tmp->setallINFO();
this->Note.push_back(*tmp);
delete tmp;
}
void add_client(Аbonent tmp)
//перегрузка методу створення нового запису
{
this->Note.push_back(tmp);
}
//вывод всех записей
void Output()
{
list<Аbonent>::iterator IT=Note.begin();
for (;IT!=Note.end();IT++)
{
cout<<*IT<<endl;
}
}
void SearchByFname(string F)
{
bool f=false;
//list<Аbonent>::iterator IT=Note.begin();
for(std::list<Аbonent>::iterator IT=Note.begin();IT!=Note.end();IT++)
{
if(F==(*IT).Getfname())
cout<<*IT<<endl;
f=true;
}
if(!f)
cout<<"нема такого імені в записнику"<<endl;
}
void SearchByLname(string L)
{
bool l=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(L==(*IT).Getlname())
cout<<*IT<<endl;
l=true;
}
if(!l)
cout<<"немає такого прізвища в записнику"<<endl;
}
void SearchByEmail(string E)
{
bool e=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(E==(*IT).Getemail())
cout<<*IT<<endl;
e=true;
}
if(!e)
cout<<"немає такої адреси електронної пошти в записнику"<<endl;
}
void SearchByPhoneNumber(string P)
{
bool p=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(P==(*IT).GetPhone())
cout<<*IT<<endl;
p=true;
}
if(!p)
cout<<"нема такого номера телефона в записнику"<<endl;
}
void SearchByDateofBirth(string D)
{
bool d=false;
list<Аbonent>::iterator IT=Note.begin();
for(;IT!=Note.end();IT++)
{
if(D==(*IT).Getemail())
cout<<*IT<<endl;
d=true;
}
if(!d)
cout<<"немає такого дня народження в записнику"<<endl;
}
};
void Menu()
{
}
int main()
{
}
koala, якщо я правильно вас зрозумів, то мені треба назвати клас Spravochnik - Firma, MassivFirm - Spravochnik? Тобто навпаки?
У мене є подібне завдання, тільки його треба робити з використанням контейнера List (STL)
Описати клас «записна книжка».
/Передбачити можливість роботи з довільним числом записів, реалізувати пошук необхідної інформації за будь - якою ознакою
/(за прізвищем, ім'ям, датою народження, e - mail, номеру телефону), а також за кількома ознаками одночасно, реалізувати додавання і видалення записів,
/сортування за прізвищем, доступ до запису по номеру.
/ Написати програму, яка демонструвала б всі розроблені елементи класу.
Чим вона буде відрізнятись від описаної вище програми? На скільки треба модифікувати код описаної вище програми крім зміни назви параметрів(прізвище, електронна адреса, ім'я, дата народження)? Звичайно що в списків є свої функції, а в вектора - свої.
бажано не прив'язувати код класів до конкретних об'єктів - навіть таких, як cin/cout...Де і як мені це реалізувати?
Це початок. Що можете порекомендувати?
#include<iostream>
#include<fstream>
#include<list>
using namespace std;
class Аbonent
{
protected:
string fname;
string lname;
string e_mail;
string PhoneNumber;
string DateofBirth;
public:
Аbonent(string f, string l, string e, string P, string D)
{
fname = f;
lname = l;
e_mail = l;
PhoneNumber = P;
DateofBirth = D;
}
void ShowByFname(){}
void ShowByLname(){}
void ShowByEmail(){}
void ShowByPhoneNumber(){}
const char ShowByFewParameters(){}
void Setlname()
{
cout << "введите фамилию";
cin >> lname;
}
string Getlname()
{
return lname;
}
void Setfname()
{
cout << "введите имя" << endl;
cin >> fname;
}
string Getfname()
{
return fname;
}
void Setemail()
{
cout << "введите адрес електронной почты" << endl;
cin >> e_mail;
}
string Getemail()
{
return e_mail;
}
void SetPhone()
{
cout << "введите номер телефона " << endl;
cin >> PhoneNumber;
}
string GetPhone()
{
return PhoneNumber;
}
void SetDateofbirth()
{
cout << "введите дату рождения" << endl;
cin >> DateofBirth;
}
string GetDateofBirth()
{
return DateofBirth;
}
void setallINFO()
{
Setlname();
Setfname();
Setemail();
SetPhone();
SetDateofbirth();
}
};
class Notebook
{
private:
list<Аbonent>Note;
};
int main()
{
}
це як окрема функція? ЇЇ треба постійно створювати при роботі із string?
string prompt(string &text="")
{
string result;
cout<<text<<endl;
getline(cin,result);
return result;
}
тепер працює.якщо є зауваження, то будь-ласка коментуйте...
#include<iostream>
#include<string.h>
#include<fstream>
#include<ostream>
#include<ctime>
#include<vector>
#include<algorithm>
#include<windows.h>
using namespace std;
class Spravochnik
{
protected:
string NameFirm;
string Owner_Name;
string ADRESS;
string Phone;
string Type_Work;
public:
Spravochnik()
{
NameFirm = "NULL";
Owner_Name = "NULL";
ADRESS = "NULL";
Phone = "NULL";
Type_Work = "NULL";
}
Spravochnik (string N, string O, string A, string P, string T)
{
NameFirm = N;
Owner_Name = O;
ADRESS = A;
Phone = P;
Type_Work = T;
}
void Show()
{
cout << NameFirm << endl;
cout << Owner_Name << endl;
cout << ADRESS << endl;
cout << Phone << endl;
cout << Type_Work << endl;
}
void SetNameFirm()
{
cout << "введите название фирмы";
cin >> NameFirm;
}
string GetNameFirm()
{
return NameFirm;
}
void SetNameOwner()
{
cout << "введите имя владельца" << endl;
cin >> Owner_Name;
}
string GetNameOwner()
{
return Owner_Name;
}
void SetAdress()
{
cout << "введите адрес фирмы" << endl;
cin >> ADRESS;
}
string GetAdress()
{
return ADRESS;
}
void SetPhone()
{
cout << "введите номер телефона " << endl;
cin >> Phone;
}
string GetPhone()
{
return Phone;
}
void SetTypeWork()
{
cout << "введите вид деятельности" << endl;
cin >> Type_Work;
}
string GetTypeWork()
{
return Type_Work;
}
void setallINFO()
{
SetAdress();
SetNameFirm();
SetNameOwner();
SetPhone();
SetTypeWork();
}
friend ostream& operator<< (ostream & out, Spravochnik & obj);
};
ostream& operator<< (ostream& out, Spravochnik& obj)
{
out << obj.NameFirm << endl;
out << obj.Owner_Name << endl;
out << obj.ADRESS << endl;
out << obj.Phone << endl;
out << obj.Type_Work << endl;
return out;
}
class MassivFirm
{
private:
vector<Spravochnik>Firms;
public:
MassivFirm()
{
Firms.clear();
}
void clear(string file_name)
{ //Функция очистки файла
ofstream in("B:\\Firma.txt", ios::out | ios::trunc);
in.close();
}
void save_into_file(string file_name)
{
clear("B:\\Firma.txt");
ofstream out(file_name, ios::out);
if (out)
{
for (int i = 0; i < this->Firms.size(); i++)
out << Firms[i];
}
else
{
cout << "Ошибка открытия файла" << "B:\\Firma.txt" << "\n\n";
}
}
//стоп, це ж опис функції....
void input_from_file(string file_name)//вывод информации в консоль из файла
{
char OwnName[100];
char NameF[100];
char Adr[100];
char Tel[100];
char TypeWork[100];
ifstream GET(file_name);
GET.getline(NameF,100,'\n');
GET.getline(OwnName, 100, '\n');
GET.getline(Adr, 100, '\n');
GET.getline(Tel, 100, '\n');
GET.getline(TypeWork, 100,'\n');
Spravochnik FIRMA(NameF,OwnName,Adr,Tel,TypeWork);
add_client(FIRMA);
while (GET.getline(NameF, 100, '\n'))
{
GET.getline(OwnName, 100, '\n');
GET.getline(Adr, 100, '\n');
GET.getline(Tel, 100, '\n');
GET.getline(TypeWork, 100, '\n');
Spravochnik FIRMA(NameF, OwnName, Adr, Tel, TypeWork);
add_client(FIRMA);
}
GET.close();
}
void add_client()
{
//Добавление новой записи
Spravochnik* tmp = new Spravochnik();
tmp->setallINFO();
this->Firms.push_back(*tmp);
delete tmp;
}
void add_client(Spravochnik tmp)//перегрузка метода добавления новой записи
{
//Добавление новой записи
this->Firms.push_back(tmp);
}
void output_client()
{ //Функция вывода списка клиентов
vector<Spravochnik>::iterator IT = Firms.begin();
for (true;IT != Firms.end(); IT++)
{
cout << *IT << endl;
}
}
void SearchByOwnerName(string ON)
{
bool o;
vector<Spravochnik>::iterator IT = Firms.begin();
for (true; IT != Firms.end(); IT++)
{
if(ON==(*IT).GetNameOwner())
cout << *IT << endl;
o = true;
}
if (!o)
cout << "Ничего не найдено" << endl;
}
void SearchByNameFirm(string Nf)
{
bool n = false;
vector<Spravochnik>::iterator IT = Firms.begin();
for (true; IT != Firms.end(); IT++)
{
if (Nf == (*IT).GetNameFirm())
cout << *IT << endl;
n = true;
}
if (!n)
cout << "Ничего не найдено" << endl;
}
void SearchByPhone(string Ph)
{
bool ph = false;
vector<Spravochnik>::iterator IT = Firms.begin();
for (true; IT != Firms.end(); IT++)
{
if (Ph == (*IT).GetPhone())
{
cout << *IT << endl;
ph = true;
}
}
if (!ph)
cout << "Ничего не найдено" << endl;
}
void SearchByTypeWork(string Tw)
{
bool t = false;
vector<Spravochnik>::iterator IT = Firms.begin();
for (true; IT != Firms.end(); IT++)
{
if (Tw == (*IT).GetTypeWork())
cout << *IT << endl;
t = true;
}
if(!t)
cout << "Ничего не найдено" << endl;
}
void SearchByAdress(string A)
{
bool a = false;
vector<Spravochnik>::iterator IT = Firms.begin();
for (true; IT != Firms.end(); IT++)
{
if (A == (*IT).GetAdress())
cout << *IT << endl;
a = true;
}
if (!a)
cout << "Ничего не найдено" << endl;
}
};
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 - Exit" << endl;
}
int main()
{
setlocale(LC_ALL, "rus");
MassivFirm M;
M.input_from_file("B:\\Firma.txt");
int Menu = 0;
string TMP;
do
{
system("cls");
Menu_();
cin >> Menu;
switch (Menu)
{
case 1:
cout << "Добавление данных" << endl;
M.add_client();
break;
case 2:
cout << "поиск по названию фирмы" << endl;
cout << "введите название фирмы" << endl;
cin >> TMP;
M.SearchByNameFirm(TMP);
cout << "В справочнике нет такой фирмы" << endl;
break;
case 3:
cout << "поиск по имени владельца" << endl;
cout << "введите имя владельца" << endl;
cin >> TMP;
M.SearchByOwnerName(TMP);
cout << "В справочнике нет такого владельца" << endl;
break;
case 4:
cout << "поиск по виду деятельности" << endl;
cout << "введите вид деятельности" << endl;
cin >> TMP;
M.SearchByTypeWork(TMP);
cout << "В справочнике нет такого вида деятельности" << endl;
break;
case 5:
cout << "поиск по номеру телефона" << endl;
cout << "введите номер телефона" << endl;
cin >> TMP;
M.SearchByPhone(TMP);
cout << "В справочнике нет такого номера телефона" << endl;
break;
case 6:
cout << "вывод всех записей" << endl;
M.output_client();
default:cout << "No such number menu item" << endl;
}
system("pause");
} while (Menu != 7);
M.save_into_file("B:\\Firma.txt");
system("pause");
return 0;
}
Тобто в одному класі відбувається робота з однією фірмою, а в іншому відбувається реалізація для множини фірм?
створити клас Довідник з полями :
Назва фірми
Власник
Телефон
Адреса
Вид діяльності
Реалізувати наступні функції:
Пошук по назві фірми
Пошук по власнику
Пошук по номеру телефону
Пошук по виду діяльності
Показ всіх записів і додавання
Вся інформацію зберігати у файлі з можливістю дозапису.
Допоможіть будь-ласка переробити програму для масиву фірм. Тобто щоб усі операції виконувались для багатьох фірм. Плюс там ще є помилки...
#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;
}
а чому не дуже добре?