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

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

2-й семестр

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лабораторная работа №5. Обработка исключений в С++, Java и C#.

Цель работы: научиться обрабатывать исключительные ситуации в С++, Java и C# с использованием операторов try, catch и throw.

Задание 1

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

Пример 1

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

Для создания программы использовалась среда разработки 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>

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();

};

#endif // STUDENT_H

// student.cpp

#include "student.h"

#include <iostream>

#include <iomanip>

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;

if (grade < 0 || grade > 100)

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

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

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

}

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 "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;

Student* st = NULL;

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

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

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

st = new Student[n];

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

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

st[i].input();

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 – Результат выполнения программы

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