21 Востаннє редагувалося wander (06.06.2020 17:01:38)

Re: C++ допоможіть виправити помилку

std::sort(Note.begin(),Note.end(),Lname)

sasha87, щось я ніяк не можу допетрати, що ви тут хочете зробити?

І так, визначтеся зі стилем найменування функцій, класів, змінних і т.д.
Бо всякі: lname, e_mail, PhoneNumber, Setfname, GetDateofBirth, add_client - це просто жах.

22

Re: C++ допоможіть виправити помилку

wander написав:
std::sort(Note.begin(),Note.end(),Lname)

sasha87, щось я ніяк не можу допетрати, що ви тут хочете зробити?

І так, визначтеся зі стилем найменування функцій, класів, змінних і т.д.
Бо всякі: lname, e_mail, PhoneNumber, Setfname, GetDateofBirth, add_client - це просто жах.

lname - прізвище
e_mail - електронна пошта
Setfname - задати ім'я абонента
GetDateofBirth - показати ім'я абонента(повертає ім'я абонента)
add_client - додати в книжку абонента, тобто інформацію про нього - прізвище, номер телефону ітд.

23

Re: C++ допоможіть виправити помилку

sasha87 написав:
wander написав:
std::sort(Note.begin(),Note.end(),Lname)

sasha87, щось я ніяк не можу допетрати, що ви тут хочете зробити?

І так, визначтеся зі стилем найменування функцій, класів, змінних і т.д.
Бо всякі: lname, e_mail, PhoneNumber, Setfname, GetDateofBirth, add_client - це просто жах.

lname - прізвище
e_mail - електронна пошта
Setfname - задати ім'я абонента
GetDateofBirth - показати ім'я абонента(повертає ім'я абонента)
add_client - додати в книжку абонента, тобто інформацію про нього - прізвище, номер телефону ітд.

Так, дякую, читати по-англійськи я вмію, може, навіть краще за вас.
Проте я говорив про стиль (naming convention) написання "слів", а не просив вас їх перекласти. Ви вже як якийсь один вибрали, то дотримуйтеся його хоча б, а не вставляйте той, що з інтернету зкопіпастили.

Подякували: sasha871

24

Re: C++ допоможіть виправити помилку

буду мати на увазі. Класи - з великої букви, методи - з маленької, змінні - однією буквою. Це ви мали на увазі?
і все ж таки як щодо помилок?

25

Re: C++ допоможіть виправити помилку

sasha87 написав:

буду мати на увазі. Класи - з великої букви, методи - з маленької, змінні - однією буквою. Це ви мали на увазі?

Ну, хоча б так.

sasha87 написав:

і все ж таки як щодо помилок?

Так ви не відповіли на моє попереднє питання.

26

Re: C++ допоможіть виправити помилку

7, 8, 9 пункти меню - нічого не роблять

#include<iostream>
#include<ostream>
#include<string>
#include<list>
#include<iterator>
#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(string f, string l,string e,string P, string D)
    {
        fname=f;
        lname = l;
        e_mail =e;
        PhoneNumber = P;
        DateofBirth = D;
    }
    void Setlname()
    {
        cout << "введите фамилию"<< endl;
        cin >> lname;
    }
    string Getlname()
    {
        return this->lname;
    }

    void Setfname()
    {
        cout << "введите имя" << endl;
        cin >> fname;
    }
    string Getfname()
    {
        return this->fname;
    }
    void Setemail()
    {
        cout << "введите адрес електронной почты" << endl;
        cin >> e_mail;
    }
    string Getemail()
    {
        return this->e_mail;
    }
    void SetPhone()
    {
        cout << "введите номер телефона " << endl;
        cin >> PhoneNumber;
    }
    string GetPhone()
    {
        return PhoneNumber;
    }
    void SetDateofbirth()
    {
        cout << "введите дату рождения"<< endl;
        cin >> DateofBirth;
    }
    string GetDateofBirth()
    {
        return this->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;
}
bool Sr(Аbonent a1, Аbonent a2)
{
    return a1.Getlname() > a2.Getlname();
}
class Notebook
{
private:
    list<Аbonent>Note;
  
public:
    string lname = "NULL";
    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).GetDateofBirth())
                cout << *IT << endl;
            d = true;
        }
        if (!d)
            cout << "нет такой даты в записной книжке" << endl;
    }
    bool Lnamepred(Аbonent& a1, Аbonent& a2)
    {
        return a1.Getlname() < a2.Getlname();
    }
    void SortBylname()
    {
        Note.sort(Sr);
    }
    void searchinfo(string value)
    {
        list<Аbonent>::iterator iter = Note.begin();
        for (; iter != Note.end(); iter++)
        {
            if ((*iter).GetDateofBirth() == value ||
                ((*iter).Getemail() == value) ||
                ((*iter).Getfname() == value) ||
                ((*iter).Getlname() == value) ||
                ((*iter).GetPhone() == value))
            {
                cout << *iter << endl;
            }
        }
    };
    void deleteinfo(string value) 
    {
        list<Аbonent>::iterator it = Note.begin();
        for (; it != Note.end(); it++)
        {
            if ((*it).GetDateofBirth().compare(value) == 0)
            {
                (*it).GetDateofBirth().erase();
            }
            else if ((*it).Getemail().compare(value) == 0)
            { 
                (*it).Getemail().erase();
            }
            else if ((*it).GetPhone().compare(value) == 0)
            {
                (*it).GetPhone().erase();
            }
            else if ((*it).Getfname().compare(value) == 0)
            {
                (*it).Getfname().erase();
            }
            else if ((*it).Getlname().compare(value) == 0)
            {
                (*it).Getlname().erase();
            }
        }
    }
};
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 - Удалить информацию" << endl;
    cout << "10 - EXIT" << endl;
}
int main()
{
    setlocale(LC_ALL, "rus");
    Аbonent A;
    Notebook N;
    string TMP;
    list<Аbonent>::iterator IT;
    int Menu = 0;
    int param;
    do
    {
        system("cls");
        Menu_();
        cin >> Menu;
        switch (Menu)
        {
        case 1:
            cout << "добавление новой записи" << endl;
            N.add_client();
            break;
        case 2:
            cout << "Показ информации по имени" << endl;
            cout << "Введите имя" << endl;
            cin >> TMP;
            N.SearchByFname(TMP);
            cout << "Введите другое имя" << endl;
            break;
        case 3:
            cout << "Показ информации по фамилии" << endl;
            cout << "Введите фамилию" << endl;
            cin >> TMP;
            N.SearchByLname(TMP);
            cout << "Введите другую фамилию" << endl;
            break;
        case 4:
            cout << "Показ информации по Дате Рождения" << endl;
            cout << "Введите Дату Рождения" << endl;
            cin >> TMP;
            N.SearchByDateofBirth(TMP);
            cout << "Введите другую дату рождения" << endl;
            break;
        case 5:
            cout << "Показ информации по Електронной почте" << endl;
            cout << "Введите адрес електронной почты" << endl;
            cin >> TMP;
            N.SearchByEmail(TMP);
            cout << "Введите другой адрес електронной почты" << endl;
            break;
        case 6:
            cout << "Показ информации по номеру телефона" << endl;
            cout << "Введите номер телефона" << endl;
            cin >> TMP;
            N.SearchByPhoneNumber(TMP);
            cout << "Введите другой номер телефона" << endl;
            break;
        case 7:
            cout << "Сортировка по фамилии" << endl;
            N.SortBylname();
            break;
        case 8:
            cin >> TMP;
            N.searchinfo(TMP);
            cout << "Поиск информации завершен" << endl;
            break;
        case 9:
            cout << "удаление ";
        }
        system("pause");
    } 
    while (Menu != 10);
    system("pause");
    return 0;
}

27

Re: C++ допоможіть виправити помилку

усе погано в тебе, код нікуди не годиться

28

Re: C++ допоможіть виправити помилку

чому?

29

Re: C++ допоможіть виправити помилку

А вони щось мають робити? Напишіть зрозумілою мовою.

30

Re: C++ допоможіть виправити помилку

ur_naz написав:

усе погано в тебе, код нікуди не годиться

Ви колись чули про поняття "конструктивне спілкування" і його переваги?

Подякували: ostap34PHP, leofun012

31 Востаннє редагувалося ur_naz (08.06.2020 01:19:47)

Re: C++ допоможіть виправити помилку

Неможливо нічого зрозуміти. Нема логіки. Воно навіть не компілюється! нащо ти кирилицю міксуєш з латиницею. Програмування це не копіпаста. Так ти показуєш неповагу до колег. Нащо та функція меню? клієнт чи абонент? бордель чи пошта? назви одною буквою, ога... відразу видно що, ти не розумієш і половини того, що там понаписано і тим більше навіщо.

 case 1:
            cout << "добавление новой записи" << endl;
            N.add_client();
            break;

що оце таке? де ти клієнта брати будеш? зі стелі?

 case 5:
            cout << "Показ информации по Електронной почте" << endl;
            cout << "Введите адрес електронной почты" << endl;
            cin >> TMP;
            N.SearchByEmail(TMP);
            cout << "Введите другой адрес електронной почты" << endl;
            break;

Нащо мені вводити іншу адресу? Се такий стьоб? чи тролінг?

   void setallINFO()
    {
        Setlname();
        Setfname();
        Setemail();
        SetPhone();
        SetDateofbirth();
    }

а оце що? Який сенс в цьому?

   void SetDateofbirth()
    {
        cout << "введите дату рождения"<< endl;
        cin >> DateofBirth;
    }

а оце що? якщо невігласи так вас навчають, то це означає, що так правильно і не повід так робити.

ви хоч би книжки повідкривали... а то це схоже на

Прихований текст

https://www.factroom.ru/facts/wp-content/uploads/2014/10/332-620x465.jpg

32

Re: C++ допоможіть виправити помилку

Ні, пане ur_naz, "неконкретний" часто означає також і "неконструктивний", але це не синоніми.

ur_naz написав:

Нащо мені вводити іншу адресу? Се такий стьоб? чи тролінг?

Це неконструктивно. Конструктивно було б "цей рядок непотрібний, видаліть його і перегляньте решту коду - може, там теж є зайві рядки".

sasha87, вам дуже пощастило - на форумі є учасник, що, схоже, розуміє мову стрічок у вашій програмі. Додам конструктиву, якщо вже про це йде мова: перекладіть усе українською, вам значно більше допомагатимуть тут.