Методические указания к лабораторным работам
2-й семестр
Порядок выполнения лабораторных работ
-
Познакомиться с темой и целью лабораторной работы.
-
Изучить необходимые к выполнению лабораторной работы теоретические сведения и примеры программ.
-
Познакомиться с общим заданием к лабораторной работе и индивидуальным вариантом задания.
-
Написать и отладить программу решения задачи индивидуального варианта.
-
Протестировать работу программы на различных наборах исходных данных.
-
Продемонстрировать преподавателю работу программы.
-
Оформить отчет.
-
Защитить лабораторную работу.
Оборудование, технические средства, инструмент
Лабораторные работы выполняются в компьютерном классе, оснащенном персональными компьютерами. На компьютерах должна быть установлена система программирования, поддерживающая создание программ на С++ (например, 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 – Результат выполнения программы