Файл: Курсовая работа по предмету объектноориентированное программирование Вариант 10 ст гр асуз051у Мартемьянов С. Н.doc

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 82

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТКафедра Информационных технологий и автоматизированных системКурсовая работапо предмету: объектно-ориентированное программированиеВариант №10Выполнил: ст.гр АСУз-05-1уМартемьянов С.Н.Пермь 2007г.Содержание

Содержание


Содержание 2

1.Постановка задачи 3

2.Диаграмма классов 3

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

4.Реализация компонентых функций 4

5.Реализация диалогов с пользователем 4

6.Реализация основной программы 5

7.Пример результатов работы программы 5

8.Программная документация 5

9.Список используемой литературы 6

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



1.Постановка задачи

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

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

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

Класс logarithmclass logarithm{ float osn; //основание логарифма float number; //число логарифма float rez; //результат логарифма float Calculate(); //функция вычисления логарифма, вызывается при любом изменении его параметровpublic: logarithm(); //конструктор без параметров logarithm(float OSN, float NUMBER); //конструктор с параметрами logarithm(const logarithm &op1); //конструктор копирования void SetOsn(float OSN); //функция установки основанияvoid SetNumber(float NUMBER); //функция установки числаfloat GetRezult(); //функция получения результатаfloat GetOsn(); //функция получения основанияfloat GetNumber(); //функция получения числаvoid Print(); //вывод на экран логарифма в виде строки с результатом float operator +(logarithm&); //перегруженные операции над логарифмамиfloat operator -(logarithm&);float operator *(logarithm&);float operator /(logarithm&); float operator ^(float st); //возведение в степень};Класс calcclass calc{char* acop; //список допустимых операцийchar operation; //знак операции
float rezult; //результат расчета операций над логарфмамиfloat st; //показатель степени логарифма для оператора 1public: logarithm op1; //первый операторlogarithm op2; //второй операторcalc(); //конструктор без параметровcalc(logarithm OP1,logarithm OP2,char OPERATION);//конструктор с параметрамиvoid Calculate(); //процедура расчета операций над логарифмамиvoid InputLog(int i); //диалог ввода операторовfloat GetSt(); //получить показатель степениfloat GetRezult(); //получить результат операцииchar GetOperation(); //получить знак операцииbool SetOperation(char OPERATION); //установить знак операцииvoid ChangeOsn(float OSN); //процедура перехода логарифма к другому основаниюvoid Print(); //вывод на экран операторов и результата операции};Класс dialogclass dialog{ calc c; //переменная типа калькуляторvoid WriteLog(int i); //процедура записи в лог-файлvoid ReadLog(); //процедура чтения из лог-файлаpublic:bool menu(); //процедура вывода меню для диалога с пользователем};

4.Реализация компонентых функций

Класс logarithmФункции: SetOsn(floatOSN);SetNumber(floatNUMBER);GetRezult();GetOsn(); GetNumber(); нужны для того, чтобы нельзя было менять параметры напрямую, т.к. это может привести к ошибкам. Внутри них происходит контроль за вводимыми данными и своевременный расчет результата.Функция calculate() переводит логарифмы в более удобную форму для расчета встроенными средствами из модуля math.Класс calcПо умолчанию оба оператора имеют вид: log1_1=0, а в качестве операции выбран «+».Функции: InputLog(inti);GetSt();GetRezult();GetOperation();SetOperation(charOPERATION);voidChangeOsn(floatOSN); нужны для того, чтобы нельзя было менять параметры напрямую, т.к. это может привести к ошибкам. Внутри них происходит контроль за вводимыми данными и своевременный расчет результата.Процедура calculate() производит расчет логарифмов по заданной операции.

5.Реализация диалогов с пользователем

При работе с программой пользователю выводится меню для выполнения желаемых операций.1: ввести первый оператор2: показать первый оператор

3: ввести второй оператор4: показать второй оператор5: ввести вид операции6: выполнить переход оператора 1 к заданному основанию7: вывести результат операции8: просмотреть лог-файл9: выходПри вводе операторов, выводится диалог ввода основания и числа логарифма.При показе операторов, выводится строка вида: log2_8=3.При переходе к другому основанию операторы 1 и 2 изменяются в соответствии с правилами перехода логарифмов к другому основанию.При выводе результата операции выводится строка вида: log2_8+log2_8=6.При выводе лог файла показываются все ранее выведенные на экран результаты (за исключением меню).

6.Реализация основной программы

Основная программа работает в виде цикла: пока пользователь не выберет пункт меню «выход» на экран будет выводиться меню операций.

7.Пример результатов работы программы

1: ввести первый оператор2: показать первый оператор3: ввести второй оператор4: показать второй оператор5: ввести вид операции6: выполнить переход оператора 1 к заданному основанию7: вывести результат операции8: просмотреть лог-файл9: выход1Введите основание: 2Введите число: 81: ввести первый оператор2: показать первый оператор3: ввести второй оператор4: показать второй оператор5: ввести вид операции6: выполнить переход оператора 1 к заданному основанию7: вывести результат операции8: просмотреть лог-файл9: выход2log2_8=31: ввести первый оператор2: показать первый оператор3: ввести второй оператор4: показать второй оператор5: ввести вид операции6: выполнить переход оператора 1 к заданному основанию7: вывести результат операции8: просмотреть лог-файл9: выход7log2_8+ log1_1=39

8.Программная документация

Файлы входящий в проект:

  • Calc.cpp

  • Dialog.cpp

  • Logarithm.cpp

  • Main.cpp

  • Calch

  • Dialog.h

  • Logarithm.h
Инструкция пользователю для работы с проектом:Нельзя вводить 0 в качестве основания или числа логарифма, при этом выводится соответствующее предупреждение, и параметр меняется на 1.
При делении на ноль выводится предупреждение, результат устанавливается в -1.При переходе к другому основанию, результат представляется в виде дроби двух логарифмов с заданным основанием.

9.Список используемой литературы

Б.Страуструп «Введение в язык C++».1995Липпман «С++ для начинающих»

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

Logarithm.h#include

#include

class logarithm

{

float osn;

float number;

float rez;

float Calculate();

public:

logarithm();

logarithm(float OSN, float NUMBER);

logarithm(const logarithm &op1);

void SetOsn(float OSN);

void SetNumber(float NUMBER);

float GetRezult();

float GetOsn();

float GetNumber();

void Print();

float operator +(logarithm&);

float operator -(logarithm&);

float operator *(logarithm&);

float operator /(logarithm&);

float operator ^(float st);

};

Logarithm.cpp

#include

#include "logarithm.h"

#include

#include

float logarithm::Calculate()

{

if(number==1) return 0;

if(osn==1) return 1;

if(number==osn) return 1;

return log(number)/log(osn);

}

logarithm::logarithm()

{

osn=1;

number=1;

rez=0;

};

logarithm::logarithm(float OSN,float NUMBER)

{

if(NUMBER==0)

{

cout<<"Нельзя вводить 0 в качестве основания. Основание установлено в 1";

number=1;

}

else

number=NUMBER;
if(OSN==0)

{

cout<<"Нельзя вводить 0 в качестве числа. Число установлено в 1";

osn=1;

}

else

osn=OSN;
rez=Calculate();

};

logarithm::logarithm(const logarithm &op1)

{

osn=op1.osn;

number=op1.number;

rez=op1.rez;

}

float logarithm::GetRezult()

{

return rez;

};

void logarithm::SetOsn(float OSN)

{

if(OSN==0)

{

cout<<" Нельзя вводить 0 в качестве основания. Основание установлено в 1

osn=1;

}

else

osn=OSN;

rez=Calculate();

};

void logarithm::SetNumber(float NUMBER)

{

if(NUMBER==0)

{

cout<<" Нельзя вводить 0 в качестве числа. Число установлено в 1";

number=1;

}

else

number=NUMBER;

rez=Calculate();

};

float logarithm::operator +(logarithm &op1)

{

return rez+op1.GetRezult();

};

float logarithm::operator -(logarithm &op1)

{

return rez-op1.GetRezult();

};

float logarithm::operator *(logarithm &op1)

{

return rez*op1.GetRezult();

};

float logarithm::operator /(logarithm &op1)

{

if(op1.GetRezult()!=0)

return rez/op1.GetRezult();

cout<<"!!!Деление_на_0!!!"<
return -1;

};

float logarithm::operator ^(float st)

{

return pow(rez,st);

};

void logarithm::Print()

{

cout<<"log"<
};

float logarithm::GetOsn()

{

return osn;

};

float logarithm::GetNumber()

{

return number;

};

Calc.h

#include "logarithm.h"

class calc

{

char* acop;

char operation;

float rezult;

float st;

public:

logarithm op1;

logarithm op2;

calc();

calc(logarithm OP1,logarithm OP2,char OPERATION);

void Calculate();

void InputLog(int i);

float GetSt();

float GetRezult();

char GetOperation();

bool SetOperation(char OPERATION);

void ChangeOsn(float OSN);

void Print();

};

Calc.cpp

#include "calc.h"

#include

void calc::Calculate()

{

if(operation=='+')rezult=op1+op2;

if(operation=='-')rezult=op1-op2;

if(operation=='*')rezult=op1*op2;

if(operation=='/')rezult=op1/op2;

if(operation=='^')rezult=op1^st;

};

calc::calc()

{

acop="+-*^/";

logarithm op1;

logarithm op2;

operation='+';

st=1;

Calculate();

};

calc::calc(logarithm OP1,logarithm OP2,char OPERATION)

{

acop="+-*^/";

op1=OP1;

op2=OP2;

st=1;

operation=OPERATION;

Calculate();

};

bool calc::SetOperation(char OPERATION)

{

bool ok=false;

for(int i=0;i<=sizeof(acop);i++)

if(OPERATION==acop[i]) ok=true;

if(ok==false)

{

cout<<"Недопустимая_операция"<
return false;

}

else

{

if(OPERATION=='^')

{

cout<<"введите_степень";

cin>>st;

};

operation=OPERATION;

Calculate();

return true;

};

};

void calc::Print()

{

if(operation=='^')

cout<<"log"<
<
else

cout<<"log"<
<
<<"_"<
};

void calc::InputLog(int i)

{

float OSN;

float NUMBER;

cout<<"введите основание:";cin>>OSN;

if(i==1)

op1.SetOsn(OSN);

else

op2.SetOsn(OSN);

cout<<"введите число:";cin>>NUMBER;

if(i==1)

op1.SetNumber(NUMBER);

else

op2.SetNumber(NUMBER);

Calculate();

};

void calc::ChangeOsn(float OSN)

{

float i;

i=op1.GetOsn();

op1.SetOsn(OSN);

op2.SetOsn(OSN);

op2.SetNumber(i);

operation='/';

Calculate();

};

char calc::GetOperation()

{

return operation;

};

float calc::GetRezult()

{

return rezult;

};

float calc::GetSt()

{

return st;

};

Dialog.h

#include "calc.h"

class dialog

{

calc c;

void WriteLog(int i);

void ReadLog();

public:

bool menu();

};

Dialog.cpp

#include "dialog.h"

#include

#include

#include

void dialog::WriteLog(int i)

{

ofstream stream("log",ios::app);

if(i==1)

{stream<<"Ввод_первого_оператора: log"<
};

if(i==2)

{stream<<" Ввод_первого_оператора: log"<
};

if(i==3)

{

if(c.GetOperation()=='^')

stream<<"Вывод_результата:log"<
<
else

stream<<"Вывод_результата:log"<
<
<<"="<
};

if(i==4)

{

stream<<"Выбор_операции:"<
if(c.GetRezult()==-1)

stream<<"!!!Деление_на_0!!!"<
};

if(i==41)

{

stream<<"Выбор_операции:Недопустимая операция"<
};

if(i==5)

{

stream<<"Переход_к_другому_основанию:"<
};

};
void dialog::ReadLog()

{

char s[50];

ifstream stream("log");

while(stream>>s)

cout<
};

bool dialog::menu()

{

int pm;

int OSN;

char op;

bool ok=false;

cout<<"1: ввести первый оператор"<
cout<<"2: показать первый оператор "<
cout<<"3: ввести второй оператор "<
cout<<"4: показать второй оператор "<
cout<<"5: ввести вид операции"<
cout<<"6: выполнить переход оператора 1 к заданному основанию "<
cout<<"7: вывести результат операции"<
cout<<"8: показать лог-файл"<
cout<<"9: выход"<while((pm>9)|(pm<1))

cin>>pm;

if(pm==1) {c.InputLog(1);WriteLog(1);return false;};

if(pm==2) {c.op1.Print();return false;};

if(pm==3) {c.InputLog(2);WriteLog(2);return false;};

if(pm==4) {c.op2.Print();return false;};

if(pm==5)

while(ok==false)

{

cout<<"введите операцию:";

cin>>op;

ok=c.SetOperation(op);

if(ok==true)WriteLog(4);

else WriteLog(41);

return false;

};

if(pm==6)

{

cout<<"введите основание";

cin>>OSN;

c.ChangeOsn(OSN);

WriteLog(5);

return false;

};

if(pm==7) {c.Print();WriteLog(3);return false;};

if(pm==8) {ReadLog();return false;};

if(pm==9) {return true;};
};