С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
#1

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

08.09.2012, 23:30. Просмотров 405. Ответов 5
Метки нет (Все метки)

Что изменить в программе чтобы можно было работать с несколькими записями благодаря указателям на текущий следующий и предыдущий элемент
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 23:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что изменить в программе? (C++):

Что изменить в программе? - C++
Что нужно изменить в программе или добавить чтобы была возможность работать не с одной а с несколькими записями?#include &quot;stdafx.h&quot; ...

Что необходимо изменить в программе? - C++
Подскажите пожалуйста что необходимо сделать чтобы высчитывался стаж, как связать два класса? #include &quot;stdafx.h&quot; #include &quot;cstdlib&quot; ...

Изменить массив в программе на статический - C++
Нужно изменить массив на статический,как это сделать? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int...

Что в программе делает так, что процессор грузится на 100%? - C++
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

Можно ли изменить значение памяти в этой программе? - C++
Есть такая программа (исходник): cut Суть такая как изменить значение в ней через программы типа cheat engine или artmoney, чтобы она...

Как в программе можно изменить системное время компьютера? - C++
Как в программе можно изменить системное время компьютера?

5
alsav22
5428 / 4823 / 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; - конец списка.
0
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
09.09.2012, 08:16  [ТС] #3
а в самой программе что необходимо сделать чтобы программа создавала несколько записей(в методе dobavlenie())?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.09.2012, 08:42 #4
Цитата Сообщение от Denimen Посмотреть сообщение
а в самой программе что необходимо сделать чтобы программа создавала несколько записей(в методе dobavlenie())?
А смысл? Что вы хотите получить? У вас есть класс Worker. Каждый объект этого класса содержит в себе информацию об одном работнике и методы для получения или изменения этой информации. У вас метод dobavlenie() не удачно назван. Это, по сути, метод для создания записи о рабочем, когда её вообще нет, или изменения уже существующей. Куда вы хотите добавлять ещё запись, если она уже есть? Идея должна быть в другом. Создаётся несколько рабочих, каждый со своими данными. А тут либо список рабочих, как я выше писал, либо массив. Задание какое?
0
Denimen
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 26
09.09.2012, 08:58  [ТС] #5
по заданию нужен линейный список, но проблема в том что я не знаю как его организовать( чтобы не было так что при создании второй записи она заменяла данными первую)
0
alsav22
5428 / 4823 / 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;
}
1
09.09.2012, 21:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2012, 21:19
Привет! Вот еще темы с ответами:

Подскажите, есть ли в программе какое то постоянное значение, которое нельзя изменить - C++
Доброго времени суток уважаемые форумчане! Подскажите, пожалуйста, есть ли какое то значение в программе, которое нельзя изменить даже...

Нужно изменить строки в программе - C++
Ребят, я вообще не шарю в программировании, нужна ваша помощь, скачал софт, и он требует что бы были подключены определенные наушники, так...

Не понимаю текста программы. Что будет напечатано в результате программы? И что вообще происходит в программе? - C++
class B { int x; B (int a=0) { x = a; cout « 1; } -B () { cout « 3; } }; class D : B { D (int d ) : B (d) {...

ошибка в программе, что не так.. - C++
Хотелось бы узнать, что я сделала не так.. Задание: последовательность а1а2... образована по принципу: an=(1-1/2)(1-1/3)...(1-1/(n+1))...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.