您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 财务管理系统c++简单版
/*第4题个人财政支出管理--源代码及关键源代码注解如下:*/#includeiostream.h#includefstream.h#includeconio.h#includeiomanip.h#includestring.h#includestdlib.hclassClist;classCFinance//数据类{private:intnYear,nMonth,nDay;//年月日doubledlIncome,dlOutput;//收入,支出数目doubledlBalance;//结余charszPurpose[20];//用途,目的staticdoubledlPurpose;//目标doubledlGap;//据目标的差额public:friendclassClist;friendofstream&operator(ofstream&,CFinance*);CFinance(){dlIncome=dlOutput=dlBalance=0;}//缺省的构造函数CFinance(inta,intb,intc,doubled,doublee,charf[],doubleg,doubleh)//带参数的构造函数{nYear=a,nMonth=b,nDay=c;dlIncome=d,dlOutput=e;strcpy(szPurpose,f);dlBalance=g;dlGap=h;}CFinance(inta,intb,intc,doubled,doublee,charg[])//结构函数{nYear=a,nMonth=b,nDay=c;dlIncome=d,dlOutput=e;strcpy(szPurpose,g);}CFinance(inta,intb,intc){nYear=a,nMonth=b,nDay=c;}//根据日期生成结点,查找用intCompare(CFinance&);//比较时间的大小voidSetFinance(int,int,int,double,double,char*);//对象赋值voidShowdeposit();//输出收入的时间和目的,用途voidShowwithdraw();//输出支出的时间和目的,用途voidShow();//输出类的成员voidGetPurpose(doublepurs){dlPurpose=purs;}//赋值目标doubleShowPur(){returndlPurpose;}//返回目标voidcalculatebalance(doubledlBal){dlBalance=dlBal+dlIncome-dlOutput;}//计算结点的赢余情况doubleGetBalance(){returndlBalance;}//返回与目标的差额,计算下一个结点用voidcalculatedlgap();//返回差额voidModifyData();//修改结点记录friendvoidDeposit(CFinance*);//输入收入记录friendvoidWithdraw(CFinance*);//输入支出记录friendvoidSavefile();//打开数据文件};doubleCFinance::dlPurpose=0.0;ofstream&operator(ofstream&out,CFinance*p){out(*p).nYear''(*p).nMonth''(*p).nDay''(*p).dlIncome''(*p).dlOutput''(*p).dlBalance''(*p).dlGap''(*p).szPurposeendl;returnout;}voidCFinance::ModifyData()//修改记录{inta,b,c;doubled,e;char*p=0;cinabcdep;SetFinance(a,b,c,d,e,p);}intCFinance::Compare(CFinance&t)//比较日期,大于返回1,小于返回-1,等于返回0{if(nYeart.nYear)return1;if(nYeart.nYear)return-1;else{if(nMontht.nMonth)return1;if(nMontht.nMonth)return-1;else{if(nDayt.nDay)return1;if(nDayt.nDay)return-1;elsereturn0;}}}voidCFinance::SetFinance(inta,intb,intc,doubled,doublef,char*p)//对象赋值{nYear=a,nMonth=b,nDay=c;dlIncome=d,dlOutput=f;p=(char*)newchar;//动态产生一个字符串}voidCFinance::Showdeposit()//输出收入的情况{if(dlIncome0){cout日期nYear/nMonth/nDay收入dlIncome收入原因是szPurposeendl;}}voidCFinance::Showwithdraw()//输出支出的情况{if(dlOutput0){cout日期nYear/nMonth/nDay支出dlOutput使用目的是szPurposeendl;}}voidCFinance::Show(){cout\n日期nYear/nMonth/nDay\n;if(dlIncome0)cout收入dlIncome\n;if(dlOutput0)cout支出dlOutput\n;if(dlGap0){if(dlIncome0)cout收入原因是szPurpose\n;elsecout用的目的是szPurpose\n;cout截至此日的盈余为dlBalance超dlPurpose目标dlGapendl;}else{if(dlGap==0){if(dlIncome0)cout收入原因是szPurpose\n;elsecout用的目的是szPurpose\n;cout截至此日的盈余为dlBalance与dlPurpose目标持平endl;}else{if(dlIncome0)cout收入原因是szPurpose\n;elsecout用的目的是szPurpose\n;cout截至此日的盈余为dlBalance距dlPurpose目标还有(-1)*dlGapendl;}}}voidCFinance::calculatedlgap(){dlGap=dlBalance-dlPurpose;}classCNode//结点类{private:CFinance*pData;//用于指向数据类的指针CNode*pnext;//指向链表的下一个结点的指针public:CNode(){pData=0;pnext=0;}//结点的构造函数CNode(CNode&node){pData=node.pData,pnext=node.pnext;}//用于拷贝的构造函数voidInputData(CFinance*pdata){pData=pdata;}//输入数据voidShowNode(){pData-Show();}//结点的输出voidmodify(){pData-ModifyData();}//修改结点的数据CFinance*GetData(){returnpData;}//返回数据类的指针voidGetpur(doublet){pData-GetPurpose(t);}//返回数据类的目标friendclassClist;//定义链表类为友元类friendvoidSavefile();//定义保存函数为友元函数};classClist//定义链表类{protected:CNode*phead;//链表头结点指针public:Clist(){phead=0;}//链表类的构造函数~Clist(){deletelist();}//链表类的析构函数voidAddNode(CNode*);//在首部添加结点voidDeleteNode(CNode*);//删除一个指定的结点CNode*Lookup(CFinance&);//查找一个指定的结点,返回该结点的指针voidShowlist();//打印整个链表voidShowlistdeposit();//打印整个链表的收入情况voidShowlistwithdraw();//打印整个链表的支出情况voiddeletelist();//删除整个链表CNode*GetlistHead(){returnphead;}//返回链表的首结点CNode*GetlistNextNode(CNode*p);//返回指定的结点的下一个结点voidInsert(CNode*p);//插入排序CNode*GetlastNode(CNode*phead);//返回最后一个结点voidCalculatebalance();//计算链表的赢余情况voidSavefile();//保存文件voidOpenFile();//打开文件voidModify(CNode*);//修改链表的记录voidCalculatedlGap();//计算整个链表与目标的差额};voidClist::AddNode(CNode*pnode)//添加一个结点{if(phead==0)//头结点为空{phead=pnode;pnode-pnext=0;}else{pnode-pnext=phead;phead=pnode;//指向下一个结点}}voidClist::DeleteNode(CNode*Temp){CNode*p1,*p2;//结点指针变量charchoice;//找到符合条件的数据后删除之前需要确认,该变量为键入的确认选择if(phead==NULL)//链表头指针为空,即链表中无数据,不需删除,程序直接返回{cout数据表为空,无记录可删!\n;//删除提示信息return;}if(Temp-pData-Compare(*(phead-pData))==0)//当链表头指针即是要删除的域名时,将头指针后的指针作//为头指针,然后将该结点删除{p1=phead;//p1指向头指针cout存在该记录为:\n;p1-ShowNode();//输出p1中的数据内容cout请确定是否删除该记录(y/n)?\n;cinchoice;//从键盘输入信息,确定是否真要删除该结点if(choice=='Y'||choice=='y')//当输入Y或y时,确定要删除该结点,以下是删除操作{phead=phead-pnext;//将链表的头指针移后一个结点deletep1;//删除原头指针所在的结点cout删除了该记录!\n;//输出提示信息}else//若选择不删除该结点{cout未删除记录!\n;//输出提示信息}}else//若链表头结点不满足删除条件,则p2指针顺着链表寻找满足删除条件的结点{p2=p1=phead;//首先,p1,p2从头指针开始沿链表查找while(Temp-pData-Compare(*(p2-pData))!=0&&p2-pnext!=NULL)//查找过程是循环过程,当没有找到符合条件的结点且没有查找完整个链表时,循环继续{p1=p2;//p1跟在p2后面p2=p2-pnext;//p2接着查找下一个结点}
本文标题:财务管理系统c++简单版
链接地址:https://www.777doc.com/doc-7976986 .html