#include "stdafx.h"[![введите сюда описание изображения][1]][1]
#include <iostream>
#include <locale>
#include <Windows.h>
#include <conio.h>
using namespace std;
struct Subject {
char fam_teatcher[20], name_subj[20];
int mark;
};
struct RecordBook {
char fam_stud[20];
int numbRB, mark;
Subject *subs;
int middleMark;
int kol_subj;
};
int main()
{
setlocale(LC_ALL, "Russian");
int kol_ST = 0, all = 0, Flag = 1, k;
char file[40], choice;
bool fromfile;
cout << " Read the file? Y / N " << endl;
choice = _getch();
FILE *fp;
if (choice == 'Y' || choice == 'y')
{
fromfile = true;
cout << "Specify the file storage location: ";
cin >> file;
fopen_s(&fp, file, "rb");// fopen_s не позволяет использовать уязвимость переполнения буфера.
if (fp == NULL) //Функция способна проверять и выдавать ошибку буфера.
{
cout << " File not found!" << endl;
system("pause");
exit(1);
}
fread(&kol_ST, sizeof(int), 1, fp);
}
else
{
fromfile = false;
cout << " Specify the location of the file creation:";
cin >> file;
fopen_s(&fp, file, "wb");
if (fp == NULL)
{
cout << " Error creating file " << endl;
system("pause");
exit(1);
}
cout << " Enter the number of students: ";
cin >> kol_ST;
fwrite(&kol_ST, sizeof(int), 1, fp);
}
RecordBook *kol = new RecordBook[kol_ST];
if (fromfile == true)
{
for (int i = 0; i < kol_ST; i++)
{
fread(&kol[i], sizeof(RecordBook), 1, fp);
kol[i].subs = new Subject[kol[i].kol_subj];
for (int j = 0; j < kol[i].kol_subj; j++)
{
fread(&kol[i].subs[j], sizeof(Subject), 1, fp);
}
}
}
else
{
for (int i = 0; i < kol_ST; i++)
{
cout << "_____________________________" << endl;
cout << " Enter student's last name: ";
cin >> kol[i].fam_stud;
cout << "Enter the student's number of RecordBook: ";
cin >> kol[i].numbRB;
cout << " Enter the number of subject: ";
cin >> kol[i].kol_subj;
fwrite(&kol[i], sizeof(RecordBook), 1, fp);
kol[i].subs = new Subject[kol[i].kol_subj];
cout << "_____________________________" << endl;
for (int j = 0; j < kol[i].kol_subj; j++) {
cout << "Subgect #" << j + 1 << endl;
cout << "Teacher: " << endl; cin >> kol[i].subs[j].fam_teatcher;
cout << "Subject: " << endl; cin >> kol[i].subs[j].name_subj;
cout << "Marks: " << endl; cin >> kol[i].subs[j].mark;
cout << endl;
fwrite(&kol[i].subs[j], sizeof(Subject), 1, fp);
}
}
}
cout << endl << endl << "Students: " << endl;
for (int i = 0; i < kol_ST; i++)
{
cout << i + 1 << ") " << kol[i].fam_stud << " " << kol[i].numbRB << endl;
for (int j = 0; j < kol[i].kol_subj; j++) {
all += kol[i].subs[j].mark;
cout << "Subject: " << kol[i].subs[j].name_subj << " || ";
cout << "Marks: " << kol[i].subs[j].mark << " || ";
cout << "Teacher: " << kol[i].subs[j].fam_teatcher << endl;
}
cout << "========================================================================" << endl;
k = all / kol[i].kol_subj;
kol[i].middleMark = k;
cout << " Average: " << kol[i].middleMark << endl << endl;
all = 0;
}
cout << "________________________________________________________________________" << endl;
cout << " Subject for which no one received less than 61 points: ";
for (int k = 0; k < kol_ST; k++)
for (int j = 0; j < kol[k].kol_subj; j++) {
for (int i = 0; i < kol_ST; i++) {
if (kol[i].subs[j].mark < 61)
Flag = 0;
}
for (int i = 0; i < 1; i++)
if (Flag == 1)
cout << kol[i].subs[j].name_subj << " ";
Flag = 1;
}
cout << endl << "________________________________________________________________________" << endl;
RecordBook tmp; // tmp - доп. переменная для сортировки
int sort_view; // param_sort - переменная для определения вида сортировки;
cout << " Sort Students by Ascending (0), Descending (1):";
cin >> sort_view;
for (int i = kol_ST - 1; i > 0; i--)
for (int j = 0; j < i; j++) // сортировка по возрастанию
if ((sort_view == 0 && kol[j].middleMark > kol[j + 1].middleMark) || (sort_view == 1 && kol[j].middleMark < kol[j + 1].middleMark)) {
tmp = kol[j + 1];
kol[j + 1] = kol[j];
kol[j] = tmp;
}
cout << endl;
for (int i = 0; i < kol_ST; i++)
cout << kol[i].numbRB << " " << kol[i].middleMark << " " << kol[i].fam_stud << endl;
cout << "________________________________________________________________________" << endl;
delete[] kol;
system("pause");
return 0;
}
Вы записываете структуру в файл прямо из памяти.
struct RecordBook {
char fam_stud[20];
int numbRB, mark;
Subject *subs;
int middleMark;
int kol_subj;
};
В структуре указатель на физическую память Subject *subs;
. При считывании этот указатель по сути мусор. Записывать нужно индивидуально каждое поле, особенно subs
. При записывании char fam_teatcher[20], name_subj[20];
обнуляйте вручную буквы до упора 20 символов. Там был мусор.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Увидел сейчас, что в 17ом стандарте появилась новая шаблонная функция std::invokeОчень сильно обрадовался, т
Мне надо обрабатывать отображение миниатюр фотографий в отдельном потоке, иначе код очень долго обрабатываетсяУ меня есть в основном классе...
Использую cron и quartzНужно реализовать следующие: Администратор назначает на конкретную дату некое задание, которое обновляет базу данных
У меня есть серверное приложение на JavaВозникла необходимость запускать пользовательские скрипты, для этого я решил использовать Python, так...