Добавил:
inrad
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:программирование 1-й семестр вариант №1 / 6 / main
.cpp#include <io.h>
#include <stdio.h>
#include <conio.h>
struct Students{
char FIO[30];
int year_birthday;
int num_group;
int balls[4];
double s_ball;
};
Students student;
FILE *Fs, *Ft; // файл структуры и текстовый соответственно
char fs_name[] = "students.dat";
char ft_name[] = "result.txt";
int size = sizeof(Students);
// прототипы функций
void create();
void add();
bool view();
void out(Students, int);
void edit(int);
void save(Students *, int);
void zadanie();
void main(){
int kod, kod_edit, edit_number;
Ft = fopen(ft_name, "w");
while(1){
puts("\n1 - Create\t2 - View\t3 - Edit\t4 - Zadanie\t0 - Exit\n");
puts("Input the code here: ");
scanf("%d", &kod);
switch(kod){
case 0:{
fclose(Ft);
return;
}
case 1: // Create File
create();
if(!Fs){
puts("\nCreate Error!");
return;
}
break;
case 2: // View
if (!view()){
puts("\n\nError View!\n");
return;
}
break;
case 3: // Edit
puts("\n1 - Add\t2 - Edit\n");
scanf("%d", &kod_edit);
switch(kod_edit){
case 1: // Add new record
add();
puts("Add a new line");
break;
case 2:
// Edit record
view();
printf("\n\nVvedite nomer izmenyaemoj zapisi:\t");
scanf("%d", &edit_number);
edit(edit_number);
///////
break;
}
break;
case 4:
zadanie();
break;
}
}
getch();
}
/*
* Функция для создания нового пустого файла структуры
*/
void create(){
Fs = fopen(fs_name, "wb");
puts("\nFile Created!\n");
}
/*
* Функция для добавления новой записи в структуру
*/
void add(){
double fiz, mat, inf, khi, sball;
Fs = fopen(fs_name, "ab");
printf("\nFIO - ");
fflush(stdin);
gets(student.FIO);
printf("\nBirthday Year, Number Group - ");
scanf("%d %d", &student.year_birthday, &student.num_group);
printf("\nInput Balls: fizik, matem, informatic, khimya - ");
scanf("%d %d %d %d", &student.balls[0], &student.balls[1],
&student.balls[2], &student.balls[3]);
fiz = student.balls[0];
mat = student.balls[1];
inf = student.balls[2];
khi = student.balls[3];
sball = (fiz + mat + inf + khi) / 4;
printf("%6.2lf", sball);
student.s_ball = sball;
fwrite(&student, size, 1, Fs);
fclose(Fs);
}
/*
* Отобржажение файла структуры на дисплее
*/
bool view(){
int i = 1;
Fs = fopen(fs_name, "rb");
if (!Fs)
return false;
printf("\n\t--------------- Informations ---------------\n");
fprintf(Ft, "\n\n\n\t--------------- Informations ---------------\n");
while(1){
if(!fread(&student, size, 1, Fs)) break;
out(student, i);
i++;
}
puts("\n\n\n");
fclose(Fs);
return true;
}
/*
* Отображение одной записи на дисплее
* Вх. параметры:
* - s типа структуры Students
* - i - для отображения порядкового номера (счётчик) ->
* ->исп. для вывода номера записи, в файл не записывается
*/
void out(Students s, int i=0){
printf("\n%d. %s - %d, group: %d; Fizik: %d, Matem: %d, Informatic: %d, Khimiya: %d, Sredni ball: %1.2lf", i, s.FIO, s.year_birthday, s.num_group, s.balls[0], s.balls[1], s.balls[2], s.balls[3], s.s_ball);
fprintf(Ft, "\n%s - %d, group: %d; Fizik: %d, Matem: %d, Informatic: %d, Khimiya: %d, Sredni ball: %1.2lf", s.FIO, s.year_birthday, s.num_group, s.balls[0], s.balls[1], s.balls[2], s.balls[3], s.s_ball);
}
void edit(int edit_number){
Students *st, newStudent;
int descriptor, i, kol;
long len;
printf("\nEdit student:\nFIO - ");
fflush(stdin);
gets(newStudent.FIO);
printf("\nBirthday Year, Number Group - ");
scanf("%d %d", &newStudent.year_birthday, &newStudent.num_group);
printf("\nInput Balls: fizik, matem, informatic, khimya - ");
scanf("%d %d %d %d", &newStudent.balls[0], &newStudent.balls[1], &newStudent.balls[2], &newStudent.balls[3]);
newStudent.s_ball = (newStudent.balls[0]+newStudent.balls[1] + newStudent.balls[2] + newStudent.balls[3]) / 4;
Fs = fopen(fs_name, "rb");
descriptor = fileno(Fs);
len = filelength(descriptor);
kol = len/size;
st = new Students[kol]; // 138
for (i=0; i<kol; i++){
fread((st+i), size, 1, Fs);
}
fclose(Fs);
st[edit_number-1] = newStudent;
for (i=0; i<kol; i++)
out(st[i], i+1);
save(st, kol);
delete []st;
}
void save(Students *st, int num){
int i;
Fs = fopen(fs_name, "wb");
for (i=0; i<num; i++)
fwrite(&st[i], size, 1, Fs);
fclose(Fs);
}
/**
* Выполнение индивидуального задания
* 1 Вариант:
* - Распечатать анкетные данные студентов, сдавших ->
* ->сессию на 8, 9 и 10.
*/
void zadanie(){
Students *st;
int descriptor, i, j=0, kol;
long len;
printf("\n ------- Studenti sdavwie sesiyu na 8, 9, 10 ------- ");
fprintf(Ft, "\n ------- Studenti sdavwie sesiyu na 8, 9, 10 ------- ");
Fs = fopen(fs_name, "rb");
descriptor = fileno(Fs);
len = filelength(descriptor);
kol = len/size;
st = new Students[kol];
for (i=0; i<kol; i++){
fread((st+i), size, 1, Fs);
}
fclose(Fs);
for (i=0; i<kol; i++){
if (st[i].balls[0]>=8 && st[i].balls[1]>=8 && st[i].balls[2]>=8 && st[i].balls[3]>=8)
out(st[i],0);
}
delete []st;
}