Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-й семестр / Лаб.работы / Мет.ук. к л.р.6.doc
Скачиваний:
65
Добавлен:
12.03.2016
Размер:
300.54 Кб
Скачать

Методические указания к лабораторным работам

2-й семестр

Порядок выполнения лабораторных работ

  1. Познакомиться с темой и целью лабораторной работы.

  2. Изучить необходимые к выполнению лабораторной работы теоретические сведения и примеры программ.

  3. Познакомиться с общим заданием к лабораторной работе и индивидуальным вариантом задания.

  4. Написать и отладить программу решения задачи индивидуального варианта.

  5. Протестировать работу программы на различных наборах исходных данных.

  6. Продемонстрировать преподавателю работу программы.

  7. Оформить отчет.

  8. Защитить лабораторную работу.

Оборудование, технические средства, инструмент

Лабораторные работы выполняются в компьютерном классе, оснащенном персональными компьютерами. На компьютерах должна быть установлена система программирования, поддерживающая создание программ на С++ (например, Qt Creator, MS Visual C++ Express), система программирования на Java (например, NetBeans) и система программирования на С# (например, MS Visual C# Express).

Требования к оформлению отчета

Отчет по лабораторной работ должен содержать:

  • титульный лист;

  • цель работы;

  • задание к лабораторной работе (общее задание и индивидуальный вариант задания);

  • состав проекта и листинг программы;

  • тестовые примеры, иллюстрирующие все варианты работы программы.

Требования к защите лабораторных работ

После оформления отчета, лабораторную работу защищают, т. е. поясняют алгоритм работы программы и отвечают на контрольные вопросы.

Лабораторная работа №6. Работа с файлами в С++, Java и C#.

Цель работы: получить практические навыки работы с дисковыми файлами в С++, Java и C#.

Задание 1

Изменить программу, созданную на С++ на основе задания 1 лабораторной работы № 5. В класс индивидуального варианта добавить метод diskIn(), который записывает поля объекта в файл и метод diskOut(), который читает поля объекта из файла. В функцию main() добавить запись массива объектов класса индивидуального варианта в файл и чтения их из файла с использованием методов diskIn() и diskOut() .

Пример 1

В листинге 1 представлена программа, в которой формируется исходный список студентов, список студентов с минимальным рейтингом, а также осуществляется поиск информации о рейтинге студента по его фамилии. Исходный список студента сортируется по фамилии в алфавитном порядке. В программе имеется возможность записи списка студентов в текстовый файл и чтение списка студентов из текстового файла.

Для создания программы использовалась среда разработки Qt Creator 3.0 (основан на Qt 5.2.0). На рисунке 1 показан состав проекта программы.

Рисунок 1 – Состав проекта программы

Создание проекта в Qt Creator: Файл -> Новый файл или проект … -> Проект без использования Qt -> Простой проект на С++.

Добавление класса в проект: Файл -> Новый файл или проект … -> С++ -> Класс С++.

Компиляция, сборка и выполнение проекта: Сборка -> Запустить.

На рисунке 2 показан результат выполнения программы.

Листинг 1

// student.h

#ifndef STUDENT_H

#define STUDENT_H

#include <string>

#include <fstream>

using namespace std;

class Student

{ private:

string fam;

string name;

int grade; //рейтинг

public:

Student();

~Student();

string getfam();

string getname();

int getgrade();

void setfam(string fam1);

void setname(string name1);

void setgrade(int grade1);

void input();

void output();

void diskOut(ofstream& fout); // запись в файл

void diskIn(ifstream& fin); // чтение из файла

};

#endif // STUDENT_H

// student.cpp

#include "student.h"

#include <iostream>

#include <iomanip>

#include <fstream>

using namespace std;

Student::Student()

{ fam = "";

name = "";

grade = 0;

}

Student::~Student(){}

void Student::output()

{ cout << left << setw(10)<< fam;

cout << setw(13) << name;

cout << setw(3) << grade << endl;

}

void Student::input()

{ cin.get();

cout << "\nФамилия: "; getline(cin, fam);

cout << "Имя: "; cin >> name;

cout << "Рейтинг: "; cin >> grade; cin.ignore();

if (grade < 0 || grade > 100)

throw "\nОшибка: Рейтинг должен быть от 0 до 100!";

if (cin == NULL) { throw "\nОшибка формата!";}

}

void Student::diskOut(ofstream& fout)

{ fout << fam << endl;

fout << name << endl;

fout << grade << endl;

}

void Student::diskIn(ifstream& fin)

{ getline(fin, fam);

getline(fin, name);

fin >> grade; fin.get();

}

string Student::getfam() { return fam;}

string Student::getname(){ return name;}

int Student::getgrade(){ return grade;}

void Student::setfam(string fam){this->fam = fam;}

void Student::setname(string name){this->name = name;}

void Student::setgrade(int grade){this->grade = grade;}

// main.cpp

#include "student.h"

#include <iostream>

#include <iomanip>

#include <cstdlib>

#include <cstring>

using namespace std;

int compare(const void* s1, const void* s2)

{ if (((Student*)s1)->getfam() < ((Student*)s2)->getfam()) return -1;

else if (((Student*)s1)->getfam() > ((Student*)s2)->getfam()) return 1;

else return 0;

}

int main()

{ int n; int p; bool fl = true;

Student* st = NULL;

try{

do { cout << "Введите 1 или 2: ";

cout << "\n1 - Ввод списка студентов и запись в файл";

cout << "\n2 - Чтение списка студентов из файла";

cout << "\n>"; cin >> p; cin.ignore();

if (p == 1)

{ fl = false;

cout << "Введите кол-во студентов: ";

cin >> n;

st = new Student[n];

cout << "Введите информацию о студентах: ";

for(int i = 0; i<n; i++)

st[i].input();

ofstream fout("E:\\Student.txt");

fout << n <<endl;

for(int i = 0; i<n; i++)

st[i].diskOut(fout);

fout.close();

}

if (p == 2)

{ fl = false;

ifstream fin("E:\\Student.txt");

if (!fin) throw "\nОшибка: Файл не найден!";

else

{ fin >> n; fin.get();

st = new Student[n];

for (int i = 0; i < n; i++)

st[i].diskIn(fin);

fin.close();

}

}

if (cin == NULL) { throw "\nОшибка формата!";}

}while(fl);

qsort(st,n,sizeof(Student), compare);

cout << "\nСписок студентов: \n";

cout << setw(10) << "Фамилия" << setw(11)<< "Имя" << setw(9)<< "Рейтинг" << endl;

for(int i = 0; i<n; i++)

st[i].output();

string fam;

cout << "\nУкажите фамилию студента: "; cin >> fam;

int f = 0;

for(int i = 0; i<n; i++)

if (st[i].getfam() == fam)

{ cout << "\nРейтинг студента "<< fam <<" - " << st[i].getgrade();

f = 1;

}

if (f == 0) cout << "\nНет в списке студента " << fam;

int min = st[0].getgrade();

for(int i = 0; i<n; i++)

if (st[i].getgrade() < min)

min = st[i].getgrade();

cout << "\nСписок студентов с минимальным рейтингом: \n";

cout << setw(10) << "Фамилия" << setw(11)<< "Имя" << setw(9)<< "Рейтинг" << endl;

for(int i = 0; i<n; i++)

if (st[i].getgrade() == min)

st[i].output();

delete [] st;

}

catch (const char *str)

{ cout << str << endl; }

}

Рисунок 2 – Результат выполнения программы

Соседние файлы в папке Лаб.работы