




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、南京理工大学C+课程设计报告姓名:谢记超课程设计题目:个人财政支由管理( A级)程序功能简介:将个人财物的目标及当前存款、支出保存下来,可随时更新查看,比 较盈余与目标的差距。设计要求:(1)将收支的数据与相应的函数封装到类中,并改写主程序,使程序结构化。(2)增加保存每笔收支的记录,并对每笔记录增加日期录入,按日期顺序保存查 看记录。将所有记录放入一个文件中,每次运行程序时首先打开这个文件, 程序运行完毕时将更新的记录放回文件中。(3)完善程序,补充类中数据成员(dlbalance)的计算和输出,要求每笔收入和支出 都要重新统计当前情况下的盈余数目。(4)增加程序监控功能,当输入时间发生错误
2、(如月份超过十二),要求重新输入 正 确的时间;当结余数目为负数时输出信息,警告已超支。对题目的分析,以及功能的实现关键的四个类l.class CFince 数据类 2.class CNode 结点类3.class CList 链表类 4.class CRecord 处理类两个函数1 .判断日期是否正确的函数 2. main ()函数实现如下功能2 .程序的结构化,将各函数封装到类中。3 .数据的保存与读取。4 .数据的处理,用相应函数实现5 .优化处理,界面美观,人性化提示,数据输入的监控3、 程序设计过程中遇到的问题与解决方法1. 开始做出的程序添加收入与支出记录是未进行日期检查,导致不实
3、际的日期也被录入。对于日期的检查用了函数IsDateRight 来实现,其中应用了if 语旬,switch语句帮助实现该功能。2. 数据的保存与读取开始实现不了,保存下来的数据格式不正确,打不开,再次运行时上次的数据也未能读取。最终在class CRecord 处理类中添加voidReadFromFile(刖void SaveToFile()实现了这个功能,里面用到了输入输出流 ifstream和ofstream,实现数据的保存与再次读取是很高兴的,最令人兴奋的 是关闭程序后可以在文本文件中看到收支记录!3. 数据类 结点类 链表类 数据处理类的编写是很复杂的,环环相扣,数据类、节点类是基础,
4、链表类将数据串起来,然后再用数据处理类中的函数处理链表中的数据!这四大类真是让人费劲心思!当时实现这个生产链时,那是相当有成就感的!4. 如何区分开收入与支出记录输出,当时困扰了我很久,实在不希望不能实现收入记录与支出记录的分开显示,后来发觉可以通过判断函数的值来判断该笔记录是收入还是支出,最终实现了查看收入记录则只显示收入记录,查看支出记录只显示支出记录。5. 累计计算余额,实现超支预警,void CRecord:ViewBalance()list.ShowList();if(list.GetLastNode()-GetData()-GetBalance()0)cout您的财政已超支!abC
5、; ; 获取时间,在Dos 屏幕中输入2012 8 5 100而入的的100会被下一次cind;获得(即被当做收入获得)如何在取得相应数据后清空为取得的数据?cin.ignore cin.sync cin.ignore 都不行。3 .入 与支出的用途在Dos 屏幕中只能输入英文,不能输入汉语,如果这个程序用MFC 编程来编写效果会更好!4 .操 作未实现,有时候运行次数过多就会在评上留下很多东西,DOS 屏幕会显乱。5、 程序演示截图gj/ig嚣ar目标dLPuirpuse 一记事本文件的编定格式查看的帮助包?100E收支记录finance记事本文件偏辑心格式查看9帮助QD2012 8 1 6
6、0 0 jiangxuejin2012 8 2 0 20 meal2012 8 3 100 6 price2012 8405。 bookcostc C:Docwnervts and Settingsnlg桌面912104210329 谢记超Debugd 9 2 2序12程20上n:以收 择霸选:金: 霸入源? 日收来功 入入入成 H 请请请添。系录录录短 迎欢请选择以上程序,2请输入日期:(例如,2012 2 292012 8 2请掩入支山金就20请输入支出用连;meal添加成功? 2012 8 3:2012 8 3收入:100支出0用途:price目标:100 欢迎使用个人财政胃理系统畜选理
7、以下朝葡G 1:崎入 加 入汩录y2P12 2 292M2 8 6L 0支出9。用途tC假支记录f irtaiwu -记事本文件 编辑 格式)查看。帮助的2012 9 1 60 Q jiangxuejin2012 8202。 nedl2612 8 3 1&。 B price2012 8 4 G h(mkcQ5t#include#include#include#include/函数原形说明bool IsDateRight(int,int,int);/全局静态变量,目标/数据类/缺省构造函数/为日期赋值的构造函数/比较日期大小的函数/展示该笔收支情况,包括盈余状static double dlPu
8、rpose=0.0; class CFinanceint nYear,nMonth,nDay; double dlIncome,dlOutput; double dlBalance;char szPurpose20;double dlGap;public:CFinance();CFinance(int,int,int);int Compare(CFinance &);void Show();况void SetFinance(int,int,int,double,double,char *);/为所有成员变量赋初值的函数void Calculate(double dlBal);/累计计算总收入的
9、函数double GetBalance();void ModifyData();/修改数据的函数void SetVal(int &,int &,int &,double &,double &,char *);/获得各成员值的函数bool IsDateEqual(int,int,int);/判断日期是否存在void ShowWithoutBalance();/展示该笔收支情况,不包括盈余情况;CFinance:CFinance()/缺省构造函数dlIncome=0.0;dlOutput=0.0;dlBalance=0.0;CFinance:CFinance(int year,int month,
10、int day) /为日期赋值的构造函数nYear=year;nMonth=month;nDay=day;dlIncome=dlOutput=0.0;dlOutput=0.0;dlBalance=0.0;int CFinance:Compare(CFinance &finance)/比较日期的大小(大于取1 ,小于取-1 ,相等取0)if(nYearfinance.nYear)return 1;if(nYearfinance.nMonth)return 1;if(nMonthfinance.nDay)return 1; if(nDayfinance.nDay)return -1; if(nDa
11、y=finance.nDay)return 0;void CFinance:Show()/展示该笔收支情况,包括盈余状况cout 日期: nYear nMonth nDay 收入: dlIncome 支 出 : dlOutput 用 途 : szPurpose 余 额 : dlBalance 目 标 : dlPurpose0)/若dlIncome0 ,修改收入数据;否则修改支出数据couttemp;if(temp0)cout“修改成功!endl;dlIncome=temp;else cout 输入有误,修改失败!endl;elsecouttemp;if(temp0)cout“修改成功!endl
12、;dlOutput=temp;else cout 输入有误,修改失败!endl;voidCFinance: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(int year,int month,int day)/判断日期是否存在if(nY
13、ear=year&nMonth=month&nDay=day)return true;else return false;void CFinance:ShowWithoutBalance()/展示该笔收支情况,不包括盈余情况cout 日期: nYear nMonth nDay 收入: dlIncome 支 出 dlOutput 用途: szPurpose 目标: dlPurposeShow();CFinance *CNode:GetData()return pData;class CListprotected:CNode *pHead;public:CList();CList();void A
14、ddNode(CNode *pnode);void DeleteNode(CNode *);CNode *LookUp(CFinance&);所在结点指针void 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
15、(CNode *pnode)if(pHead=0)/头指针为空/输出本节点所指向的数据/获得该节点所指向的数据的地址/链表类/定义一个CNode 的头指针/构造函数/析构函数/增加结点/删除制定结点/根据日期查找指定数据,并返回该数据/输出链表中的数据/删除链表中的数据/获得链表头指针/返回指定结点的下一结点指针/据日期升序插入结点/返回尾部的头指针/逐个结点计算盈余/增加结点pHead=pnode;pHead-pNext=0;elseGetLastNode()-pNext=pnode; pnode-pNext=0;void CList:DeleteNode(CNode *pnode)/删除制
16、定结点if(!pHead)/头指针为空,即还未建立链表cout“删除结点错误:链表不存在!“pNext=0)/只有一个节点时删除节点delete pHead-pData;delete pHead;pHead=0;else if(pnode=pHead)/链表中有多个结点,要删除的结点是头结点CNode *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;dele
17、te pnode-pData;delete pnode; p-pNext=q;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“链表为空ShowNode();p=p-pNext;void CList:DeleteLis
18、t()/删除链表中的数据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)/9return pnode-pNext;void CList:Insert(CNode *pnode)/按日期的升序插入结点CNode *p,*q;if(pHead=0)pHead=pnode;pHead-pNe
19、xt=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;CNode *CList:GetLastNode()/返回尾部结点的指针(该程序未用到,用于扩展功能)if(!pHead)return 0;CNode *p=pHead;while(p-pNext)p=p-pNext;return p;v
20、oid 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 CRecordCList list; public:/处理记录类/把CList 的对象 list 作为 CRecord 的子对象void ReadFromFile();void SaveToFile();void InputIncomeRecord();void InputOutputRec
21、ord();void ViewIncomeRecord();void ViewOutputRecord();void ViewBalance();超支预警/从文本文档读取数据/把数据写进文本文档/增加收入数据/增加支出数据/展示全部收入记录/展示全部支出记录/展示全部收入与支出记录,显示盈余情况,实现void LookUpRecord();void EditRecord();void DeleteRecord();void setgoal(double);/根据日期寻找记录/根据日期修改记录/根据日期删除记录/设置存储目标;void CRecord:setgoal(double goal) /
22、设置存储目标 dlPurpose=goal;void CRecord:ReadFromFile()/从文本文档读取数据 ifstream infile1( 目标 dlPurpose.txt);if(!infile1)cout 文件读取失败!dlPurpose;ifstream infile( 收支记录finance.txt);if(!infile)cout“文件读取失败!yearmonthdayincomeoutputpurpose)CFinance *pfinance=new CFinance;pfinance-SetFinance(year,month,day,income,output,
23、purpose);CNode *pnode=new CNode;pnode-InputData(pfinance);list.AddNode(pnode);list.CalBalance();void CRecord:SaveToFile()/把数据写进文本文档 ofstream outfile1( 目标 dlPurpose.txt);if(!outfile1)cout“文件写入失败!endl;exit(1);outfile1dlPurpose;ofstream outfile( 收支记录finance.txt);if(!outfile)cout“文件写入失败!GetData()-SetVal
24、(year,month,day,income,output,purpose);outfileyear monthday income outputpurposeendl;p=list.GetListNextNode(p);void CRecord:InputIncomeRecord()/增加收入数据int year,month,day;double income;char purpose20;coutyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;coutincome;coutpurpose;CFinance *p
25、finance=new CFinance;pfinance-SetFinance(year,month,day,income,0,purpose);CNode *pnode=new CNode;pnode-InputData(pfinance);list.Insert(pnode);cout 添加成功!endl;list.CalBalance();void CRecord:InputOutputRecord()/增加支出数据int year,month,day;double output;char purpose20;coutyearmonthday;while(!IsDateRight(ye
26、ar,month,day)coutyearmonthday;coutoutput;coutpurpose;CFinance *pfinance=new CFinance;pfinance-SetFinance(year,month,day,0,output,purpose);CNode *pnode=new CNode;pnode-InputData(pfinance);list.Insert(pnode);cout 添加成功!GetData()-SetVal(year,month,day,income,output,purpose); if(income0)cout 日期: year mon
27、th day 收入: income 用途: purposeGetData()-SetVal(year,month,day,income,output,purpose);if(output0)cout 日期 year month day 支出: output 用 途: purposeGetData()-GetBalance()0)cout 您的财政已超支!endl;void CRecord:LookUpRecord()/根据日期寻找记录if(!list.GetListHead()cout“当前没有记录!endl;return;int year,month,day;short mark=0;cou
28、tyearmonthday;while(!IsDateRight(year,month,day)coutyearmonthday;CNode *p=list.GetListHead();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“当前
29、没有记录!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(p-GetData()-IsDateEqual(year,month,day)mark=1;char edit; dop-GetData()-ShowWithoutBalance();coutedit;if(edit=N|edit=n)break;elsep-GetDa
30、ta()-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:DeleteRecord()/根据日期寻找记录if(!list.GetListHead()cout“当前没有记录!endl;return;int year,month,day;short mark=0,deleted=0;coutyearmonthday;while(!I
31、sDateRight(year,month,day)coutyearmonthday;CNode *p=list.GetListHead();while(p)if(p-GetData()-IsDateEqual(year,month,day)mark=1;char del;dop-GetData()-ShowWithoutBalance();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; else list.CalBalance(); bool IsDateRight(int year,int month,int day)/判断日期是否正确的函数if(year3000)return false;if(month12)return false;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 奋斗话题作文800字左右(7篇)
- 电子支付:快速便捷的新方式
- 2024年九年级化学上册 第六单元 碳和碳的化合物 6.2 二氧化碳制取的研究教学实录 (新版)新人教版
- 山东专用2025版高考物理二轮复习专题二4第4讲功能关系的理解与应用教案
- 九年级物理知识点人教版
- 一年级体育上册 坐、立、行教学实录
- 广东省肇庆市2024-2025学年高中政治 第二十周 晚练讲评教学实录 新人教版必修2
- 2024年新人教版九年级上册化学课件 第4单元 课题3 物质组成的表示 第3课时 物质组成的定量认识
- 2024年新人教版九年级上册化学课件 第7单元 课题2 化石能源的合理利用 第2课时 降低化石能源的利用对环境的影响
- 2024年新人教版七年级上册历史教学课件 第4课 夏商西周王朝的更替
- 小儿锌缺乏症剖析
- 古风集市策划方案
- 道路危险货物运输安全培训课件
- 天然气消防培训课件
- 胡壮麟《语言学教程》(第5版)章节题库(1-4章)【圣才出品】
- 驾驶员劳务派遣投标方案
- 面密度仪设备原理培训课件
- DB63∕T 1729-2019 地球化学样品中铂、钯、钌、铑、锇、铱的测定 锍镍试金富集-电感耦合等离子体质谱法
- 《公路立体交叉设计细则》(D21-2014 )【可编辑】
- 焦虑抑郁自评量表(综合版)
- 二手房屋买卖物品交接清单
评论
0/150
提交评论