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

Что изменить в программе? - C++

Восстановить пароль Регистрация
 
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
08.09.2012, 23:30     Что изменить в программе? #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
94
95
96
#include "stdafx.h"
#include "cstdlib"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <fstream>
using namespace std;
//---------------------------------------------------------------------------------------------------------------
 
class Worker
{
private:
    char family_i_inizialy[30]; // фамилия и инициалы работника
    int nachalo_trud_karery; // год начала трудовой деятельности
    int postuplenie_na_raboty; // год поступления на работу
    int day; // число рождения
    int mounth; // месяц рождения
    int year; // год рождения
public:
    void dobavlenie(); // добавление новой записи
    void prosmotr(); // просмотр записей
    void poisk_po_mesazu(); // поиск по месяцу рождения
};
void Worker::dobavlenie()
{
    cout<<"Введите фамилию и инициалы работника: ";
    cin>>family_i_inizialy;
    cout<<"Введите год рождения работника: ";
    cin>>year;
    cout<<"Введите месяц рождения работника: ";
    cin>>mounth;
    cout<<"Введите число рождения работника: ";
    cin>>day;
    cout<<"Введите год начала трудовой карьеры : ";
    cin>>nachalo_trud_karery;
    cout<<"Введите год поступления на работу : ";
    cin>>postuplenie_na_raboty;
    cout<<"Запись добавлена!!!";
}
void Worker::prosmotr()
{
    cout<<"Фамилия и инициалы работника: "<<family_i_inizialy<<endl;
    cout<<"Год рождения работника: "<<year<<endl;
    cout<<"Введите месяц рождения работника: "<<mounth<<endl;
    cout<<"Введите число рождения работника: "<<day<<endl;
    cout<<"Введите год начала трудовой карьеры : "<<nachalo_trud_karery<<endl;
    cout<<"Введите год поступления на работу : "<<postuplenie_na_raboty<<endl;
}
void Worker::poisk_po_mesazu()
{
    int n;
    cout<<"Введите месяц рождения работников с которым необходимо найти :";
    cin>>n;
    if(mounth==n) cout<<family_i_inizialy; else cout<<"Работников нет";
}
 
int main()
{
setlocale(0, "");
Worker ac;
int m=0;
while(m!=10)
    {
    cout<<"1-Добавить запись"<<endl;
    cout<<"2-Найти работника по месяцу"<<endl;
    cout<<"3-Показать записи"<<endl;
    cin>>m;
    switch (m)
        {
        case 1: 
            system("cls");
            ac.dobavlenie();
            _getch();
            system("cls");
        break;
        case 2: 
            system("cls");
            ac.poisk_po_mesazu();
            _getch();
            system("cls");
        break;
        case 3: 
            system("cls");
            ac.prosmotr();
            _getch();
            system("cls");
        break;
        default: cout<<"Вводите зачения от 1 до 3";
            _getch();
            system("cls");
    }
  }
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 23:30     Что изменить в программе?
Посмотрите здесь:

C++ Что не правильно в этой программе?
ошибка в программе, что не так.. C++
C++ Что не так в программе? (цикл While)
Что необходимо изменить в программе? C++
Что изменить в программе? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.09.2012, 04:18     Что изменить в программе? #2
Наверное, создать двунаправленный список объектов Worker. Узел списка:
C++
1
2
3
4
5
6
struct Node
{
    Worker *current;
    Worker *next;
    Worker *previous;
};
Node *first; - начало списка, Node *rear; - конец списка.
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
09.09.2012, 08:16  [ТС]     Что изменить в программе? #3
а в самой программе что необходимо сделать чтобы программа создавала несколько записей(в методе dobavlenie())?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.09.2012, 08:42     Что изменить в программе? #4
Цитата Сообщение от Denimen Посмотреть сообщение
а в самой программе что необходимо сделать чтобы программа создавала несколько записей(в методе dobavlenie())?
А смысл? Что вы хотите получить? У вас есть класс Worker. Каждый объект этого класса содержит в себе информацию об одном работнике и методы для получения или изменения этой информации. У вас метод dobavlenie() не удачно назван. Это, по сути, метод для создания записи о рабочем, когда её вообще нет, или изменения уже существующей. Куда вы хотите добавлять ещё запись, если она уже есть? Идея должна быть в другом. Создаётся несколько рабочих, каждый со своими данными. А тут либо список рабочих, как я выше писал, либо массив. Задание какое?
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
09.09.2012, 08:58  [ТС]     Что изменить в программе? #5
по заданию нужен линейный список, но проблема в том что я не знаю как его организовать( чтобы не было так что при создании второй записи она заменяла данными первую)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.09.2012, 21:19     Что изменить в программе? #6
Приблизительно так:
Код
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include "stdafx.h"
#include "cstdlib"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <fstream>
using namespace std;
//---------------------------------------------------------------------------------------------------------------
 
class Worker
{
private:
    char family_i_inizialy[30]; // фамилия и инициалы работника
    int nachalo_trud_karery; // год начала трудовой деятельности
    int postuplenie_na_raboty; // год поступления на работу
    int day; // число рождения
    int mounth; // месяц рождения
    int year; // год рождения
public:
    void zapolnenie(); // запись данных
    void prosmotr(); // просмотр записей
    int getmounth() // доступ к месяцу рождения
    {
        return mounth;
    }
};
void Worker::zapolnenie()
{
    cout<<"Введите фамилию и инициалы работника: ";
    cin >> family_i_inizialy;
    cout<<"Введите год рождения работника: ";
    cin>>year;
    cout<<"Введите месяц рождения работника: ";
    cin>>mounth;
    cout<<"Введите число рождения работника: ";
    cin>>day;
    cout<<"Введите год начала трудовой карьеры : ";
    cin>>nachalo_trud_karery;
    cout<<"Введите год поступления на работу : ";
    cin>>postuplenie_na_raboty;
    cout<<"Запись добавлена!!!\n";
}
void Worker::prosmotr()
{
    cout<<"Фамилия и инициалы работника: "<<family_i_inizialy<<endl;
    cout<<"Год рождения работника: "<<year<<endl;
    cout<<"Месяц рождения работника: "<<mounth<<endl;
    cout<<"Число рождения работника: "<<day<<endl;
    cout<<"Год начала трудовой карьеры : "<<nachalo_trud_karery<<endl;
    cout<<"Год поступления на работу : "<<postuplenie_na_raboty<<endl;
}
//...............................................................................
 
struct Node
{
    Worker *current;
    Node *next; 
    Node *previous;
};
 
bool newWorker(Node *&front, Node *&rear) // добавление в список
{
    Node *add = new Node; // новый элемент списка
    if (add == NULL) return false; // если память не выделена
    add -> current = new Worker;    
    if (add -> current == NULL) return false; // если память не выделена
    add  -> current -> zapolnenie();
    add -> next = NULL;
    add -> previous = rear;
        
    if (front == NULL) // если список пустой, то в начало
    {
        front = add; // front начало списка
        rear = front; // если элемент один в списке
    }
    else
        rear -> next = add; // если список не пустой, то в конец
    rear = add; // rear конец списка
    return true;
}
 
void printNode(Node *front) // вывод списка
{
    Node *Curr;
    Curr = front;
    cout << '\n';
    while (Curr != NULL)
    {
        Curr -> current -> prosmotr();
        Curr = Curr -> next;
    }
}
 
bool poisk_po_mesazu(Node *front, int n) // поиск в списке по месяцу рождения
{
    bool flag = false;
    Node *Curr;
    Curr = front;
    while (Curr != NULL)
    {
        if (Curr -> current -> getmounth() == n)
        {
            Curr -> current -> prosmotr();
            flag = true;
        }
        Curr = Curr -> next;
    }
    return flag;
}
 
void ydalenie(Node *front) // удаление списка
{
    Node *temp;
    while (front != NULL)
    {
        temp = front -> next;
        delete front -> current;
        delete front;
        front = temp;
    }
}
 
int main()
{
setlocale(0, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
Node *front = NULL; // начало списка
Node *rear  = NULL; // конец  списка
 
char ch;
cout << "Добавить запись? (д/н) ";
cin >> ch;
while (ch != 'н') 
{
    if (newWorker(front, rear))
    {
        cout << "Продолжить? (д/н) ";
        cin >> ch;
        if (ch == 'н') break;
    }
    else
    {
        cout << "Ошибка при создании записи!" << endl;
        cout << "Продолжить? (д/н) ";
        cin >> ch;
    }
}
if (front != NULL)
{
    cout << "Показать записи? (д/н)" << endl;
    cin >> ch;
    if (ch != 'н')
        printNode(front);
 
    cout << "Найти работников по месяцу рождения? (д/н)" << endl;
    cin >> ch;
    while (ch != 'н')
    {
        cout<<"Введите месяц рождения:";
        int n;
        cin >> n;
        if (!poisk_po_mesazu(front, n)) cout << "Таких в списке нет\n" ;
        cout << "Продолжить? (д/н) ";
        cin >> ch;
    }
}
 
ydalenie(front);
 
system("pause");
return 0;
}


Добавлено через 8 часов 56 минут
Можно так:
Код
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include "stdafx.h"
#include "cstdlib"
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
//---------------------------------------------------------------------------------------------------------------
 
class Worker
{
private:
    string family_i_inizialy; // фамилия и инициалы работника
    int nachalo_trud_karery; // год начала трудовой деятельности
    int postuplenie_na_raboty; // год поступления на работу
    int day; // число рождения
    int mounth; // месяц рождения
    int year; // год рождения
 
    Worker *next; // указатель на следующего в списке
 
public:
    void zapolnenie(); // запись данных
    void prosmotr(); // просмотр записей
    
    int getmounth() // доступ к месяцу рождения
    {
        return mounth;
    }
    
    void setnext(Worker *add) // установке указателя на на следующий элемент в списке
    {
        next = add;
    }
    
    Worker* getnext() // получение указателя на следующий элемент в списке
    {
        return next;
    }
};
 
void Worker::zapolnenie()
{
    cout<<"Введите фамилию и инициалы работника: ";
    
    cin.clear();
    while (cin.get() != '\n');
    
    getline(cin, family_i_inizialy);
    cout<<"Введите год рождения работника: ";
    cin>>year;
    cout<<"Введите месяц рождения работника: ";
    cin>>mounth;
    cout<<"Введите число рождения работника: ";
    cin>>day;
    cout<<"Введите год начала трудовой карьеры : ";
    cin>>nachalo_trud_karery;
    cout<<"Введите год поступления на работу : ";
    cin>>postuplenie_na_raboty;
    cout<<"Запись добавлена!!!\n";
    cin.sync();
}
 
void Worker::prosmotr()
{
    cout<<"Фамилия и инициалы работника: "<<family_i_inizialy<<endl;
    cout<<"Год рождения работника: "<<year<<endl;
    cout<<"Месяц рождения работника: "<<mounth<<endl;
    cout<<"Число рождения работника: "<<day<<endl;
    cout<<"Год начала трудовой карьеры : "<<nachalo_trud_karery<<endl;
    cout<<"Год поступления на работу : "<<postuplenie_na_raboty<<endl;
}
//...............................................................................
 
bool newWorker(Worker *&front, Worker *&rear) // добавление в список
{
    Worker *add = new Worker; // новый элемент списка
    if (add == NULL) return false; // если память не выделена
    
    add -> zapolnenie();
    add -> setnext(NULL);
    
    if (front == NULL) // если список пустой, то в начало
    {
        front = add; // front начало списка
        rear = front; // если элемент один в списке
    }
    else
        rear -> setnext(add); // если список не пустой, то в конец
    rear = add; // rear конец списка
    return true;
}
 
void printlist(Worker *front) // вывод списка
{
    Worker *Curr;
    Curr = front;
    cout << endl;
    while (Curr != NULL)
    {
        Curr -> prosmotr();
        Curr = Curr -> getnext();
    }
    
}
 
bool poisk_po_mesazu(Worker *front, int n) // поиск в списке по месяцу рождения
{
    bool flag = false;
    Worker *Curr;
    Curr = front;
    while (Curr != NULL)
    {
        if (Curr -> getmounth() == n)
        {
            Curr -> prosmotr();
            flag = true;
        }
       Curr = Curr -> getnext();
    }
    return flag;
}
 
void ydalenie(Worker *front) // удаление списка
{
    Worker *temp;
    while (front != NULL)
    {
        temp = front -> getnext();
        delete front;
        front = temp;
    }
}
 
int main()
{
setlocale(0, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
Worker *front = NULL; // начало списка
Worker *rear  = NULL; // конец  списка
 
char ch;
cout << "Добавить запись? (д/н) ";
cin >> ch;
while (ch != 'н') 
{
    
    if (newWorker(front, rear))
    {
        cout << "Продолжить? (д/н) ";
        cin >> ch;
        if (ch == 'н') break;
    }
    else
    {
        cout << "Ошибка при создании записи!" << endl;
        cout << "Продолжить? (д/н) ";
        cin >> ch;
    }
}
if (front != NULL)
{
    cout << "Показать записи? (д/н)" << endl;
    cin >> ch;
    if (ch != 'н')
        printlist(front);
 
    cout << "Найти работников по месяцу рождения? (д/н)" << endl;
    cin >> ch;
    while (ch != 'н')
    {
        cout<<"Введите месяц рождения:";
        int n;
        cin >> n;
        if (!poisk_po_mesazu(front, n)) cout << "Таких в списке нет\n" ;
        cout << "Продолжить? (д/н) ";
        cin >> ch;
    }
}
 
ydalenie(front);
 
system("pause");
return 0;
}
Yandex
Объявления
09.09.2012, 21:19     Что изменить в программе?
Ответ Создать тему
Опции темы

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