个人财政收入支出_第1页
个人财政收入支出_第2页
个人财政收入支出_第3页
个人财政收入支出_第4页
个人财政收入支出_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 宜春学院数学与计算机科学学院 课程设计说明书 课 程 名 称: 数据结构 课 程 代 码: 题 目: 个人财政收入支出管理 年级/专业/班: 12软件工程 学 生 姓 名: 学 号: 指 导 教 师: 开 题 时 间: 年 月 日完 成 时 间: 年 月 日第 - 1 - 页 共 33 页目 录摘 要1一、引 言4 1.1 课题背景.4 1.2 课题意义.4二、设计目的与任务2 2.1 设计目的.5 2.2 设计任务.5三、设计方案2 3.1 问题的描述.6 3.2 需求分析.6 3.3 总体结构.6 3.4 界面模块.。.6四、结 论12五、致 谢13六、参考文献13 附代码 摘 要本次课

2、程设计在 Windows 平台上,以VC+为开发工具,分析设计了 “个人财务管理系统”。 如今计算机已走进千家万户,传统的在纸上记录收入支出的方式已经过时,人们需要一种可以在计算机记录自己收入支出信息的软件,可是市场上的财务管理软件大多数十面向企业,或是有专门用途,面向普通用户的个人财务管理系统很难找到,在者免费的软件更是少之又少,为了满足普通用户的需求,特开发此软件。 本系统功能简单,只适合对个人财务管理要求不高的用户,可以完成收入支出金钱及物品的记录与查询操纵,但这些对普通用户还说应该够了,本系统操作简单,用户无需记录复杂的命令,打开主机面

3、就可以很容易看出系统的功能,在者,本软件为免费产品,对于不愿花很多钱购买软件的用户来说是个很好的选择,本软件无需很高的硬件配置,一般的配置均可运行,占用系统资源少。关键词:个人资金、收入、支出、输出、收支平衡课程设计 -个人财政收入支出系统1、 引 言 1.1 课题背景 当今社会越来越着朝着信息化和数字化法发展,计算机的应用领域使我们的生活越来越方便和快捷,可以说我们的每个人生活都离不开计算机的帮助了。越来越多的个人应用软件成为了人们重要的助手,也在潜移默化的改变着我们的生活。     随着市场经济的发展,我国居民对理财有着越来越高的要求。理财

4、,是每个家庭和个人所必须面对的问题。现在,关于企业的会计制度逐渐完善,而且针对企业的财务软件系统也在飞速发展,但针对个人或家庭的财务系统目前还是一段空白。     实际生活中经常要对个人的各项财务收支进行管理,本课题的目的就是利用计算机对各项财务进行电子化的管理,使我们的理财更加方便和理性化,提升我们生活的质量和品位。 1.2 课题意义     我们经常看到企业的一些财务报表,这些报表主要是关注企业的资产负债表和损益表。简单的说,前者是反映这个企业有多少钱,是存量;后者,反映了企业在一

5、定时间能赚到多少钱,是流量。     其实,对一个人或者家庭的财务情况,也是关注这两个方面。关注家里存多少钱,关注今年赚了多少钱,花了多少,借出什么等等。     要做到这些需要对大量的数据做存储和计算,工作是相当的复杂繁琐和枯燥的,因而这些问题容易被人忽略。我们纵然可以为生活中的每一笔花销记账,但是对这样大量的数据做分类处理确实是一个会令大多数人头疼的问题,如果有一个个人理财的软件理财的软件对我们的日常财务进行那样的繁琐的数据处理和计算工作,相信可以让我们理财的效率大大提高。这样一个软件不但可

6、以方便我们的生活,更可以使我们对自己的财务状况有一个清楚的了解。  与此同时,这样的一个软件开发和制作也是对我们大学学到各种知识进行的一次综合运用的一个好机会,是对我大学学习的一个检验和实践。2、 设计目的与任务 2.1 设计目的 本次设计既是对书本知识的运用同时也是对实际问题的研究。利用数据结构课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C+语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、数、图、查找、排序等理论知识的理解;会使用数据结构的基本操作来解决一些生活中的实际问题,提高利用计算机分析解决综合性实际问题的基本能力

7、。 2.1 设计的任务 1)将收支的数据与相应的函数封装到类中,并写程序,使程序结构化。  2)增加保存每笔收入的记录,并对每笔记录增加日期录入,按日期的顺序保存、查看记录。 3)完成数据成员盈余的计算和输出,要求每笔输入和支出都要重新统计当前情况下的盈余数目。3、 设计方案 3.1 问题的描述设计个人财政收支情况系统,要求设计出收入、支出、查询、删除等。 3.2 需求分析 1) 可添加收入各方面信息,要求输入信息的完整性高 2) 可对收入各方面信息修改、删除 3) 可根据日期查找收入信息 4)可添加支出各方面信息,要求输入信息的完整性高5)可对支出各方

8、面信息修改、删除6)可查询收支平衡情况7)可根据日期查询支出信息 3.3 总体结构 3.4 界面模块 3.4.1 主界面模块输入收入金额输入日期选择1开始输入收入来源添加成功 3.4.2 选择输入收入记录模块选择2输入支出金额输入日期开始添加成功输入支出来源 3.4.5选择输入支出信息模块 3.4.6查看收入记录 3.4.7查看支出记录 3.4.8 查看收支平衡情况 3.4.9 根据日期修改记录4、 结 论 随着计算机软硬件的不断发展,导航系统在客户需求中的应用已成必然。  本系统在开发中也是严格按照物品库存管理的实际情况进行开发的,在开发中,查阅了很多相关的算法资料,巩固了数据结构

9、、C语言和C+方面的知识,同时也学习了新的算法知识。最重要的是在开发过程中,通过不断地学习,不断提高自己编程能力和实际应用能力,还有助于改善自己的逻辑思维能力,这对自己以后对软件的开发提供很大的帮助。另外通过此次课程的设计使我认识到对知识的掌握不全面,即在学习专业知识的同时还需要再加强其他方面知识的学习,因为软件的开发有时候涉及到其他方面的知识,只有了解了其他方面的知识才能收集资料,然后用于软件开发。 这门课程是对我们大学生的编程能力的一次巨大考验。在完成过程中大家都表现出了无穷的兴趣。在设计的过程中找到了学习的乐趣。刚开始设计这程序的时候,我们都是很难着手。不过在同学的帮助下慢慢的解决了一个

10、个问题。既帮助了自己,也让同学关系得到了进步。5、 致谢 特此感谢老师以及同学的帮助六、参考文献1数据结构.管致锦.清华大学出版社 2数据结构学习辅导与实验指导.王红梅.清华大学出版社3C+程序设计. 钱能. 清华大学出版社4C+程序设计试验指导. 钱能. 清华大学出版社附代码/*个人财政支出管理*/#include<iostream.h> /输入/输出流的头文件#include<string.h> /字符串处理函数的头文件#include<stdlib.h> /终止程序的执行的头文件#include<fstream.h> /对文件操作

11、的头文件bool IsDateRight(int,int,int); /函数原形说明,判断日期格式是否正确static double dlPurpose=0.0; /定义目标,为静态全局变量/定义财务数据类class CFinance int nYear,nMonth,nDay; /定义年、月、日double dlIncome,dlOutput; /定义收入、支出数目double dlBalance; /定义结余情况char szPurpose20; /定义用途、目的double dlGap; /据目标的差额public: /公有成员CFinance();CFinance(int,int,in

12、t); /根据日期生成结点,查找用 int Compare(CFinance &); /比较日期的大小,大于返回1,小于返回-1,等于返回0void Show(); /输出记录void SetFinance(int,int,int,double,double,char *); /对象赋值double ShowPur(); /返回目标void Calculate(double dlBal); /计算结点的盈余情况double GetBalance(); /返回结点的盈余情况,计算下一结点用void ModifyData(); /修改结点数据记录void SetVal(int &,

13、int &,int &,double &,double &,char *); /实现结点数据的输入/输出bool IsDateEqual(int,int,int); /判断日期是否存在void ShowWithoutBalance(); /输出除收支情况以外的记录; /为静态成员分配空间/将数据初值置为0.0CFinance:CFinance() dlIncome=0.0;dlOutput=0.0;dlBalance=0.0;/根据日期生成结点,查找用CFinance:CFinance(int year,int month,int day)nYear=year;

14、nMonth=month;nDay=day;dlIncome=dlOutput=0.0;dlBalance=0.0;/比较日期的大小(大于返回1,小于返回-1,等于返回0)int CFinance:Compare(CFinance &finance) if(nYear>finance.nYear)return 1;if(nYear<finance.nYear)return -1;if(nYear=finance.nYear)if(nMonth>finance.nMonth)return 1;if(nMonth<finance.nMonth)return -1;i

15、f(nMonth=finance.nMonth)if(nDay>finance.nDay)return 1;if(nDay<finance.nDay)return -1;if(nDay=finance.nDay)return 0;/输出记录void CFinance:Show()cout<<"日期:"<<nYear<<" "<<nMonth<<" "<<nDay<<" 收入:"<<dlIncome<&l

16、t;" 支出:"<<dlOutput<<" 用途:"<<szPurpose<<" 收支情况:"<<dlBalance<<" 目标:"<<dlPurpose<<endl;/为对象赋值void CFinance:SetFinance(int year,int month,int day,double income,double output,char *purpose)nYear=year;nMonth=month;nDay

17、=day;dlIncome=income;dlOutput=output;strcpy(szPurpose,purpose); /拷贝void CFinance:Calculate(double dlBal) /计算结点的盈余情况dlBalance=dlBal+dlIncome-dlOutput;double CFinance:GetBalance() /返回结点的盈余情况return dlBalance;/修改结点数据记录void CFinance:ModifyData() double temp;if(dlIncome>0) /若dlIncome>0,修改收入数据;否则修改支出

18、数据cout<<"输入修改后的收入:"cin>>temp;if(temp>0)cout<<"修改成功!"<<endl;dlIncome=temp;elsecout<<"修改失败!"<<endl;elsecout<<"输入修改后的支出:"cin>>temp;if(temp>0)cout<<"修改成功!"<<endl;dlOutput=temp;elsecout<

19、<"SORRY,修改失败!"<<endl;/实现结点数据的输入/输出void CFinance:SetVal(int &year,int &month,int &day,double &income,double &output,char *purpose)year=nYear;month=nMonth;day=nDay;income=dlIncome;output=dlOutput;strcpy(purpose,szPurpose); /拷贝/判断日期是否存在bool CFinance:IsDateEqual(in

20、t year,int month,int day) if(nYear=year&&nMonth=month&&nDay=day)return true;else return false;/输出除收支情况以外的记录void CFinance:ShowWithoutBalance()cout<<"日期:"<<nYear<<" "<<nMonth<<" "<<nDay<<" 收入:"<<dlI

21、ncome<<" 支出"<<dlOutput<<" 用途:"<<szPurpose<<" 目标:"<<dlPurpose<<endl;/定义结点类class CNode CFinance *pData; /指向数据类的指针CNode *pNext; /指向链表的下一个结点的指针public:CNode(); /结点构造函数CNode(CNode &node); /用于拷贝的构造函数void InputData(CFinance *pdata);

22、 /输入数据void ShowNode(); /输出结点数据CFinance *GetData(); /返回数据friend class CList; /定义链表类为友元类;/赋初值CNode:CNode()pData=0;pNext=0;/用于拷贝的构造函数CNode:CNode(CNode &node)pData=node.pData;pNext=node.pNext;/输入数据void CNode:InputData(CFinance *pdata)pData=pdata;pNext=0;/输出结点数据void CNode:ShowNode() pData->Show();

23、CFinance *CNode:GetData() /返回数据return pData;/定义链表类class CListprotected: /保护成员CNode *pHead; /链表头结点指针public:CList();CList(); void AddNode(CNode *pnode); /在首部添加结点void DeleteNode(CNode *); /删除一个指定的结点,返回该结点的指针CNode *LookUp(CFinance&); /查找一个指定的数据,返回该数据所在结点在链表中的指针,若未找到返回0void ShowList(); /打印整个链表void De

24、leteList(); /删除整个链表CNode *GetListHead(); /返回链表首结点CNode *GetListNextNode(CNode *); /返回链表指定结点的下一个结点void Insert(CNode *); /据日期插入结点CNode *GetLastNode(); /返回最后一个结点,看看最后的盈余有无赤字 void CalBalance(); /逐个结点计算盈余;/赋初值CList:CList() pHead=0;CList:CList() DeleteList();/在首部添加结点void CList:AddNode(CNode *pnode) if(pHe

25、ad=0)pHead=pnode;pHead->pNext=0;elseGetLastNode()->pNext=pnode;pnode->pNext=0; /删除指定结点void CList:DeleteNode(CNode *pnode) if(!pHead)cout<<"删除结点错误:链表不存在!"<<endl;exit(1); /终止程序的执行if(pnode=pHead&&pHead->pNext=0)delete pHead->pData;delete pHead;pHead=0;else i

26、f(pnode=pHead)CNode *p=pnode->pNext;delete pHead->pData;delete pHead;pHead=p;elseCNode *p=pHead;while(p&&p->pNext!=pnode)p=p->pNext;if(!p)cout<<"删除结点错误:结点不存在!"exit(1);elseCNode *q=pnode->pNext;delete pnode->pData;delete pnode;p->pNext=q;/查找指定数据,并返回该数据所在结点

27、指针CNode *CList:LookUp(CFinance& finance) if(pHead=0)return 0;CNode *pn=pHead;while(pn)if(pn->pData->Compare(finance)=0)return pn;pn=pn->pNext;return 0;/打印整个链表void CList:ShowList()if(!pHead)cout<<"链表为空"<<endl;return;CNode *p=pHead;while(p)p->ShowNode();p=p->pN

28、ext;/删除整个链表void CList:DeleteList()if(pHead=0)return;CNode *p,*q;p=pHead;while(p)delete p->pData;q=p;p=p->pNext;delete q;pHead=0;/返回链表首结点CNode *CList:GetListHead()return pHead;/返回链表指定结点的下一个结点CNode *CList:GetListNextNode(CNode *pnode)return pnode->pNext;/据日期插入结点,并按日期的升序排序void CList:Insert(CNo

29、de *pnode) CNode *p,*q;if(pHead=0)pHead=pnode;pHead->pNext=0;return;if(pHead->pData->Compare(*(pnode->pData)=1)pnode->pNext=pHead;pHead=pnode;return;p=pHead;while(p&&p->pData->Compare(*(pnode->pData)=-1)q=p;p=p->pNext;q->pNext=pnode;pnode->pNext=p;/返回最后一个结点CN

30、ode *CList:GetLastNode()if(!pHead)return 0;CNode *p=pHead;while(p->pNext)p=p->pNext;return p;/逐个结点计算盈余void CList:CalBalance() if(!pHead)return;double temp=0;CNode *p=pHead;while(p)p->pData->Calculate(temp);temp=p->pData->GetBalance();p=p->pNext;/定义处理记录类class CRecord CList list;

31、/把CList的对象list作为CRecord的成员public:void ReadFromFile(); /从文件中读取数据void SaveToFile(); /把数据保存在文件中void Deposit(); /输入收入数据void Withdraw(); /输入支出数据void ViewDepositRecord(); /查看收入记录void ViewWithdrawRecord(); /查看支出记录void ViewBalance(); /查看收支平衡情况 void LookUpRecord(); /根据日期查找记录 void EditRecord(); /根据日期修改记录void

32、DeleteRecord(); /根据日期删除记录void setgoal(double); /设定目标; /从文件中读取数据void CRecord:ReadFromFile() ifstream infile1("dlPurpose.txt"); /将infile1对象与dlPurpose.txt文件相联系,即以后程序对infile1对象的操作均是对该文件的操作if(!infile1) cout<<"文件读取失败!"<<endl;exit(1); /终止程序的执行infile1>>dlPurpose; /将文件dl

33、Purpose.txt中的数据输入到已定义好的变量dlPurpose中ifstream infile("finance.txt"); /将infile对象与finance.txt文件相联系,即以后程序对infile对象的操作均是对该文件的操作if(!infile)cout<<"文件读取失败!"<<endl;exit(1);int year,month,day;double income,output;char purpose20;while(infile>>year>>month>>day>

34、;>income>>output>>purpose)CFinance *pfinance=new CFinance;pfinance->SetFinance(year,month,day,income,output,purpose);CNode *pnode=new CNode;pnode->InputData(pfinance);list.AddNode(pnode); list.CalBalance();/把数据保存在文件中void CRecord:SaveToFile() ofstream outfile1("dlPurpose.txt

35、");if(!outfile1)cout<<"文件写入失败!"<<endl;exit(1); outfile1<<dlPurpose;ofstream outfile("finance.txt");if(!outfile)cout<<"文件写入失败!"<<endl;exit(1);int year,month,day;double income,output;char purpose20;CNode *p=list.GetListHead();while(p)p-&

36、gt;GetData()->SetVal(year,month,day,income,output,purpose); /实现结点数据的输入/输出outfile<<year<<" "<<month<<" "<<day<<" "<<income<<" "<<output<<" "<<purpose<<endl;p=list.GetListNextNo

37、de(p);/输入收入数据void CRecord:Deposit() int year,month,day;double income;char purpose20;cout<<"请输入日期:"cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:"cin>>year>>month>>day;cout<<"请输入收入金额:"cin&

38、gt;>income;cout<<"请输入收入来源:"cin>>purpose; CFinance *pfinance=new CFinance; pfinance->SetFinance(year,month,day,income,0,purpose); /对象赋值CNode *pnode=new CNode;pnode->InputData(pfinance);list.Insert(pnode);cout<<"添加成功!"<<endl;list.CalBalance();/输入支出数

39、据void CRecord:Withdraw() int year,month,day;double output;char purpose20;cout<<"请输入日期:"cin>>year>>month>>day; while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:"cin>>year>>month>>day;cout<<"请输入支出金额:"cin>>out

40、put;cout<<"请输入支出用途:"cin>>purpose; CFinance *pfinance=new CFinance;pfinance->SetFinance(year,month,day,0,output,purpose);CNode *pnode=new CNode;pnode->InputData(pfinance);list.Insert(pnode);cout<<"添加成功!"<<endl;list.CalBalance();/查看收入记录void CRecord:Vie

41、wDepositRecord() if(list.GetListHead()=0)return;CNode *p=list.GetListHead();int year,month,day;double income,output;char purpose20; while(p)p->GetData()->SetVal(year,month,day,income,output,purpose); /实现结点数据的输入/输出if(income>0)cout<<"日期:"<<year<<" "<&l

42、t;month<<" "<<day<<endl; cout<<"收入:"<<income<<endl; cout<<"用途:"<<purpose<<endl;p=list.GetListNextNode(p);/查看支出记录void CRecord:ViewWithdrawRecord() if(list.GetListHead()=0)return;CNode *p=list.GetListHead();int year,mo

43、nth,day;double income,output;char purpose20;while(p)p->GetData()->SetVal(year,month,day,income,output,purpose); /实现结点数据的输入/输出if(output>0)cout<<"日期:"<<year<<" "<<month<<" "<<day<<endl; cout<<"支出:"<<

44、income<<endl; cout<<"用途:"<<purpose<<endl;p=list.GetListNextNode(p);/查看收支平衡情况void CRecord:ViewBalance() list.ShowList();if(list.GetLastNode()->GetData()->GetBalance()<0)cout<<"警告,已经超支!"<<endl;/根据日期查找记录void CRecord:LookUpRecord()if(!list

45、.GetListHead()cout<<"当前没有记录!"<<endl;return;int year,month,day;short mark=0;cout<<"请输入日期:"cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:"cin>>year>>month>>day;CNode *p=list.GetListHe

46、ad();while(p)if(p->GetData()->IsDateEqual(year,month,day)p->GetData()->ShowWithoutBalance();mark=1;p=list.GetListNextNode(p);if(!mark)cout<<"无当天记录!"<<endl;/根据日期修改记录void CRecord:EditRecord()if(!list.GetListHead()cout<<"当前没有记录!"<<endl;return;int

47、year,month,day;short mark=0,edited=0;cout<<"请输入日期:"cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:"cin>>year>>month>>day;CNode *p=list.GetListHead();while(p)if(p->GetData()->IsDateEqual(year,month,d

48、ay)mark=1;char edit;dop->GetData()->ShowWithoutBalance(); cout<<"修改?(Y/N)"cin>>edit;if(edit='N'|edit='n')break;elsep->GetData()->ModifyData();edited=1;break;while(edit!='Y'&&edit!='y'&&edit!='N'&&edit!=

49、'n');p=list.GetListNextNode(p);if(!mark)cout<<"无当天记录!"<<endl;if(edited)list.CalBalance();/根据日期删除记录void CRecord:DeleteRecord() if(!list.GetListHead()cout<<"当前没有记录!"<<endl;return;int year,month,day;short mark=0,deleted=0;cout<<"请输入日期:"

50、;cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:"cin>>year>>month>>day;CNode *p=list.GetListHead();while(p) if(p->GetData()->IsDateEqual(year,month,day)mark=1;char del;dop->GetData()->ShowWithoutBalance();cout<<"删除?(Y/N)"cin>>del;if(del='N'|del='n')break;elsedeleted=1;cout<<"删除成功!"<<endl;break;while(del!='Y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论