#include <iostream>
#include <string>
#include "rational.h"

using namespace std;

int main()
{
    setlocale( LC_ALL,"Russian" );

    int n,m;                //числитель и знаменатель вводимых чисел
    string Str, dummy;      //вводимая строка и пустая переменная для конца предыдущей строки// для считывания конца строки из последнего ввода(номера операции 7), чтобы потом программа останавливалась и ждала ввода строки
    int k = 2;              //количество введенных рациональных чисел                  
    Drobi* a;               //указатель на первое введенное рациональное число
    Drobi* b;               //указатель на второе введенное рациональное число
    Drobi c;

	int choice;             //счетчик для хранения выбранной пользователем операции

    while(1)
    {
        if(k == 2)
		    cout << "\nВводятся два рациональных числа";
		cout << "\n\n1: Вводить числитель и знаменатель дроби";
		cout << "\n2: Сумма введенных чисел";
		cout << "\n3: Разность введенных чисел";
		cout << "\n4: Умножение введенных чисел";
		cout << "\n5: Деление введенных чисел";
		cout << "\n6: Сокращение дроби";
		cout << "\n7: Ввод строки";
		cout << "\n8: Печать строки";
		cout << "\n9:Выход";
        cout << "\nВведите номер(1-9): ";
		
        cin >> choice;
       
        switch(choice)
        {
            case 1:
            {
                if (k)  // k!=0
                {
				    cin >> n >> m;
                    if (m == 0)
                        cout << "Пожалуйста введите отличный от нуля знаменатель" << endl;
                    else
                    {
                        if(k == 2) a = new Drobi(n,m); 
                        if(k == 1) b = new Drobi(n,m);
                        k--;
                    }
                } else {
                    cout << "Числа уже введены \n" << endl;
                }

	            break;
            }
			case 2:
            {
                if (k == 2)
                    cout << "Числа не введены \n";
                else if (k == 1)
                    cout << "Пожалуйста введите второе число \n";
                else
                {
				    cout << "Сумма введенных чисел равна: \n";
                    c = a->Sum(*b);
                    c.PrintNumber();
                }

	            break;
            }
			case 3:
            {
                if (k == 2)
                    cout << "Числа не введены \n";
                else if (k == 1)
                    cout << "Пожалуйста введите второе число \n";
                else 
                {
				    cout << "Разность введенных чисел равна: \n";
                    c = a->Dif(*b);
                    c.PrintNumber();
                }

	            break;
            }
			case 4:
            {
                if (k == 2)
                    cout << "Числа не введены \n";
                else if (k == 1)
                    cout << "Пожалуйста введите второе число \n";
                else 
                {
				    cout << "Произведение введенных чисел равно: \n";
                    c = a->Mult(*b);
                    c.PrintNumber();
                }

	            break;
            }
			case 5:
            {
                if (k == 2)
                    cout << "Числа не введены \n";
                else if (k == 1)
                    cout << "Пожалуйста введите второе число \n";
                else
                {
                    if(b->getChisl() == 0)
                        cout << "Деление не допустимо: второе число должно быть отлично от нуля!!!\n";
                    else
                    {
                        cout << "Деленное введенных чисел равно: \n";
                        c = a->Div(*b);
                        c.PrintNumber();
                    }
                }

	            break;
            }
			case 6:
            {
                if(k == 2)
                    cout << "Числа не введены \n" << endl;
                else if (k == 1)
                {
					cout << "Сокращение введенных чисел равно: \n";
                    a->Norm();
                    a->PrintNumber();
                } else 
                {
					cout << "Сокращение введенных чисел равно: \n";
                    a->Norm();
                    b->Norm();
                    a->PrintNumber();
                    b->PrintNumber();
                }

                break;
            }
			case 7:
            {
				cout << "Введите строку: \n";
// так-как в конце ввода номера 7 есть конец строки, то используем один getline для восприятия этого конца строки,
// и потом уже getline останавливается для считывания новой вводимой строки
				getline(cin, dummy);   //программы считывали целую строку данных в символьную строку
				getline(cin, Str);
				c.setStr(Str.c_str());

                break;
            }
			case 8:
            {
				cout << "Вывод строки: \n";
                cout << c.getStr() << endl;

                break;
            }
            case 9:
	            exit(0);
	            break;
            default:
	            cout << "Пожалуйста введите правильный номер(1-9)!!!" << endl;
	            break;
		
		case 10:{
			Drobi obj(c);
	cout<<"obj(c):"<<endl;
	obj.PrintNumber();
	cout<<obj.getStr()<<endl;
	system("pause");
				}


	}

	}
    return 0;
}