С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
1

Ввод/вывод данных в структуру

13.04.2016, 17:54. Просмотров 994. Ответов 20
Метки нет (Все метки)

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

Организовать его надо при помощи структур, которые будут записываться в файл.
Есть такой код:
Кликните здесь для просмотра всего текста

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct book{
string namber;
string publication_name;
string publication_year;
string name_book;
string fullname_author;
string genre;
string shelf_number;
};
struct reader{
int number;
char surname;
char name;
char patronymic;
int date_birth;
char address;
char work;
};

int _tmain(int argc, _TCHAR* argv[])
{
//const char *BD="c:\\txt";
int const MAX=1;
book B[MAX];
reader R[MAX];
for (int i=0;i<MAX;++i)
{
cout << "Namber:" << endl;
cin >> B[i].namber;
cout << "Pub" << endl;
cin >> B[i].publication_name;
cout << "God yars" << endl;
cin >> B[i].publication_year;
cout << "Book" << endl;
cin >> B[i].name_book;
cout << "FIO avt" << endl;
cin >> B[i].fullname_author;
cout << "Gener" << endl;
cin >> B[i].genre;
cout << "Namber pol" << endl;
cin >> B[i].shelf_number;
};
ofstream outfile;
outfile.open("Out.txt");
for (int i=0;i<MAX;++i)
outfile << B[i].namber << "" << B[i].publication_name << "" << B[i].publication_year << "" << B[i].name_book << "" << B[i].fullname_author << "" << B[i].genre << "" << B[i].shelf_number << endl;
system("pause");
return 0;

Вопрос как сделать вывод из файла структуры? И по заданию ввод должен как я понял происходить не циклом, а по необходимости.. Как это организовать?
Буду благодарен, за любую помощь и информацию.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2016, 17:54
Ответы с готовыми решениями:

Ввод структуры в текстовый файл столбиком и вывод данных из файла в структуру
Имеется база данных в виде структуры, которая будет постепенно дописываться...

Ввод данных в структуру через указатель на структуру
#include &quot;stdafx.h&quot; #include &quot;ctime&quot; #include &quot;iostream&quot; #pragma...

Не работает ввод данных в структуру
Не работает ввод данных в структуру. Программа вылетает при первом вводе. ...

Ввод данных в структуру из файла
Народ, помогите разобраться. В общем есть структура следующего вида: struct...

Ввод данных в структуру - cin.getline
Добрый день, Задача загрузить информацию в структуку Songs (автор, имя, год)...

20
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
13.04.2016, 17:58 2
Для начала записывай каждое поле в отдельную строку, так проще будет. Считывать будешь числа через >>, а текст через getline().
Ввод по необходимости? Это как? С выбором действия? Тогда меню делай.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
14.04.2016, 06:00  [ТС] 3
А пример как меню организовать в консольном приложении, самое простенькое можно?
Я так понимаю тогда все отдельными функциями реализовывать надо будет.

Добавлено через 3 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Для начала записывай каждое поле в отдельную строку, так проще будет.
За место этого
C++
1
outfile << B[i].namber << "" << B[i].publication_name << "" << B[i].publication_year << "" << B[i].name_book << "" << B[i].fullname_author << "" << B[i].genre << "" << B[i].shelf_number << endl;
Написать так?
C++
1
2
3
4
5
6
7
outfile << B[i].namber << endl;
outfile << B[i].publication_name << endl;
outfile << B[i].publication_year << endl;
outfile << B[i].name_book << endl;
outfile << B[i].fullname_author << endl;
outfile << B[i].genre << endl;
outfile << B[i].shelf_number << endl;
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
14.04.2016, 09:05 4
Цитата Сообщение от ghjuf Посмотреть сообщение
как меню организовать в консольном приложении
Выводишь список действий с номерами, вводишь номер и с помощью switch() выполняешь нужное действие.
Цитата Сообщение от ghjuf Посмотреть сообщение
Написать так?
Так. Только можно было просто вместо кавычек endl поставить в первом варианте.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
15.04.2016, 09:10  [ТС] 5
Кто то может реализовать данную задачу с комментариями в коде? О благодарности можем договорится по почте porechnew@mail.ru
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
16.04.2016, 10:08  [ТС] 6
Цитата Сообщение от nmcf Посмотреть сообщение
Выводишь список действий с номерами
а как это сделать? пример хотя бы..
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
16.04.2016, 10:28 7
Поиском пользовался? Здесь смотри пример меню: Поиск в массиве объектов типа Student по заданному полю (массивы, структуры)
Строки 36-63.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
16.04.2016, 13:04  [ТС] 8
Перестроил код:
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
    struct book{
    string namber;
    string publication_name;
    string publication_year;
    string name_book;
    string fullname_author;
    string genre;
    string shelf_number;
    };
    struct reader{
    int number;
    char surname;
    char name;
    char patronymic;
    int date_birth;
    char address;
    char work;
    };
 
void enter_book(book *st);
void enter_reader(reader *st);
void delite_book(book st);
void delite_reader(reader st);
void printall_book(book st);
 
int _tmain(int argc, _TCHAR* argv[])
{
    //const char *BD="c:\\txt";
    setlocale(LC_ALL, "Russian");
    cout << "Добро пожаловать." << endl;
    int choise = -1;
    while (choise)
    {
        system("cls");
        cout << "Пожалуйста введите номер функции и нажмите ENTER\n" << endl;
        cout << "[1] Добавить книгу \n [2] Добавить читателя \n [3] Удалить книгу \n [4] Удалить читателя \n [5] Показать все книги \n";
        cout << "Введите номер функции: ";
        cin >> choise;
        int count;
        switch (choise)
        {
        case 1: enter_book(); 
            cout << "Введите количество книг которые хотите внести и нажмите enter:\n" << endl;
            break;
        case 2 ;//Добавить читателя
            break;
        case 3 ;//Удалить книгу
            break;
        case 4 ;//Удалить читателя
            break;
        case 5 ;// Показать все книги
            break;
        case 0: cout << "Вы уверены, что хотите выйти из программы?\n";
            break;
        };
    };
    
}
void enter_book(book *st);
{
int const MAX=1;
    book B[MAX];
    reader R[MAX];
    for (int i=0;i<MAX;++i)
    {
        cout << "Namber:" << endl;
        cin >> B[i].namber;
        cout << "Pub" << endl;
        cin >> B[i].publication_name;
        cout << "God yars" << endl;
        cin >> B[i].publication_year;
        cout << "Book" << endl;
        cin >> B[i].name_book;
        cout << "FIO avt" << endl;
        cin >> B[i].fullname_author;
        cout << "Gener" << endl;
        cin >> B[i].genre;
        cout << "Namber pol" << endl;
        cin >> B[i].shelf_number;
    };
    system("pause");
    return 0;
};
void printall_book(book st);
{
ofstream outfile;
    outfile.open("Out.txt");
    for (int i=0;i<MAX;++i)
        outfile << B[i].namber <<  endl << B[i].publication_name << endl << B[i].publication_year << endl << B[i].name_book << endl <<  B[i].fullname_author << endl << B[i].genre << endl << B[i].shelf_number << endl;
    system("pause");
    return 0;
};

Но теперь вопрос у меня ругается на "system" и я немного не понимаю что в аргументы функции в меню прописывать..
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
16.04.2016, 14:16 9
Где именно system?
Если ты хочешь всё по функциям разделить, то из меню должен быть только их вызов, а массив книг - в main().
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
16.04.2016, 14:37  [ТС] 10
Цитата Сообщение от nmcf Посмотреть сообщение
Где именно system?
39 и 86 строка.. говорит ошибку такую: "system не является однозначным"

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Если ты хочешь всё по функциям разделить
Те можно код писать так:
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
case 1: 
int const MAX=1;
    book B[MAX];
    reader R[MAX];
    for (int i=0;i<MAX;++i)
    {
        cout << "Namber:" << endl;
        cin >> B[i].namber;
        cout << "Pub" << endl;
        cin >> B[i].publication_name;
        cout << "God yars" << endl;
        cin >> B[i].publication_year;
        cout << "Book" << endl;
        cin >> B[i].name_book;
        cout << "FIO avt" << endl;
        cin >> B[i].fullname_author;
        cout << "Gener" << endl;
        cin >> B[i].genre;
        cout << "Namber pol" << endl;
        cin >> B[i].shelf_number;
    };
    system("pause");
    return 0;
};
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
16.04.2016, 14:58 11
Подключи <cstdlib>.
Массивы должны быть в самом начале main() до всех меню.
Цитата Сообщение от ghjuf Посмотреть сообщение
Те можно код писать так:
Можно, только скобки правильно расставляй. Но лучше сделай функции, проще будет.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
18.04.2016, 08:10  [ТС] 12
Благодарю. поправил недочеты все запустилось. Теперь вопрос. как при записи книги сделать запись в файл?
Имею такую функцию для записи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void enter_book(book *st)
{
    for (int i=0;i<MAX;++i)
    {
        cout << "Namber:" << endl;
        cin >> B[i].namber;
        cout << "Pub" << endl;
        cin >> B[i].publication_name;
        cout << "God yars" << endl;
        cin >> B[i].publication_year;
        cout << "Book" << endl;
        cin >> B[i].name_book;
        cout << "FIO avt" << endl;
        cin >> B[i].fullname_author;
        cout << "Gener" << endl;
        cin >> B[i].genre;
        cout << "Namber pol" << endl;
        cin >> B[i].shelf_number;
    };
    };
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 09:42 13
Также как с cout, только в файловый поток. В третьем сообщении же есть это.
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
18.04.2016, 16:09  [ТС] 14
Т.е. так будет запись?
C++
1
2
3
4
5
6
7
8
for (int i=0;i<MAX;++i)
    {
        ofstream infile;
            infile.open("Out.txt");
        cout << "Namber:" << endl;
        infile << B[i].namber << endl;
                infile.close("Out.txt");
         };
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 16:15 15
Так, только открытие делается перед циклом, а закрытие - после.
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
18.04.2016, 16:31  [ТС] 16
Функция ввода данных
Кликните здесь для просмотра всего текста
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
void enter_book(book *st)
{
    ofstream infile;
    infile.open("Out.txt");
 
    for (int i=0;i<MAX;++i)
    {
        cout << "Namber:" << endl;
        infile << B[i].namber << endl;
        cout << "Pub" << endl;
        infile << B[i].publication_name << endl;
        cout << "God yars" << endl;
        infile << B[i].publication_year << endl;
        cout << "Book" << endl;
        infile << B[i].name_book << endl;
        cout << "FIO avt" << endl;
        infile << B[i].fullname_author << endl;
        cout << "Gener" << endl;
        infile << B[i].genre << endl;
        cout << "Namber pol" << endl;
        infile << B[i].shelf_number << endl;
    };
    infile.close();
    };

Выполняется, но ввести не дает.. проскакивает и оканчивается. И после вывод с файла запрашиваю пустоту выдает.
Функция вывода:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
void printall_book(book st)
{
ofstream outfile;
    outfile.open("Out.txt");
    for (int i=0;i<MAX;++i)
        outfile << B[i].namber <<  endl << B[i].publication_name << endl << B[i].publication_year << endl << B[i].name_book << endl <<  B[i].fullname_author << endl << B[i].genre << endl << B[i].shelf_number << endl;
};


Добавлено через 57 секунд
C++
1
2
3
int const MAX=1;
    book B[MAX];
    reader R[MAX];
В начале кода, перед объявлением void'ов
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 16:34 17
Ввод в массив и сразу запись в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void enter_book(book *st)
{
 
ofstream outfile;
    outfile.open("Out.txt");
 
    for (int i=0;i<MAX;++i)
    {
        cout << "Namber:" << endl;
        cin >> B[i].namber;
        out << B[i].namber << endl;
 
        //...
 
    };
    };
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
18.04.2016, 19:57  [ТС] 18
А с выводом как быть, записываю в файл строки и при попытки вывести не отображает на экране.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void printall_book(book st)
{
ofstream outfile;
    outfile.open("Out.txt");
    for (int i=0;i<MAX;++i)
        {
        outfile << B[i].namber << endl;
        outfile << B[i].publication_name << endl;
        outfile << B[i].publication_year << endl;
        outfile << B[i].name_book << endl;
        outfile << B[i].fullname_author << endl;
        outfile << B[i].genre << endl;
        outfile << B[i].shelf_number << endl;
};
};


И вперед забегая вопрос возник, а как мне потом сортировку делать по заданию. И по поводу привязки читатель - книга, как организовать.

Огромная благодарность за подсказки.
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 20:03 19
Определись, где ввод, а где вывод. В моём примере ты вводишь и программа сразу записывает в файл.
Начни с меню. Какие доступны пользователю действия. Потом их и программируй.
Сортировку по массиву B и делай.
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
18.04.2016, 20:07  [ТС] 20
Как сделать что б не переписывались данные в файле?
Или это сильно сложно реализовывать будет?

Добавлено через 2 минуты
Вот полностью как выглядит код:
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
    struct book{
    string namber;
    string publication_name;
    string publication_year;
    string name_book;
    string fullname_author;
    string genre;
    string shelf_number;
    };
    struct reader{
    int number;
    char surname;
    char name;
    char patronymic;
    int date_birth;
    char address;
    char work;
    };
    int const MAX=1;
    book B[MAX];
    reader R[MAX];
 
void enter_book(book *st);
void enter_reader(reader *st);
void delite_book(book st);
void delite_reader(reader st);
void printall_book(book st);
 
int _tmain(int argc, _TCHAR* argv[])
{
        
    //const char *BD="c:\\txt";
    setlocale(LC_ALL, "Russian");
    cout << "Добро пожаловать." << endl;
    int choise = -1;
    while (choise)
    {
        system("cls");
        cout << "Пожалуйста введите номер функции и нажмите ENTER\n" << endl;
        cout << "[1] Добавить книгу \n [2] Добавить читателя \n [3] Удалить книгу \n [4] Удалить читателя \n [5] Показать все книги \n [0] Выход \n";
        cout << "Введите номер функции: ";
        cin >> choise;
        int count;
        switch (choise)
        {
        case 1: enter_book(B); // Добавить книгу
            cout << "Введите количество книг которые хотите внести и нажмите enter:\n" << endl;
            break;
        case 2: ;//Добавить читателя
            break;
        case 3: ;//Удалить книгу
            break;
        case 4: ;//Удалить читателя
            break;
        case 5: ;// Показать все книги
            break;
        case 0: cout << "Вы уверены, что хотите выйти из программы?\n";
            break;
        };
 
    };
    system("pause");
    return 0;
}
void enter_book(book *st)
{
    ofstream infile;
    infile.open("Out.txt");
 
    for (int i=0;i<MAX;++i)
    {
        cout << "Namber:" << endl;
        cin >> B[i].namber;
        infile << B[i].namber << endl;
        cout << "Pub" << endl;
        cin >> B[i].publication_name;
        infile << B[i].publication_name << endl;
        cout << "God yars" << endl;
        cin >> B[i].publication_year;
        infile << B[i].publication_year << endl;
        cout << "Book" << endl;
        cin >> B[i].name_book;
        infile << B[i].name_book << endl;
        cout << "FIO avt" << endl;
        cin >> B[i].fullname_author;
        infile << B[i].fullname_author << endl;
        cout << "Gener" << endl;
        cin >> B[i].genre;
        infile << B[i].genre << endl;
        cout << "Namber pol" << endl;
        cin >> B[i].shelf_number;
        infile << B[i].shelf_number << endl;
    };
    infile.close();
    };
void printall_book(book st)
{
ofstream outfile;
    outfile.open("Out.txt");
    for (int i=0;i<MAX;++i)
        {
        outfile << B[i].namber << endl;
        outfile << B[i].publication_name << endl;
        outfile << B[i].publication_year << endl;
        outfile << B[i].name_book << endl;
        outfile << B[i].fullname_author << endl;
        outfile << B[i].genre << endl;
        outfile << B[i].shelf_number << endl;
};
};

Сейчас пытаюсь с вводом/выводом книг разобраться, потом по аналогии сделать запись читателей.
А дальше удаление.
0
18.04.2016, 20:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 20:07

Ввод с клавиатуры данных и запись их в структуру
Помогите,пожалуйста. Нужно добавить запись с информацией о студенте и его ...

Реализовать ввод данных в структуру и поиск информации в ней
1. Описать класс ORDER, реализующий однонаправленный линейный список для...

Ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хранилище данных в файле)
Здравствуйте) помогите написать программу, осуществляющую ввод...


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

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

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