zoukankan      html  css  js  c++  java
  • 小型项目:基于菜单的计算机系统

    /*
    calc.cpp实现了计算机系统。开始时,他显示一个菜单,以选择计算器的类型。如果用户选择了
    标准型计算器,则出现标准型计算器的菜单,而如果用户选择了科学性计算器,则出现科学计算器
    的菜单,最后一个的选项是退出程序。
    在标准计算器中,选项有加、减、乘、除等,而在科学计算器中,选项有求幂、阶乘、开方等。
    在本程序中,定义了新旧计算器的宏开关,新计算器接受输入值,而旧计算器的操作数则是前次操
    作的结果。
    本项目没有考虑异常处理,所以输入输出时不要输入非数字字符串。
    数据范围还不够大,将在往后进一步改进。
    */
    //包含预处理宏和头文件的文件
    #include<iostream>
    using namespace std;
    #include<conio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<stdio.h>
    #define new_cal 1
    #define old_cal 0
    //stand_calc 类定义了标准计算器的函数
    class stand_calc
    {
        /*标准计算器函数的原型。这些函数都是静态的,所以调用他们时,
        只使用类名即可,没有必要创建该类的实例。*/
    public:
        static double addition(double,double);
        static double substract(double,double);
        static double multiplication(double,double);
        static double division(double,double*);
        static double modulus(double*,double*);
    };
    //science_calc类定义了科学型计算器的函数
    class science_calc
    {
    public:
        static double square(double);
        static double cube(double);
        static double power(double,double);
        static double sq_root(double);
        static long int fact(double);
        static double sin_func(double);
        static double cos_func(double);
        static double tan_func(double);
    };
    double stand_calc::addition(double a, double b)
    {
        return (a+b);
    }
    double stand_calc::substract(double a, double b)
    {
        return (a-b);
    }
    double stand_calc::multiplication(double a, double b)
    {
        return (a*b);
    }
    /*除法函数将执行被除数和除数的相除,该函数有两个参数,其中一个是变量副本,
    另一个是指针。之所以如此,是因为如果除数是0,则该函数将显示再次输入除数的
    信息。使用指针后,再次输入的除数值也会在主函数中被更新。*/
    double stand_calc::division(double a, double*b)
    {
        while(*b==0)
        {
            cout<<"
    Cannot divide by zero"<<endl;
            cout<<"
    Enter the second number again:";
            cin>>*b;
        }
        return (a/(*b));
    }
    /*求余函数将执行被除数和除数的相除,并返回除法的余数。和除法操作类似,它的
    除数也不能为0。由于不能对双精度数求余,所以得先转换成整数。*/
    double stand_calc::modulus(double* a, double*b)
    {
        while(*b==0)
        {
            cout<<"
    Cannot divide by zero"<<endl;
            cout<<"
    Enter the second number again:";
            cin>>*b;
        }
        int x=(int)*a;
        int y=(int)*b;
        if(*a-x>0||*b-y>0)
        {
            cout<<"
    Converting decimal number into an integer to perform modulus";
        }
        *a=x;
        *b=y;
        return ((x)%(y));
    }
    
    //science_calcl类的函数声明由此开始
    double science_calc::square(double x)
    {
        return (pow(x,2));
    }
    double science_calc::cube(double x)
    {
        return (pow(x,3));
    }
    double science_calc::power(double x,double y)
    {
        return (pow(x,y));
    }
    double science_calc::sq_root(double x)
    {
        return (sqrt(x));
    }
    long int science_calc::fact(double x)
    {
        int n=(int)x;
        long int f=1;
        while(n>1)
        {
            f*=n;
            n--;
        }
        return f;
    }
    double science_calc::sin_func(double x)
    {
        return (sin(x));
    }
    double science_calc::cos_func(double x)
    {
        return (cos(x));
    }
    double science_calc::tan_func(double x)
    {
        return (tan(x));
    }
    
    int main()
    {
        double num1,num2,num3,temp;
        int choice1=0,choice2,flag;
        //主菜单的循环,程序从此开始,他将显示选择计算器类型的菜单
        do
        {
    //   clrsrc();//清除屏幕
            system("cls");
            cout<<"===============Type of Calculators===============";
            cout<<"
    1	Standard Calculator
    2	Scientific Calculator
    3	Quit"<<endl;
            cin>>choice1;
            flag=new_cal;
            //根据主菜单中的输入选项,执行相应操作
            switch(choice1)
            {
            case 1:
                do
                {
                    //  clrscr();
                    system("cls");
                      cout<<"================Standard Calculator================";
                      cout<<"
    1	Addition
    2	Substraction
    3	Multification
    4	Division
    5	Modulus
    6	Return to Previous Menu
    7	Quit";
                      //只有在旧计算器模式时,选项8才会显示,此时一个操作数已经存储在计算机的内存中
                    if(flag==old_cal)
                    {
                        cout<<"
    8	Clear Memory";
                    }
                    cout<<"
    Choose the type of calculator:"<<endl;
                    cin>>choice2;
                    switch(choice2)
                    {
                    case 1:
                      // 如果是新计算机模式,则接受第一个操作数,否则第一个操作数由上一次计算结果提供
                      if(flag==new_cal)
                      {
                          cout<<"Enter first number:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    First num is"<<num1<<endl;
                      }
                      cout<<"Enter second number:";
                      cin>>num2;
                      num3=stand_calc::addition(num1,num2);
                      cout<<"
    Addition of"<<num1<<" and"<<num2<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                    case 2:
                      // 如果是新计算机模式,则接受第一个操作数,否则第一个操作数由上一次计算结果提供
                      if(flag==new_cal)
                      {
                          cout<<"Enter first number:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    First num is"<<num1<<endl;
                      }
                      cout<<"Enter second number:";
                      cin>>num2;
                      num3=stand_calc::substract(num1,num2);
                      cout<<"
    Substraction of"<<num1<<" from"<<num2<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 3:
                      // 如果是新计算机模式,则接受第一个操作数,否则第一个操作数由上一次计算结果提供
                      if(flag==new_cal)
                      {
                          cout<<"Enter first number:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    First num is"<<num1<<endl;
                      }
                      cout<<"Enter second number:";
                      cin>>num2;
                      num3=stand_calc::multiplication(num1,num2);
                      cout<<"
    Multification of"<<num1<<" and"<<num2<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 4:
                      // 如果是新计算机模式,则接受第一个操作数,否则第一个操作数由上一次计算结果提供
                      if(flag==new_cal)
                      {
                          cout<<"Enter first number:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    First num is"<<num1<<endl;
                      }
                      cout<<"Enter second number:";
                      cin>>num2;
                      num3=stand_calc::division(num1,&num2);
                      cout<<"
    Division of"<<num1<<" by"<<num2<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 5:
                      // 如果是新计算机模式,则接受第一个操作数,否则第一个操作数由上一次计算结果提供
                      if(flag==new_cal)
                      {
                          cout<<"Enter first number:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    First num is"<<num1<<endl;
                      }
                      cout<<"Enter second number:";
                      cin>>num2;
                      num3=stand_calc::modulus(&num1,&num2);
                      cout<<"
    Modulus of"<<num1<<" by"<<num2<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 6:
                           cout<<"
    Returning to previous menu.";
                           cout<<"
    press any key to continue......";
                           getch();
                           break;
                       case 7:
                        cout<<"
    Quitting......";
                        cout<<"
    press any key to continue......";
                        getch();
                        exit(0);
                       case 8:
                        //如果是新计算机模式,则8是非法选项,否则8选项用以重启一个新的计算
                        if(flag==new_cal)
                        {
                            cout<<"
    Invalid choice.";
                            cout<<"
    press any key to continue......";
                            getch();
                        }
                        else
                        {
                            temp=0;
                            flag=new_cal;
                        }
                        break;
                       default:
                        cout<<"
    Invalid choice.";
                        cout<<"
    press any key to continue......";
                        getch();
                        break;
                     }
                    }while(choice2!=6);
                    break;
                    case 2:
                   do
                   {
                //      clrscr();
                     system("cls");
                      cout<<"================Scientific Calculator================";
                      cout<<"
    1	Square
    2	Cube
    3	Power
    4	Factorial
    5	Sin
    6	Cos
    7	Tan
    8	Return to previous menu
    9	Quit";
                      //只有在旧计算器模式时,选项8才会显示,此时一个操作数已经存储在计算机的内存中
                    if(flag==old_cal)
                    {
                        cout<<"
    10	Clear Memory";
                    }
                    cout<<"
    Choose the type of calculator:"<<endl;
                    cin>>choice2;
                    switch(choice2)
                    {
                    case 1:
                      if(flag==new_cal)
                      {
                          cout<<"Enter number to find square:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    Number is"<<num1<<endl;
                      }
                      num3=science_calc::square(num1);
                      cout<<"
    Square of"<<num1<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                    case 2:
                      if(flag==new_cal)
                      {
                          cout<<"Enter number to find cube:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    Number is"<<num1<<endl;
                      }
                      num3=science_calc::cube(num1);
                      cout<<"
    Cube of"<<num1<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                case 3:
                    if(flag==new_cal)
                      {
                          cout<<"Enter first number for base to find power:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    First number is"<<num1<<endl;
                      }
                      cout<<"Enter second number for base to fine power:";
                      cin>>num2;
                      num3=science_calc::power(num1,num2);
                      cout<<"
    Power of"<<num1<<"to the power "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 4:
                      if(flag==new_cal)
                      {
                          cout<<"Enter number to find factorial:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    Number to find factorial is"<<num1<<endl;
                      }
                      num3=science_calc::fact(num1);
                      cout<<"
    Factorial of"<<num1<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 5:
                      if(flag==new_cal)
                      {
                          cout<<"Enter number to find sin value:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    Number for sin value is"<<num1<<endl;
                      }
                      num3=science_calc::sin_func(num1);
                      cout<<"
    Sin value of"<<num1<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 6:
                        if(flag==new_cal)
                      {
                          cout<<"Enter number to find cos value:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    Number for cos value is"<<num1<<endl;
                      }
                      num3=science_calc::cos_func(num1);
                      cout<<"
    Cos value of"<<num1<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 7:
                        if(flag==new_cal)
                      {
                          cout<<"Enter number to find tan value:";
                          cin>>num1;
                      }
                      else
                      {
                          num1=temp;
                          cout<<"
    Number for tan value is"<<num1<<endl;
                      }
                      num3=science_calc::tan_func(num1);
                      cout<<"
    Tan value of"<<num1<<" is "<<num3;
                      cout<<"
    Press any key to continue......"<<endl;
                      getch();
                      temp=num3;
                      flag=old_cal;
                      break;
                       case 8:
                           cout<<"
    Returning to previous menu.";
                           cout<<"
    press any key to continue......";
                           getch();
                           break;
                       case 9:
                        cout<<"
    Quitting......";
                        cout<<"
    press any key to continue......";
                        getch();
                        exit(0);
                       case 10:
                        if(flag==new_cal)
                        {
                            cout<<"
    Invalid choice.";
                            cout<<"
    press any key to continue......";
                            getch();
                        }
                        else
                        {
                            temp=0;
                            flag=new_cal;
                        }
                        break;
                       default:
                        cout<<"
    Invalid choice.";
                        cout<<"
    press any key to continue......";
                        getch();
                        break;
                    }
                }while(choice2!=8);
                break;
                  case 3:
                    cout<<"
    Quitting......";
                    cout<<"
    press any key to continue......";
                    getch();
                    break;
            default:
                cout<<"
    Invalid choice.";
                cout<<"
    press any key to continue......";
                getch();
                break;
            }
        }while(choice1!=3);
    
        return 0;
    }

    执行效果图如下(可以自己尝试):



    除了system("cls")清除屏幕的应用,我觉得突出的一点就是新旧计算模式。

    该程序主要是函数的书写以及循环与条件的层层嵌入。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965758.html
Copyright © 2011-2022 走看看