复利计算--结对

复利计算之结对

结对同伴的学号: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();
 }
 }

运行结果:

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

时间: 2024-10-03 13:27:06

复利计算--结对的相关文章

复利计算- 结对1.0

复利计算--结对 一.项目需求: 既要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资. 通过上述计算与对比,可以帮助客户进行投资决策. 客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢? 二.需求分析: 让客户输入本金.利率.期限等 然后选择选择投资的类型 最后是输出每一笔资金的终值 三.估计实现所需时间: 估计时间:5 hours 实际时间:6 hours 四.链接与感悟 (1)结对同伴的学号姓名以及同伴的博客地址. 20

复利计算——结对编程2.0

复利计算再升级---------------------------------------------------------------------------------------------------------------------- 客户在大家的引导下,有了更多的想法: 这个数据我经常会填.....帮我预先填上呗? 把界面做得简单漂亮好操作一点呗? 能不能帮我转成个APP,我装到手机上就更方便了? 我觉得这个很有用,很多人可能都需要这些功能,做到我的微信公众号上吧? 能不能不要

复利计算--结对项目

结对项目:复利计算 搭档:30蔡京航  http://www.cnblogs.com/cjh123/ github:https://github.com/alfredzhu/teamwork 工作照 一.项目需求: 即要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资. 通过上述计算与对比,可以帮助客户进行投资决策. 客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢? 二.完成要求:以结对方式完成. 在这次结对编程中分配任务 

0414复利计算--结对

这次主要是把之前的代码整理一下做成一个人性化的界面,简单实现用户输入以及输出记录. 当用户输入完数据点击确定的时候数据会清零,同时在旁边显示记录条.但还没能够以数组 或者文件数据库那样记录之前输入过的数据,所以输出的只是当前的记录. 搭档:麦锦俊 149 http://www.cnblogs.com/maijinjun private void jButton0MouseMouseClicked(MouseEvent event) { String p =this.jTextField0.get

复利计算—结对

一.项目需求: 既要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资. 通过上述计算与对比,可以帮助客户进行投资决策. 客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢? 二.需求分析 首先让客户选择所要投入的资金数量(需投入几笔资金) 然后选择每笔资金的投资类型(单利/复利) 输出每一笔资金的终值 三.估计实现所需时间 估计时间:4h 完成过程: (1)4月5日下午:1h左右 (2)4月5日下午:2h左右 (3)4月6日早上

复利计算——结对编程

1.任务 即要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资. 通过上述计算与对比,可以帮助客户进行投资决策. 客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢? 1 resultList.setVisibleRowCount(5); //默认在JList中的显示条数为5条 2 c.add(new JScrollPane(resultList)); 3 resultList.setForeground(Color.BLACK

复利计算--结对2.0

一.项目需求: 客户在大家的引导下,有了更多的想法: 这个数据我经常会填.....帮我预先填上呗?...... 把界面做得简单漂亮好操作一点呗? 能不能帮我转成个APP,我装到手机上就更方便了? 我觉得这个很有用,很多人可能都需要这些功能,做到我的微信公众号上吧? 能不能不要让我填表单,让我发条消息,或者对着手机说句话就可以了? 二.需求分析 1.这个数据我经常会填.....帮我预先填上呗? 做下拉菜单,将客户可能会经常填写的东西在下拉菜单中提前写好,可供用户直接选择,避免总是要输入的繁琐. 2

复利计算--结对(链接数据库)

结对同伴博客园地址: :郭志豪 http://home.cnblogs.com/u/gzh13692021053/ 项目完成估计与实际完成对比表如下所示: 估计查找资料时间(h) 3 时间查找资料时间(h) 4 估计团队讨论时间(h) 2 时间团队讨论时间(h) 2 估计编程时间(h) 5 实际编程时间(h) 7 估计完成时间(h) 9 实际完成时间(h) 12 查阅相关资料链接:http://www.2cto.com/kf/201405/298386.html github地址:https:/

软件工程---复利计算-结对

同伴姓名:卢琪同伴学号:201402064105博客地址:http://www.cnblogs.com/xiseven/源代码:github 总结:当程序的工作量比较大的时候,就需要结伴而行,这次在结伴合作中,我主要做的是提供了主要的代码,这次合作最花时间的是给伙伴解释我所写的代码的用途,由于之前没有写注释,导致这这个方面花了很多时间.所以,写代码一定要规范和多写注释,这样,当人家和你合作时才会容易使用你的代码.