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

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

Восстановить пароль Регистрация
 
ConWor
0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 6
13.05.2016, 14:09     Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры) #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();
 }
Пример на С, я пытаюсь его переписать на С++. Помогите решить пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2016, 14:09     Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры)
Посмотрите здесь:

C++ Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры)
Реализовать функцию поиска по заданному полю в массиве объектов типа "Person" C++
Поиск в массиве объектов типа "Student" по заданному полю (файловый ввод/вывод) C++
C++ Поиск в массиве объектов типа Student по заданному полю (массивы, структуры)
Поиск в массиве объектов типа Student по заданному полю (массивы, структуры) C++
C++ Реализовать поиск в массиве пользовательских объектов по заданному полю (использовать std::vector)
Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры) C++
Реализовать сортировку массива объектов пользовательского типа по заданному полю (структуры) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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();
}
А вот скррин работы программы:
Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры)

Помогите пожалуйста.
Yandex
Объявления
14.05.2016, 14:05     Реализовать поиск по заданному полю в массиве объектов ползовательского типа (структуры)
Ответ Создать тему
Опции темы

Текущее время: 10:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru