Отчёт (Архив готовых лабораторных работ для ИУ)
Описание файла
Файл "Отчёт" внутри архива находится в следующих папках: Архив готовых лабораторных работ для ИУ, 1, отчёты, работа 1. Документ из архива "Архив готовых лабораторных работ для ИУ", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика" в общих файлах.
Онлайн просмотр документа "Отчёт"
Текст из документа "Отчёт"
Московский государственный технический
университет им. Н.Э. Баумана.
Факультет «Информатика и управление»
Кафедра ИУ5. Курс «Основы информатики»
Отчет по лабораторной работе №1
«Классы»
Выполнил: | Проверил: | |
студент группы ИУ5-24 | преподаватель каф. ИУ5 | |
Шевченко Роман | Папшев И.С. | |
Подпись и дата: | Подпись и дата: |
г. Москва, 2008 г.
Постановка задачи
Разработать класс «Планета» для хранения характеристики 4-х планет, солнечной системы, разного типа. Имя планеты должно иметь тип char*.
Создать многофайловый проект, который создает объекты класса «Планета» и выводит значения их полей на экран. Программа должна осуществлять ввод – вывод объектов класса «Планета» в текстовый файл. Перегрузить операцию “ >> “ и “ << “ для класса «Планета» так, чтоб они осуществляли считывание в массив и вывод на экран данных класса «Планета». Перегрузить конструктор копирования, деструктор и оператор присваивания. Так же перегрузить операции сравнения “ <” и “==” для класса «Планета» и отсортировать массив планет солнечной системы, хранящийся в файле по одному из полей, с использованием перегруженных операций.
Организовать интерфейс пользователя с программой в виде меню, позволяющего выполнять следующие действия:
- чтение БД «Солнечная система» из файла;
- запись БД «Солнечная система» в файл;
- сортировка БД;
- редактирование БД;
- вывод БД на экран.
Разработка интерфейса класса.
Интерфейс класса содержит следующие методы:
protected:
char *name;
long int diametr;
bool life;
int sat;
int size;
public:
planet(int sz= 10); //конструктор по умолчанию
planet(char *stroka, long int d, bool l, int s, int sz= 10); //конструктор инициализации
planet(const planet &ob); //контруктр копирования
~planet() {delete [] name;} //деструктор
char *getName() {return name;} //вывод name
long int &getDiametr() {return diametr;} //вывод diametr
bool &getLife() {return life;} //вывод live
int &getSat() {return sat;} //вывод sat
void setName(char *stroka) {name= stroka;} //ввод name (через параметры)
void setDiametr(long int d) {diametr= d;} //ввод diametr (через параметры)
void setLife(bool l) {life= l;} //ввод live (через параметры)
void setSat(int s) {sat= s;} //ввод sat (через параметры)
void setName() {cout <<"Введите название "; cin >>name;} //ввод name с клавиатуры
void setDiametr() {cout <<"Введите диаметр "; cin >>diametr;} //ввод diametr с клавиатуры
void setLife() {cout <<"Введите наличие жизни "; cin >>life;} //ввод live с клавиатуры
void setSat() {cout <<"Введите кол-во спутников "; cin >>sat;} //ввод sat с клавиатуры
void filling(char *stroka, long int d, bool l, int s); //заполнение всех членов класса(через параметры)
friend ostream &operator<<(ostream &stream, planet &op); //перегруженный оператор <<
friend istream &operator>>(istream &stream, planet &op); // перегруженный оператор >>
bool operator > (planet &op2); // перегруженный оператор >
bool operator < (planet &op2); // перегруженный оператор <
bool operator != (planet &op2); // перегруженный оператор!=
Текст программы.
Файл “Планеты.cpp”.
#include "Class_planet.h"
#include "sortirovka.h"
#include <iomanip>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main(){
setlocale(0, "russian");
string a;
cout.setf(ios::boolalpha);
cin.setf(ios::boolalpha);
const int SIZE= 10;
const int N= 8;
planet soln_sist[N];
//-------------Считывание данных в массив объектов----------------
ifstream in("SolarSistem.sdat");
if(!in){
cout <<"Невозможно открыть файл.\n";
system("Pause");
return 1;
}
in.setf(ios::boolalpha);
for(int i= 0; i < N; i++) in >> soln_sist[i];
in.clear();
in.close();
//--------------------Начало диалога с пользователем-----------------
cout <<"Введите одно из значений в зависимости от того какое действие вас интересует:\n";
cout <<"Считать БД «Солнечная система» из файла - r;\n";
cout <<"Сохранение БД «Солнечная система» в файл - w;\n";
cout <<"Вывод БД «Солнечная система» на экран - c;\n";
cout <<"Сортировка БД «Солнечная система» - s;\n";
cout <<"Редактирование БД «Солнечная система» - e;\n";
cout <<"Для выхода из программы введите - q;\n";
cout <<"Команда: ";
char ch1, ch2;
cin >> ch1;
for(;;){
switch(ch1){
//-------------------Считывание данных в массив объектов---------------
case 'r':
{
ifstream in("SolarSistem.sdat");
if(!in){
cout <<"Невозможно открыть файл.\n";
system("Pause");
return 1;
}
in.setf(ios::boolalpha);
for(int i= 0; i < N; i++)in >> soln_sist[i];
in.clear();
in.close();
cout <<"Считывание данных успешно завершо!\n";
}
break;
//---------------------Сохранение данных в файл-------------
case 'w':
{
ofstream out("SolarSistem.sdat");
if(!out){
cout <<"Невозможно открыть файл.\n";
system("Pause");
return 1;
}
out.setf(ios::boolalpha);
for(int i= 0; i < N; i++)out << soln_sist[i];
out.clear();
out.close();
cout <<"Сохранение данных в файл завершо!\n";
}
break;
//--------------------Вывод данных на экран--------------------------
case 'c':
cout <<"\nВывод таблицы!\n";
cout <<setw(10) <<"Название" <<setw(10) <<"Диаметр" <<setw(7) <<"Жизнь" <<setw(10) <<"Спутники" <<"\n";
for(int i= 0; i < N; i++)cout << soln_sist[i];
cout <<"\n";
break;
//--------------------Сортировка(по диаметру)---------------
case 's':
ma_sort(soln_sist, N);
cout <<"Сортировка успешно завершена!\n";
break;
//----------------------Редактирование данных---------------------
case 'e':
cout <<"\nРедактирование!\n";
char *name;
try{
name= new char[SIZE];
}catch(bad_alloc xa){
cout <<"Ошибка.\n";
system("Pause");
return 1;
}
cout <<"Введите название планеты которую вы хотели бы отредактировать:\n";
cout <<"Для выхода из редактирования ведите - q:\n";
cout <<"Ввод: ";
cin >> name;
while(strcmp("q",name) != 0){
int i;
for(i= 0; i < N; i++){
if(strcmp(soln_sist[i].getName(),name) == 0){
cout <<"\nВыберите какие данные вы хотите изменить :\n";
cout <<"Название - n;\n";
cout <<"Диаметр - d;\n";
cout <<"Наличие жизни - l;\n";
cout <<"Количество спутников - s;\n";
cout <<"Для возврата к предыдущему шагу введите - q;\n";
cout <<"\nКоманда: ";
cin >> ch2;
while(ch2 != 'q'){
switch(ch2){
case 'n':
soln_sist[i].setName();
break;
case 'd':
soln_sist[i].setDiametr();
break;
case 'l':
soln_sist[i].setLife();
break;
case 's':
soln_sist[i].setSat();
break;
default:
cout <<"\nВведённая команда ошибочна !!! ";
}
cout <<"\nНовая команда: ";
cin >> ch2;
}
i= -1;
break;
}
}
if(i > 0)cout <<"\nПланета с таким названием не найдена. Введите другое название.\n";
else cout <<"\nВведите название другой планеты.\n";
cout <<"Ввод: ";
cin >> name;
}
delete [] name;
break;
//------------------------------Выход-----------------
case 'q':
return 0;
default:
cout <<"\nВведённая команда ошибочна !!! ";
}
cout <<"\nНовая команда: ";
cin >> ch1;
}
Файл “sortirovka.h”.
template <class X> void ma_sort(X *p_ob, int n);
//ПОДСТАВЛЯЕМАЯ функция сортировки(по убыванию) методом max
template <class X> void ma_sort(X *p_ob, int n){
int max_i;
X temp;
for(int j= 0; j < (n-1); n--){
max_i= 0;
for(int i= 1; i < n; i++){
if(p_ob[i] > p_ob[max_i])max_i= i;
}
temp= p_ob[n-1];
p_ob[n-1]= p_ob[max_i];
p_ob[max_i]= temp;
}
Файл “ Class_planet.h”.
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
class planet{
char *name;
long int diametr;
bool life;
int sat;
int size;
public:
planet(int sz= 10); //конструктор по умолчанию
planet(char *stroka, long int d, bool l, int s, int sz= 10); //конструктор инициализации
planet(const planet &ob); //контруктр копирования
~planet() {delete [] name;} //деструктор
char *getName() {return name;} //вывод name
long int &getDiametr() {return diametr;} //вывод diametr
bool &getLife() {return life;} //вывод live
int &getSat() {return sat;} //вывод sat
void setName(char *stroka) {name= stroka;} //ввод name (через параметры)
void setDiametr(long int d) {diametr= d;} //ввод diametr (через параметры)
void setLife(bool l) {life= l;} //ввод live (через параметры)
void setSat(int s) {sat= s;} //ввод sat (через параметры)
void setName() {cout <<"Введите название "; cin >>name;} //ввод name с клавиатуры
void setDiametr() {cout <<"Введите диаметр "; cin >>diametr;} //ввод diametr с клавиатуры
void setLife() {cout <<"Введите наличие жизни "; cin >>life;} //ввод live с клавиатуры
void setSat() {cout <<"Введите кол-во спутников "; cin >>sat;} //ввод sat с клавиатуры
void filling(char *stroka, long int d, bool l, int s);
//заполнение всех членов класса(через параметры)
friend ostream &operator<<(ostream &stream, planet op); //<<
friend istream &operator>>(istream &stream, planet &op); //>>
planet operator = (planet op2); //=
bool operator > (planet op2); //>
bool operator < (planet op2); //<
bool operator != (planet op2); //!=
};
//---------------------------Конструкторы---------
planet::planet(int sz){ //По умолчанию
try{
name= new char[sz];
}catch(bad_alloc xa){