Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для Be_proud_
0 / 0 / 0
Регистрация: 22.12.2020
Сообщений: 11

Структура worker и её запись

03.06.2021, 21:41. Показов 1752. Ответов 5

Студворк — интернет-сервис помощи студентам
Есть структура worker , все её элементы должны записываться в файл , а также должны считываться из него. Но судя по всему записывается только year , так как только он выводиться в консоли. Помогите пожалуйста это исправить и если не трудно - объясните , что я сделал не так при написании кода.
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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
const int thisy = 2021;//текущий год
 
inline void skipstr() { while (cin.get() != '\n') continue; }
 
struct  worker
{
    char fio[16];// Фамилия и инициалы
    int year;//год поступления на работу
    char job;//должность
};
 
worker elem;
 
const int size_p = sizeof(worker);//размеры структуры
 
/*--------Прототипы функций-----------*/
int write(ofstream& fout);
int sort(ofstream& fout);
int print(ifstream& fout);
int find(ifstream& fout);
 
 
/*------------Основная функция-----------*/
int main()
{
    setlocale(LC_ALL, "RUS");
 
    char menubutton;
 
    string path = "worker.txt ";//определение пути для файла. Записан в виде строковой константы для удобства
 
    ofstream txtout(path.c_str(), ios::ate | ios::_Nocreate);//открытие файла для редактирования
 
    ifstream txtin(path.c_str(), ios::in | ios::_Nocreate);//открытие файла для чтения
 
    if (!txtout)//если файл не найден , то мы его создаём
    {
        cout << "Не удалось открыть файл для редактирования ! Попытка создать файл !\n";
        ofstream txtout(path.c_str(), ios::out);
        ifstream txtin(path.c_str(), ios::in);
        if (!txtout)//в случае , если неравильно указан путь или создать файл невозможно
        {
            cout << "Не удалось создать(открыть) файл";
        }
 
    }
    //меню
    while (1) {//пока не нажали выход
        system("cls");
        cout<<"___________________________" << endl;
        cout<<"     Выбор действий : " << endl;
        cout<<"___________________________" << endl;
        cout<<"1 - Запись в файл" << endl;
        cout<<"2 - Сортировка" << endl;
        cout<<"3 - Вывод данных" << endl;
        cout<<"4 - Поиск" << endl;
        cout<<"5 - Выход" << endl;
        cout<<"___________________________" << endl;
        cout<<"Введите номер пункта меню" << endl;
 
        menubutton = cin.get();//получение номера кнопки
 
        switch (menubutton)
        {
           case'1':write(txtout); break;//запись в файл
           case'2':sort(txtout); break;//сортировка по фамилиям
           case'3':print(txtin); break;//вывод на экран
           case'4':find(txtin); break;//поиск 
           case'5':return 0;//выход
        }
    }
    txtout.close();//закрытие потока
}
 
 
int write(ofstream& fout)
{
    system("cls");
    cout<<"Ввод данных о сотрудниках"<<endl;
    cout<<"Для выхода введите символ '*'"<<endl;
    cout<<"___________________________"<<endl;
    cout << "Введите Ф.И.О. (обязательно с инициалами): " << endl;
    cin.getline(elem.fio, 16);
    while (elem.fio[0] != '*')
    {
        skipstr();
        cout << "Введите год поступления на работу: " << endl;
        cin>> elem.year;
        cout << "Введите должность " << endl;
        cin.get(elem.job);
        skipstr();
        fout.write((char*)&elem, sizeof elem);
        cout << "___________________________"<<endl;
        cout << "Введите Ф.И.О. (обязательно с инициалами):"<<endl;
        cin.get(elem.fio, 16);
    }
    fout.close();
    return 0;
}
 
int sort(ofstream& fout)//не реализованна
{
    system("cls");
 
    cin.get();
    fout.close();
    return 0;
}
 
int print(ifstream& fout)
{
    system("cls");
    while (fout.read((char*)&elem, size_p))
    {
        cout << "Ифнормация о сотрудниках" << endl;
        cout << "Ф.И.О." << endl;
        cout << elem.fio << endl;
        cout << "Дата поступления на работу" << endl;
        cout << elem.year << endl;
        cout << "Должность" << endl;
        cout << elem.job << endl;
        cout << "___________________________" << endl;
    
    }
    cout << "Для продолжения нажмите Enter" << endl;
    cin.get();
    cin.get();
    fout.close();
    return 0;
}
 
int find(ifstream& fout)//не реализованна
{
    system("cls");
 
    cin.get();
    fout.close();
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.06.2021, 21:41
Ответы с готовыми решениями:

[Error] no matching function for call to 'worker::worker()' (Worker-структура)
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstring&gt; using namespace std; struct worker { worker (worker* w, int n); ...

Компилятор не может конвертировать int* в worker*(worker-структура)
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstring&gt; using namespace std; struct worker { void input(worker* w, int); ...

Структура WORKER
Написать программу, отдельными функциями выполняет следующие действия: -ввод с клавиатуры данных в массив TABL, состоящей из N переменных...

5
03.06.2021, 21:52

Не по теме:

напишите оригинал условия задачи

0
 Аватар для Be_proud_
0 / 0 / 0
Регистрация: 22.12.2020
Сообщений: 11
04.06.2021, 09:19  [ТС]
Описать структуру с именем WORKER, содержащую следующие поля:
— фамилия и инициалы работника;
— название занимаемой должности;
— год поступления на работу.
Написать программу, выполняющую следующие действия с помощью
функций:
— ввод с клавиатуры данных в файл, состоящий из структур типа WORKER;
записи должны быть размещены по алфавиту;
— чтение данных из этого файла;
— вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры; если таких работников нет, вывести на дисплей соответствующее сообщение.
Ввод-вывод осуществлять с помощью средств языка C++.
0
 Аватар для Be_proud_
0 / 0 / 0
Регистрация: 22.12.2020
Сообщений: 11
04.06.2021, 17:45  [ТС]
Описать структуру с именем WORKER, содержащую следующие поля:
— фамилия и инициалы работника;
— название занимаемой должности;
— год поступления на работу.
Написать программу, выполняющую следующие действия с помощью
функций:
— ввод с клавиатуры данных в файл, состоящий из структур типа WORKER;
записи должны быть размещены по алфавиту;
— чтение данных из этого файла;
— вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры; если таких работников нет, вывести на дисплей соответствующее сообщение.
Ввод-вывод осуществлять с помощью средств языка C++.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.06.2021, 23:47
Лучший ответ Сообщение было отмечено Be_proud_ как решение

Решение

ввод значения стажа добавьте сами
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
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <ctime>
using namespace std;
 
struct WORKER
{
    string name;    
    string position;
    int year;
};
 
void Set (WORKER *data, int n)
{    
    for (int i = 0; i < n; i++)
    {       
        cout << "Worker " << i+1 << ":\n"; 
        cin.ignore();
        cout << "surname,initials: "; getline(cin, data[i].name);       
        cout << "position: "; getline(cin, data[i].position);
        cout << "year: "; cin >> data[i].year;
    }
}
 
void Sort (WORKER *data, int n)
{
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-i-1; j++)
            if (data[j].name > data[j+1].name)
                swap(data[j],data[j+1]);
}
 
void WriteFile (WORKER *data, int n)
{    
    ofstream out("file.txt");
    
    if (out.is_open())
    {
    for (int i = 0; i < n; i++)
        out << setw(25) << left << data[i].name << setw(30) << left 
        << data[i].position << data[i].year << "\n";   
    
    out.close();
    }
    else cout << "Unable to open file\n";
}
 
void PrintFile ()
{     
    ifstream in("file.txt");
    if (in.is_open())
    {
        string str;
        
        while (getline(in, str))
        {
            cout << str << "\n";
        }
        
    in.close();    
    }
    else cout << "Unable to open file\n";
}
 
void Find ()
{    
    ifstream in("file.txt");
    
    int k=0;
    string str;
    
    time_t e=time(0);
    int u=localtime(&e)->tm_year+1900;
    
    while (getline(in, str))
    {              
        if(u-stoi(str.substr(str.find_last_of(' ')+1))>10) 
        {
            k=1;
            cout << str.erase(str.find(' ')) << "\n";
        }
    }
    
    if(k==0) cout << "not found\n";
    
    in.close();   
}   
 
int main()
{
    int n;    
    cout << "n="; cin >> n;    
    
    WORKER *data = new WORKER[n];       
    
    Set(data,n);      
    Sort(data,n);
    WriteFile(data,n);
    cout << "SORTED LIST:\n";
    PrintFile();    
    cout << "WORKERS WITH MORE THAN 10 YEARS OF EXPERIENCE:\n";
    Find();
    delete[]data;
system("pause");
return 0;
}
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.06.2021, 15:46
возможно это должна быть одна функция
Цитата Сообщение от Be_proud_ Посмотреть сообщение
— ввод с клавиатуры данных в файл, состоящий из структур типа WORKER;
записи должны быть размещены по алфавиту;
в таком случае объедините функции Set, Sort и WriteFile в одну
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2021, 15:46
Помогаю со студенческими работами здесь

Структура WORKER
Доброй ночи всем, вот нашел программу на форуме, дописал сортировку но она что то ругается... подскажите на что именно? #include...

Структура Worker, Вывести фамилии работников, занимающих данную должность
Описать структуру Worker: Фамилия и инициалы, должность, Год вступления на работу, Зарплата. Создать массив структур. Вывести: фамилии...

Структура Worker, определить фамилии работников, занимающих одну и ту же должность
Описати структуру Worker: Прізвище та ініціали, Посада, Рік вступу на роботу, Зарплата. Створити масив структур. Вивести: прізвища...

структура WORKER
Описать структуру WORKER, содержащую поля: фамилия с инициалами работника, название должности, год поступления на работу. Вывести на экран...

Переписать из C++ в C#. Структура Worker
Не могу переделать на первый взгляд простую программу из C++ в C# Если кто-нибудь понимает, то помогите пожалуйста #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru