Скачиваний:
4
Добавлен:
01.04.2014
Размер:
5.24 Кб
Скачать
#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;
}
Соседние файлы в папке 6
  • #
    01.04.20144.24 Кб4L6.dsp
  • #
    01.04.2014529 б4L6.dsw
  • #
    01.04.201450.18 Кб5L6.ncb
  • #
    01.04.201448.64 Кб4L6.opt
  • #
    01.04.20141.23 Кб4L6.plg
  • #
    01.04.20145.24 Кб4main.cpp
  • #
    01.04.2014161 б6result.txt
  • #
    01.04.201464 б4students.dat