当前位置: 首页 > news >正文

复利(结对2.0)

# include <stdio.h>
# include <stdlib.h>
# include <conio.h>              // getch() 函数头文件
# include <string.h> 
#include <math.h> 

char list[20][100] = {
    {"|----------------------------------------------------|"},
    {"|                    目录                            |"},
    {"|----------------------------------------------------|"},
    {"|                >> 一. 单利                         |"},
    {"|                   二. 复利                         |"},
    {"|                   三. 投入资金                     |"},
    {"|                   四. 投入时间                     |"},
    {"|                   五. 利润计算                     |"},
    {"|                   六. 利率                         |"},
    {"|                   七. 每月等额本息还款             |"},
    {"|                   八. 投资计算                     |"},
    {"|                   九. 退出                         |"},
    {"|----------------------------------------------------|"}
};

char list2[3][100] = {
    {"|                      > 1. 一次支付                 |"},
    {"|                        2. 多次等额支付             |"},
    {"|                        3. 后退                     |"}
}; 
 
 void A(); 
 void B(); 
 void C(); 
 void D(); 
 void E();
 void F();
 void G();
 void H();
 void I(int op,double record[4]);
 void display(int x)                           // 输出列表 函数  
{
    int i, j;                            
    for(i = 0; i < 13; i++)            // 循环打印列表
    {
        if(x == 2 && i == 5)            // x = 2时, 打开目录的子菜单
        {
            for(j = 0; j < 3; j++)
            {
                printf("      \t%s", list2[j]);
                putchar('\n');
            }
        }
        printf("      \t%s", list[i]);
        putchar('\n');
    }
}

int move(int x, int row, int levl)                    // x为上下移动的变量, row确定光标在字符串里的位置, levl表示当前的表格为第几个表
{
    if(levl == 1 && row+x >= 3 && row+x <= 13)            // 当row 在1到3之间时,指标可以上下移动
    {
        system("cls");                                // 清屏
        list[row][17] = list[row][18] = ' ';            // 将当前指标所在的位置变为空格
        row = row + x;                                // row 指向新的位置
        list[row][17] = list[row][18] = '>';            // 让指标出现在新的位置上
        display(0);                                    // 再次打印列表
    }    
   else if(3 == levl && row+x >= 0 && row+x <= 2)
    {
        system("cls");
        list2[row][23] = ' ';
        row = row + x;
        list2[row][23] = '>';
        display(2);
    }
    return row;                                                // 返回当前row 所在的位置
}

 main() 
 { 
    char x;                                         //  获取用户的输入
    int row = 3;                                 //   记录当前所选择的功能
    int row2 = 0;                        

    LAB1:
    system("cls");
    display(0);              //   先打印一次列表
    while(1)            //   无限接收用户的输入
    {
        printf("\t\tw为上,s为下, 回车选择\n");
        x = getch();    // 获取用户的输入
        switch(x)
        {
        case 'w':
            row = move(-1, row, 1);break;         // 输入为w , 指标向上移动  
        case 's':
            row = move(1, row, 1);break;            // 输入为s, 指标向下移动
        case '\r':
            if(row == 3)                                
            {
                C();                       //投入资金
            }
                else if(row == 4)                    
            {                                        
                system("cls");        // 清屏
                display(2);                // 输出功能一下的2级表
                while(1)            
                {
                    printf("\t\tw为上,s为下, 回车选择\n");
                    x = getch();                             // 获取用户的输入
                    switch(x)
                    {
                    case 'w':
                        row2 = move(-1, row2, 3);break;
                    case 's':
                        row2 = move(1, row2, 3);break;
                    case '\r':
                        if(row2 == 2)                
                        {    
                            goto LAB1;                    // goto 至 LAB1
                        }
                        else if(row2 == 0)
                        {
                            A();    //      复利计算
                        }
                        else if(row2 == 1)
                        {
                             B();    //     单利计算
                        }
                    }
                }
            }
            else if(row == 5)                    
            {                        
                D();                       // 投入时间
            }
            else if(row == 6)
            {
                E();                      // 利润计算
            }
            else if(row == 7)
            {
                F();        // 利率
            }
            else if(row == 8)
            {
                G();        // 每月等额本息还款 
            }
            else if(row == 9)
            {
                H();        // 投资计算
            }
            else if(row == 10)                        // 退出选项
            {    
                printf("\n\n\t   谢谢使用.\n");
                return 0;
            }
            break;    // 输入回车键选择功能
        }
    }
 } 
   
 void A()//一次投入复利计算 
 { 
     int n;//时间n 
     char c;
     double p,i,sum1;//总金额p,利率i,本利和sum1 

LABA:    printf("\n\t*请输入存款金额:");
     while(scanf("%lf",&p)!=1||p<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入存款金额:"); 
             getchar();   
     } 
     printf("\t*请输入利率:"); 
     while(scanf("%lf",&i)!=1||i<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
        getchar();    
     }  
     printf("\t*请输入存储时间(年):"); 
     while(scanf("%d",&n)!=1||n<=0||n>100)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入存储时间(年):"); 
             getchar();    
     } ; 
     sum1=p*pow((1+i),n);//复利的计算公式 
     printf("\t**本利和为:%.2lf\n\n",sum1);//输出复利计算的结果 
     printf("是否要重新输入(y/n): ");
     getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABA;
        else
        {
            system("cls");
            display(2);
        }
    }

void B()//多次等额支付复利计算
 { 
     int n;
     double p,i,sum2=0;
     char choose,c;
LABB:     printf("\n\t多次等额投入方式:\n\t1.等额多次月投\n\t2.等额多次年投\n\t*请选择:");
     while(scanf("%d",&choose)!=1||choose<1||choose>2)
     {
        printf("\t输入错误!!!\n\n\t请重新选择:"); 
        while(getchar() != '\n');        
     }
     while(getchar() != '\n');
     if(choose==1)
     {
        printf("\n\t*请输入月投金额:"); 
        while(scanf("%lf",&p)!=1||p<=0)
        {
            printf("\t输入错误!!!\n\n\t*请重新输入月投金额:"); 
            getchar();   
        } 
        printf("\t*请输入年利率:"); 
        while(scanf("%lf",&i)!=1||i<=0)
        {
            printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
            getchar();    
        }  
        printf("\t*请输入存储时间(年):"); 
        while(scanf("%d",&n)!=1||n<=0||n>100)
        {
            printf("\t输入错误!!!\n\n\t*请重新输入存储时间(年):"); 
            getchar();    
        } 
        sum2=p*12*(pow(1+i,n)-1)/i;
        printf("\t**本利和为:%.2lf\n\n",sum2);
     }
     else
     {
        printf("\n\t*请输入年投金额:"); 
        while(scanf("%lf",&p)!=1||p<=0)
        {
            printf("\t输入错误!!!\n\n\t*请重新输入年投金额:"); 
            getchar();   
        }  
        printf("\t*请输入年利率:"); 
        while(scanf("%lf",&i)!=1||i<=0)
        {
            printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
            getchar();    
        }  
        printf("\t*请输入存储时间(年):"); 
        while(scanf("%d",&n)!=1||n<=0||n>100)
        {
            printf("\t输入错误!!!\n\n\t*请重新输入存储时间(年):"); 
            getchar();  
        }
        sum2=(p*pow((1+i),n)-1)/i;
        printf("\t**本利和为:%.2lf\n\n",sum2);
     }
      printf("是否要重新输入(y/n): ");
     getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABB;
        else
        {
            system("cls");
            display(2);
        }
 } 

 void C()//单利计算 
 { 
     int n; 
     char c;
     double p,i,sum3; 
LABC:    printf("\n\t*请输入存款金额:"); 
     while(scanf("%lf",&p)!=1||p<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入存款金额:"); 
        getchar();   
     }  
     printf("\t*请输入年利率:"); 
     while(scanf("%lf",&i)!=1||i<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
        getchar();    
     }   
     printf("\t*请输入存储时间(年):"); 
     while(scanf("%d",&n)!=1||n<=0||n>100)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入存储时间(年):"); 
        getchar();  
     } 
     sum3=p*(1+i*n); 
     printf("\t**本利和为:%.2lf\n\n",sum3); 
     printf("是否要重新输入(y/n): ");
          getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABC;
        else
        {
            system("cls");
            display(1);
        }
 } 

 void D() //投入资金
 { 
     int n; 
     char c;
     double sum4,i,p;//p为投入本金 
LABD:    printf("\n\t*请输入本利和:");
     while(scanf("%lf",&sum4)!=1||sum4<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入本利和:"); 
        getchar();   
     }   
     printf("\t*请输入年利率:"); 
     while(scanf("%lf",&i)!=1||i<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
        getchar();    
     }  
     printf("\t*请输入存款时间(年):"); 
     while(scanf("%d",&n)!=1||n<=0||n>100)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入存款时间(年):"); 
        getchar();  
     }  
     p=sum4/(1+i*n); 
     printf("\t**投入的本金为:%.2lf\n\n",p); 
          printf("是否要重新输入(y/n): ");
          getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABD;
        else
        {
            system("cls");
            display(1);
        }
 }

 void E()   //投入时间
 {
     double n;
     char c;
     double sum5,i,p;
LABE:    printf("\n\t*请输入存储金额:");
     while(scanf("%lf",&p)!=1||p<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入存储金额:"); 
        getchar();   
     }   
     printf("\t*请输入年利率:");
     while(scanf("%lf",&i)!=1||i<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
        getchar();    
     }   
     printf("\t*请输入本利和:");
     while(scanf("%lf",&sum5)!=1||sum5<=0)
     {
        printf("\t输入错误!!!\n\n\t*请重新输入本利和:"); 
        getchar();   
     }   
     n=(log(sum5/p))/(log(1+i));
     printf("\t**投入的时间为:%.0lf\n\n",n);
          printf("是否要重新输入(y/n): ");
          getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABE;
        else
        {
            system("cls");
            display(1);
        }
 }

void F()  //利率
{
    char c;
    double sum6,i,p,n;
LABF:   printf("\n\t*请输入存储金额:");
    while(scanf("%lf",&p)!=1||p<=0)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入存储金额:"); 
        getchar();   
    }   
    printf("\t*请输入存储时间(年):");
    while(scanf("%d",&n)!=1||n<=0||n>100)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入存储时间(年):"); 
        getchar();  
    } 
    printf("\t*请输入本利和:");
    while(scanf("%lf",&sum6)!=1||sum6<=0)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入本利和:"); 
        getchar();   
    }   
    i=pow((sum6/p),(1/n))-1;
    printf("\t**利率为:%.2lf\n\n",i);
         printf("是否要重新输入(y/n): ");
          getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABF;
        else
        {
            system("cls");
            display(1);
        }
}

void G()
{
    char c;
    double sum7,i,p,n;
LABG:    printf("\n\t*请输入贷款金额:");
    while(scanf("%lf",&sum7)!=1||sum7<=0)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入本利和:"); 
        getchar();   
    }   
    printf("\t*请输入贷款时间(年):");
    while(scanf("%d",&n)!=1||n<=0||n>100)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入贷款时间(年):"); 
        getchar();  
    } 
    printf("\t*请输入年利率:");
    while(scanf("%lf",&i)!=1||i<=0)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
        getchar();    
    }   
    p=sum7*i/(12*(1+i)*(pow(1+i,n)-1));
    printf("\t**每月等额本息还款为:%.2lf\n\n",p);
              printf("是否要重新输入(y/n): ");
          getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABG;
        else
        {
            system("cls");
            display(1);
        }
}

 void H()//计算哪种投资方式的利益最大
 {
    int n,op=0;
    char c;
    double i,p;
    double temp;
    double record[4];
LABH:    printf("\t*请输入存储金额:");
    while(scanf("%lf",&p)!=1||p<=0)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入存储金额:"); 
        getchar();   
    }   
    printf("\t*请输入年利率:");
      while(scanf("%lf",&i)!=1||i<=0)
    {
        printf("\t输入错误!!!\n\n\t*请重新输入利率:"); 
        getchar();    
    }   
    printf("\t*请输入t投资时间(年):");
    while(scanf("%d",&n)!=1||n<=0||n>100)
    {
       printf("\t输入错误!!!\n\n\t*请重新输入投资时间(年):"); 
       getchar();  
    }
    record[0]=p*pow((1+i),n);//复利
    I(0,record);
    record[1]=p*12*(pow(1+i,n)-1)/i;//等额月投
    I(1,record);
    record[2]=(p*pow((1+i),n)-1)/i;//等额年投
    I(2,record);
    record[3]=p*(1+i*n);//单利
    I(3,record);
    temp=record[0];
    for(int j=1;j<4;j++)
    {
        if(record[j]>temp)
        {
            temp=record[j];
            op=j;
        }
    }
    printf("\t推荐:\n");
    I(op,record);
                   printf("是否要重新输入(y/n): ");
          getchar();
        scanf("%c",&c);
        if(c=='y')
            goto LABH;
        else
        {
            system("cls");
            display(1);
        }
 }

 void I(int op,double record[4])//判断哪种投资方式的利益最大
 {
     switch (op)
     {
     case 0:printf("\t选择复利投资,本利和为%.2lf\n",record[0]);break;
     case 1:printf("\t选择等额月投资,本利和为%.2lf\n",record[1]);break;
     case 2:printf("\t选择等额年投资,本利和为%.2lf\n",record[2]);break;
     case 3:printf("\t选择等单利投资,本利和为%.2lf\n",record[3]);break;
     }
 }

 

转载于:https://www.cnblogs.com/mingyin/p/5393961.html

相关文章:

  • 为什么要重写hashCode()方法和equals()方法以及如何进行重写
  • 程序员下一门要学的编程语言Swift
  • Jenkins部署Maven多环境项目(dev、beta、prod)的参数设置
  • MATLAB地图工具箱学习总结(一)从地图投影说起
  • MySQL存储引擎MyISAM与InnoDB区别总结整理
  • Atitit。数据库 安全性 重要敏感数据加密存储解决方案
  • MySQL半同步复制原理配置与介绍
  • GIT 远程仓库:添加远程库、从远程库克隆
  • 用优雅的方式重装Windows 10不可使用的应用程序
  • 使用Generic Webhook Trigger插件实现Jenkins+WebHooks(码云)持续集成
  • Redis实战和核心原理详解(4)Redis存储Key的一种设计实现方式:模式匹配
  • 第一次冲刺阶段(六)
  • MyBatis关联映射:一对一、一对多
  • xshell配色Solarized Dark
  • MySQL必知必会知识点总结一二
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • angular2开源库收集
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES6之路之模块详解
  • HashMap ConcurrentHashMap
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JWT究竟是什么呢?
  • leetcode讲解--894. All Possible Full Binary Trees
  • opencv python Meanshift 和 Camshift
  • oschina
  • Python 反序列化安全问题(二)
  • 构建二叉树进行数值数组的去重及优化
  • 前端面试之闭包
  • ionic入门之数据绑定显示-1
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​第20课 在Android Native开发中加入新的C++类
  • ​力扣解法汇总946-验证栈序列
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (¥1011)-(一千零一拾一元整)输出
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (八十八)VFL语言初步 - 实现布局
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)计算机毕业设计大学生兼职系统
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)OpenStack Hacker养成指南
  • (转载)利用webkit抓取动态网页和链接
  • ... 是什么 ?... 有什么用处?
  • .NET Core 成都线下面基会拉开序幕
  • .net 中viewstate的原理和使用
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET开发者必备的11款免费工具
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @31省区市高考时间表来了,祝考试成功
  • @Bean注解详解