Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Курсовая работа - Калькулятор.doc
Скачиваний:
148
Добавлен:
02.05.2014
Размер:
108.54 Кб
Скачать

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

Б.Страуструп «Введение в язык C++».1995

Липпман «С++ для начинающих»

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

Logarithm.h

#include <iostream.h>

#include <iomanip.h>

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 <math.h>

#include "logarithm.h"

#include <iostream.h>

#include <ctype.h>

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!!!"<<endl;

return -1;

};

float logarithm::operator ^(float st)

{

return pow(rez,st);

};

void logarithm::Print()

{

cout<<"log"<<osn<<"_"<<number<<"="<<rez<<endl;

};

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 <iostream.h>

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<<"Недопустимая_операция"<<endl;

return false;

}

else

{

if(OPERATION=='^')

{

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

cin>>st;

};

operation=OPERATION;

Calculate();

return true;

};

};

void calc::Print()

{

if(operation=='^')

cout<<"log"<<op1.GetOsn()<<"_"

<<op1.GetNumber()<<operation<<st<<"="<<rezult<<endl;

else

cout<<"log"<<op1.GetOsn()<<"_"

<<op1.GetNumber()<<operation<<"log"<<op2.GetOsn()

<<"_"<<op2.GetNumber()<<"="<<rezult<<endl;

};

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 <iostream.h>

#include <fstream.h>

#include <string.h>

void dialog::WriteLog(int i)

{

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

if(i==1)

{stream<<"Ввод_первого_оператора: log"<<c.op1.GetOsn()<<"_" <<c.op1.GetNumber()<<"="<<c.op1.GetRezult()<<endl;

};

if(i==2)

{stream<<" Ввод_первого_оператора: log"<<c.op2.GetOsn()<<'_'<<c.op2.GetNumber() <<"="<<c.op2.GetRezult()<<endl;

};

if(i==3)

{

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

stream<<"Вывод_результата:log"<<c.op1.GetOsn() <<'_'<<c.op1.GetNumber()

<<c.GetOperation()<<c.GetSt()<<"="<<c.GetRezult()<<endl;

else

stream<<"Вывод_результата:log"<<c.op1.GetOsn()<< _'<<c.op1.GetNumber()

<<c.GetOperation()<<"log"<<c.op2.GetOsn()<<'_'<<c.op2.GetNumber()

<<"="<<c.GetRezult()<<endl;

};

if(i==4)

{

stream<<"Выбор_операции:"<<c.GetOperation()<<endl;

if(c.GetRezult()==-1)

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

};

if(i==41)

{

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

};

if(i==5)

{

stream<<"Переход_к_другому_основанию:"<<c.op1.GetOsn()<<endl;

};

};

void dialog::ReadLog()

{

char s[50];

ifstream stream("log");

while(stream>>s)

cout<<s<<endl;

};

bool dialog::menu()

{

int pm;

int OSN;

char op;

bool ok=false;

cout<<"1: ввести первый оператор"<<endl;

cout<<"2: показать первый оператор "<<endl;

cout<<"3: ввести второй оператор "<<endl;

cout<<"4: показать второй оператор "<<endl;

cout<<"5: ввести вид операции"<<endl;

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

cout<<"7: вывести результат операции"<<endl;

cout<<"8: показать лог-файл"<<endl;

cout<<"9: выход"<<endl;

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

};