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

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

Восстановить пароль Регистрация
 
p1ggy
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
19.10.2011, 11:25     Создать программу обработки файла типа запись "Успеваемость студента" #1
Я тут недавно начал разбираться с с++... В принципе многое понял, научился, нашел интересное задание:
Создать программу обработки файла типа запись, содержащую следующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».
Там есть пункты : ФИО, группа, оценки по 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2011, 11:25     Создать программу обработки файла типа запись "Успеваемость студента"
Посмотрите здесь:

МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" C++
C++ Error: значение типа "const char" нельзя присвоить сущности типа "double"
C++ значение типа "char *" нельзя присвоить сущности типа "LPWSTR"
C++ Разработать программу «Успеваемость», позволяющую рассчитать значение среднего балла студента, группы, потока
C++ Написать программу обработки файла типа запись, содержащую следующие пункты меню:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.10.2011, 12:09     Создать программу обработки файла типа запись "Успеваемость студента" #2
Цитата Сообщение от 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);
p1ggy
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
19.10.2011, 12:33  [ТС]     Создать программу обработки файла типа запись "Успеваемость студента" #3
Цитата Сообщение от kazak Посмотреть сообщение
Читаешь файл, если очередной считанный элемент удовлетворяет условию, то выводишь на экран.
В том то и дело, что выдает ошибку, может кто подскажет как реализовать чтение\отбор?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.10.2011, 12:36     Создать программу обработки файла типа запись "Успеваемость студента" #4
Какого рода ошибка?
p1ggy
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
19.10.2011, 13:22  [ТС]     Создать программу обработки файла типа запись "Успеваемость студента" #5
Цитата Сообщение от 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. Код есть выше (он откомментирован)
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.10.2011, 13:48     Создать программу обработки файла типа запись "Успеваемость студента" #6
По первой ошибке
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]);
Во-первых операция сравнения на равенство ==
Во-вторых "Г" буквы в кавычках это строки, единичные символы залючаются в апострофы 'Г'
p1ggy
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 12
14.11.2011, 11:54  [ТС]     Создать программу обработки файла типа запись "Успеваемость студента" #7
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);
}
Или я тугой, или я кривой, но у меня выделенные пункты не работают. Редактирование записи вообще не выходит, а задание насчет отбора записей не проходит. Можете дать совет?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.11.2011, 12:17     Создать программу обработки файла типа запись "Успеваемость студента" #8
Цитата Сообщение от p1ggy Посмотреть сообщение
Редактирование записи вообще не выходи
потому что файл открывается в режиме "только чтение".

Цитата Сообщение от p1ggy Посмотреть сообщение
задание насчет отбора записей не проходит
Возможна причина, проблемы с кодировками, попробуй работать с латиницей или советы с этой темы Русские шрифты в консоли .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2013, 19:02     Создать программу обработки файла типа запись "Успеваемость студента"
Еще ссылки по теме:

аргумент типа "char *" несовместим с параметром типа "LPCWSTR" C++
C++ Написать программу которaя запрашиваeт у пользователя номер дня недели, затем выводит одно из сообщений "рабочий день", "суббота", "воскресенье"
C++ Создать объект типа "связаный двунаправленный список", с перегруженными унарными операциями

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

Или воспользуйтесь поиском по форуму:
LepreconSTR
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 5
08.04.2013, 19:02     Создать программу обработки файла типа запись "Успеваемость студента" #9
Цитата Сообщение от kazak Посмотреть сообщение
потому что файл открывается в режиме "только чтение".


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

Пишу похожую программу, не могу понять в чем ошибка.
Yandex
Объявления
08.04.2013, 19:02     Создать программу обработки файла типа запись "Успеваемость студента"
Ответ Создать тему
Опции темы

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