鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 6

家庭财务管理系统,求大佬指条路

[复制链接]
发表于 2022-6-4 22:23:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
c++课程设计
家庭财务管理,要求实现以下功能  
1.贷款管理
2.投资管理
3.为了获得预期的价值所需德投资计划
4.为了获得预期德养老金所需德投资计划
目前掌握的知识仅有数组 ,结构体,类和对象等 不会链表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-4 23:03:48 | 显示全部楼层
至少把计算公式贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-5 06:34:34 | 显示全部楼层
感觉上就是个数学问题,你至少把计算公式告诉大家啊...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 16:43:55 | 显示全部楼层
jhq999 发表于 2022-6-4 23:03
至少把计算公式贴出来

需要什么计算公式捏,老师也是啥也没给,是需要养老金,贷款和投资的计算公式吗?
养老金= (P + P × i ) ÷ 2 × n × 1%= P × (1 + i)÷ 2 × n × 1%
P:退休上年度当地在岗职工月平均工资
i:本人历年缴费指数的平均值(缴费指数=本人缴费工资基数÷社会平均工资)
n:本人累计缴费年限(含视同缴费)
贷款公式:贷款利息=本金 X 时间 x 利率
投资回报率:年利润或年均利润/ 投资总额 ×100%
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 16:44:41 | 显示全部楼层
弋小草 发表于 2022-6-5 06:34
感觉上就是个数学问题,你至少把计算公式告诉大家啊...

养老金= (P + P × i ) ÷ 2 × n × 1%= P × (1 + i)÷ 2 × n × 1%
P:退休上年度当地在岗职工月平均工资
i:本人历年缴费指数的平均值(缴费指数=本人缴费工资基数÷社会平均工资)
n:本人累计缴费年限(含视同缴费)
贷款公式:贷款利息=本金 X 时间 x 利率
投资回报率:年利润或年均利润/ 投资总额 ×100%
是需要这些公式吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 17:42:19 | 显示全部楼层
这是书上的参考
4.8综合实例--个人银行账户管理程序
我们以一个面向个人的银行账户管理程序为例,说明类及成员函数的设计。
4.8.1 类的设计
一个人可以有多个活期储蓄账户,一个活期储蓄账户包括账号(id)余额(balance)、年利率(rate)等信息,还包括显示账户信息(show)、存款(deposit)、取款(withdraw)、结算和(settle)等操作,为此,设计一个类SavingsAccount,将id balancerate均作为其成员数将deposit、withdraw、settle均作为其成员函数。类图设计如图4-13所示。

SavingsAccount
-id:int
-balance: double -rate: double -lastDate:int
-accumulation:double
-record(date:int,amount:double) -accumulate(date:int):double
+SavingsAccount(date:int,id:int,rate:double)+getId(): int
+getBalance(): double+getRate(): double+show()
+deposit(date:int,amount:double)+withdraw(date:int,amount:double)+settle(date:int)
图4-13个人银行账户管理程序的SavingsAccount类的UML图
无论是存款、取款还是结算利息,都需要修改当前的余额并且将余额的变动输出,这些公共操作由私有成员函数record来执行。
我:
第4章类与对象        ·139·       
实现该类的难点在于利息的计算。由于账户的余额是不断变化的,因此不能通过余额与年利率相乘的办法来计算年利,而需将一中每天的余额累积起来再除以一年的总天数,得到一个日均余额,再乘以年利率。为了计算余额的按日累积值,SavingsAccou引入了私有数据成员lastDateaccumulation 和私有成员函数accumulate。lastDate 用来储上一次余额变动的日期,accumulation 用来存储上次计算利息以后直到最近一次余额变动时余额按日累加的值,accumulate成员函数用来计算截至指定日期的账户余额按日累积值。这样,当余额变动时,需要做的是将变动前的余额与该余额所持续的天数相乘,累加 accumulation 中,再修改lastDate
为简便起见,该类中的所有日期均用一个整数来表示,该整数是一个以日为单位的相对日期。例如,如果以开户日为1,那么开户日后的第3天就用4来表示,这样通过将两个日期相减就可得到两个日期相差天数,在计算利息时非常方便。
4.8.2源程序及说明
例4-10个人银行账户管理程序。
//4 10.cpp
#include<iostream>#include <cmath>
using namespace std;
class SavingsAccount{        //储蓄账户类       
private:
int id;        //账号       
double balancer        /余额       
double rate;        //存款的年利率       
int lastDates        //上次变更余额的时期       
double accumulation;        //余额按日累加之和       
//记录一笔账,date为日期,amount为金额,desc为说明 void record(int date,doubleamount)i//获得到指定日期为止的存款金额按日累积值 double accumulate(int date)const{
return accumulation+balance*(date-lastDate);}
public:
//构造函数
SavingsAccountlint date, intiddoublerate); int getid() (return id;)
double getBalance() (return balance;l double getRate()(return rate;!
void deposit(int date, double amount);        //存人现金       
void withdraw(int date, double amount)        //取出现金       
//结算利息,每年1月1日调用一次该函数 void settle(int date);//显示账户信息
我:
C++语言程序设计(第5版,
·140·
void show();};
//SavingsAccount
SavingsAccount::SavingsAccount(int date, int id, double rate)
:id(id),balance(0),ratelrate),lastDate(date),accumulation(0) cout<<date<<"\t#"<<id<<" is created"<<endl;
void SavingsAccount::record(int date, double amount){
accumulation=accumulate(date);
lastDate=date        //保留小数点后两位       
amount=floor(amount*100+0.5)/100; balance+=amount;
cout<<date<<"\tf"<<id<<"\t"<<amount<<"\t"<<balance<<endl;
void SavingsAccount:deposit(int date, double amount){
record(date,amount);
}
void SavingsAccount:withdraw(int datedoubleamount){
if(amount> getBalance())
cout<<"Error: not enough money"<<end; else
record(date,-amount);

void SavingsAccountsettle(intdate){
doubleinterest=accumulate(date)*rate/365;        //计算息       
if(interest!-0)
record(date,interest); accumulation=0:

void SavingsAccount;show(){
cout<<"#"<<id<<"\tBalance: "<<balances}
int main() {
//建立几个账户
SavingsAccount sa0(1213253020.015) SavingsAccount sal(1,58320212,0.015);//几笔账目
sa0deposit(5,5000); saldeposit(25,10000); sa0deposit(45,5500); sa1withdraw(60,4000);
1/开户后第90天到了银行的计息日,结算所有账户的年息 sa0.settle(90); sal.settle(90);//输出各个账户信息
我:
·141·
第4章类与对象
sa0.show();        cout<<endl;       
salshow();        cout<<endl;       
return 0;}
运行结果:

#21325302 is created
1        #58320212 is created       
5        #21325302        5000        5000       
25        #58320212        10000        10000       
45        #21325302        5500        10500       
60        #58320212        -4000        6000       
90        #21325302        27.64        10527.6       
90        #58320212        21.78        6021.78       
#21325302        Balance:10527.6       
#58320212        Balance:6021.78       
在上面程序中,首先给出了SavingsAccount类的定义,只有几个简短的函数实现写在了类定义中,大部分函数的实现代码写在了类定义后。在主程序中,定义了两个账户实例 saO和sal,它们的年利率都是15%,随后分别在第5天、45天向账户sa0存人5000元和5500元,在第25天向账户sal存入10000元,在第60天从账户sa1取出4000元,账户开户后的第90天是银行的计息日,两个账户分别得到了27.64元和21.78元的利息。以账户 sa0为例,它在第5天到第45天的余额为5000元,第45天到第90天的余额为10500元,因此它的利息是(40x5000+45x10500)/365x15%=27.64元。
细节 以上程序的SavingsAccount::record函数中使用了floor函数,该函数是向下取整函数(在数学上称为高斯函数),用来得到不大于一个数的最大整数,声明在头文件 cmath中。一般来说,如果需要对一个数x做四舍五入取整,可以通过表达式floor(x+0.5)进行。而record 函数中的表达式将原数事先乘以了 100,取整完毕后再除以100,因此原数的小数点后两位得以保留。另外,cmath 中还提供了 floor 的姊妹函数--ceil,该函数为向上取整函数,用来得到不小于一个数的最小整数。
在开户(构造账户)、存款、取款、计息的过程中,每一笔记录都被输出出来了。最后分别输出两个账户的信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-5 22:26:43 | 显示全部楼层
WorR 发表于 2022-6-5 17:42
这是书上的参考
4.8综合实例--个人银行账户管理程序
我们以一个面向个人的银行账户管理程序为例,说明类及 ...

这代码写的好乱啊,不想看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表