复利计算--结对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复利计算--结对相关的知识,希望对你有一定的参考价值。

复利计算之结对

结对同伴的学号:201406114245

姓名:赵创佳

博客地址:http://www.cnblogs.com/7763255qw/ ;github地址: https://github.com/zhaochuangjia

 

程序源代码已上传至https://github.com/ganjiaping

源程序的文件名为:teaml.cpp;  

 

一、项目简介

项目名称:复利计算

  版  本  :5.0

版本类型:c

使用工具:Visual c++ 6.0

主要功能:复利单利的计算、贷款的计算以及投资的计算

 

二、新的功能需求     

         即要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资。

         通过上述计算与对比,可以帮助客户进行投资决策。

         客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢?

 

三、TSP data (即估计实现所需时间和结对编程时间)

TSP data 项目耗时记录表

TSP

软件项目阶段

花费时间

Planning

计划

 20

Estimate

估计这个任务需要多少时间

 20

Development

开发

 10

Analysis

需求分析

 1

Design  Spec

生成设计文档

 1

Design  Review

设计复审(和同事审核设计文档)

 3

Coding  Standard

代码规范(为目前的开发制定合适的规范)

 1

Design

具体设计

 1

Coding

具体编码

 1

Code  Review

代码复审

 1 

Test

测试(自我测试,修改代码,提交修改)

 2

 

四、任务分配

这个结对编程过程中,我做了查找资料,查缺补漏;同伴做了编写程序。

 

五、总结这次结对编程的收获到和感悟:

     本次实验主要是实现动态显示投资结果,我们用的是C语言编程,已经完成对投资结果的保存,但由于自身的编程能力不达标,导致不能把结果输出。正抓紧时间查找资料进行改进和编写。

      我们的本意是实现记录不同类型的投资,并动态显示资金现值。但由于技术的限制,导致结果可以保存,但是却不能输出。我们正在查找资料,继续编写,如果不行,就改用Java编写。

      总的来说,这次的结对编程不是很理想。因为记录下了一笔一笔不同类型的投资,但并没有实现动态显示资金现值呢,所以没有真正完成这次任务。我想我和我的同伴后续会对这个程序不断的改进,然后得到自己想要的效果,即把整个复利计算5.0程序的客户要求"那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢?"实现,还有做到最好。最后,感谢我的同伴在这次合作中的付出,我衷心的感谢!下次我们会做的更好!

 

六、源程序:

#include<stdio.h>

#include<math.h>

#include<conio.h>

#include<windows.h>

#include<stdlib.h>

#include<string.h>

//定义信息链表的结点结构
struct node
{
      
    struct node *next;
};


typedef struct node NODE;

double principal=0,mount=0;

int year=0;

int n=1;

double rate;

void way(int bj,double S[3]);

 void meu()
 {
printf("|----------------------------------------|\\n");

printf("|          0.清屏                        |\\n");

printf("|          1.复利计算                    |\\n");

printf("|          2.单利计算                    |\\n");
    
printf("|          3.计算本金                    |\\n");

printf("|          4.年限计算                    |\\n");

printf("|          5.利率估算                    |\\n");

printf("|          6.等额定投                    |\\n");

printf("|          7.等额还款                    |\\n");

printf("|          8.投资组合                    |\\n");

printf("|          9.记录保存                    |\\n");

printf("|----------------------------------------|\\n");
 } 

void danli(){

        printf("请输入的本金:");

p:scanf("%lf",&principal);

  if(principal<=0){

printf("请输入大于0的本金\\n");

goto  p;
  }

else

{
printf("请输入年限:");

o:scanf("%d",&year);

if(year<=0||year>100){

printf("请输入合法的年限(1--100)\\n");
goto o;
}
  else
  {
      printf("请输入年利率:");

    scanf("%lf",&rate);

    mount=principal+principal*rate*year;

    printf("本息为:%.2lf\\n",mount);


  }

}


}

void fuli(){

 

p:printf("请输入本金:");

    scanf("%lf",&principal);

     if(principal<=0){

printf("请输入大于0的本金\\n");

goto  p;
     }
else
{
    printf("请输入年限:");

o: scanf("%d",&year);
    if(year<=0||year>100){

printf("请输入合法的年限(1--100)\\n");
goto o;
}
  else
  {

    printf("请输入年利率:");

    scanf("%lf",&rate);

    printf("请输入年复利次数:");

    scanf("%d",&n);

    rate=pow((1+rate/n),n)-1;

    mount=principal*pow((1+rate),year);

    printf("本息为:%.2lf\\n",mount);

}

}

}

void principaljisuan(){

    printf("请输入期望的收益:");

    scanf("%lf",&mount);  

o:printf("请输入年限:");

    scanf("%d",&year);
        if(year<=0||year>100){

printf("请输入合法的年限(1--100)\\n");
goto o;
}
  else
  {

    printf("请输入年利率:");

    scanf("%lf",&rate);

    printf("请输入年复利次数:");

    scanf("%d",&n);

    rate=pow((1+rate/n),n)-1;

    principal=mount/pow((1+rate),year);

    printf("输出所需本金为:%.2lf\\n",principal);

 

}

}
void time()
{
    int flat=0;
    
    printf("请输入本利和:"); 

    scanf("%lf",&mount); 

    printf("请输入年回报率:");
    
    scanf("%lf",&rate);
    
p:printf("请输入本金:"); 

    scanf("%lf",&principal);

     if(principal<=0){

printf("请输入大于0的本金\\n");

goto  p;
     }
else
{
    for(n=1;n<100;n++)    //穷举法求100年满足的计息期数
    {
        if((principal*(pow((1+rate),n)))>=mount)
        {
            printf("计息期数:%d\\n\\n",n);

            flat=1;

            break;

        }
    }
    if(flat==0)

        printf("在100年内没有符合计息期数!\\n\\n");
    
}

}
void lilv()
{
    
    printf("请输入本利和:"); 

    scanf("%lf",&mount); 

    printf("请输入复利次数(年):"); 

    scanf("%d",&year); 

p:printf("请输入本金:");
  
    scanf("%lf",&principal);

     if(principal<=0){
printf("请输入大于0的本金\\n");

goto  p;
     }
else
{
    rate=pow(mount/principal, 1.0/year)-1;

    printf("年利率为:%lf\\n",rate);
}
}
void yearmount()//计算年金终值
 {
  int n;
p:printf("存入本金:");

     scanf("%lf",&principal);

      if(principal<=0){

printf("请输入大于0的本金\\n");

goto  p;
     }
else
{
    printf("存入年限:");

o:scanf("%d",&year);

        if(year<=0||year>100){

printf("请输入合法的年限(1--100)\\n");

goto o;
}
  else
  {

     printf("年利率:");

     scanf("%lf",&rate);

     printf("\\t\\t1:按年投资\\n\\t\\t2:按月投资\\n");

 A:printf("请选择你要的功能<1|2>:");

   scanf("%d",&n);

   if(n==1)
   {
       mount=principal*(pow(1+rate,year)-1)/rate;
      
   }
   else if(n==2)
   {
       mount=principal*12*(1+rate)*(pow(1+rate,year)-1)/rate;
   }
   else
   {
       printf("输入有误!请重新输入\\n");
       goto A;

   }
   printf("%d年后的总产值:%.4lf\\n",year,mount);
  
 }
}
}
 void huankuan()
 {

     printf("贷款金额:");

     scanf("%lf",&mount);

     printf("贷款年限:");

     scanf("%d",&year);

    printf("年利率:");

     scanf("%lf",&rate);

     principal=mount*rate/(12*(1-rate)*(pow(1-rate,year)-1));

    printf("贷款%.4lf每月需要还款%.4lf\\n",mount,principal);
 }

 void touzi()//计算哪种投资方式的利益最大
 {
    int bj=0;
    double temp;
    double S[3];
    printf("\\t请输入存储金额:");
    while(scanf("%lf",&principal)!=1||principal<=0)

    {

        printf("\\t输入错误!!!\\n\\n\\t*请重新输入存储金额:"); 

        getchar();   

    }   

    printf("\\t请输入年利率:");
      while(scanf("%lf",&rate)!=1||rate<=0)

    {

        printf("\\t输入错误!!!\\n\\n\\t*请重新输入利率:"); 

        getchar();    

    }   
    printf("\\t请输入t投资时间(年):");
    while(scanf("%d",&year)!=1||year<=0||year>100)

    {

       printf("\\t输入错误!!!\\n\\n\\t*请重新输入投资时间(年):"); 

       getchar();  

    }
    S[0]=principal*pow((1+rate),n);//复利
    way(0,S);
    S[1]=principal*12*(pow(1+rate,year)-1)/rate;//等额月投
    way(1,S);
    S[2]=principal*(1+rate*year);//单利
    way(2,S);
    temp=S[0];
    for(int j=1;j<4;j++)
    {
        if(S[j]>temp)
        {
            temp=S[j];
            bj=j;
        }
    }
    printf("\\t推荐:\\n");
    
    way(bj,S);
 }
 void way(int bj,double S[3])//判断哪种投资方式的利益最大
 {
     switch (bj)
     {
     case 0:printf("\\t选择复利投资,本利和为%.2lf\\n",S[0]);break;
     case 1:printf("\\t选择等额月投资,本利和为%.2lf\\n",S[1]);break;
     case 2:printf("\\t选择等单利投资,本利和为%.2lf\\n",S[2]);break;
     }
 }

//*保存信息
void Save(NODE *head)
{
    FILE *fp ; 
    NODE *p;
    int count=0,flag=1 ;
    fp=fopen("d:\\\\employee.txt","wb");//指针方式打开二进制文件 //
    printf("文件已保存!\\n");
    if(fp==NULL)
    {
        printf("文件打不开!");
        return ;
    }
    p=head->next ;
    while(p)
    {
        if(fwrite(p,sizeof(NODE),1,fp)==1)
        {
            p=p->next ;
            count++;
        }
        else
        {
            flag=0 ;
            break ;
        }
    }
   fprintf(fp,"%d",mount);
    fclose(fp);
}

 main(){

    FILE *fp;
    int k;
    char ch1;
     NODE *head,*p,*q;
    k=1;
    head=(NODE *)malloc(sizeof(NODE));//申请结点
    head->next=NULL;//初始化
    q=head;
    fp=fopen("d:\\\\employee.txt","ab+");//以只写的方式,打开二进制文件
    if(fp==NULL)
    {
        printf("打不开文件!");
    }
     while(!feof(fp))
    {
           p=(NODE*)malloc(sizeof(NODE));
        if(fread(p,sizeof(NODE),1,fp)==1)/*从指定磁盘文件读取记录*/
        {
            p->next=NULL;
            q->next=p ;/*构造链表*/
            q=p ;

        }
        
    }
 fprintf(fp,"%d",mount);
    fclose(fp);//关闭文件
    
     while(1){
    int num=0;
meu();

printf("请输入选择:");

scanf("%d",&num);
if(num==0) 
      {
          printf("\\n该文件信息已经变化!请问是否保存它?(y/n)  ");
            getchar();
            scanf("%c",&ch1);
            if(ch1==y||ch1==Y)
            {
                Save(head);
            }
            printf("\\n欢迎再次复利计算系统!\\n");
            break;
        }

switch(num){
    case 0:
        num=0;system("cls");/*清屏*/
        break;

case 1:

    fuli(); 

    break;

case 2:

   danli();

    break;

case 3:

    principaljisuan();

break;
 case 4:

     time();
            
 break;

 case 5:

   lilv();

    break;
case 6:

   yearmount();

    break;

    case 7:

   huankuan();

    break;
case 8:

   touzi();

    break;
    case 9:

Save(head);

    break;
    
}
getch();
 }
 }

运行结果:

技术分享

 

七、附上结对工作时的照片:

技术分享

 

以上是关于复利计算--结对的主要内容,如果未能解决你的问题,请参考以下文章

结对项目:复利计算

复利计算--结对项目

复利计算--结对

复利计算-结对

复利计算- 结对1.0

复利计算--结对