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

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

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

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

Добавлен: 07.11.2023

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

Скачиваний: 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.Описание классов


Класс logarithm

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); //возведение в степень

};

Класс calc

class calc

{

char* acop; //список допустимых операций

char operation; //знак операции


float rezult; //результат расчета операций над логарфмами

float st; //показатель степени логарифма для оператора 1

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(); //вывод на экран операторов и результата операции

};

Класс dialog

class dialog

{

calc c; //переменная типа калькулятор

void WriteLog(int i); //процедура записи в лог-файл

void ReadLog(); //процедура чтения из лог-файла

public:

bool menu(); //процедура вывода меню для диалога с пользователем

};

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


Класс logarithm

Функции: SetOsn(float OSN);SetNumber(float NUMBER);GetRezult();GetOsn(); GetNumber(); нужны для того, чтобы нельзя было менять параметры напрямую, т.к. это может привести к ошибкам. Внутри них происходит контроль за вводимыми данными и своевременный расчет результата.

Функция calculate() переводит логарифмы в более удобную форму для расчета встроенными средствами из модуля math.

Класс calc

По умолчанию оба оператора имеют вид: log1_1=0, а в качестве операции выбран «+».

Функции: InputLog(int i);GetSt();GetRezult();GetOperation();SetOperation(char OPERATION);void ChangeOsn(float OSN); нужны для того, чтобы нельзя было менять параметры напрямую, т.к. это может привести к ошибкам. Внутри них происходит контроль за вводимыми данными и своевременный расчет результата.

Процедура 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

Введите число: 8

1: ввести первый оператор

2: показать первый оператор

3: ввести второй оператор

4: показать второй оператор

5: ввести вид операции

6: выполнить переход оператора 1 к заданному основанию

7: вывести результат операции

8: просмотреть лог-файл

9: выход

2

log2_8=3

1: ввести первый оператор

2: показать первый оператор

3: ввести второй оператор

4: показать второй оператор

5: ввести вид операции

6: выполнить переход оператора 1 к заданному основанию

7: вывести результат операции

8: просмотреть лог-файл

9: выход

7

log2_8+ log1_1=3

9

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;};
};