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

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

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

Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры) - C++

13.05.2016, 14:09. Просмотров 162. Ответов 1
Метки нет (Все метки)

Задача:
Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, выполнить задание по своему варианту. Структура имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год. Вывести на печать информацию о самом дешевом издании.

Код:
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
#include <string.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
struct paper                //Объявление структуы
{
    string name;
    int cost; 
    int number; 
}; 
 
struct paper p; 
void input();
void print();
void add();
 
main()
{
char c;
while (true)                                    // Меню
{
    puts("1. New");
    puts("2. Print");
    puts("3. Add");
    puts("0. Exit");
    c = getch();
    switch(c)
    {
        case '1': input();break;
        case '2': print();break;
        case '3': add();break;
        case '0': return 0;
        default: puts("wrong key");
    }
}
return 0;
}
 
void input()
{
    char ch;
    do
    {
        cout << "Vvedite nazvanie"; cin >> p.name;
        cout << "Vvedite cenu"; cin >> p.cost;
        cout << "Vvedite tiraj"; cin >> p.number;
        ofstream out("1.txt",ios::binary|ios::out);
        out.write((char*)&p,sizeof p); //Записали всю структуру целиком
        out.close();
        cout << "Vse? y/n";
        cin >> ch;
    }
    while (ch != 'y');
}
 
void print ()
{
    ifstream in("1.txt",ios::binary|ios::in);
    in.read((char*)&p,sizeof p); //Читаем структуру целиком сразу
    in.close();
    cout << p.name << p.cost << p.number;
    getch();
}
 
void add()
{   
    char ch;
    ofstream add("1.txt",ios::binary|ios::out|ios::app);
    do
    {
        cout << "\n tovar";
        cin >> p.name;
        cout << "\n cena";
        cin >> p.cost;
        cout << "\n kolichestvo";
        cin >> p.number;
        add.write((char*)&p,sizeof p); //Записали всю структуру целиком
        cout << "\n Exit y/n?";
        ch = getch();
    }
    while(ch != 'y');
    add.close();
}
 
[B]Проблема:[/B]
Функция add полностью перезаписывает файл, а не добавляет в него новые данные. Вот пример функции, приведенный в лекциях:
 
void app(FILE *tf)
{char ch;
 tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
 clrscr();
 printf("\n Ввод товаров \n");
 do
 { printf("\n название: "); scanf("%s", t1.name);
  printf(" цена: "); scanf("%f",&t1.c);
  printf(" количество: "); scanf("%d",&t1.kol);
  fwrite(&t1,sizeof(t1),1,tf);
  printf(" Закончить? y/n ");
  ch=getch();
 }
Пример на С, я пытаюсь его переписать на С++. Помогите решить пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2016, 14:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры) (C++):

Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры) - C++
Здравствуйте, помогите разобраться как решать данную задачу, заранее спасибо! Дан массив записей, содержащий сведения о товарах:...

Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры) - C++
1) В столовой предлагается N комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит...

Поиск в массиве объектов типа Student по заданному полю (массивы, структуры) - C++
Добрый день! Нужно организовать : Функцию поиска студента по фамилии и поиск его средней арифметической оценок Буду рад любой...

Поиск в массиве объектов типа Student по заданному полю (массивы, структуры) - C++
Добрый вечер. Имею практически готовую программу. Так как не правильно понял задание, нужно немного переделать работу. Нужно : ...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа - C++
ОСНОВЫ ОБРАБОТКИ СТРУКТУР С клавиатуры ввести последовательность записей, содержащих информацию о студенческие группы института...

Реализовать поиск по заданному полю в массиве объектов пользовательского типа - C++
Все сделал, в своей задачи, осталось только вот это, помогите. Вывод на экран информацию о людях, родившихся под знаком зодиака, название...

1
ConWor
0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 6
14.05.2016, 14:05  [ТС] #2
Немного изменил программу, проблема с добавлением решилась, но появилась другая проблема, при печати данных на экран поле name одинаково для всех записей структуры.
Вот код:
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
#include <string.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
struct paper                //Объявление структуы
{
    string name;
    int cost; 
    int number; 
}; 
 
struct paper p; 
void input();
void print();
void add();
 
main()
{
char c;
while (true)                                    // Меню
{
    puts("\n");
    puts("1. New");
    puts("2. Print");
    puts("3. Add");
    puts("0. Exit");
    c = getch();
    switch(c)
    {
        case '1': input();break;
        case '2': print();break;
        case '3': add();break;
        case '0': return 0;
        default: puts("wrong key");
    }
}
return 0;
}
 
void input() //Новая структура
{
    char ch;
    do
    {
        cout << "Vvedite nazvanie "; cin >> p.name;
        cout << "Vvedite cenu "; cin >> p.cost;
        cout << "Vvedite tiraj "; cin >> p.number;
        ofstream out("1.txt",ios::binary|ios::out);
        out.write((char*)&p,sizeof p); //Записали всю структуру целиком
        out.close();
        cout << "Vse? y/n ";
        cin >> ch;
    }
    while (ch != 'y');
}
 
void print () //Вывод структуры на экран
{
    ifstream in("1.txt",ios::binary|ios::in);
    in.read((char*)&p,sizeof p); //Читаем структуру целиком сразу
    while (!in.eof())
    {
        cout << " Name "<< p.name << " Price "<< p.cost << " Number " << p.number << "\n";
        in.read((char*)&p,sizeof p);
    }
    in.close();
    getch();
}
 
void add() //Добавление записей в структуру
{   
    char ch;
    ofstream add("1.txt",ios::binary|ios::app);
    do
    {
        cout << "\n Name ";
        cin >> p.name;
        cout << "\n Price ";
        cin >> p.cost;
        cout << "\n Number ";
        cin >> p.number;
        add.write((char*)&p,sizeof p); //Записали всю структуру целиком
        cout << "\n Exit y/n? ";
        ch = getch();
    }
    while(ch != 'y');
    add.close();
}
А вот скррин работы программы:
Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры)

Помогите пожалуйста.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2016, 14:05
Привет! Вот еще темы с ответами:

Реализовать поиск в массиве объектов пользовательского типа по заданному полю - C++
Создать типизированный файл, элементами которого являются сведения об автомобилях: марка, вместимость, год выпуска, цвет. Вывести марку...

Реализовать поиск по заданному полю в массиве пользовательского типа (структуры) - C++
Для определенной пользователем структуры выполнить следующее: • Написать функцию формирования одномерного массива структур, значения...

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

Реализовать поиск и сортировку по заданному полю в массиве объектов пользовательского типа (структура Train) - C++
Описать структуру с именем TRAIN, содержащую следующие поля: NAZV - название пункта назначения, NUMR - номер поезда, DATE - дата отправки,...


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

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

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