Программирование на языках высокого уровня
Разработка класса "Калькулятор" выполняющего ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок. Листинг и скриншоты выполнения программы, порядок ее запуска. Руководство пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.05.2013 |
Размер файла | 394,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования РФ
Пермский государственный технический университет
Электротехнический факультет
Кафедра Информационных технологий и автоматизированных систем
Отчет по курсовой работе
По дисциплине «Программирование на языках высокого уровня»
Вариант 7
Выполнил студент Малыкин А.С.
Группа АСУ-11-2бзу
Для преподавателя Викентьевой О.Л.
ПЕРМЬ 2013
Задание
1) Разработать класс «Калькулятор», выполняющий указанные в варианте операции для заданных исходных данных. Программа должна выполнять ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок.
2) Протокол работы калькулятора записать в файл. Протокол должен включать исходные данные, введенные пользователем, выполняемые операции и результаты их выполнения. В случае возникновения ошибки в файл записывается соответствующее сообщение.
3) Предусмотреть возможность просмотра этого файла из программы калькулятора.
В варианте указаны вид данных, обрабатываемых калькулятором, и операции, выполняемые калькулятором.
Вариант 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>
using namespace std;
class Gradus
{
public:
int grad;
int min;
int sec;
Gradus(){grad=0;min=0;sec=0;};
Gradus(int g, int m, int s){grad=g;min=m;sec=s;};
Gradus(const Gradus&g){grad=g.grad;min=g.min;sec=g.sec;};
~Gradus(){};
int get_grad(){return grad;}
int get_min(){return min;}
int get_sec(){return sec;}
void set_grad(int g){grad=g;}
void set_min(int m){min=m;}
void set_sec(int s){sec=s;}
//перегруженные операции
Gradus&operator=(const Gradus&);
Gradus& Gradus::operator+(const Gradus&l);
Gradus& Gradus::operator-(const Gradus&l);
Gradus& Gradus::operator/(const Gradus&l);
Gradus& Gradus::operator*(const Gradus&l);
//глобальные функции ввода-вывода
friend std::istream& operator >> (std::istream &in, Gradus &g);
friend 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"
using namespace std;
//-------------------------------------------------------------
//перегрузка операции присваивания
Gradus&Gradus::operator=(const Gradus&g)
{
//проверка на самоприсваивание
if(&g==this) return *this;
grad=g.grad;
min=g.min;
sec=g.sec;
return *this;
}
//-------------------------------------------------------------
//перегрузка глобальной функции-операции ввода
std::istream& operator >> (std::istream &in, Gradus &g)
{
cout<<"Vvedite gradusi: "; in>>g.grad;
if (!cin)
{throw error(" ERROR! Vvodite znacheniya integer!");};
cout<<"Vvedite minuti: "; in>>g.min;
cout<<"Vvedite secundi: "; in>>g.sec;
while (g.sec>=60)
{g.min=g.min+1;
g.sec=g.sec-60;
}
while (g.min>=60)
{g.grad=g.grad+1;
g.min=g.min-60;
}
while (g.grad>=360)
{g.grad = g.grad-360;
}
return in;
}
//-------------------------------------------------------------
//перегрузка глобальной функции-операции вывода
std::ostream& operator << (std::ostream &out, const Gradus &g)
{
return (out<<g.grad<<"\xF8 "<<g.min<<"' "<<g.sec<<"'' ");
}
//-------------------------------------------------------------
//перегрузка операции сложения
Gradus& Gradus::operator+(const Gradus&l)
{
Gradus a,b;
cout<< "SLOZHENIE GRADUSOV: "<<endl;
cout<<"Vvedite 1 Slagaemoe': "<<endl;
cin >> a;
cout<<"Vvedite 2 Slagaemoe': "<<endl;
cin >> b;
Gradus result;
result.grad = (a.grad+b.grad);
result.min = (a.min+b.min);
result.sec = (a.sec+b.sec);
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
cout <<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;
//запись в лог
ofstream f;
f.open("log.txt", ios::app);
f<<"Operacia slozhenia \n";
f<<"Slagaemoe 1: "<<a<<endl;
f<<"Slagaemoe 2: "<<b<<endl;
f<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;
f.close();
return result;
}
//-------------------------------------------------------------
//перегрузка операции вычитания
Gradus& Gradus::operator-(const Gradus&l)
{
Gradus a,b;
cout<< "VICHITANIE GRADUSOV: "<<endl;
cout<<"Vvedite UMENSHAEMOE': "<<endl;
cin >> a;
cout<<"Vvedite VICHITAEMOE': "<<endl;
cin >> b;
Gradus result;
result.grad = (a.grad-b.grad);
result.min = (a.min-b.min);
result.sec = (a.sec-b.sec);
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.sec<0)
{result.min = result.min-1;
result.sec = result.sec+60;
}
while (result.min<0)
{result.grad=result.grad-1;
result.min=result.min+60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
while (result.grad<0)
{result.grad = result.grad+360;
}
cout <<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;
//запись в лог
ofstream f;
f.open("log.txt", ios::app);
f<<"Operacia vichitaniya \n";
f<<"Umenshaemoe: "<<a<<endl;
f<<"Vichitaemoe: "<<b<<endl;
f<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;
f.close();
return result;
}
//-------------------------------------------------------------
//перегрузка операции деления
Gradus& Gradus::operator/(const Gradus&l)
{
Gradus a,b;
cout<< "DELENIE GRADUSOV: "<<endl;
cout<<"Vvedite DELIMOE': "<<endl;
cin >> a;
cout<<"Vvedite DELITEL': "<<endl;
cin >> b;
if (b.grad==0)
{throw error(" ERROR! Delitel.gradusi == 0!");};
if (b.min==0)
{throw error(" ERROR! Delitel.minuti == 0!");};
if (b.sec==0)
{throw error(" ERROR! Delitel.secundi == 0!");};
{throw error(" ERROR! Delitel == 0!");};
Gradus result;
result.grad = (a.grad/b.grad);
result.min = (a.min/b.min);
result.sec = (a.sec/b.sec);
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.sec<0)
{result.min = result.min-1;
result.sec = result.sec+60;
}
while (result.min<0)
{result.grad=result.grad-1;
result.min=result.min+60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
cout <<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;
//запись в лог
ofstream f;
f.open("log.txt", ios::app);
f<<"Operacia deleniya \n";
f<<"Delimoe: "<<a<<endl;
f<<"Delitel: "<<b<<endl;
f<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;
f.close();
return result;
}
//-------------------------------------------------------------
//перегрузка операции умножения
Gradus& Gradus::operator*(const Gradus&l)
{
Gradus a,b;
cout<< "UMNOZHENIE GRADUSOV: "<<endl;
cout<<"Vvedite 1 MNOZHITEL': "<<endl;
cin >> a;
cout<<"Vvedite 2 MNOZHITEL': "<<endl;
cin >> b;
Gradus result;
result.grad = (a.grad*b.grad);
result.min = (a.min*b.min);
result.sec = (a.sec*b.sec);
while (result.grad>360)
{result.grad = result.grad-360;
}
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.sec<0)
{result.min = result.min-1;
result.sec = result.sec+60;
}
while (result.min<0)
{result.grad=result.grad-1;
result.min=result.min+60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
cout <<endl<<"OTVET: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl;
//запись в лог
ofstream f;
f.open("log.txt", ios::app);
f<<"Operacia umnozheniya \n";
f<<"1 mnozhitel: "<<a<<endl;
f<<"2 mnozhitel: "<<b<<endl;
f<<"Resultat: "<< result.grad<<"\xF8 "<<result.min<<"' "<<result.sec<<"'' "<<endl<<endl;
f.close();
return result;
}
Error.h:
#pragma once
#include <string>
#include <iostream>
using namespace std;
class error //класс ошибка
{
public:
string str;
//конструктор, инициирует атрибут str с сообщением об ошибке
error(string s){str=s;}
void what(){cout<<str<<endl;} //выводит значение атрибута str
};
Dialog.h:
#include "Gradus.h"
#include "Error.h"
#include <iostream>
#include "Math.h"
#include <cmath>
#include <fstream>
#include <string>
class Dialog
{
public:
int menu();
};
Dialog.cpp:
#include "Gradus.h"
#include "Error.h"
#include <iostream>
#include "Math.h"
#include <cmath>
#include <fstream>
#include <string>
#include "Dialog.h"
int Dialog::menu()
{
try{
Gradus a,b,d,res2;
double sinus, cosinus, tangens, arcsinus, arccosinus, arctangens, result;
int c;
ofstream f;
const N=256;
do
{
//Меню
cout<<"\n1. Slozhenie uglov";
cout<<"\n2. Vichitanie uglov";
cout<<"\n3. Umnozhenie uglov";
cout<<"\n4. Delenie uglov";
cout<<"\n5. Sinus ugla";
cout<<"\n6. Cosinus ugla";
cout<<"\n7. Tangens ugla";
cout<<"\n8. ArcSinus ugla";
cout<<"\n9. ArcCos ugla";
cout<<"\n10. ArcTan ugla";
cout<<"\n11. Izmenenie znaka ugla";
cout<<"\n12. Prochitat' log operaciy";
cout<<"\n13. Ochistit' log operaciy";
cout<<"\n0. Exit\n";
cin>>c;
switch(c)
{
case 1: d = a+b;
break;
case 2: d = a-b;
break;
case 3: d = a*b;
break;
case 4: d = a/b;
break;
case 5:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
sinus = a.grad;
result=sin(sinus);
cout<<"sin="<<result<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia sinus \n";
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< result<<endl<<endl;
f.close();
break;
case 6:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
cosinus = a.grad;
result=cos(cosinus);
cout<<"cos="<<result<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia cosinus \n";
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< result<<endl<<endl;
f.close();
break;
case 7:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
tangens = a.grad;
result=tan(tangens);
cout<<"tan="<<result<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia tangens \n";
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< result<<endl<<endl;
f.close();
break;
case 8:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
arcsinus = a.grad;
result=asin(arcsinus);
cout<<"arcsin="<<result<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia arcsinus \n";
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< result<<endl<<endl;
f.close();
break;
case 9:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
arccosinus = a.grad;
result=acos(arccosinus);
cout<<"arccos="<<result<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia arccos \n";
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< result<<endl<<endl;
f.close();
break;
case 10:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
arctangens = a.grad;
result=atan(arctangens);
cout<<"arctan="<<result<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia arctan \n";
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< result<<endl<<endl;
f.close();
break;
case 11:
cin>>a;
cout<<"a = "<<a<<endl;//вывод переменной
res2.grad=(360-(a.grad));
if (a.min != 0)
{ res2.grad = (res2.grad-1);}
res2.min=(60-(a.min));
if (a.sec != 0)
{ res2.min = (res2.min-1);}
res2.sec=(60-(a.sec));
cout<<"OTVET="<<res2<<endl;
//запись в лог
f.open("log.txt", ios::app);
f<<"Operacia smena znaka v date "<<endl;
f<<"Ugol: "<<a<<endl;
f<<"Resultat: "<< res2.grad<<"\xF8 "<<res2.min<<"' "<<res2.sec<<"'' "<<endl<<endl;
f.close();
break;
case 12:
{cout<<endl<<"Logfile: "<<endl; //Для красоты
char S[N]={""}; //В S будут считываться строки
ifstream in1("log.txt"); //Открыли файл для чтения
while (!in1.eof()) //Будем читать информацию пока не дойдем до конца файла
{
in1.getline(S,N); //Построчное считывание информации в S
cout<<S<<endl; //Вывод очередной строки на экран
}
in1.close(); //Закрыли открытый файл
break;}
case 13:
f.open("log.txt", ios::out);
f.close();
}
} while (c!=0);
}
catch(error e)
{e.what();}
return 0;
}
Kurs_main.cpp:
#include "Gradus.h"
#include "Dialog.h"
#include "Error.h"
#include <iostream>
#include "Math.h"
#include <cmath>
#include <fstream>
#include <string>
void main()
{Dialog d;
d.menu();
int f;
cin>>f;
}
Скриншоты выполнения программы
калькулятор программа листинг
Руководство пользователя:
Программа предназначена для произведения следующих операций над углами в градусной мере:
Сложение, вычитание, умножение, деление, нахождение тригонометрических и обратных тригонометрических функций, изменение знака угла.
Для запуска программы необходимо запустить файл Kursovoi.exe. После его запуска появится меню пользователя, взаимодействие с меню выполняется посредством клавиатуры. Введите номер пункта и нажмите Enter чтобы выполнить соответствующее действие. Все действия записываются в файл log.txt. Содержимое файла можно прочесть как отдельно, используя notepad или любой другой текстовый редактор, так и из интерфейса программы. В случае возникновения ошибки, данные о ней будут отображены на экране, для продолжения работы с программой после ошибки - закройте приложение и откройте заново.
Размещено на Allbest.ru
Подобные документы
Разработка программы обработки изображений, позволяющей прорисовывать типовые геометрические фигуры. Выбор аппаратных и технических средств для реализации программного продукта. Организация входных и выходных данных. Блок-схема и листинг программы.
курсовая работа [2,4 M], добавлен 18.06.2014Структурная схема получения гороскопа по дате рождения. Листинг исходных кодов программы и руководство пользователя. Ввод данных с помощью объекта класса QDateEdit. Разработка пользовательского интерфейса. Выбор стратегии тестирования и отладка программы.
курсовая работа [1,0 M], добавлен 31.05.2015Понятие и цель применения текстовых данных. Принцип кодирования азбуки Морзе. Основные методы языка высокого уровня C#. Алгоритм работы, листинг, тестирование программы для перевода текста в последовательность кодов азбуки Морзе. Руководство пользователя.
курсовая работа [1,4 M], добавлен 15.01.2013Листинг класса для работы с регулярными выражениями. Особенности классов для проверки данных при регистрации и отправки сообщений. Отправка ссылки для активации на почту пользователя, описание основных классов, анализ их назначения и листинг функций.
курсовая работа [1,7 M], добавлен 17.09.2013Особенности написания базы данных на языках программирования C++, применимой для расписания занятий в университете. Этапы работы: ввод новой записи, изменение, просмотр базы данных, поиск данных. Алгоритмы, используемые в процессе выполнения проекта.
практическая работа [16,6 K], добавлен 12.06.2010Этапы проектирования приложения (в данном случае - телефонного справочника), позволяющего создать базу данных, делать ее сортировку, производить новые записи или удаление полей. Листинг программы, которая производит индексацию и проверку базы данных.
реферат [368,9 K], добавлен 31.05.2012Проектирование структуры базы данных. Технология обработки данных. Порядок установки и запуска программы. Описание объектов приложения и структура данных. Ввод и изменение исходных данных. Получение выходных документов и тестирование программы.
отчет по практике [2,3 M], добавлен 22.07.2012Линейный односвязный список (ЛОС) из введенных данных с клавиатуры с заданным указателем sag, работающий с типом данных Integer. Вывод информационных сообщений. Подсчет количества идентичных по содержанию элементов. Ввод данных в диалоговом режиме.
лабораторная работа [36,3 K], добавлен 03.03.2009Проектирование автоматизированного рабочего места менеджера продаж железнодорожного вокзала с использованием языка программирования Delphi версии 7.0. Алгоритм ввода данных в базу. Листинг программы и скриншоты интерфейса разработанной программы.
курсовая работа [5,3 M], добавлен 09.05.2013Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012