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

Разработка класса "Калькулятор" выполняющего ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок. Листинг и скриншоты выполнения программы, порядок ее запуска. Руководство пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.