欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

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

  • 资源ID:71747219       资源大小:67.50KB        全文页数:20页
  • 资源格式: DOC        下载积分:16积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要16积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

南 京 理 工 大 学C+课程设计报告姓名:谢记超一、 课程设计题目:个人财政支出管理A级程序功能简介:将个人财物的目标及当前存款、支出保存下来,可随时更新查看,比 较盈余与目标的差距。设计要求:1将收支的数据与相应的函数封装到类中,并改写主程序,使程序结构化。2增加保存每笔收支的记录,并对每笔记录增加日期录入,按日期顺序保存查看记录。将所有记录放入一个文件中,每次运行程序时首先翻开这个文件,程序运行完毕时将更新的记录放回文件中。3完善程序,补充类中数据成员(dlbalance)的计算和输出,要求每笔收入和支出都要重新统计当前情况下的盈余数目。4增加程序监控功能,当输入时间发生错误如月份超过十二,要求重新输入正确的时间;当结余数目为负数时,输出信息,警告已超支。二、 对题目的分析,以及功能的实现类: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. 数据的处理,用相应函数实现4. 优化处理,界面美观,人性化提示,数据输入的监控三、 程序设计过程中遇到的问题与解决方法1. 开始做出的程序添加收入与支出记录是未进行日期检查,导致不实际的日期也被录入。对于日期的检查用了函数IsDateRight来实现,其中应用了if语句,switch语句帮助实现该功能。2. 数据的保存与读取开始实现不了,保存下来的数据格式不正确,打不开,再次运行时上次的数据也未能读取。最终在class CRecord 处理类中添加void ReadFromFile()和void SaveToFile()实现了这个功能,里面用到了输入输出流ifstream和ofstream,实现数据的保存与再次读取是很快乐的,最令人兴奋的是关闭程序后可以在文本文件中看到收支记录!3. 数据类 结点类 链表类 数据处理类的编写是很复杂的,环环相扣,数据类、节点类是根底,链表类将数据串起来,然后再用数据处理类中的函数处理链表中的数据!这四大类真是让人费力心思!当时实现这个生产链时,那是相当有成就感的!4. 如何区分开收入与支出记录输出,当时困扰了我很久,实在不希望不能实现收入记录与支出记录的分开显示,后来觉察可以通过判断函数的值来判断该笔记录是收入还是支出,最终实现了查看收入记录那么只显示收入记录,查看支出记录只显示支出记录。5. 累计计算余额,实现超支预警,void CRecord:ViewBalance() list.ShowList();if(list.GetLastNode()->GetData()->GetBalance()<0)cout<<"您的财政已超支!"<<endl; 累积计算的实现别看代码不长绝非易事。,还是花了不少心思的!四、 程序中尚存在的缺乏1.根据日期修改记录只实现了金额的修改,而日期和用途的修改未实现。2.入日期时用cin>>a>>b>>C; ;获取时间,在Dos屏幕中输入 2021 8 5 100而入的的100会被下一次cin>>d;获得即被当做收入获得如何在取得相应数据后清空为取得的数据?cin.ignore cin.sync cin.ignore 都不行。3.入与支出的用途在Dos屏幕中只能输入英文,不能输入汉语,如果这个程序用MFC编程来编写效果会更好!4.操作未实现,有时候运行次数过多就会在评上留下很多东西,DOS屏幕会显乱。五、 程序演示截图#include<iostream.h>#include<string.h>#include<stdlib.h>#include<fstream.h>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,int); /为日期赋值的构造函数int Compare(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,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 &finance) /比拟日期的大小大于取1,小于取-1,相等取0if(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;if(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<<" 支出:"<<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=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,修改收入数据;否那么修改支出数据cout<<"输入修改后的收入:"cin>>temp;if(temp>0)cout<<"修改成功!"<<endl;dlIncome=temp;elsecout<<"输入有误,修改失败!"<<endl;elsecout<<"输入修改后的支出:"cin>>temp;if(temp>0)cout<<"修改成功!"<<endl;dlOutput=temp;elsecout<<"输入有误,修改失败!"<<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(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<<" 支出"<<dlOutput<<" 用途:"<<szPurpose<<" 目标:"<<dlPurpose<<endl;class CNode /结点类CFinance *pData; /用于指向数据的指针,相当于节点中存放数据的局部CNode *pNext; /用于指向下一节点的指针public:CNode(); /默认构造函数CNode(CNode &node); /拷贝构造函数void InputData(CFinance *pdata); /将数据的地址赋值给数据指针pData的函数void ShowNode(); /输出本节点所指向的数据CFinance *GetData(); /获得该节点所指向的数据的地址friend class CList; /把CList定义为友员函数;CNode:CNode() /默认构造函数pData=0;pNext=0;CNode:CNode(CNode &node) /拷贝构造函数pData=node.pData;pNext=node.pNext;void CNode:InputData(CFinance *pdata) /将数据的地址赋值给数据指针pData的函数pData=pdata;pNext=0;void CNode:ShowNode() /输出本节点所指向的数据pData->Show();CFinance *CNode:GetData() /获得该节点所指向的数据的地址return pData;class CList /链表类protected:CNode *pHead; /定义一个CNode的头指针public:CList(); /构造函数CList(); /析构函数void AddNode(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(CNode *pnode) /增加结点if(pHead=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 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)cout<<"删除结点错误:结点不存在!"exit(1);elseCNode *q=pnode->pNext;delete 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<<"链表为空"<<endl;return;CNode *p=pHead;while(p)p->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;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->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;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; /把CList的对象list作为CRecord的子对象public:void ReadFromFile(); /从文本文档读取数据void SaveToFile(); /把数据写进文本文档void InputIncomeRecord(); /增加收入数据void InputOutputRecord(); /增加支出数据void ViewIncomeRecord(); /展示全部收入记录void ViewOutputRecord(); /展示全部支出记录 void ViewBalance(); /展示全部收入与支出记录,显示盈余情况,实现超支预警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<<"文件读取失败!"<<endl;exit(1);infile1>>dlPurpose;ifstream infile("收支记录finance.txt");if(!infile)cout<<"文件读取失败!"<<endl;exit(1);int year,month,day;double income,output;char purpose20;while(infile>>year>>month>>day>>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");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->GetData()->SetVal(year,month,day,income,output,purpose);outfile<<year<<" "<<month<<" "<<day<<" "<<income<<" "<<output<<" "<<purpose<<endl;p=list.GetListNextNode(p);void CRecord:InputIncomeRecord() /增加收入数据int year,month,day;double income;char purpose20;cout<<"请输入日期:(例如:2021 2 29) "cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:(例如:2021 2 29) "cin>>year>>month>>day;cout<<"请输入收入金额:"cin>>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();void CRecord:InputOutputRecord() /增加支出数据int year,month,day;double output;char purpose20;cout<<"请输入日期:(例如:2021 2 29) "cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:(例如:2021 2 29) "cin>>year>>month>>day;cout<<"请输入支出金额:"cin>>output;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:ViewIncomeRecord() /展示全部收入记录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<<" "<<month<<" "<<day<<" 收入:"<<income<<" 用途:"<<purpose<<endl;p=list.GetListNextNode(p);void CRecord:ViewOutputRecord() /展示全部支出记录 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(output>0)cout<<"日期"<<year<<" "<<month<<" "<<day<<" 支出:"<<output<<" 用途:"<<purpose<<endl;p=list.GetListNextNode(p);void CRecord:ViewBalance() /展示全部收入与支出记录,显示盈余情况,实现超支预警list.ShowList();if(list.GetLastNode()->GetData()->GetBalance()<0)cout<<"您的财政已超支!"<<endl;void CRecord:LookUpRecord() /根据日期寻找记录if(!list.GetListHead()cout<<"当前没有记录!"<<endl;return;int year,month,day;short mark=0;cout<<"请输入日期:(例如:2021 2 29) "cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:(例如:2021 2 29) "cin>>year>>month>>day;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<<"当前没有记录!"<<endl;return;int year,month,day;short mark=0,edited=0;cout<<"请输入日期:(例如:2021 2 29) "cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:(例如:2021 2 29) "cin>>year>>month>>day;CNode *p=list.GetListHead();while(p)if(p->GetData()->IsDateEqual(year,month,day)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!='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<<"请输入日期:(例如:2021 2 29) "cin>>year>>month>>day;while(!IsDateRight(year,month,day)cout<<"日期不正确!请重新输入:(例如:2021 2 29) "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'&&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(year<999|year>3000)return false;if(month<0|month>12)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(day<0|day>DaysInMonth)return false;return true;void main() /主函数呀!亲,多么人性化,这个!我都标注!CRecord Record; /创立数据处理类CRecord的对象RecordRecord.ReadFromFile(); /从文本中读取数据,不存在文本那么创立文本int end=0;double goal;while(end=0) cout<<"t>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<n" cout<<" 欢送使用个人财政管理系统 n" cout<<" 请选择以下功能 n" cout<<" >> 1.输入收入记录 <<n" cout<<" >> 2.输入支出记录 <<n" cout<<" >> 3.查看收入记录 <<n" cout<<" >> 4.查看支出记录 <<n" cout<<" >> 5.查看收支平衡状况 <<n" cout<<" >> 6.根据日期查找记录 <<n" cout<<" >> 7.根据日期修改记录 <<n" cout<<" >> 8.根据日期删除记录 <<n" cout<<" >> 0.退出 <<nn" cout<<"t>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<n" cout<<"n"if(dlPurpose=0.0)cout<<"t请输入目标: "cin>>goal;Record.setgoal(goal);elsecout<<" 目标:"<<dlPurpose;cout<<"nt请选择以上程序:"char num;cin>>num;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;

注意事项

本文(c课程设计个人财政支出管理南京理工大学谢记超)为本站会员(e****s)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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