Файл: Курсовая работа по предмету объектноориентированное программирование Вариант 10 ст гр асуз051у Мартемьянов С. Н.doc
Добавлен: 07.11.2023
Просмотров: 29
Скачиваний: 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: выход"<
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;};
};