Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12

Создать программу обработки файла типа запись "Успеваемость студента"

19.10.2011, 11:25. Показов 7983. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я тут недавно начал разбираться с с++... В принципе многое понял, научился, нашел интересное задание:
Создать программу обработки файла типа запись, содержащую следующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».
Там есть пункты : ФИО, группа, оценки по 3ем предметам, средняя.
Реализовать это все получилось.
Но там есть еще индивид задание, где надо вывести тех людей, Н-ной группы, у которых ФИО начинается на А, Б, В.
Плюс к этому не знаю как реализовать именно "редактирование старых" данных.

Подскажите как реализовать нужные пункты. Прилагаю незавершенный код, чтобы также сказали, что можно реализовать по-другому (то что пытался закомментировано). Спасибо заранее.
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 <stdio.h>
#include <io.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
struct T_BD{
     char FIO[30];
     short g_r;
     char group;
     short o_f, o_m, o_i, o_h;
     double s_b;
     } BD;
int size = sizeof(T_BD);
FILE *Fz, *Ft;
char File_Zap[] = "zapisi.dat";
char File_Rez[] = "rezult.txt";
void Out(T_BD);
 
int main()
{
    int kod, D_f, i=0, j, kol, kod2, pos; char qgroup;
    long len;
    T_BD st, *mas_Z;
Ft = fopen(File_Rez, "w");
    while(true) {
            puts("\n Create – 1 \n Edit – 2 \n View – 3 \n My Task – 4 \n EXIT – 0");
            switch(kod = getch())
            {
                case 1:
                        if ((Fz=fopen(File_Zap,"wb"))==NULL)  {
                                puts("\n Create ERROR!");
                                return 0;
                        }
                    fclose(Fz);
                    printf ("\n Create New File %s !\n", File_Zap);
                break;
                case 2:
                   /* puts ("\n Correct - 1 \n Add - 2");
                    switch(kod2 = getch())
                    {
                        case 1:
                            Fz= fopen(File_Zap,"ab");
                            cout <<"\n Input number of unit: "; cin >>
                        case 2: */
                            Fz = fopen(File_Zap,"ab");
                            cout <<"\n F.I.O. – "; cin >> BD.FIO;
                            cout <<"\n Date of birth – "; cin >> BD.g_r;
                            cout <<"\n Points – ";
                            cout <<"\n Phisics: "; cin >> BD.o_f;
                            cout <<"\n Math: "; cin >> BD.o_m;
                            cout <<"\n IT knowledge: "; cin >> BD.o_i;
                            cout <<"\n Chemistry: "; cin >> BD.o_h;
                            BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
                            fwrite(&BD, size, 1, Fz);
                            fclose(Fz);
                        break;
                break;
                case 3:
                    if ((Fz=fopen(File_Zap,"rb"))==NULL)  {
                                puts("\n Open ERROR!");
                                return 0;
                        }
// Вывод на экран
                        cout <<"\n\t--------- Informations ---------";
// Запись такой же информации в текстовый файл Ft
                        cout <<Ft << "\n\t--------- Informations ---------";
                        while(1) {
                            if(!fread(&BD,size,1,Fz)) break;
                                Out(BD);
                        }
                        fclose(Fz);
                break; /*
                case 4:
                        Fz = fopen(File_Zap,"rb");
                        D_f = fileno(Fz);
                len = filelength(D_f);
                kol = len/size;
                mas_Z = new T_BD[kol];
                cout << "\n Input group:"; cin >> qgroup;
// Считываем записи из файла в динамический массив
                    for (i=0; i < kol; i++)
                            fread((mas_Z+i), size, 1, Fz);
                    fclose(Fz);
                            cout <<"\n\t----- S O R T -----\n";
                            cout <<Ft <<"\n\t----- S O R T -----\n";
                            for (i=0; i < kol; i++) {
                            if (((mas_Z[i].group = qgroup) && (mas_Z[i].FIO[0] = "В"))  Out(mas_Z[i]);
                            if ((mas_Z[i].group = qgroup) && (mas_Z[i].FIO[0] = "Г"))  Out(mas_Z[i]);
                            if ((mas_Z[i].group = qgroup) && (mas_Z[i].FIO[0] = "Д"))  Out(mas_Z[i]); }
                        delete []mas_Z;
                        break; */
                case 0:
                        fclose(Ft);
                        return 0;
            }
  }
}
//----------------- Функция вывода одной записи на экран и в файл --------------------
void Out(T_BD z)
{
     printf("\n %20s , %4d , %10s, %1d , %1d , %1d , %1d , %6.3lf .", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
     fprintf(Ft, "\n %20s , %6.3lf .",  z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2011, 11:25
Ответы с готовыми решениями:

Написать программу обработки файла типа запись
Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция – добавление...

Написать программу обработки файла типа запись
Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция – добавление...

Написать программу обработки файла типа запись, содержащую следующие пункты меню:
Различные цеха завода выпускают продукцию нескольких наиме¬нований. Сведения о выпущенной продукции включают: - наименование; ...

8
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
19.10.2011, 12:09
Цитата Сообщение от p1ggy Посмотреть сообщение
Но там есть еще индивид задание, где надо вывести тех людей, Н-ной группы, у которых ФИО начинается на А, Б, В.
Читаешь файл, если очередной считанный элемент удовлетворяет условию, то выводишь на экран.
Цитата Сообщение от p1ggy Посмотреть сообщение
Плюс к этому не знаю как реализовать именно "редактирование старых" данных.
Данные записываются блоками фиксированного размера (равного размеру структуры).
Открываешь файл с режимом "r+b", что означает чтение\запись в бинарном режиме.
Далее выбираешь нужную запись, устанавливаешь указатель в файле на начало этой записи, используя функцию
C
1
int fseek ( FILE * stream, long int offset, int origin );
где stream - указатель на файл, offset - насколько байтов нужно сместить указатель, origin - относительно чего отсчитывать. offset = <номер_записи>*<размер_структуры>, origin = SEEK_SET, что означает отсчет будет вестись относительно начала файла.
Затем считываешь структуру, меняешь нужные элементы в ней, возвращаешь указатель в файле опять на начало редактируемой записи, записываешь.
Выглядит примерно так:
C
1
2
3
4
5
6
n = 2; // номер редактируемой записи, нумерация идет с 0!!!
fseek(Fz, n*sizeof(T_BD), SEEK_SET);
fread(&BD, 1, Fz);
// изменяем нужные элементы записи
fseek(Fz, n*sizeof(T_BD), SEEK_SET);
fwrite(&BD, 1, Fz);
0
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
19.10.2011, 12:33  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
Читаешь файл, если очередной считанный элемент удовлетворяет условию, то выводишь на экран.
В том то и дело, что выдает ошибку, может кто подскажет как реализовать чтение\отбор?
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
19.10.2011, 12:36
Какого рода ошибка?
0
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
19.10.2011, 13:22  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
Какого рода ошибка?
C++
1
2
3
4
5
6
7
\6.cpp||In function 'int main()':|
\6.cpp|83|error: cannot convert 'T_BD' to 'void*' for argument '1' to 'size_t fread(void*, size_t, size_t, FILE*)'|
\6.cpp|88|error: invalid conversion from 'const char*' to 'char'|
\6.cpp|88|error: expected ')' before 'Out'|
\6.cpp|89|error: invalid conversion from 'const char*' to 'char'|
\6.cpp|90|error: invalid conversion from 'const char*' to 'char'|
||=== Build finished: 5 errors, 0 warnings ===|
P.S. Код есть выше (он откомментирован)
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
19.10.2011, 13:48
По первой ошибке
C
1
fread(&mas_Z[i], 1, Fz);
По остальным

Цитата Сообщение от p1ggy Посмотреть сообщение
C
1
2
3
if (((mas_Z[i].group = qgroup) && (mas_Z[i].FIO[0] = "В")) Out(mas_Z[i]);
 if ((mas_Z[i].group = qgroup) && (mas_Z[i].FIO[0] = "Г")) Out(mas_Z[i]);
 if ((mas_Z[i].group = qgroup) && (mas_Z[i].FIO[0] = "Д")) Out(mas_Z[i]);
Во-первых операция сравнения на равенство ==
Во-вторых "Г" буквы в кавычках это строки, единичные символы залючаются в апострофы 'Г'
1
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
14.11.2011, 11:54  [ТС]
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
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
struct T_BD{
    char FIO[30];
    double g_r;
    char group[10];
    double o_f;
    double o_m;
    double o_i;
    double o_h;
    double s_b;
     } BD;
int size = sizeof(T_BD);
FILE *Fz, *Ft;
char File_Zap[] = "zapisi.dat";
char File_Rez[] = "rezult.txt";
void Out(T_BD);
 
int main()
{
    int kod, D_f, i=0, j, kol, kod2, pos; char qgroup[10];
    long len;
    T_BD st, *mas_Z;
Ft = fopen(File_Rez, "w");
    while(true) {
            ouch: puts("\n\n Create: 1 \n Edit: 2 \n View: 3 \n My Task: 4 \n EXIT: 0");
            scanf("%d", &kod);
            switch(kod)
            {
                case 1:
                        if ((Fz=fopen(File_Zap,"wb"))==NULL)  {
                                puts("\n Create ERROR!");
                                return 0;
                        }
                    fclose(Fz);
                    printf ("\n Create New File %s !\n", File_Zap);
                break;
                case 2:
                    puts ("\n Add: 1 \n Correct: 2 \n Back: 0");
                    scanf("%d", &kod2);
                    switch(kod2)
                    {
                        case 1:
                            Fz= fopen(File_Zap,"ab");
                            printf("\n F.I.O.: ");
                            fflush(stdin);
                            gets(BD.FIO);
                            printf("\n The year of birth: ");
                            scanf("%lf", &BD.g_r);
                            printf("\n Group: ");
                            fflush(stdin);
                            gets(BD.group);
                            printf("\n Phisics: ");
                            scanf("%lf", &BD.o_f);
                            printf("\n Math: ");
                            scanf("%lf", &BD.o_m);
                            printf("\n IT knowledge: ");
                            scanf("%lf", &BD.o_i);
                            printf("\n Chemistry: ");
                            scanf("%lf", &BD.o_h);
                            BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
                            fwrite(&BD, 1,size, Fz);
                            fclose(Fz);
                        break;
                        [COLOR="Red"]case 2:
                            puts("\nInput number of unit: "); scanf("%d",&pos);
                            Fz= fopen(File_Zap,"rb");
                            fseek(Fz, pos*size, 1);
                            fread(&BD, 1, size, Fz);
                            printf("\n F.I.O.: ");
                            fflush(stdin);
                            gets(BD.FIO);
                            printf("\n The year of birth: ");
                            scanf("%lf", &BD.g_r);
                            printf("\n Group: ");
                            fflush(stdin);
                            gets(BD.group);
                            printf("\n Phisics: ");
                            scanf("%lf", &BD.o_f);
                            printf("\n Math: ");
                            scanf("%lf", &BD.o_m);
                            printf("\n IT knowledge: ");
                            scanf("%lf", &BD.o_i);
                            printf("\n Chemistry: ");
                            scanf("%lf", &BD.o_h);
                            BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
                            fseek(Fz, pos*size, 1);
                            fwrite(&BD, 1, size, Fz);
                            fclose(Fz);
                        break;
                        case 3: goto ouch; break;
                        } break;[/COLOR]
                case 3:
                    if ((Fz=fopen(File_Zap,"rb"))==NULL)  {
                                puts("\n Open ERROR!");
                                return 0;
                        }
 
                        printf ("\n\t--------- Informations ---------");
                        fprintf (Ft, "\n\t--------- Informations ---------");
                        while(1) {
                            if(!fread(&BD,size,1,Fz)) break;
                                Out(BD);
                        }
                        fclose(Fz);
                break;
                [COLOR="red"]case 4:
                        Fz = fopen(File_Zap,"rb");
                        D_f = fileno(Fz);
                len = filelength(D_f);
                kol = len/size;
                mas_Z = new T_BD[kol];
                cout << "\n Input group:"; cin >> qgroup;
// Считываем записи из файла в динамический массив
                    for (i=0; i < kol; i++)
                            fread(&mas_Z[i], 1, sizeof(T_BD), Fz);
                            fclose(Fz);
                            cout <<"\n----- T A S K -----\n";
                            for (i=0; i < kol; i++) {
                            if ((mas_Z[i].group == qgroup) && (mas_Z[i].FIO[0] == 'Д'))  Out(mas_Z[i]);
                                else if ((mas_Z[i].group == qgroup) && (mas_Z[i].FIO[0] == 'Г'))  Out(mas_Z[i]);
                                    else if ((mas_Z[i].group == qgroup) && (mas_Z[i].FIO[0] == 'Д'))  Out(mas_Z[i]); }
 
                        delete []mas_Z;
                        break;[/COLOR]
                case 0:
                        fclose(Ft);
                        return 0;
            }
  }
}
//----------------- Функция вывода одной записи на экран и в файл --------------------
void Out(T_BD z)
{
     printf(" \n %s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
     fprintf(Ft, "%s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
}
Или я тугой, или я кривой, но у меня выделенные пункты не работают. Редактирование записи вообще не выходит, а задание насчет отбора записей не проходит. Можете дать совет?
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
14.11.2011, 12:17
Цитата Сообщение от p1ggy Посмотреть сообщение
Редактирование записи вообще не выходи
потому что файл открывается в режиме "только чтение".

Цитата Сообщение от p1ggy Посмотреть сообщение
задание насчет отбора записей не проходит
Возможна причина, проблемы с кодировками, попробуй работать с латиницей или советы с этой темы Русские шрифты в консоли .
0
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 11
08.04.2013, 19:02
Цитата Сообщение от kazak Посмотреть сообщение
потому что файл открывается в режиме "только чтение".


Возможна причина, проблемы с кодировками, попробуй работать с латиницей или советы с этой темы Русские шрифты в консоли .
Нет причина в том что
C
1
mas_Z[i].group
отдает какое-то 7-ми значное число, никак не относящееся к группе

Пишу похожую программу, не могу понять в чем ошибка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2013, 19:02
Помогаю со студенческими работами здесь

Написать программу обработки файла типа запись (record), содержащую следующие пункты меню:
Написать программу обработки файла типа запись (record), содержащую следующие пункты меню: 1. Создание; 2. Просмотр; 3. Добавление...

Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция –
Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция – добавление новых...

Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция –
Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция – добавление...

Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция –
Написать программу обработки файла типа запись, содержащую следующие пункты меню: - Создание, - Просмотр, - Коррекция – добавление новых...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru