Форум программистов, компьютерный форум CyberForum.ru

Структуры данных "Абонент" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
MAZUR777
 Аватар для MAZUR777
604 / 129 / 65
Регистрация: 15.04.2010
Сообщений: 554
21.04.2012, 16:15     Структуры данных "Абонент" #1
Здравствуйте, помогите, пожалуйста с решением данной задачи.
Прилагаю такой вариант исправьте, что не так (желательно сохранить так же в архив) Использовать желательно VC++ 10
Миниатюры
Структуры данных "Абонент"  
Вложения
Тип файла: rar #1 rar.rar (1.1 Кб, 19 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
21.04.2012, 16:33     Структуры данных "Абонент" #2
Для чего подключен windows.h и какую ошибку исправить?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.04.2012, 13:01     Структуры данных "Абонент" #3
Каков в первом задании фактический формат? Таблица с разделением табуляцией, таблица с разделением запятой, таблица с разделением точкой с запятой и таблица с разделением пробелом могут иметь один и тот же тип файла txt, но это разные форматы. Можно первой строкой дать перечисление подписей столбцов, можно эти подписи подразумевать в программе, но не предусматривать в файле, а можно каждый элемент дать в виде <поле>=<значение>, то есть подписать отдельно каждое значение. Это тоже будут разные форматы. Даже xml основан на текстовом типе файла, хоть и имеет иное расширение. Может у тебя нечто xml-образное, но не сам xml? Какая требуется обработка?

Добавлено через 8 минут
C++
1
2
for (i=0; i<10; i++) 
        base >> m[i].last_name >> m[i].year >> m[i].phone >> m[i].address;
на каком основании выбран диапазон цикла от 0 до 9? Файловый ввод обычно или в зависимости от поля заголовка, или до еофа. И что то я чтения заголовка здесь не вижу. Или фактический формат имеет фиксированное количество записей? Массив, кстати, может ведь быть и динамическим.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
cout << endl << "Информация об абонентах" << endl;
        cout << "1. Вывести фамилии абонентов и их номера телефонов." << endl;
        cout << "2. Вывести список номеров телефонов и адреса абонентов." << endl;
        cout << "3. Вывести номера телефонов, установленных в определенном году." << endl;
        cout << "4. Завершить работу программы." << endl;
        cout << "Выберите действие: ";
        cin >> x;
 
        while (x<1 || x>4) {
            cout << "Неверный выбор. Повторите ввод." << endl;
            cin >> x;
        }
После такого приглашения ко вводу ожидается, что программа зациклится и после одного корректного ввода и выполнения соответствующих действий вернётся к выбору команды, а для этого надо ввод икса и обработку запихать в тело цикла, здесь же единственный ввод икса в цикле - защита от корявого ввода.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.04.2012, 15:52     Структуры данных "Абонент" #4
Укажите, пожалуйста, ошибки которые у Вас возникают, не у всех есть время на скачивание и просмотр кода. Так же лучше выкладывайте код прям на форум под тегом для заданного языка.
-=ЮрА=-
Заблокирован
Автор FAQ
24.04.2012, 15:46     Структуры данных "Абонент" #5
MAZUR777, вот 1-е задание
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <fstream>
using namespace std;
 
struct MARKS//ñòðóêòóðГ* äëÿ îöåГ*îê ñòóäåГ*òîâ
{
    int fiz; //îöåГ*ГЄГ* ГЇГ® ôèçèêå
    int math;//îöåГ*ГЄГ* ГЇГ® Г¬Г*ГІГҐГ¬Г*ГІГЁГЄГҐ
    int TOE; //îöåГ*ГЄГ* ГЇГ® Г’ГЋГќ
    int chem;//îöåГ*ГЄГ* ГЇГ® õèìèè
};
 
struct STUDENT//ñòðóêòðГ* äëÿ Г¤Г*Г*Г*ûõ ñòóäåГ*ГІГ*
{
    char Fam [32];//Г”Г*ìèëèÿ ñòóäåГ*ГІГ*
    char Name[32];//Èìÿ ñòóäåГ*ГІГ*
    char SurN[32];//ГЋГІГ·ГҐГ±ГІГўГ® ñòóäåГ*ГІГ*
    char group[16];//ÒåêñòîâГ*Гї Г§Г*ГЇГЁГ±Гј ãðóïïû
    MARKS marks;
};
 
bool ReadStruct(ifstream &ifs, STUDENT &pST)
{
    bool bRead = true;
    ifs.clear();
    if(!(ifs >>pST.Fam>>pST.Name>>pST.SurN>>pST.group
        >>pST.marks.fiz>>pST.marks.math
        >>pST.marks.TOE>>pST.marks.chem))
        bRead = false;
    return bRead;
}
 
bool ShowStruct(STUDENT pST)
{
    bool bOut = false;
    if(cout<<pST.Fam<<" "<<pST.Name[0]<<"."<<pST.SurN[0]<<".\n")
    if(cout<<"ÃðóïïГ* : "<<pST.group<<endl)
    if(cout<<"ÎöåГ*ГЄГЁ ГЇГ® ïðåäìåòГ*Г¬\n")
    if(cout<<"ÔèçèêГ*     : "<<pST.marks.fiz<<endl)
    if(cout<<"ГЊГ*ГІГҐГ¬Г*ГІГЁГЄГ* : "<<pST.marks.math<<endl)
    if(cout<<"Г’ГЋГќ        : "<<pST.marks.TOE<<endl)
    if(cout<<"Õèìèÿ      : "<<pST.marks.chem<<endl)
        bOut = true;
    return bOut;
}
 
    
 
int main()
{
    system("chcp 1251");
    bool bInput = true;//ÔëГ*ГЈ ГЁГ*ôîðìèðóþùèé Г® òîì Г·ГІГ® Г·ГІГ*ГЁГҐ ГіГ±ГЇГҐГёГ*Г®
    int i, n;//×èñëî ñòóäåГ*òîâ
    STUDENT * list;//ÓêГ*Г§Г*òåëü Г*Г* Г¬Г*Г±Г±ГЁГў Г± Г¤Г*Г*Г*ûìè Г® ñòóäåГ*ГІГ*Гµ
    ifstream ifs("students.txt");//ÎðãГ*Г*èçîâûâГ*ГҐГ¬ ïîòîê Г·ГІГҐГ*ГЁГї
    //äëÿ ГґГ*éëГ* Г± Г¤Г*Г*Г*ûìè Г® ñòóäåГ*ГІГ*Гµ
    if(!ifs.is_open())
        cout<<"Г”Г*éë students.txt Г*ГҐ îòêðûò\n";
    else
    {
        if(!(ifs>>n))//ÏûòГ*åìñÿ Г±Г·ГЁГІГ*ГІГј ÷èñëî ñòóäåГ*òîâ
            cout<<"×èñëî ñòóäåГ*òîâ Г*ГҐ Г±Г·ГЁГІГ*Г*Г®\n";
        else
        {
            //ÏûòГ*åìñÿ âûäåëèòü ГЇГ*ìÿòü ïîä Г¬Г*Г±Г±ГЁГў ñòóäåГ*òîâ
            try
            {
                list = new STUDENT[n];
            }
            catch(bad_alloc &e)
            {
                cout<<"ГЋГёГЁГЎГЄГ* âûäåëåГ*ГЁГї ГЇГ*ìÿòè : "<<e.what()<<endl;
                list = NULL;
            }
            for(i = 0; i < n && bInput; i++)
                bInput = ReadStruct(ifs, list[i]);
            if(!bInput)
                cout<<"ГЋГёГЁГЎГЄГ* Г·ГІГҐГ*ГЁГї\n";
            else
            {
                cout<<"Ñ÷èòГ*Г*Г® "<<n<<" ñòðóêòóð\n";
                for(i = 0; i < n && bInput; i++)
                    if(!ShowStruct(list[i]))
                       cout<<"ГЋГёГЁГЎГЄГ* âûâîäГ* Г*Г* ГЅГЄГ°Г*Г*\n";
            }
            if(list)
                delete [] list;//Г—ГЁГ±ГІГЁГ¬ ГЇГ*ìÿòü
        }
        ifs.close();
    }
    system("pause");
    return 0;
}
Структура файла данных приведена ниже
3
Букин Иван Фёдорович ЭС-12 5 4 3 4
Абрикосова Элла Георгиевна ЭСиС-11 4 4 5 4
Mazur Unknow Unknown Cyberforum 5 5 5 5

Первая строка число записей, последующие строки - инфа о студентах
Миниатюры
Структуры данных "Абонент"  
-=ЮрА=-
Заблокирован
Автор FAQ
24.04.2012, 15:59     Структуры данных "Абонент" #6
Хорошо проект так проект не надо мазура, нет проблем
3
Букин Иван Фёдорович ЭС-12 5 4 3 4
Абрикосова Элла Георгиевна ЭСиС-11 4 4 5 4
Горбиков Антон Петрович ЭПГ-12 5 5 5 5
Миниатюры
Структуры данных "Абонент"  
Вложения
Тип файла: rar STUDS_project.rar (7.4 Кб, 5 просмотров)
MAZUR777
 Аватар для MAZUR777
604 / 129 / 65
Регистрация: 15.04.2010
Сообщений: 554
24.04.2012, 16:05  [ТС]     Структуры данных "Абонент" #7
Юра исправь если можешь а то такие иероглифы в VB C++ 10
Миниатюры
Структуры данных "Абонент"  
-=ЮрА=-
Заблокирован
Автор FAQ
24.04.2012, 16:58     Структуры данных "Абонент" #8
MAZUR777, выставь шрифт приложения как поазано здесь
Создание файла в UTF-8 кодировке
либо добавь к хедерам #include <clocale>
а вместо
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
system("chcp 1251");
запиши setlocale(LC_ALL, "Russian"); и наслаждайся русским в 10-й версии студии

Добавлено через 9 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <iostream>
#include <fstream>
using namespace std;
Запиши так
C++
1
2
3
4
#include <iostream>
#include <fstream>
#include <clocale>
using namespace std;
а в самой функции main замени строку выделенную красным на следующую setlocale(LC_ALL, "Russian");
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int main()
{
* * system("chcp 1251");
* * bool bInput = true;//Флаг информирующий о том что чтние успешно
* * int i, n;//Число студентов
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.04.2012, 17:09     Структуры данных "Абонент" #9
MAZUR777, я так понимаю, что вторая - это продолжение первой. А уже там полно вопросов. Если же она сама по себе, то тем более не понятно, к какой софтине нужна междухаря.
MAZUR777
 Аватар для MAZUR777
604 / 129 / 65
Регистрация: 15.04.2010
Сообщений: 554
24.04.2012, 17:11  [ТС]     Структуры данных "Абонент" #10
на основе 1-ой
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.04.2012, 17:17     Структуры данных "Абонент" #11
А первая не понятна.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.05.2012, 14:21     Структуры данных "Абонент" #12
А менюшку пишите сами.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional> 
 
struct Address
{
   Address(const std::string& ci, const std::string& co, const std::string& st,
           const int h):city(ci), country(co), street(st), house(h)
   {
   }
   Address():house(0)
   {
   }
   std::string city;
   std::string country;
   std::string street;
   int house;
};
 
std::istream& operator >> (std::istream& is, Address& addr)
{
   is >> addr.city >> addr.country >> addr.street >> addr.house;
   return is;
}
 
class PhoneNote
{
public:
   PhoneNote(const Address& addr, const std::string& p_name, const std::string& no,
             const int start):address(addr), person_name(p_name), number(no), start_year(start)
   {
   }
   PhoneNote():start_year(0)
   {
   }
   Address address;
   std::string person_name;
   std::string number;
   int start_year;
};
 
std::istream& operator >> (std::istream& is, PhoneNote& note)
{
   is >> note.address >> note.person_name >> note.number >> note.start_year;
   return is;
}
 
std::pair<std::string, std::string> select_phone_and_name(const PhoneNote& note)
{
   return std::make_pair(note.number, note.person_name);
}
 
std::pair<std::string, Address> select_phone_and_address(const PhoneNote& note)
{
   return std::make_pair(note.number, note.address);
}
 
struct find_notes_by_year : public std::unary_function<PhoneNote, bool>
{
public:
   find_notes_by_year(int y):year(y)
   {
   }
   result_type operator () (const argument_type& arg) const
   {
      return arg.start_year == year;
   }
private:
   int year;
};
 
class PhoneBook
{
public:
   PhoneBook(const std::vector<PhoneNote>& vec):notes(vec)
   {
   }
   std::vector<std::pair<std::string, std::string> > get_phones_and_names() const
   {
      std::vector<std::pair<std::string, std::string> > result;
      std::transform(notes.begin(), notes.end(), std::back_inserter(result), select_phone_and_name);
      return result;
   }
   std::vector<std::pair<std::string, Address> > get_phones_and_addresses() const
   {
      std::vector<std::pair<std::string, Address> > result;
      std::transform(notes.begin(), notes.end(), std::back_inserter(result), select_phone_and_address);
      return result;
   }
   std::vector<PhoneNote> get_notes_by_year(const int year)
   {
      std::vector<PhoneNote> result;
      std::remove_copy_if(notes.begin(), notes.end(), std::back_inserter(result), std::not1(find_notes_by_year(year)));
      return result;
   }
private:
   friend std::istream& operator >> (std::istream&, PhoneBook&);
   std::vector<PhoneNote> notes;
};
 
std::istream& operator >> (std::istream& is, PhoneBook& book)
{
   PhoneNote note;
   while (is >> note)
   {
      book.notes.push_back(note);
   }
   return is;
}
 
int main()
{
}
-=ЮрА=-
Заблокирован
Автор FAQ
15.05.2012, 17:08     Структуры данных "Абонент" #13
MAZUR777, если совсем по простому можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <conio.h>
#include <fstream>
#include <iostream>
using namespace std;
 
struct Abonent
{
    char Family[32];
    int  SetYear;
    int Number;
    char Adress[32];
};
 
long LoadBase(Abonent * list, bool &bRead);//Функция загружает БД
bool ReadField(ifstream &ifs, Abonent &pst);//Считывает поле структуры
 
//Функции обработчики меню
void Item1(Abonent * list, long nCount);//Фамилии абонентов и номера их телефонов
void Item2(Abonent * list, long nCount);//Список номеров и адреса абонентов
void Item3(Abonent * list, long nCount);//Номера телефонов установленных в заданном году
 
int main()
{
    system("chcp 1251 >> null");
    Abonent * list = NULL;
    bool bMenu = true;
    long count = LoadBase(NULL, bMenu);
    try
    {
        list = new Abonent[count];
    }
    catch(bad_alloc &e)
    {
        cout<<"Ошибка выделения памяти : "<<e.what()<<endl;
        list = NULL;
    }
    if(!list)
        cout<<"База данных не загружена\n";
    else
        count = LoadBase(list, bMenu);
    while(bMenu)
    {
        system("cls");
        cout<<"\t***МЕНЮ ПРОГРАММЫ***\n";
        cout<<"1 - Фамилии абонентов и номера их телефонов\n";
        cout<<"2 - Список номеров и адреса абонентов\n";
        cout<<"3 - Номера телефонов установленных в заданном году\n";
        cout<<"Другой символ - выход из программы\n";
        switch(_getch())
        {
        case '1':
            Item1(list, count);
            break;
        case '2':
            Item2(list, count);
            break;
        case '3':
            Item3(list, count);
            break;
        default:
            bMenu = false;
            break;
        }
        system("pause");
    }
    if(list)
        delete [] list;
    return 0;
}
 
long LoadBase(Abonent * list, bool &bRead)
{
    long count = 0;
    Abonent pst= {0};
    ifstream ifs("data.txt");
    if(!(bRead = ifs.is_open()))
        cout<<"Ошибка открытия data.txt\n";
    else
    while(!ifs.eof() && bRead)
    {
        bRead = ReadField(ifs, pst);
        if(list)
            list[count] = pst;
        count++;
    }
    ifs.close();
    return count;
}
 
bool ReadField(ifstream &ifs, Abonent &pst)
{
    if(!ifs.bad())
        ifs>>pst.Family;
    if(!ifs.bad())
        ifs>>pst.Number;
    if(!ifs.bad())
        ifs>>pst.SetYear;
    if(!ifs.bad())
        ifs>>pst.Adress;
    bool bRead = !ifs.bad();
    return bRead;
}
 
void Item1(Abonent * list, long nCount)
{
    for(long i = 0; i < nCount; i++)
    {
        cout<<list[i].Family<<" ## "
            <<list[i].Number<<endl;
    }
}
 
void Item2(Abonent * list, long nCount)//Список номеров и адреса абонентов
{
    for(long i = 0; i < nCount; i++)
    {
        cout<<list[i].Number<<" - "
            <<list[i].Adress<<endl;
    }
}
 
void Item3(Abonent * list, long nCount)
{
    int i, iYear = 0;
    cout<<"Bведите год установки : ";
    if(!(cin>>iYear) || cin.get() != '\n')
    {
        cin.clear();
        cin.sync();
        cout<<"Ошибка ввода\n";
    }
    else
    for(i = 0; i < nCount; i++)
    {
        if(list[i].SetYear == iYear)
            cout<<"Фамилия : "<<list[i].Family<<endl
                <<"## тел  : "<<list[i].Number<<endl
                <<"Адрес   : "<<list[i].Adress<<endl;
    }
}
data.txt
Фамилия1 0621112233 2001 Адрес1
Фамилия2 0622223344 2011 Адрес2
Фамилия3 0624445566 2010 Адрес3
Фамилия4 0620002233 2008 Адрес4
Фамилия5 0627772233 2001 Адрес5
Фамилия6 0628882233 2001 Адрес6
Миниатюры
Структуры данных "Абонент"  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2012, 09:17     Структуры данных "Абонент"
Еще ссылки по теме:

Абстрактные структуры данных C++
C++ Алгоритмы и структуры данных
C++ Полустатические структуры данных

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
16.05.2012, 09:17     Структуры данных "Абонент" #14
MAZUR777, вот проект
Вложения
Тип файла: rar Abonents_proj.rar (7.9 Кб, 4 просмотров)
Yandex
Объявления
16.05.2012, 09:17     Структуры данных "Абонент"
Ответ Создать тему
Опции темы

Текущее время: 07:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru