复利(结对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; } }