0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 63
1

Бинарный файловый ввод/вывод: реализовать операции для работы с массивом структур типа WORKER

02.12.2016, 04:03. Показов 1168. Ответов 15
Метки нет (Все метки)

Здравствуйте, видел очень много подобных программ, но у меня особый случай в общем суть программы:
Описать структуру с именем WORKER, что имеет след. поля:
1. фамилию и инициалы работника
2. название должности
3. год устройства на работу.
Написать программу, что выполняет след. действия:
1. введение с клавиатуры данных в массив, что состоит из 10 структур типа WORKER
Вот тут самое интересное!!!
2. записать введенную информацию в бинарный файл
3. написать функцию добавления в файл
4. написать функцию сортировки и вывода на экран содержимого бинарного файла
5. написать функцию корректировки
6. вывести на дисплей и в текстовый файл фамилий работников, чей стаж роботы в организации превышает значение, введенное с клавиатуры, если таких работников нету, вывести на дисплей соответствующее сообщение.

Помогите много обрыл всего не знаю как работать с бинарным файлом!!! Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2016, 04:03
Ответы с готовыми решениями:

Программа для работы с массивом объектов типа Worker (работник)
Здравствуйте! дали такое интересное задание: Worker: Фамилия и инициалы, Должность, Год...

Реализовать функцию поиска по заданному полю в массиве структур (файловый ввод/вывод)
Имеется информация о клиентах телефонной компании и предоставляемых им услугах. Каждая услуга имеет...

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)
Как сделать чтобы список студентов выводился на экран в конце? #include<iostream> ...

Cтруктура WORKER и файловый ввод/вывод
задание:Описать структуру WORKER - фамилия; - название занимаемой должности; - год поступления...

15
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
02.12.2016, 06:08 2
Боюсь ошибиться, но вас просят просто реализовать работу с (txt) файлом.
C++
1
2
ofstream myfile;
myfile.open ("example.bin", ios::out ios::binary);
(c)

Расширение файла может быть любым.
0
Модератор
Эксперт CЭксперт С++
5118 / 2301 / 335
Регистрация: 20.02.2013
Сообщений: 5,675
Записей в блоге: 19
02.12.2016, 07:07 3
Цитата Сообщение от lArtl Посмотреть сообщение
вас просят просто реализовать работу с (txt) файлом
Нет. Его просят реализовать работу с dat-файлом. Файловый ввод/вывод в текстовом и бинарном режиме - это не одно и то же. Картинка-цитата из учебника Стивена Праты:
Миниатюры
Бинарный файловый ввод/вывод: реализовать операции для работы с массивом структур типа WORKER  
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
02.12.2016, 07:20 4
Хорошо, хоть с кодом не ошибся...
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 63
03.12.2016, 15:56  [ТС] 5
Добавлено через 8 часов 48 минут
Цитата Сообщение от gru74ik Посмотреть сообщение
вас просят просто реализовать работу с (txt) файлом
Нет. Его просят реализовать работу с dat-файлом. Файловый ввод/вывод в текстовом и бинарном режиме - это не одно и то же. Картинка-цитата из учебника Стивена Праты:
Да вот именно это и просят, но как это реализовать с этой программой не очень пойму. Помогите

Добавлено через 20 часов 57 минут
Поможет кто?
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
03.12.2016, 22:46 6
vetalka2010,
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
class fff
{
public:
    fff(int o, int p, int l);
 
private:
    int qwe;
    int rty;
    int uiop;
};
 
fff::fff(int o, int p, int l)
{
    qwe = o;
    rty = p;
    uiop = l;
}
 
bool writetofile(ostream &os, fff &clss)
{
    unsigned char *b = (unsigned char*)&clss;
    unsigned char *e = b + sizeof(clss);
    int s = sizeof(clss); 
 
    for (int i = 0; i < s; ++i, ++b)
    {
        os.put(*b);
    }
    return true;
}
 
 
void main()
{
    setlocale(LC_ALL, "rus");
 
    ofstream myfile;
    myfile.open("example.bin", ios::out | ios::binary);
 
    fff classok(100, 11, 10100000);
 
    writetofile(myfile, classok);
}
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 63
03.12.2016, 23:43  [ТС] 7
Цитата Сообщение от lArtl Посмотреть сообщение
vetalka2010,
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
class fff
{
public:
    fff(int o, int p, int l);
 
private:
    int qwe;
    int rty;
    int uiop;
};
 
fff::fff(int o, int p, int l)
{
    qwe = o;
    rty = p;
    uiop = l;
}
 
bool writetofile(ostream &os, fff &clss)
{
    unsigned char *b = (unsigned char*)&clss;
    unsigned char *e = b + sizeof(clss);
    int s = sizeof(clss); 
 
    for (int i = 0; i < s; ++i, ++b)
    {
        os.put(*b);
    }
    return true;
}
 
 
void main()
{
    setlocale(LC_ALL, "rus");
 
    ofstream myfile;
    myfile.open("example.bin", ios::out | ios::binary);
 
    fff classok(100, 11, 10100000);
 
    writetofile(myfile, classok);
}
Насколько я понял, это как создается и открывается сам бинарный файл, а как реализовать именно под прогу WORKER? Возможно не все понял, заранее извиняюсь!
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
04.12.2016, 00:19 8
vetalka2010, это извращенный пример по записи класса (fff) в файл в бинарном режиме
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 63
04.12.2016, 01:07  [ТС] 9
Цитата Сообщение от lArtl Посмотреть сообщение
vetalka2010, это извращенный пример по записи класса (fff) в файл в бинарном режиме
И как мне это реализовать в моем задании?
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
04.12.2016, 02:06 10
vetalka2010, не знаю, как ты это реализуешь в своем задании)
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 63
04.12.2016, 02:16  [ТС] 11
Цитата Сообщение от lArtl Посмотреть сообщение
vetalka2010, не знаю, как ты это реализуешь в своем задании)
Капец, мб кто может помочь с этим? Нигде главное информации реализации в подобных задания нету именно об бинарном файле.
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
04.12.2016, 02:42 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
#include <iostream>
#include <fstream>
 
using namespace std;
 
class SomeClass
{
public:
    SomeClass();
    SomeClass(int first, char second, double third);
    void print();
private:
    int m_first;
    char m_second;
    double m_third;
};
 
SomeClass::SomeClass(int first, char second, double third)
{
    m_first = first;
    m_second = second;
    m_third = third;
}
 
void SomeClass::print()
{
    cout << endl;
    cout << "m_first = " << m_first << endl;
    cout << "m_second = " << m_second<<endl;
    cout << "m_third = " << m_third << endl;
}
 
SomeClass::SomeClass()
{
    m_first = 0;
    m_second = '0';
    m_third = 0.00;
}
 
void writeToFile(fstream &os, SomeClass &in)
{
    unsigned char *filePointer = (unsigned char*)&in;
 
    int fileSize = sizeof(in); 
 
    for (int i = 0; i < fileSize; ++i, ++filePointer)
        os.put(*filePointer);
}
 
void readFile(fstream &is, SomeClass &out)
{
    unsigned char *b = (unsigned char*)&out;
 
    int s = sizeof(out);
 
    for (int i = 0; i < sizeof(out); ++i)
    {
        char temp;
        is.get(temp);
        *(b + i) = temp;
    }
}
 
void main()
{
    setlocale(LC_ALL, "rus");
 
    fstream myfileForWrite;
    myfileForWrite.open("example.bin", ios::out | ios::binary);
 
    
    SomeClass firstObject(101111, 'm', 100.976);
    firstObject.print();
    writeToFile(myfileForWrite, firstObject);
    myfileForWrite.close();
 
    fstream myfileForRead;
    myfileForRead.open("example.bin", ios::in | ios::binary);
    SomeClass secondObject;
 
    secondObject.print();
 
    readFile(myfileForRead, secondObject);
    secondObject.print();
 
    system("pause>>VOID");
}
Да вот код, который реализует запись/чтение объекта класса в файл/из файла. Немного модифицировать и он будет записывать/считывать больше одного объекта класса.
0
Модератор
Эксперт CЭксперт С++
5118 / 2301 / 335
Регистрация: 20.02.2013
Сообщений: 5,675
Записей в блоге: 19
04.12.2016, 02:43 13
Цитата Сообщение от vetalka2010 Посмотреть сообщение
Нигде главное информации реализации в подобных задания нету именно об бинарном файле.
vetalka2010, я тебя носом ткнул в книгу. Там через две страницы начинается листинг - структуру пишут в файл в бинарном режиме:
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
// binary.cpp -- binary file I/O
#include <iostream> // not required by most systems
#include <fstream>
#include <iomanip>
#include <cstdlib>  // (or stdlib.h) for exit()
 
inline void eatline() { while (std::cin.get() != '\n') continue; }
struct planet
{
    char name[20];      // name of planet
    double population;  // its population
    double g;           // its acceleration of gravity
};
 
const char * file = "planets.dat";
 
int main()
{
    using namespace std;
    planet pl;
    cout << fixed << right;
 
// show initial contents
    ifstream fin;
    fin.open(file, ios_base::in |ios_base::binary);  // binary file
    //NOTE: some systems don't accept the ios_base::binary mode
    if (fin.is_open())
    {
    cout << "Here are the current contents of the "
        << file << " file:\n";
    while (fin.read((char *) &pl, sizeof pl))
    {
        cout << setw(20) << pl.name << ": "
              << setprecision(0) << setw(12) << pl.population
              << setprecision(2) << setw(6) << pl.g << endl;
    }    
    fin.close();
    }
 
// add new data
    ofstream fout(file, 
             ios_base::out | ios_base::app | ios_base::binary);
    //NOTE: some systems don't accept the ios::binary mode
    if (!fout.is_open())
    {
        cerr << "Can't open " << file << " file for output:\n";
        exit(EXIT_FAILURE);
    }
 
    cout << "Enter planet name (enter a blank line to quit):\n";
    cin.get(pl.name, 20);
    while (pl.name[0] != '\0')
    {
        eatline();
        cout << "Enter planetary population: ";
        cin >> pl.population;
        cout << "Enter planet's acceleration of gravity: ";
        cin >> pl.g;
        eatline();
        fout.write((char *) &pl, sizeof pl);
        cout << "Enter planet name (enter a blank line "
                "to quit):\n";
        cin.get(pl.name, 20);
    }
    fout.close();
 
// show revised file
    fin.clear();    // not required for some implementations, but won't hurt
    fin.open(file, ios_base::in | ios_base::binary);
    if (fin.is_open())
    {
        cout << "Here are the new contents of the "
             << file << " file:\n";
        while (fin.read((char *) &pl, sizeof pl))
        {
            cout << setw(20) << pl.name << ": "
                 << setprecision(0) << setw(12) << pl.population
                 << setprecision(2) << setw(6) << pl.g << endl;
        }
        fin.close();
    }
    cout << "Done.\n";
// keeping output window open
    // cin.clear();
    // eatline();
    // cin.get();
    return 0; 
}
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 63
04.12.2016, 03:26  [ТС] 14
Понял, извините просто не вчитался в ваше первое сообщение, именно к названию книги. И почему вы как модератор мне "Тыкаете", ваше сообщение я посчитал как в грубой форме. Я с вами не знаком и пишу на "Вы"!
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
04.12.2016, 03:30 15
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
template<typename SomeValueType>
void writeToFile(fstream &os, SomeValueType *in, int objectCount)
{
    unsigned char *ObjectPointer = (unsigned char*)in;
 
    int objectSize = sizeof(*in);
 
    int byteForWrite = objectSize * objectCount;
 
        for (int i = 0; i < byteForWrite; ++i, ++ObjectPointer)
            os.put(*ObjectPointer);
}
 
template<typename SomeValueType>
void readFile(fstream &is, SomeValueType *out, int bufferSize)
{
 
    is.seekg(0, is.end);
    unsigned int FileLength = is.tellg();
    is.seekg(0, is.beg);
 
    int objectSize = sizeof(*out);
 
    if (FileLength % objectSize != 0 || FileLength == 0 || bufferSize < FileLength / objectSize)
        return;
 
    int objectCount = (FileLength / objectSize);
 
    int ByteForRead = objectCount * objectSize;
 
    unsigned char *ObjectPointer = (unsigned char*)out;
 
    for (int i = 0; i < ByteForRead; ++i)
    {
        char temp;
        is.get(temp);
        *(ObjectPointer + i) = temp;
    }
 
    bufferSize = objectCount;
}
0
sourcerer
04.12.2016, 09:18     Бинарный файловый ввод/вывод: реализовать операции для работы с массивом структур типа WORKER
  #16

Не по теме:

Цитата Сообщение от vetalka2010 Посмотреть сообщение
И почему вы как модератор мне "Тыкаете", ваше сообщение я посчитал как в грубой форме. Я с вами не знаком и пишу на "Вы"!
Нехорошо получилось. Был сильно уставший, забыл об элементарных приличиях. Вы уж простите меня, пожалуйста.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2016, 09:18

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student {...

Реализовать сортировку и поиск по заданному полю в массиве пользовательского типа (файловый ввод/вывод)
Подскажите, как реализовать часть задания, которая выделена красным цветом. Построить иерархию...

Реализовать поиск в массиве структур "Student" по заданному полю (файловый ввод/вывод)
Помогите написать программы... 1. Пусть на диске текстовый файл ' Hrupa.txt ' , каждая строка...

Реализовать файловый ввод-вывод для задания
Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы...

Реализовать в виде библиотеки классов класс для работы с массивом структур
Срочно! Реализовать в виде библиотеки классов класс для работы с массивом структур....

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг) не выводит на экран?...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru