您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 南京理工大学C++课程设计报告
南京理工大学C++课程设计报告1010190410吴立珠程序功能简介个人财政支出的管理程序,将个人财务的目标及当前的存款,支出保存下来,可以随时更新,查看,比较赢余和目标的差距。课程设计的要求1.将收支的数据与相应的函数封装到类中,并改写主程序,是程序结构化。2.增加保存每笔收支的记录,并对每闭记录增加日期录入,按日期的顺序保存,查看记录,将每一个记录放入一个文件中,每次运行程序时首先打开这个文件,程序运行完毕是将更新的记录放回文件中。3.完善程序,补充类中数据成员赢余的计算和输出,要求每笔收入和支出都要重新统计当前情况下的赢余数目。4.增加程序监控功能,当输入时间发生错误是,要求重新输入正确的时间;当结余的数目为负数时,输出信息,警告已经超支!程序设计思想1.类的封装远程序的结构比较简单,只保留了每次更新操作的最后结果,达不到财务帐册的要求。若要详细记录下每闭收笔的记录的款项和原因等。于是才用了链表的形式保存了数据,且可以根据实际需要动态开辟空间。链表结构如下:classCFinance{private:intnYear,nMonth,nDay;//年月日doubledlIncome,dlOutput;//收入,支出数目doubledlBalance;//结余charszPurpose[20];//用途,目的staticdoubledlPurpose;//目标doubledlGap;//据目标的差额public:CFinance(){dlIncome=dlOutput=dlBalance=0.0;}//缺省的构造函数CFinance(inta,intb,intc,doubled,doublee,charf[],doubleg,doubleh);//构造函数CFinance(inta,intb,intc,doubled,doublee,charg[]);//构造函数CFinance(inta,intb,intc){nYear=a,nMonth=b,nDay=c;}//根据日期生成结点,查找用intCompare(CFinance&);//比较时间的大小voidShow();//输出类的成员voidShowdeposit();//输出收入的时间和目的,用途voidShowwithdraw();//输出支出的时间和目的,用途voidSetFinance(int,int,int,double,double,char*);//对象赋值voidGetPurpose(doublepurs){dlPurpose=purs;}//赋值目标doubleShowPur(){returndlPurpose;}//返回目标voidcalculatebalance(doubledlBal){dlBalance=dlBal+dlIncome-dlOutput;}//计算结点的赢余情况,计算下一个结点用doubleGetBalance(){returndlBalance;}//返回与目标的差额voidModifyData();//修改结点记录voidcalculatedlgap();//返回差额friendvoidDeposit(CFinance*);//定义存款函数为友元函数friendvoidWithdraw(CFinance*);//定义取款函数为友元函数friendclassClist;//定义链表类为友元类};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();//计算整个链表与目标的差额};2.mian函数结构程序主题采用菜单选项的形式,输入相应的菜单选项后程序可以反复运行。在程序一开始运行时首先将财务数据文件读如链表,然后询问是否改动目标款项,若改动了目标款项,接点中的数据中“距目标的差额”都需重新计算,在程序退出时,将链表的数据在写到数据文件中。3.设计要点1)为使用户界面更加友好,避免输入数据类型错误导致的程序无限循环,在输入数据时进行判断,对非法的输入予以提示。2)每次增加的结点或修改结点时都要将数据的赢余部分重新计算,。设计了一个函数,以链表的引用作为参数,从链表首结点开始,依次将整个链表结点的数据重新计算,在增加或修改结点完成后调用该函数即。3)在输入整个链表的数据后,应计算链表的最后一个结点的赢余,若出现了赤字则输出信息,提示用户注意。题目分析程序的主菜单如又图:各功能实现方法:1-输入收入记录动态产生一个新的数据,调用存款函数输入记录,将指向其请选择以下功能:1-输入收入记录2-输入支出记录3-输出收入记录4-输出支出记录5-查看收支平衡情况6-按日期查找记录7-按日期删除记录8-按日期修改记录0-退出的指针加到链表中,并进行排序。2-输入支出记录动态产生一个新的数据,调用取款函数输入记录,将指向其的指针加到链表中,并进行排序。3-输出收入记录调用了链表类里的Showlistdeposit()函数,其中这个函数指向数据类之中的输出收入记录,定义一个指针,输出指针指向的数据,然后指针指向下一个指针直到链表尾部。4-输出支出记录调用了链表类里的Showlistwithdraw()函数,其中这个函数指向数据类之中的输出支出记录,定义一个指针,输出指针指向的数据,然后指针指向下一个指针直到链表尾部。5-查看收支平衡情况调用了链表类里的Showlistgetbanlanc()函数,其中这个函数指向数据类之中向的数据,然后指针指向下一个指针直到链表尾部。6-按日期查找记录在数据类中有一函数可以比较日期,大的返回+1,小的返回-1,相等的返回0。在查找记录时先比较日期与链表中的日期是否有相等的,若有则定义一个指针指向该结点,调用函数输出该结点的所有记录,指针指向下一个指针,继续查找。7-按日期删除记录在数据类中有一函数可以比较日期,大的返回+1,小的返回-1,相等的返回0。在删除记录时先比较输入的日期与链表中存在的日期是否有相等的,若有则定义一个指针指向该结点,调用函数删除该结点的所有记录,指针指向下一个指针,继续查找。8按日期修改记录在数据类中有一函数可以比较日期,大的返回+1,小的返回-1,相等的返回0。在修改记录时先比较输入的日期与链表中存在的日期是否有相等的,若有则定义一个指针指向该结点,调用函数输出该结点的所有记录,指针指向下一个指针,继续查找。0-退出退出时将数据保存在文件data.txt中流程图如下所示:是否输入帐号,进入界面询问是否改动目标款项修改目标款项1`通过开头输入帐号来实现,系统供多人使用的功能。2`判断日期输入的正确性设计了三个函数分别判断年,月,日是否正确,然后在设计了一个函数判断输入的日期是否正确。3、屏幕界面问题,处理方法:仔细复习了“C++流程控制”一章,结合了库函数,system(“cls”)的功能,程序界面显得比较友好。4、三个类的关系,各个成员及成员函数的关系,以及如何调用函数类的基本框架如图:错误!类:Clist(链表类)(指针成员指向类cnode的对象对设计的感想和心得对于这次程序设计,我明白了发现问题比解决问题更难,因为不知从何下手,我屡次停滞不前,后来通过加输出语句或注释关键语句来判断问题所在。通过一次次摸索,尝试,一步步解决问题。但有时往往是解决了一个,又出现一个,真是太考验耐心了。同时,我也意识到,虽然读了十几年书,但到实际动手时却是手足无措,实践经验实在是少得可怜,所以要想在竞争日益激烈的时代找到一份好工作,不仅要学好理论知识,更要注重实践,从而真正获取一门知识的精髓。最后,想说一句,故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身。。。。。。。源程序#includeiostream.h#includefstream.h#includeconio.h#includeiomanip.h#includestring.h#includestdlib.hclassCFinance{类cnode各数据成员以及成员函数类CFinance的数据成员以及成员函数CNode(指针成员指向CFinance的对象)类Clist的各数据成员以及成员函数private:intnYear,nMonth,nDay;//年月日doubledlIncome,dlOutput;//收入,支出数目doubledlBalance;//结余charszPurpose[20];//用途,目的staticdoubledlPurpose;//目标doubledlGap;//据目标的差额public:CFinance(){dlIncome=dlOutput=dlBalance=0.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;}//根据日期生成结点,查找用intCo
本文标题:南京理工大学C++课程设计报告
链接地址:https://www.777doc.com/doc-3870948 .html