Программирование на языках высокого уровня
Министерство образования РФ
Пермский государственный технический университет
Электротехнический факультет
Кафедра Информационных технологий и автоматизированных систем
Отчет по курсовой работе
По дисциплине «Программирование на языках высокого уровня»
Вариант 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 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ