C++课程设计报告 个人财务管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++语言程序设计课程设计报告
题目:个人财政管理
年级:2014级
专业:信息与计算科学
学号:
姓名:
指导教师:
目录
一、需求分析 (2)
二、概要设计 (2)
三、详细设计 (3)
3.1系统主界面设计 (4)
3.2 收支模块设计 (5)
3.3 统计管理模块设计 (5)
四、调试分析 (6)
4.1运行结果 (7)
4.2调试结果 (8)
4.3程序不足之处 (8)
4.4改进之处 (8)
五、小结 (8)
附录 (9)
【摘要】
个人理财管理系统是一款管理个人财物的应用软件。
该软件代替了手工记账的麻烦,可以方便的实现个人收支状况的浏览、添加、删除、修改、查询等功能,适合个人管理自己的日常收入收支情况。
该系统运用了C++语言程序设计知识中的面向对象的思想,在VC++6.0集成开发环境下完成程序的编写。
【关键词】
个人理财;管理信息系统;面向对象;VC++6.0
1.需求分析:
1)程序中的收支情况按时间顺序存放,将其放入一个文件中,每次运行程序时首先打开这个文件,程序运行完毕时将更新的记录放回文件中。
2)可以按时间的范围检查账目,记在主菜单中增加检索的功能选项,输入时间范围即可打印出详细报表。
3)可以修改、删除某笔收入或支出。
4)当输入时间发生错误(如月份超过12等),要求重新输入正确的时间;当结余的数目为负数时,打印出信息,警告已经超支。
5)显示时,要求每笔收入和支出都要重新统计当前情况下的盈余数目。
2.概要设计:
系统的功能模块划分:
整个系统分为收支管理,报表统计管理,系统管理等模块,收支管理模块分为添加收支,修改收支,删除收支,统计管理模块分为收支管理,收支明细,系统管理分为,帮助,退出系统。
3.详细设计:
3.1系统主界面设计
主界面左侧有7个选项,分别为收入模式,支出模式,查看账目,制定目标,记录置零,退出系统,帮助,下侧为“请输入你的选择:”。
相应代码:
Manager main() //主函数
{
Manager mm; //创建对象
char select;
cprintf("======个人财政支出管理====== ");//显示标题
# ifdef MIN
cout<<"\n\n\n##########################调试模式#########################"<<endl;
#endif
cout<<"\n\n\t<1> 收入模式"<<endl; //选择<1>进入收入模式
cout<<"\n\t<2> 支出模式"<<endl; //选择<2>进入支出模式
cout<<"\n\t<3> 查看帐目"<<endl; //选择<3>进入查看帐目模式
cout<<"\n\t<4> 制定目标"<<endl; //选择<4>进入制定目标模式
cout<<"\n\t<5> 记录置零"<<endl; //选择<5>记录置零
cout<<"\n\t<6> 退出系统"<<endl; //选择<6>退出
cout<<"\n\t<0> 帮助"<<endl;
cout<<"\n\n\t请输入你的选择: ";
cin>>select;
if(select == '1'){mm.Deposit();}else{
if(select == '2'){mm.Withdraw();}else{
if(select == '3'){mm.ViewTotal();}else{
if(select == '4'){mm.SetGoal();}else{
if(select == '5'){mm.SetZero();}else{
if(select == '0'){
cout<<"\n\n\n\n程序功能简介:个人财政支出管理程序,完成收入,支出,盈余的记录和管理。
主页面下选择数字键进入!"<<'\n'<<'\n';
cout<<endl<<endl<<endl;
getch();
main(); //回主函数
}else{
if(select == '6')
{exit(1);} //退出
else main(); //回主函数
}}}}}}
}
3.2 收支模块设计
1-输入收入记录
动态产生一个新的数据,调用存款函数输入记录,将指向其的指针添加到链表,进行排序。
2-输入支出记录
动态产生一个新的数据,调用取款函数输入记录,将指向其的指针添加到链表,进行排序。
3-输出收入记录
调用链表中Showlistdeposit()函数,这个函数指向数据类中的输出收入记录,定义一个指针,输出指针指向的数据,然后指针指向下一个指针直到链表尾部。
4-输出支出记录
调用链表中Showlistwithdraw()函数,其中这个函数指向数据类中的输出支出记录,定义一个指针,输出指针指向的数据,然后指针指向下一个指针直到链表尾部。
3.3 统计管理模块设计
1-查询收支记录
调用链表中Showlistgetbanlance()函数,其中这个函数指向数据类中的数据,然后指针指向下一个指针直到链表尾部。
2-按日期查找记录
在数据类中有一函数可以比较日期,大的返回+1,小的返回+1,相等的返回0。
在查找记录时先比较日期与链表中的日期是否有相等的,若
有则定义一个指针指向该结点,调用函数输出该结点的所有记录,指针指向下一个指针,继续查找。
3-按日期删除记录
在数据类中有一函数可以比较日期,大的返回+1,小的返回+1,相等的返回0。
在删除记录时先比较日期与链表中的日期是否有相等的,若有则定义一个指针指向该结点,调用函数删除该结点的所有记录,指针指向下一个指针,继续查找。
4.调试分析:
4.1运行结果:
4.2调试结果
程序上有小处编码错误,经过检查已经调试过来,调试成功。
4.3程序不足之处
没有程序监控功能,当输入时间发生错误时,无法准确判断时间,当结余的数目为负数时,也无法及时提醒已经超支。
4.4改进之处
增加函数循环,置零功能,并在各函数中增加条件编译,达到测试程序目地。
5.小结:
转眼间一个学期就过去了,课程设计也接近尾声,在这几天的设计课程中,还是学到不少知识,课程一开始,拿到课题之后有点迷茫,不知从何下手,感觉以自己所学的不够用来完成这次课程设计,查找过一些资料之后发现没有想象中那么复杂,做到管理模块设计的时候不太顺利,一开始也没理解模块设计的含义,经过老师指点后才知道怎么去做,总的来说,经过这几天的努力,课程设计也算是完成了,虽然现在的学习已经逐渐深入,但是以前学的知识还是要注意复习,多加练习,才能在遇到问题的时候不会手足无措。
附录
# define MIN //调试模式时保留
# define DE1 //调试模式时保留
# define DE2 //调试模式时保留
# define WI1 //调试模式时保留
# define WI2 //调试模式时保留
# define SG //调试模式时保留
# define VT //调试模式时保留
# define SZ //调试模式时保留
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
class date
{
private:
int year,month,day;
public:
void setdate(int y=0,int m=0,int d=0);
void showdate();
};
void date::setdate(int y,int m,int d)
{
cin>>y>>m>>d;
year=y;
month=m;
day=d;
}
void date::showdate()
{ cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl; }
class Manager //定义类Manager
{
private:
date time;
double dAmt; //收入数目
char ans; //存放键盘字符的ASCII码double num; //存入输入的数据
double wAmt; //支出数目
double setAmt; //制定目标
double gAmt; //取目标金额
double balance; //收支金额
double newbalance; //与目标所差金额
public: //声名我所有的函数
void Deposit(); //收入函数
void Withdraw(); //支出函数
void ViewTotal(); //查看帐目
void SetGoal(); //制定目标
void SetZero(); //记录置零
};
Manager main() //主函数
{
Manager mm; //创建对象
char select;
cprintf("======欢迎进入个人财政管理系统====== ");//显示标题
cout<<"\n\n\t<1> 收入模式"<<endl; //选择<1>进入收入模式
cout<<"\n\t<2> 支出模式"<<endl; //选择<2>进入支出模式
cout<<"\n\t<3> 查看帐目"<<endl; //选择<3>进入查看帐目模式
cout<<"\n\t<4> 制定目标"<<endl; //选择<4>进入制定目标模式
cout<<"\n\t<5> 记录置零"<<endl; //选择<5>记录置零
cout<<"\n\t<6> 退出系统"<<endl; //选择<6>退出
cout<<"\n\t<0> 帮助"<<endl;
cout<<"\n\n\t请输入你的选择: ";
cin>>select;
if(select == '1'){mm.Deposit();}else{
if(select == '2'){mm.Withdraw();}else{
if(select == '3'){mm.ViewTotal();}else{
if(select == '4'){mm.SetGoal();}else{
if(select == '5'){mm.SetZero();}else{
if(select == '0'){
cout<<"\n\n\n\n程序功能简介:个人财政支出管理程序,完成收入,支出,盈余的记录和管理。
主页面下选择数字键进入!"<<'\n'<<'\n';
cout<<"";
cout<<endl<<endl<<endl;
getch();
main(); //回主函数
}else{
if(select == '6')
{cout<<"\n\n\t欢迎再次使用个人财政管理系统\n\n\t";} //退出
else main(); //回主函数
}}}}}}
}
void Manager::Deposit(){//在程序中记录收入数目的函数
mm1:dAmt = 0;
num = 0;
double a=0,c=0;
ifstream get("Money.txt"); //打开存贮数据文件
# ifdef DE1
cout<<"\n#########################打开文件money.txt读取数据#########################"<<endl;
#endif
get>>a>>num>>c; //取得存档文件中的三个数据
get.close();
cout<<endl<<endl;
cprintf("**************************收入************************** ");
cout<<"\n\n\t请输入时间: ";
time.setdate();
cout<<"\n\n\t请输入收入金额: $";
cin>>dAmt;
//检查输入的数据是否为错误的数据或是零,然后继续
if(dAmt <= 0){ //如果数据小于等于零
cout<<"\n\n\n\n\n"<<endl;
cprintf(" 错误的数据..");
getch();
main();
}else{
cout<<"\n\n\t数据输入<"<<dAmt<<">."<<endl;
cout<<"\n\t 确认你输入的数据<y/n>: ";
cin>>ans;
if(ans == 'y'){
dAmt = dAmt + num; //把新数据加到原有数据上
ofstream save("Money.txt");
# ifdef DE2
cout<<"\n#########################打开文件money.txt,保存数据#########################"<<endl;
#endif
save<<a<<'\n'<<dAmt<<'\n'<<c;
save.close();
cout<<"\n\n\n\n\n"<<endl;
cprintf(" 你的收入数据成功输入...");
cout<<"\n\t 继续输入收入金额<y/n>: ";
cin>>ans;
if(ans == 'y')goto mm1; //继续输入数据
else
{cout<<endl<<endl<<endl;
main();} //回主函数
getch();
cout<<endl<<endl<<endl;
main(); //回主函数
}
else{ //中止输入数据
main(); //回主函数
}
main(); //回主函数
}
}
void Manager::Withdraw(){ //在程序中记录支出数目的函数
mm2:wAmt = 0;
num = 0;
double a=0,b=0;
ifstream get("Money.txt"); //打开存贮数据文件
# ifdef WI1
cout<<"\n#########################打开文件money.txt,读取数据#########################"<<endl;
#endif
get>>a>>b>>num; //取得存档文件中的三个数据
get.close();
cout<<endl<<endl;
cprintf("**************************支出************************** ");
cout<<"\n\n\t请输入时间: ";
time.setdate();
cout<<"\n\n\t请输入支出金额: $";
cin>>wAmt;
if(wAmt <= 0){ //检查输入的数据是否为错误的数据或是零,然后继续
cout<<"\n\n\n\n\n"<<endl;
cprintf(" 错误的数据..");
getch();
main();
}else{
cout<<"\n\n\t数据输入<"<<wAmt<<">."<<endl;
cout<<"\n\t 确认你输入的数据<y/n>: ";
cin>>ans;
if(ans == 'y'){
wAmt = wAmt + num; //把新数据加到原有数据上
ofstream save("Money.txt");
# ifdef WI2
cout<<"\n#########################打开文件money.txt,保存数据#########################"<<endl;
#endif
save<<a<<'\n'<<b<<'\n'<<wAmt;
save.close();
cout<<"\n\n\n\n\n"<<endl;
cprintf(" 你的支出数据成功输入...");
cout<<"\n\t 继续输入支出金额<y/n>: ";
cin>>ans;
if(ans == 'y')goto mm2; //继续输入数据
else
{cout<<endl<<endl<<endl;
main();} //回主函数
getch();
cout<<endl<<endl<<endl;
main();
}
else{ //中止输入数据
main(); //回主函数
}
main(); //回主函数
}
}
void Manager::SetGoal(){ //在程序中制定目标金额的函数
setAmt = 0;
double b=0,c=0,temp=0;
cout<<endl<<endl;
cprintf("**************************制定目标************************** ");
cout<<"\n\n\t请输入时间: ";
time.setdate();
cout<<"\n\n\t制定目标金额: ";
cin>>setAmt; //保存新数据到文件中
ifstream get("Money.txt"); //打开存贮数据文件
get>>temp>>b>>c; //取得存档文件中的三个数据
get.close();
# ifdef SG
cout<<"\n#########################打开文件money.txt,保存数据#########################"<<endl;
#endif
ofstream save("Money.txt");
save<<setAmt<<'\n'<<b<<'\n'<<c;
save.close();
cout<<"\n\n\n\n\n"<<endl;
cprintf(" 你的目标金额已建立...");
getch();
cout<<endl<<endl<<endl;
main();
}
void Manager::ViewTotal(){ //查看帐目函数
dAmt = 0; //收入数目
wAmt = 0; //支出数目
gAmt = 0; //取目标金额
balance = 0; //收支金额
newbalance = 0;//与目标所差金额
# ifdef VT
cout<<"\n#########################打开文件money.txt,读取数据#########################"<<endl;
#endif
ifstream get("Money.txt"); //打开存贮数据文件
get>>gAmt>>dAmt>>wAmt; //取得存档文件中的三个数据
get.close();
balance = dAmt - wAmt; //收入减去支出取得收支平衡数据
cout<<endl<<endl;
cprintf("**************************查看帐目************************** ");
cout<<"\n\n"<<endl;
cprintf(" 收支总数");
cout<<""<<endl;
cprintf(" =============");
cout<<"\n\n"<<endl;
cprintf(" 收入总金额支出总金额收支总金额");
cout<<"\n"<<endl;
cout<<setw(15)<<dAmt<<setw(25)<<wAmt<<setw(20)<<balance<<endl;//使每两个数据按一定的间隔输出
newbalance = gAmt - balance;
cout<<"\n\n\n"<<endl;
cprintf(" 收支平衡");
cout<<""<<endl;
cprintf(" =============");
cout<<"\n\n"<<endl;
cprintf(" 目标金额收支平衡金额相差金额");
cout<<"\n"<<endl;
cout<<setw(15)<<gAmt<<setw(25)<<balance<<setw(23)<<newbalance<<endl;
getch();
cout<<endl<<endl<<endl;
main(); //回到主函数
}
void Manager::SetZero(){ //记录置零函数
cout<<"\n\n\n\n 你确定要将记录置零<y/n>: ";
cin>>ans; //确认是否要将记录置零
if(ans == 'y'){
dAmt = 0; //先初始数据为零
wAmt = 0;
setAmt = 0;
# ifdef SZ
cout<<"\n#########################打开文件money.txt,保存数据#########################"<<endl;
#endif
ofstream save("Money.txt"); //打开存放数据的文件并将收入数据置零
save<<setAmt<<'\n'<<dAmt<<'\n'<<wAmt;
save.close();
cout<<endl<<endl<<endl;
main();} //回主函数
else
{cout<<endl<<endl<<endl;
main();} //回主函数
}。