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

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

Войти
Регистрация
Восстановить пароль
 
 
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 160
Записей в блоге: 1
#1

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

13.04.2016, 17:54. Просмотров 875. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ввод/вывод данных в структуру (C++):

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

Ввод данных в структуру через указатель на структуру - C++
#include &quot;stdafx.h&quot; #include &quot;ctime&quot; #include &quot;iostream&quot; #pragma warning(disable : 4996) using namespace std; class...

Не работает ввод данных в структуру - C++
Не работает ввод данных в структуру. Программа вылетает при первом вводе. #include &lt;iostream&gt; using namespace std; struct...

Ввод данных в структуру из файла - C++
Народ, помогите разобраться. В общем есть структура следующего вида: struct Employees { char Surname; char Name; char...

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

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

20
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
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
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
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
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
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
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
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
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
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
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
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
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,178
18.04.2016, 16:15 #15
Так, только открытие делается перед циклом, а закрытие - после.
0
18.04.2016, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 16:15
Привет! Вот еще темы с ответами:

Реализовать ввод данных в структуру и поиск информации в ней - C++
1. Описать класс ORDER, реализующий однонаправленный линейный список для работы со следующими данными: • фамилия налогоплательщика; ...

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

Написать структуру "Список книг" (бинарный файловый ввод/вывод) - C++
Здравствуйте, Дорогие форумчане! Всех с наступающим. Задача: написать 2 консольных приложения: 1-ое осуществляет вывод списка &quot;книг&quot; в...

Создать структуру "Студент": Ф.И.О. домашний адрес, группа, рейтинг. Организовать ввод, вывод, поиск - C++
Помогите, пожалуйста) На турбо С++. совсем не разбираюсь:help:


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

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

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