Программирование на языках высокого уровня

 

Министерство образования РФ

Пермский государственный технический университет

Электротехнический факультет

Кафедра Информационных технологий и автоматизированных систем











Отчет по курсовой работе

По дисциплине «Программирование на языках высокого уровня»

Вариант 7




Выполнил студент Малыкин А.С.

Группа АСУ-11-2бзу

Для преподавателя Викентьевой О.Л.







ПЕРМЬ 2013

Задание


) Разработать класс «Калькулятор», выполняющий указанные в варианте операции для заданных исходных данных. Программа должна выполнять ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок.

) Протокол работы калькулятора записать в файл. Протокол должен включать исходные данные, введенные пользователем, выполняемые операции и результаты их выполнения. В случае возникновения ошибки в файл записывается соответствующее сообщение.

) Предусмотреть возможность просмотра этого файла из программы калькулятора.

В варианте указаны вид данных, обрабатываемых калькулятором, и операции, выполняемые калькулятором.


Вариант 7


Вид данных:

Углы, измеряемые в градусной системе мер (1 градус=60минут, 1 минута=60 секунд).

Операции:

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


Диаграмма классов













Описание классов

Класс Gradus - главный пользовательский класс программы. Представляет собой 3 значения типа integer. Соответственно градусы, минуты и секунды. В классе есть перегруженные операции присваивания, арифметических действий, операции ввода/вывода, деструктор и конструкторы. В конце каждой операции происходит занесение операндов и результата в файл log.txt.

Класс Error - класс, позволяющий выводить на экран сведения об ошибках с помощью throw. В программе реализован вывод ошибки в двух случаях:

- Если пользователь вводит отличные от integer значения градусов, минут, секунд

Если пользователь, при выполнении операции деления, делит на 0

Класс Dialog - класс, состоящий из одной функции menu, осуществляющей диалог с пользователем посредством конструкции case. Также внутри этой функции происходит вычисление тригонометрических операций и смена знака угла. Здесь же вывод информации из файла log.txt на экран и операция для его очистки.


Листинг программы


Gradus.h:

#pragma once

#include <iostream>

#include "Math.h"

#include <cmath>

#include <fstream>

#include <string>namespace std;Gradus

{:grad;min;sec;(){grad=0;min=0;sec=0;};(int g, int m, int s){grad=g;min=m;sec=s;};(const Gradus&g){grad=g.grad;min=g.min;sec=g.sec;};

~Gradus(){};get_grad(){return grad;}get_min(){return min;}get_sec(){return sec;}set_grad(int g){grad=g;}set_min(int m){min=m;}set_sec(int s){sec=s;}

//перегруженные операции&operator=(const Gradus&);& Gradus::operator+(const Gradus&l);& Gradus::operator-(const Gradus&l);& Gradus::operator/(const Gradus&l);& Gradus::operator*(const Gradus&l);

//глобальные функции ввода-выводаstd::istream& operator >> (std::istream &in, Gradus &g);std::ostream& operator << (std::ostream &out, const Gradus &g);

};

Gradus.cpp:

#include "Gradus.h"

#include <iostream>

#include "Math.h"

#include <cmath>

#include <fstream>

#include <string>

#include "Error.h"namespace std;

//-------------------------------------------------------------

//перегрузка операции присваивания&Gradus::operator=(const Gradus&g)

{

//проверка на самоприсваивание(&g==this) return *this;

grad=g.grad;=g.min;=g.sec;*this;

}

//-------------------------------------------------------------

//перегрузка глобальной функции-операции ввода::istream& operator >> (std::istream &in, Gradus &g)

{<<"Vvedite gradusi: "; in>>g.grad;(!cin)

{throw error(" ERROR! Vvodite znacheniya integer!");};<<"Vvedite minuti: "; in>>g.min;<<"Vvedite secundi: "; in>>g.sec;(g.sec>=60)

{g.min=g.min+1;.sec=g.sec-60;

}(g.min>=60)

{g.grad=g.grad+1;.min=g.min-60;

}(g.grad>=360)

{g.grad = g.grad-360;

}in;

}

//-------------------------------------------------------------

//перегрузка глобальной функции-операции вывода

std::ostream& operator << (std::ostream &out, const Gradus &g)

{(out<<g.grad<<"\xF8 "<<g.min<<"' "<<g.sec<<"'' ");

}

//-------------------------------------------------------------

//перегрузка операции сложения& Gradus::operator+(const Gradus&l)

{a,b;<< "SLOZHENIE GRADUSOV: "<<endl;<<"Vvedite 1 Slagaemoe': "<<endl;>> a;<<"Vvedite 2 Slagaemoe': "<<endl;>> b;result;.grad = (a.grad+b.grad);.min = (a.min+b.min);.sec = (a.sec+b.sec);(result.sec>60)

{result.min=result.min+1;.sec=result.sec-60;

}(result.min>60)

{result.grad=result.grad+1;.min=result.min-60;

}(result.grad>360)

{result.grad = result.grad-360;

}<<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;

//запись в логf;

f.open("log.txt", ios::app);<<"Operacia slozhenia \n";<<"Slagaemoe 1: "<<a<<endl;<<"Slagaemoe 2: "<<b<<endl;<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;

f.close();result;

}

//-------------------------------------------------------------

//перегрузка операции вычитания

Gradus& Gradus::operator-(const Gradus&l)

{a,b;<< "VICHITANIE GRADUSOV: "<<endl;<<"Vvedite UMENSHAEMOE': "<<endl;>> a;<<"Vvedite VICHITAEMOE': "<<endl;>> b;result;.grad = (a.grad-b.grad);.min = (a.min-b.min);.sec = (a.sec-b.sec);(result.sec>60)

{result.min=result.min+1;.sec=result.sec-60;

}(result.min>60)

{result.grad=result.grad+1;.min=result.min-60;

}(result.sec<0)

{result.min = result.min-1;.sec = result.sec+60;

}(result.min<0)

{result.grad=result.grad-1;.min=result.min+60;

}(result.grad>360)

{result.grad = result.grad-360;

}(result.grad<0)

{result.grad = result.grad+360;

}<<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;

//запись в логf;

f.open("log.txt", ios::app);<<"Operacia vichitaniya \n";<<"Umenshaemoe: "<<a<<endl;<<"Vichitaemoe: "<<b<<endl;<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;

f.close();result;

}

//-------------------------------------------------------------

//перегрузка операции деления

Gradus& Gradus::operator/(const Gradus&l)

{a,b;<< "DELENIE GRADUSOV: "<<endl;<<"Vvedite DELIMOE': "<<endl;>> a;<<"Vvedite DELITEL': "<<endl;>> b;(b.grad==0)

{throw error(" ERROR! Delitel.gradusi == 0!");};(b.min==0)

{throw error(" ERROR! Delitel.minuti == 0!");};(b.sec==0)

{throw error(" ERROR! Delitel.secundi == 0!");};

{throw error(" ERROR! Delitel == 0!");};result;.grad = (a.grad/b.grad);.min = (a.min/b.min);.sec = (a.sec/b.sec);(result.sec>60)

{result.min=result.min+1;.sec=result.sec-60;

}(result.min>60)

{result.grad=result.grad+1;.min=result.min-60;

}(result.sec<0)

{result.min = result.min-1;.sec = result.sec+60;

}(result.min<0)

{result.grad=result.grad-1;.min=result.min+60;

}(result.grad>360)

{result.grad = result.grad-360;

}<<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;

//запись в логf;

f.open("log.txt", ios::app);<<"Operacia deleniya \n";<<"Delimoe: "<<a<<endl;<<"Delitel: "<<b<<endl;<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;

f.close();result;

}

//-------------------------------------------------------------

//перегрузка операции умножения

Gradus& Gradus::operator*(const Gradus&l)

{a,b;<< "UMNOZHENIE GRADUSOV: "<<endl;<<"Vvedite 1 MNOZHITEL': "<<endl;>> a;<<"Vvedite 2 MNOZHITEL': "<<endl;>> b;result;.grad = (a.grad*b.grad);.min = (a.min*b.min);.sec = (a.sec*b.sec);(result.grad>360)

{result.grad = result.grad-360;

}(result.sec>60)

{result.min=result.min+1;.sec=result.sec-60;

}(result.min>60)

{result.grad=result.grad+1;.min=result.min-60;

}(result.sec<0)

{result.min = result.min-1;.sec = result.sec+60;

}(result.min<0)

{result.grad=result.grad-1;.min=result.min+60;

}(result.grad>360)

{result.grad = result.grad-360;

}<<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;

//запись в логf;

f.open("log.txt", ios::app);<<"Operacia umnozheniya \n";<<"1 mnozhitel: "<<a<<endl;<<"2 mnozhitel: "<<b<<endl;<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;.close();result;

}.h:

#pragma once

#include <string>

#include <iostream>namespace std;error //класс ошибка

{:str;

//конструктор, инициирует атрибут str с сообщением об ошибке

error(string s){str=s;}what(){cout<<str<<endl;} //выводит значение атрибута str

};

Dialog.h:

#include "Gradus.h"

#include "Error.h"

#include <iostream>

#include "Math.h"

#include <cmath>

#include <fstream>

#include <string>Dialog

{:menu();

};

Dialog.cpp:

#include "Gradus.h"

#include "Error.h"

#include <iostream>

#include "Math.h"

#include <cmath>

#include <fstream>

#include <string>

#include "Dialog.h"Dialog::menu()

{{a,b,d,res2;sinus, cosinus, tangens, arcsinus, arccosinus, arctangens, result;c;f;N=256;

{

//Меню<<"\n1. Slozhenie uglov";<<"\n2. Vichitanie uglov";<<"\n3. Umnozhenie uglov";<<"\n4. Delenie uglov";<<"\n5. Sinus ugla";<<"\n6. Cosinus ugla";<<"\n7. Tangens ugla";<<"\n8. ArcSinus ugla";<<"\n9. ArcCos ugla";<<"\n10. ArcTan ugla";<<"\n11. Izmenenie znaka ugla";<<"\n12. Prochitat' log operaciy";<<"\n13. Ochistit' log operaciy";<<"\n0. Exit\n";>>c;(c)

{1: d = a+b;;2: d = a-b;;3: d = a*b;;4: d = a/b;;5:>>a;<<"a = "<<a<<endl;//вывод переменной= a.grad;=sin(sinus);<<"sin="<<result<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia sinus \n";<<"Ugol: "<<a<<endl;<<"Resultat: "<< result<<endl<<endl;.close();;6:>>a;

cout<<"a = "<<a<<endl;//вывод переменной

cosinus = a.grad;=cos(cosinus);<<"cos="<<result<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia cosinus \n";<<"Ugol: "<<a<<endl;<<"Resultat: "<< result<<endl<<endl;.close();;7:>>a;

cout<<"a = "<<a<<endl;//вывод переменной

tangens = a.grad;=tan(tangens);<<"tan="<<result<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia tangens \n";<<"Ugol: "<<a<<endl;<<"Resultat: "<< result<<endl<<endl;.close();;8:>>a;

cout<<"a = "<<a<<endl;//вывод переменной

arcsinus = a.grad;=asin(arcsinus);<<"arcsin="<<result<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia arcsinus \n";<<"Ugol: "<<a<<endl;<<"Resultat: "<< result<<endl<<endl;.close();;9:>>a;

cout<<"a = "<<a<<endl;//вывод переменной

arccosinus = a.grad;=acos(arccosinus);<<"arccos="<<result<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia arccos \n";<<"Ugol: "<<a<<endl;<<"Resultat: "<< result<<endl<<endl;.close();;10:>>a;

cout<<"a = "<<a<<endl;//вывод переменной

arctangens = a.grad;=atan(arctangens);<<"arctan="<<result<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia arctan \n";<<"Ugol: "<<a<<endl;<<"Resultat: "<< result<<endl<<endl;.close();;11:>>a;<<"a = "<<a<<endl;//вывод переменной

res2.grad=(360-(a.grad));(a.min != 0)

{ res2.grad = (res2.grad-1);}.min=(60-(a.min));(a.sec != 0)

{ res2.min = (res2.min-1);}.sec=(60-(a.sec));<<"OTVET="<<res2<<endl;

//запись в лог.open("log.txt", ios::app);<<"Operacia smena znaka v date "<<endl;<<"Ugol: "<<a<<endl;<<"Resultat: "<< res2.grad<<"\xF8 "<<res2.min<<"' "<<res2.sec<<"'' "<<endl<<endl;.close();;12:

{cout<<endl<<"Logfile: "<<endl; //Для красоты

char S[N]={""}; //В S будут считываться строкиin1("log.txt"); //Открыли файл для чтения(!in1.eof()) //Будем читать информацию пока не дойдем до конца файла

{.getline(S,N); //Построчное считывание информации в S<<S<<endl; //Вывод очередной строки на экран

}.close(); //Закрыли открытый файл;}13:.open("log.txt", ios::out);.close();

}

} while (c!=0);

}(error e)

{e.what();}0;

}_main.cpp:

#include "Gradus.h"

#include "Dialog.h"

#include "Error.h"

#include <iostream>

#include "Math.h"

#include <cmath>

#include <fstream>

#include <string>main()

{Dialog d;.menu();f;

cin>>f;

}


Скриншоты выполнения программы

калькулятор программа листинг

Руководство пользователя:

Программа предназначена для произведения следующих операций над углами в градусной мере:

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

Для запуска программы необходимо запустить файл Kursovoi.exe. После его запуска появится меню пользователя, взаимодействие с меню выполняется посредством клавиатуры. Введите номер пункта и нажмите Enter чтобы выполнить соответствующее действие. Все действия записываются в файл log.txt. Содержимое файла можно прочесть как отдельно, используя notepad или любой другой текстовый редактор, так и из интерфейса программы. В случае возникновения ошибки, данные о ней будут отображены на экране, для продолжения работы с программой после ошибки - закройте приложение и откройте заново.


Министерство образования РФ Пермский государственный технический университет Электротехнический факультет Кафедра Информационных технологий и автоматиз

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ