c课程设计个人财政支出管理南京理工大学谢记超

上传人:e****s 文档编号:71747219 上传时间:2022-04-07 格式:DOC 页数:20 大小:67.50KB
收藏 版权申诉 举报 下载
c课程设计个人财政支出管理南京理工大学谢记超_第1页
第1页 / 共20页
c课程设计个人财政支出管理南京理工大学谢记超_第2页
第2页 / 共20页
c课程设计个人财政支出管理南京理工大学谢记超_第3页
第3页 / 共20页
资源描述:

《c课程设计个人财政支出管理南京理工大学谢记超》由会员分享,可在线阅读,更多相关《c课程设计个人财政支出管理南京理工大学谢记超(20页珍藏版)》请在装配图网上搜索。

1、南 京 理 工 大 学C+课程设计报告姓名:谢记超一、 课程设计题目:个人财政支出管理A级程序功能简介:将个人财物的目标及当前存款、支出保存下来,可随时更新查看,比 较盈余与目标的差距。设计要求:1将收支的数据与相应的函数封装到类中,并改写主程序,使程序结构化。2增加保存每笔收支的记录,并对每笔记录增加日期录入,按日期顺序保存查看记录。将所有记录放入一个文件中,每次运行程序时首先翻开这个文件,程序运行完毕时将更新的记录放回文件中。3完善程序,补充类中数据成员(dlbalance)的计算和输出,要求每笔收入和支出都要重新统计当前情况下的盈余数目。4增加程序监控功能,当输入时间发生错误如月份超过十

2、二,要求重新输入正确的时间;当结余数目为负数时,输出信息,警告已超支。二、 对题目的分析,以及功能的实现类:Clist(链表类)指针成员指向类cnode的对象类cnode各数据成员以及成员函数类CFinance的数据成员以及成员函数CNode 指针成员pData指向CFinance的对象类Clist的各数据成员以及成员函数关键的四个类1.class CFince数据类2.class CNode 结点类3.class CList 链表类4.class CRecord 处理类两个函数1. 判断日期是否正确的函数 2. main函数实现如下功能1. 程序的结构化,将各函数封装到类中。2. 数据的保存

3、与读取。3. 数据的处理,用相应函数实现4. 优化处理,界面美观,人性化提示,数据输入的监控三、 程序设计过程中遇到的问题与解决方法1. 开始做出的程序添加收入与支出记录是未进行日期检查,导致不实际的日期也被录入。对于日期的检查用了函数IsDateRight来实现,其中应用了if语句,switch语句帮助实现该功能。2. 数据的保存与读取开始实现不了,保存下来的数据格式不正确,打不开,再次运行时上次的数据也未能读取。最终在class CRecord 处理类中添加void ReadFromFile()和void SaveToFile()实现了这个功能,里面用到了输入输出流ifstream和ofs

4、tream,实现数据的保存与再次读取是很快乐的,最令人兴奋的是关闭程序后可以在文本文件中看到收支记录!3. 数据类 结点类 链表类 数据处理类的编写是很复杂的,环环相扣,数据类、节点类是根底,链表类将数据串起来,然后再用数据处理类中的函数处理链表中的数据!这四大类真是让人费力心思!当时实现这个生产链时,那是相当有成就感的!4. 如何区分开收入与支出记录输出,当时困扰了我很久,实在不希望不能实现收入记录与支出记录的分开显示,后来觉察可以通过判断函数的值来判断该笔记录是收入还是支出,最终实现了查看收入记录那么只显示收入记录,查看支出记录只显示支出记录。5. 累计计算余额,实现超支预警,void C

5、Record:ViewBalance() list.ShowList();if(list.GetLastNode()-GetData()-GetBalance()0)cout您的财政已超支!abC; ;获取时间,在Dos屏幕中输入 2021 8 5 100而入的的100会被下一次cind;获得即被当做收入获得如何在取得相应数据后清空为取得的数据?cin.ignore cin.sync cin.ignore 都不行。3.入与支出的用途在Dos屏幕中只能输入英文,不能输入汉语,如果这个程序用MFC编程来编写效果会更好!4.操作未实现,有时候运行次数过多就会在评上留下很多东西,DOS屏幕会显乱。五、

6、 程序演示截图#include#include#include#includebool 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,int); /为日期赋值的构造函数int Compa

7、re(CFinance &); /比拟日期大小的函数void Show(); /展示该笔收支情况,包括盈余状况void SetFinance(int,int,int,double,double,char *); /为所有成员变量赋初值的函数void Calculate(double dlBal); /累计计算总收入的函数double GetBalance(); void ModifyData(); /修改数据的函数void SetVal(int &,int &,int &,double &,double &,char *); /获得各成员值的函数bool IsDateEqual(int,int

8、,int); /判断日期是否存在void ShowWithoutBalance(); /展示该笔收支情况,不包括盈余情况;CFinance:CFinance() /缺省构造函数dlIncome=0.0;dlOutput=0.0;dlBalance=0.0;CFinance:CFinance(int year,int month,int day) /为日期赋值的构造函数nYear=year;nMonth=month;nDay=day;dlIncome=dlOutput=0.0;dlOutput=0.0;dlBalance=0.0;int CFinance:Compare(CFinance &fi

9、nance) /比拟日期的大小大于取1,小于取-1,相等取0if(nYearfinance.nYear)return 1;if(nYearfinance.nMonth)return 1;if(nMonthfinance.nDay)return 1;if(nDayfinance.nDay)return -1;if(nDay=finance.nDay)return 0;void CFinance:Show() /展示该笔收支情况,包括盈余状况cout日期:nYear nMonth nDay 收入:dlIncome 支出:dlOutput 用途:szPurpose 余额:dlBalance 目标:d

10、lPurpose0) /假设dlIncome0,修改收入数据;否那么修改支出数据couttemp;if(temp0)cout修改成功!endl;dlIncome=temp;elsecout输入有误,修改失败!endl;elsecouttemp;if(temp0)cout修改成功!endl;dlOutput=temp;elsecout输入有误,修改失败!endl;void CFinance:SetVal(int &year,int &month,int &day,double &income,double &output,char *purpose) /获得各成员值的函数year=nYear;m

11、onth=nMonth;day=nDay;income=dlIncome;output=dlOutput;strcpy(purpose,szPurpose);bool CFinance:IsDateEqual(int year,int month,int day) /判断日期是否存在if(nYear=year&nMonth=month&nDay=day)return true;else return false;void CFinance:ShowWithoutBalance() /展示该笔收支情况,不包括盈余情况cout日期:nYear nMonth nDay 收入:dlIncome 支出d

12、lOutput 用途:szPurpose 目标:dlPurposeShow();CFinance *CNode:GetData() /获得该节点所指向的数据的地址return pData;class CList /链表类protected:CNode *pHead; /定义一个CNode的头指针public:CList(); /构造函数CList(); /析构函数void AddNode(CNode *pnode); /增加结点void DeleteNode(CNode *); /删除制定结点CNode *LookUp(CFinance&); /根据日期查找指定数据,并返回该数据所在结点指针v

13、oid ShowList(); /输出链表中的数据void DeleteList(); /删除链表中的数据CNode *GetListHead(); /获得链表头指针CNode *GetListNextNode(CNode *); /返回指定结点的下一结点指针void Insert(CNode *); /据日期升序插入结点CNode *GetLastNode(); /返回尾部的头指针 void CalBalance(); /逐个结点计算盈余;CList:CList() /构造函数pHead=0;CList:CList() /析构函数DeleteList();void CList:AddNode

14、(CNode *pnode) /增加结点if(pHead=0) /头指针为空pHead=pnode;pHead-pNext=0;elseGetLastNode()-pNext=pnode;pnode-pNext=0;void CList:DeleteNode(CNode *pnode) /删除制定结点if(!pHead) /头指针为空,即还未建立链表cout删除结点错误:链表不存在!pNext=0) /只有一个节点时删除节点delete pHead-pData;delete pHead;pHead=0;else if(pnode=pHead) /链表中有多个结点,要删除的结点是头结点CNode

15、 *p=pnode-pNext;delete pHead-pData;delete pHead;pHead=p;else /链表中有多个结点,要删除的结点是其他节点CNode *p=pHead;while(p&p-pNext!=pnode)p=p-pNext;if(!p)coutpNext;delete pnode-pData;delete pnode;p-pNext=q;CNode *CList:LookUp(CFinance& finance) /根据日期查找指定数据,并返回该数据所在结点指针if(pHead=0)return 0;CNode *pn=pHead;while(pn)if(p

16、n-pData-Compare(finance)=0)return pn;pn=pn-pNext;return 0;void CList:ShowList() /输出链表中的数据if(!pHead)cout链表为空ShowNode();p=p-pNext;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

17、;CNode *CList:GetListNextNode(CNode *pnode)/9return pnode-pNext;void CList:Insert(CNode *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-pN

18、ext;q-pNext=pnode;pnode-pNext=p;CNode *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;clas

19、s CRecord /处理记录类CList list; /把CList的对象list作为CRecord的子对象public:void ReadFromFile(); /从文本文档读取数据void SaveToFile(); /把数据写进文本文档void InputIncomeRecord(); /增加收入数据void InputOutputRecord(); /增加支出数据void ViewIncomeRecord(); /展示全部收入记录void ViewOutputRecord(); /展示全部支出记录 void ViewBalance(); /展示全部收入与支出记录,显示盈余情况,实现超

20、支预警void LookUpRecord(); /根据日期寻找记录void EditRecord(); /根据日期修改记录void DeleteRecord(); /根据日期删除记录void setgoal(double); /设置存储目标;void CRecord:setgoal(double goal) /设置存储目标dlPurpose=goal;void CRecord:ReadFromFile() /从文本文档读取数据 ifstream infile1(目标dlPurpose.txt);if(!infile1)cout文件读取失败!dlPurpose;ifstream infile(收

21、支记录finance.txt);if(!infile)cout文件读取失败!yearmonthdayincomeoutputpurpose)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 outfile

22、1(目标dlPurpose.txt);if(!outfile1)cout文件写入失败!endl;exit(1); outfile1dlPurpose;ofstream outfile(收支记录finance.txt);if(!outfile)cout文件写入失败!GetData()-SetVal(year,month,day,income,output,purpose);outfileyear month day income output purposeendl;p=list.GetListNextNode(p);void CRecord:InputIncomeRecord() /增加收入数

23、据int year,month,day;double income;char purpose20;coutyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;coutincome;coutpurpose;CFinance *pfinance=new CFinance;pfinance-SetFinance(year,month,day,income,0,purpose);CNode *pnode=new CNode;pnode-InputData(pfinance);list.Insert(pnode);cout添加成

24、功!endl;list.CalBalance();void CRecord:InputOutputRecord() /增加支出数据int year,month,day;double output;char purpose20;coutyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;coutoutput;coutpurpose;CFinance *pfinance=new CFinance;pfinance-SetFinance(year,month,day,0,output,purpose);CNode *pnod

25、e=new CNode;pnode-InputData(pfinance);list.Insert(pnode);cout添加成功!GetData()-SetVal(year,month,day,income,output,purpose);if(income0)cout日期:year month day 收入:income 用途:purposeGetData()-SetVal(year,month,day,income,output,purpose);if(output0)cout日期year month day 支出:output 用途:purposeGetData()-GetBalanc

26、e()0)cout您的财政已超支!endl;void CRecord:LookUpRecord() /根据日期寻找记录if(!list.GetListHead()cout当前没有记录!endl;return;int year,month,day;short mark=0;coutyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;CNode *p=list.GetListHead();while(p)if(p-GetData()-IsDateEqual(year,month,day)p-GetData()-ShowWi

27、thoutBalance();mark=1;p=list.GetListNextNode(p);if(!mark)cout无当天记录!endl;void CRecord:EditRecord() /根据日期编辑记录if(!list.GetListHead()cout当前没有记录!endl;return;int year,month,day;short mark=0,edited=0;coutyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;CNode *p=list.GetListHead();while(p)if(

28、p-GetData()-IsDateEqual(year,month,day)mark=1;char edit;dop-GetData()-ShowWithoutBalance();coutedit;if(edit=N|edit=n)break;elsep-GetData()-ModifyData();edited=1;break;while(edit!=Y&edit!=y&edit!=N&edit!=n);p=list.GetListNextNode(p);if(!mark)cout无当天记录!endl;if(edited)list.CalBalance();void CRecord:Del

29、eteRecord() /根据日期寻找记录if(!list.GetListHead()cout当前没有记录!endl;return;int year,month,day;short mark=0,deleted=0;coutyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;CNode *p=list.GetListHead();while(p)if(p-GetData()-IsDateEqual(year,month,day)mark=1;char del;dop-GetData()-ShowWithoutBalan

30、ce();coutdel;if(del=N|del=n)break;elsedeleted=1;cout删除成功!endl;break;while(del!=Y&del!=y&del!=N&del!=n);CNode *q=p;p=list.GetListNextNode(p);if(deleted)list.DeleteNode(q);deleted=0;if(!mark)cout无当天记录!endl;elselist.CalBalance();bool IsDateRight(int year,int month,int day) /判断日期是否正确的函数if(year3000)retur

31、n false;if(month12)return false;int DaysInMonth;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:DaysInMonth=31;break;case 4:case 6:case 9:case 11:DaysInMonth=30;break;case 2:if(year%4=0&year%400!=0)DaysInMonth=29;else DaysInMonth=28;break;if(dayDaysInMonth)return false;return true;vo

32、id main() /主函数呀!亲,多么人性化,这个!我都标注!CRecord Record; /创立数据处理类CRecord的对象RecordRecord.ReadFromFile(); /从文本中读取数据,不存在文本那么创立文本int end=0;double goal;while(end=0) cout n; cout 欢送使用个人财政管理系统 n; cout 请选择以下功能 n; cout 1.输入收入记录 n; cout 2.输入支出记录 n; cout 3.查看收入记录 n; cout 4.查看支出记录 n; cout 5.查看收支平衡状况 n; cout 6.根据日期查找记录 n

33、; cout 7.根据日期修改记录 n; cout 8.根据日期删除记录 n; cout 0.退出 nn; cout n; coutn;if(dlPurpose=0.0)coutgoal;Record.setgoal(goal);elsecout 目标:dlPurpose;coutnum;switch(num)case 1:Record.InputIncomeRecord();break;case 2:Record.InputOutputRecord();break;case 3:Record.ViewIncomeRecord();break;case 4:Record.ViewOutputRecord();break;case 5:Record.ViewBalance();break;case 6:Record.LookUpRecord();break;case 7:Record.EditRecord();break;case 8:Record.DeleteRecord();break;case 0:Record.SaveToFile(); /退出时将数据保存至文本文件end=1;break;default:break;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!