Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Чтение данных из двоичного файла




К выполнению лабораторной работы №3.

Тема: «Редактирование строк и обработка текстовых файлов с использованием ООП».

Задание на ЛР3 совпадает с заданием на ЛР2, но дополнительно

- спроектировать выполнение пунктов а) и б) индивидуального задания так,чтобы исходные данные могли считываться из текстового файла (для этого создать отдельную функцию переноса данных из символьной строки в запись).

Пример индивидуального задания:

Имеются сведения о результатах сдачи сессии студентами группы:

Фамилия студента и оценки за 3 экзамена.

Требуется: а) для каждого студента найти средний балл за сессию;

б) по каждому предмету найти средний балл группы, а также процент отличников и процент не сдавших экзамен студентов с указанием названий предметов.

Пример оформления программного кода:

// Подключение стандартных библиотек:

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

#include<iostream.h>

#include<io.h>

//Подключение пользовательской библиотеки работы со строками (класс STRING):

#include "My_str.h"

struct Zap { char Fam[10]; //Фамилия студента

int Bal[3]; //Оценки за сессию

float SRED; }; //Средний балл

struct Rec { char Naz[15]; //Название предмета

float PR[3];}; //Средний балл и искомые %-ты

//****************************

Class PRED{//Описание класса для работы с предметами

friend class STUD;

Rec* P;

int N;

public:

void Input(); //Ввод названий предметов

void Print(); //Вывод результата

PRED(int k){N=k; P=new Rec[k];}

~PRED(){delete []P;}

};

//Описание функций класса PRED:

 

void PRED::Input(){//Ввод названий предметов:

for(int i=0;i<N;i++){

cout<<"\n Input nazv. predmeta: "<<i+1<<"). ";cin>>P[i].Naz;

for(int j=0;j<3;j++)P[i].PR[j]=0;

}}

/ //Вывод результата:

void PRED::Print() { FILE *f=stdout; int k;

do{ fprintf(f,"\n---------------------------------------------------");

fprintf(f,"\n N Nazvanie SR_Bal Proc_5 Proc_2 ");

fprintf(f,"\n---------------------------------------------------");

for(int i=0;i<N;i++){

fprintf(f,"\n%4d). %15.14s",i+1,P[i].Naz);

for(int j=0;j<3;j++)fprintf(f," %8.2f",P[i].PR[j]);

}

fprintf(f,"\n---------------------------------------------------");

k=0;

if(f==stdout){cout<<"\n Save in file Predmet.txt? (1-Yes, 0-No): ";

cin>>k;if(k)f=fopen("Predmet.txt","wt");}

else fclose(f);

}while(k); }

//************************************

Class STUD{//Описание класса для работы со студентами

Zap* Mas;

int kol; //количество студентов в группе

public:

void Input(); //Ввод исходных данных

void Input_con(int n); //Ввод данных с клавиатуры

void Input_RND(int n); //Ввод данных случайным образом

void Input_FL(); //Ввод данных из файла

void Input_bin(FILE*); //Чтение данных из двоичного файла

void Input_txt(FILE*); //Чтение данных из текстового файла

Zap Sozd_ZAP(char*); //Перенос данных из символьной строки в запись

void Action(); //Выполнение пункта а) задания

void Print_SR(); //Вычисления ср.баллов по предметам

void Print_table(FILE*); //Вывод таблицы результата

void Write_bin(FILE*); //Запись данных в двоичный файл

void Print_Sort(); //Вывод результата сортировки

int Save(); //Сохранение результата работы

void Sort_Pole(int); //Сортировка данных

void Punkt_B(PRED&); //Выполнение пункта б) задания

STUD(){kol=0;} //Конструктор класса

~STUD(){delete []Mas;} //Деструктор класса

};

//Описание функций класса STUD:

 

Ввод исходных данных

void STUD::Input(){ int i,N;

cout<<"\n Input data from:";

cout<<"\n 1- Consol, 2- RND, 3- File (0- Exit): -> "; cin>>i;

if(!i)exit(0);

if(i<3){cout<<"\n Input kol-vo zapisei: "; cin>>N;}

switch(i){

case 1:Input_con(N);break;

case 2:Input_RND(N);break;

case 3:Input_FL();

} }

Ввод данных из файла

void STUD::Input_FL(){ FILE* ft; int L; char NF[15];

do{ cout<<"\n File: 1 - txt, 2 - bin, 0 - Exit: ";cin>>L;

switch(L){

case 1:ft=fopen(NF,"rt"); if(!ft){cout<<"\n File -> no exist!";break;}

Input_txt(ft);fclose(ft);L=0;break;

case 2:ft=fopen(NF,"rb"); if(!ft){cout<<"\n File -> no exist!";break;}

Input_bin(ft); fclose(ft);L=0;

};

}while(L); }

Чтение данных из двоичного файла

void STUD::Input_bin(FILE* f) { Zap z;

if(kol)delete []Mas;

int i=fileno(f);

long L=filelength(i);

kol=L/sizeof(Zap);

cout<<"\n Kol-vo zapisei="<<kol;

Mas=new Zap[kol];

for(i=0;i<kol;i++)fread(Mas+i,sizeof(Zap),1,f);

cout<<"\n Press any key...";getch(); }





Поделиться с друзьями:


Дата добавления: 2017-03-18; Мы поможем в написании ваших работ!; просмотров: 204 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

2305 - | 2067 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.