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

Сформировать двоичный файл из элементов, заданной структуры "Абитуриент" - C++

Восстановить пароль Регистрация
 
AntipkA
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 8
22.05.2014, 11:37     Сформировать двоичный файл из элементов, заданной структуры "Абитуриент" #1
Проблема с функцией дополнения данными
само условие : Сформировать двоичный файл из элементов, заданной в варианте структуры, распечатать его содержимое, выполнить удаление и добавление элементов в соответствии со своим вариантом, используя для поиска удаляемых или добавляе-мых элементов функцию. Формирование, печать, добавление и удаление элементов оформить в виде функций. Преду-смотреть сообщения об ошибках при открытии файла и вы-полнении операций ввода/вывода.
3. Варианты
1. Структура "Абитуриент":
- фамилия, имя, отчество;
- год рождения;
- оценки вступительных экзаменов (3);
- средний балл аттестата.

Добавлено через 5 минут
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
 
struct abiturient
{
    char fio [35];
    int b_year;
    char ocenki;
    int sr_bal ;
};
 
FILE *pf;
abiturient a, Arr[20];
 
void form(int);
void del(int);
void add(int, int);
void output(int);
 
int main()
{
    setlocale (2, "");
    printf("\t\tБлоковый ввод-вывод");
    int k, m=0, q=-1, u=1;
    char temp[35];
    //формирование записей в файле
    printf("\n\nВведите количество абитуриентов, о которых вы хотите внести сведения (<20): ");
    scanf("%d", &k);
    form(k);
    //выведем сформированные данные
    output(k);
    // удалить элемент, номер вводится с клавиатуры.
    printf("\выберите элемент, который требуется удалить.\n");
    
    del(k);
    k-- ; 
    output(k);
 
    //добавляем элемент после указанной фамилии
    printf("Укажите фамилию, после которой нужно внести новые сведения: ");
    scanf("%d", &temp);          //temp-введенная фамилия
    for (int i=0; i<k; i++)
        if (temp==Arr[i].fio){ q=i+1; break;}
    add(k, q);
    k++;
    output(k);      
    //запишем в файл новые данные
    if ((pf=fopen("f.dat", "w+b"))==NULL) exit(0);
    for (int i=0; i<k; i++)
    {
        fwrite(&Arr[i], sizeof(abiturient ), 1, pf);
        if (ferror(pf)) exit(0);
    }
    fclose(pf);
    _getch();
    return 0;
}
 
void form(int k)
{
    //открытие файла
    if ((pf=fopen("f.dat", "wb"))==NULL)
    { 
        perror("\nошибка при открытии файла");
        exit(0);
    }
    //формирование записей в файле
    printf("\nВведите сведения о %d абитуриентах:\n", k);
    for (int i=0; i<k; i++)
    {
        printf("Введите ФИО: ");
        scanf("%s", &a.fio);
        printf("Введите год рождения: ");
        scanf("%d", &a.b_year );
        printf("Введите Оценку за экзамен: ");
        scanf("%d", &a.ocenki );
        printf("Введите средний бал аттестата: ");
        scanf("%d", &a.sr_bal );
        printf("\n");
        fwrite(&a, sizeof(abiturient), 1, pf);
        if (ferror(pf)) exit(0); //при возникновении ошибки возвращается значение отличное от 0
    }
    fclose(pf);
    //считывание информации с файла
    if ((pf=fopen("f.dat", "rb"))==NULL) exit(0);
    int j=0;
    while(!feof(pf) && j<k)
    {
        fread(&Arr[j], sizeof(abiturient), 1, pf);
        j++;
    }
    fclose(pf);
    return;
}
 
void output(int k)
{
    printf("\nДанные о абитуриентах\n");
    for (int i=0; i<k; i++)
    {
        printf("ФИО: %s", Arr[i].fio);
        printf("\n");
        printf("Год рождения: %d", Arr[i].b_year );
        printf("\n");
        printf("Оценка за экзамен: %d", Arr[i].ocenki) ;
        printf("\n");
        printf("Средний бал аттестата: %d", Arr[i].sr_bal );
        printf("\n");
    }
    return;
}
// изменить на удаление указаного номера
void del(int k)
{ 
    int u;
//  cout << "Введите номер удаляемого элемента";
    cin >>u;
    for (int i=u; i<k; i++)
    {
        strcpy(Arr[i].fio, Arr[i+1].fio);
        Arr[i].b_year=Arr[i+1].b_year;
        Arr[i].ocenki=Arr[i+1].ocenki;
        Arr[i].sr_bal =Arr[i+1].sr_bal ;
    }
    return;
}
//добавить с указаной фамилией  нужно меня, ставить цикл на проверку существующего и если нахожу фамилию то делейт
void add(int k, int q)
{
    if (q==-1) printf("\nТакой фамилии в списке нет");  
    else
    {
        for (int i=k; i>q; i--)
        {
            strcpy(Arr[i].fio, Arr[i-1].fio);
            Arr[i].b_year =Arr[i-1].b_year ;
            Arr[i].ocenki =Arr[i-1].ocenki ;
            Arr[i].sr_bal =Arr[i-1].sr_bal ;
        }
        printf("Введите фио: ");
        scanf("%s", &Arr[q].fio);
        printf("Введите год рождения: ");
        scanf("%d", &Arr[q].b_year );
        printf("Введите Оценку: ");
        scanf("%d", &Arr[q].ocenki );
        printf("Введите средний бал аттестата: ");
        scanf("%d", &Arr[q].sr_bal );
        printf("\n");
    }
    return;
}
Добавлено через 6 минут
когда в программе дохожу до момента ввода фамилии, после которой нужно выполнить ф-цию дополнения : add, если ввожу фамилию которая существует, все равно
C++
1
if (q==-1) printf("\nТакой фамилии в списке нет");
выдает , что такой фамилии нет, хотя должно идти по ветве else и дополнять массив.

З.Ы. извиняюсь мог не очень корректно объяснить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 11:37     Сформировать двоичный файл из элементов, заданной структуры "Абитуриент"
Посмотрите здесь:

В файл с помощью структуры записать следующие данные: "название папки, ее размер, дата создания" C++
C++ Сформировать двоичный файл из элементов, заданной в варианте структуры. Структура "Стадион"
Сформировать двоичный файл из элементов, заданных в варианте структур C++
Сформировать двоичный файл из элементов, заданной структуры "Абитуриент" C++
Сформировать двоичный файл из элементов, заданных в варианте структуры. Структура "Человек" C++
Структуры: сформировать двоичный файл, записав в него всю известную информацию о каждом сотруднике C++
C++ Структуры "Студент" и "Дата": с чем связана данная ошибка?
Запись структуры "Студент" в файл C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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