0319 复利计算器4.0

 

/**

程序完成时间: 3月19日 9:50pm

发表时间: 3月20日 0:18am

此版本是在前三个版本的基础上添加了 等额本息还贷计算 的新功能
并且按照实验要求增强了系统的健壮性,保证在输入一部分的错误的
数据,后程序不会崩溃。例如是在输入int或者是输入double类型的
地方,输入了字符,是会提示并且允许重新输入。

并且通过宏定义使得代码变得简洁,还有简化了修改的操作,还认识
到宏定义的妙用是可以使得编程变得简单,还可以增大代码的复用性。


**/


 1 #include<stdio.h>
  2 #include<math.h>
  3 #include<stdlib.h>
  4
  5 #define WARN1   while(0 ==
  6 #define WARN2   ){    while(‘\n‘ != getchar())    {    }    printf("输入不合法!\n请重新输入:    ");        }
  7
  8 double danli()
  9 {
 10     double P,F,i; //P是本金,F是收益,i年利率
 11     int N; //是期限
 12     double nlx;
 13     printf("------进入单利计算\n");
 14     printf("请输入本金:\n");
 15     WARN1    scanf("%lf",&P)    WARN2
 16     printf("请输入年利率\n");
 17     WARN1    scanf("%lf",&i)    WARN2
 18     printf("请输入年限:\n");
 19     WARN1    scanf("%d",&N)    WARN2
 20
 21     nlx = P*i;
 22     F = nlx*N + P;
 23     return F;
 24
 25 }
 26
 27 double fuli()
 28 {
 29
 30     double P,F,i; //P是本金,F是收益,i年利率
 31     int N,W; //是期限
 32     printf("-------进入复利计算\n");
 33     printf("请输入本金:\n");
 34     WARN1    scanf("%lf",&P)    WARN2
 35     printf("请输入年利率\n");
 36     WARN1    scanf("%lf",&i)    WARN2
 37     printf("请输入年限:\n");
 38     WARN1    scanf("%d",&N)    WARN2
 39     printf("请输入复利次数:\n");
 40     scanf("%d",&W);
 41
 42     i=pow(1+i/W,W)-1;
 43     F=P*pow((i+1),N);
 44     return F;
 45 }
 46
 47 double gusuan()
 48 {
 49     double P,F,i; //P是本金,F是收益,i年利率
 50     int N,W; //是期限
 51     printf("-------进入本金计算\n");
 52     printf("请输入收益:\n");
 53     WARN1    scanf("%lf",&F)    WARN2
 54     printf("请输入年利率\n");
 55     WARN1    scanf("%lf",&i)    WARN2
 56     printf("请输入年限:\n");
 57     WARN1    scanf("%d",&N)    WARN2
 58     printf("请输入复利次数:\n");
 59     WARN1    scanf("%d",&W)    WARN2
 60     i = pow(1+i/W,W)-1;
 61     P = F/pow((i+1),N);
 62     return P;
 63 }
 64
 65 double TZtime()
 66 {
 67     double year;
 68     double P,F,i; //P是本金,F是收益,i年利率
 69     int W; //是期限
 70     printf("-------进入投资时间计算\n");
 71     printf("请输入本金:\n");
 72     WARN1    scanf("%lf",&P)    WARN2
 73     printf("请输入收益:\n");
 74     WARN1    scanf("%lf",&F)    WARN2
 75     printf("请输入年利率\n");
 76     WARN1    scanf("%lf",&i)    WARN2
 77     printf("请输入复利次数:\n");
 78     WARN1    scanf("%d",&W)    WARN2
 79     i = pow((1+i/W),W)-1;
 80     year = log(F/P)/log(1+i);
 81     return year;
 82
 83 }
 84 double bestProject()
 85 {
 86     double P,F,i;
 87     int N,W;
 88     printf("-------进入项目利率计算\n");
 89     printf("请输入本金:\n");
 90     WARN1    scanf("%lf",&P)    WARN2
 91     printf("请输入收益:\n");
 92     WARN1    scanf("%lf",&F)    WARN2
 93     printf("请输入年限\n");
 94     WARN1    scanf("%d",&N)    WARN2
 95     printf("请输入复利次数:\n");
 96     WARN1    scanf("%d",&W)    WARN2
 97     i = W*(pow(pow(F/P,1.0/N),1.0/W)-1.0);
 98     return i;
 99
100
101 }
102
103 double sum()
104 {
105     double y,F=0.0,i;
106     int N;
107     int ch;
108     printf("-------进入定投计算\n");
109     printf("####### 1-年投资  2-月投资 #######\n");
110     WARN1    scanf("%d",&ch)    WARN2
111     if(ch == 1)
112     {
113         printf("请输入年投资额:\n");
114         WARN1    scanf("%lf",&y)    WARN2
115     }
116     else
117     {
118         printf("请输入月投资额:\n");
119         WARN1    scanf("%lf",&y)    WARN2
120     }
121
122     printf("请输入年利率\n");
123     WARN1    scanf("%lf",&i)    WARN2
124     printf("请输入年限\n");
125     WARN1    scanf("%d",&N)    WARN2
126     //        printf("请输入复利次数:\n");
127     //        scanf("%d",&W);
128     if(ch == 2)
129     {
130         i = i/12.0;
131         N = N*12;
132     }
133     F = y*(1.0+i)*(-1+pow(1.0+i,N))/i;
134
135     return F;
136
137
138
139 }
140
141 double refund()
142 {
143     double P,i,month_amount;
144     int N,month;
145     printf("-------进入本息还款计算\n");
146     printf("请输入贷款金额:\n");
147     WARN1    scanf("%lf",&P)    WARN2
148     printf("请输入年利率:\n");
149     WARN1    scanf("%lf",&i)    WARN2
150     printf("请输入归还年限:\n");
151     WARN1    scanf("%d",&N)    WARN2
152
153         //每月还款额=[贷款本金×月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1]
154
155     i = i/12;
156     month = N*12;
157     month_amount = P*i*pow((1.0+i),month)/(pow(1.0+i,month)-1);
158     return month_amount;
159
160 }
161
162 void main()
163 {
164     double F1;
165     int ch2;
166
167     while(1)
168     {
169         printf("*************复利计算机(4.0)************\n");
170
171         printf("------    1 复利                  ------\n");
172         printf("------    2 单利                  ------\n");
173         printf("------    3 本金估算              ------\n");
174         printf("------    4 投资年限估算          ------\n");
175         printf("------    5 最优投资项目利率估算  ------\n");
176         printf("------    6 定期投资收益计算      ------\n");
177         printf("------    7 等额本息还款计算      ------\n");
178         printf("------    0 退出                  ------\n");
179         printf("请选择:    ");
180         WARN1    scanf("%d",&ch2)    WARN2
181         switch(ch2){
182         case 1:
183             F1 = fuli(); break;
184         case 2:
185             F1 = danli(); break;
186         case 3:
187             F1 = gusuan();
188             break;
189         case 4:
190             F1 = TZtime();
191             break;
192         case 5:
193             F1 = bestProject();
194         case 6:
195             F1 = sum();
196             break;
197         case 7:
198             F1 = refund();
199             break;
200         case 0:
201             exit(1);
202             break;
203         default:
204             printf("输入不合法!!\n");
205             continue ;
206         }
207
208             printf("结果为:%.2lf\n",F1);
209
210     }
211
212
213 }
时间: 2024-10-23 16:50:05

0319 复利计算器4.0的相关文章

复利计算器4.0之再遇JUnit

复利计算器4.0之再遇JUnit 前言    虽然之前的复利计算器版本已经尝试过使用JUnit单元测试,但由于没有系统性地学习过JUnit的使用,用得并不好,主要问题表现在测试的场景太少,并没有达到测试所需的全面性,没能体现JUnit这一神器的精髓所在,为此本版本的复利计算器在JUnit单元测试方面做了一些完善. 源代码包结构 如上图所示,我把测试类统一放在新建的test源码文件下(test打错了,已改),以便和程序代码分离,方便操作. 细心看你就能发现,test目录下的包和程序SRC目录下相应

0316复利计算器3.0

#include<stdio.h> #include<math.h> double benjin=0,W=0; double year=0; int N=1; double lilv; void danli(){ printf("请输入要存入的本金:"); scanf("%lf",&benjin); printf("请输入年利率:"); scanf("%lf",&lilv); print

复利计算器4.0 【java版】

import java.util.Scanner; public class FuLi { public static void main(String[] args) { double N=1; Scanner scanner=new Scanner(System.in); System.out.println("请选择复利计算(1)or单利计算(2)or计算本金(3)or投资年数(4)or报酬率(5)or年资产总值(6)or月资产总值(7):"); int choose=scann

复利计算器3.0

package fulijisuanqi02; import java.text.DecimalFormat; import java.util.Scanner; public class fulijisuanqi02 { static Scanner scanner = new Scanner(System.in); static DecimalFormat df = new DecimalFormat("####0.0000"); public static void main(S

复利计算器5.0加强版

一.客户需求 已完成需求: 1.客户说:帮我开发一个复利计算软件. 2.如果按照单利计算,本息又是多少呢? 3.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? 4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 5.如果我希望在十年内将100万元变成200万元,应该找到报酬率在多少的投资工具来帮助我达成目标?如果想在5年后本金翻倍,报酬率就应至少为多少才行呢

复利计算器2.0

package JSQ; import java.awt.EventQueue; import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;import java.awt.event.ActionListener

复利计算器6.0

对界面进行了升级添加了用户注册于登录界面,更完善的功能待续.... 主要代码: 1 package DataBase; 2 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 public class SingUpConnect { 9 private Connection connection; 10

复利计算器5.0

代码链接:https://github.com/LinWenFeng/CompoundInterest

复利计算3.0 心得

这个星期老师在原来复利计算上布置了新的任务,让我慢慢的进入状态来一步一步的完善我的代码,虽然运行的代码不够“豪华”,但是自己有在感觉到在一点点的进步和总结,会慢慢发现每次写总结会对以后的编程之路有益,因为是在记录自己一点点的进步和解决疑惑之处,因为基础问题,在刚开始的编程之路会有很多缺陷,但是会一步步成长起来的,因为最近有学网页制作界面,发现jsp的界面编写会比java简单一些,所以这次总结后,有时间会去尝试用jsp来总结编写,因为感觉用eclipse来创建窗口太复杂. 回顾布置的问题,并附上操