《我的c++课程设计个人记账软件(共32页).doc》由会员分享,可在线阅读,更多相关《我的c++课程设计个人记账软件(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上内蒙古科技大学本科生课程设计论文课题:c+课程设计 -个人记账软件的设计 姓名: 学号: 专业: 班级: 指导老师:孙涛目录摘要与引言1.1摘要计主要解决个人日常生活中收入与支出等进行记录的程序设计.在课程设计中,系统开发平台为Windows xp,程序设计开发环境采用Microsoft visual studio 2005/Vc6.0,账目库采用Microsoft Access 2003,程序运行平台为Windows 98/2000/XP。对于收入支出进行记录,在程序设计中,采用了面向对象解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可
2、以应用在商业中为个人解决简单的实际问题。1.2 程序设计:账目库;SQL;c+;个人理财1.3背景 理财的目的,在追求不虞遗乏的丰富人生,是以经济学为精神、会计学为基础、财务学为手段的一门实用科学。 为什么要理财?每个人都希望过幸福美满的生活,但是你首先应自问有没有这样的能力?房子、车子、股票、珠宝 /系统生成代码,略去 /系统生成代码,略去,在某些人眼里是财富的象征,生活品质的保证,是他们努力追求的价值。 也有许多所谓的有钱人,宁愿选择平平淡淡的生活,辛勤工作、努力储蓄,他们不认为华丽的外表相可以代表高水准的生活品质。不过,显然大多数人一生中都是无法满足的。 心理学家马斯洛的需求理论告诉我们
3、,人类的需求是有层级之分的:在安全无虞的前提下追求温饱,当基本生活条件获得满足之后,则需求得到社会的尊重;并进一步追求人生的最终目标自我实现。 而要依层级满足这些需求,必须建立在不虞遗乏的财务条件上。因此,你必须认识理财的重要,订定一套适合自己的理财计划,来达成自己的生活目标。 我们知道,追求效益极大化是经济学的基本精神,即说以最小的代价,获得最大的收益。但这并非表示我们吝于付出,因为资源是有限的,稀少的资源,迫使我们必须做选择,而理财行为就是聪明的选择。我们付出代价最少、收益最大的一条路,让有限的资源得以发挥最大的效用。 对于我们能拥有的、以及想要争取的,透过会计学对财富流量及存量的记录,客
4、观地显现在资产负债表以及损益表上,可以帮助我们看清自己的财务状况,进而规划出符合我们的需求、能力可及的财务目标。 对于资金的筹措及运用,财务学可以提供我们最佳的策略及方法,以最少的成本取得资源,并做好有效的分配,因应景气循环及环境的变化,配合目标定出自己的资产组合。11.4理财软件的目的 俗话说“你不理财,财不理你”,只有通过合理的理财,才能够有效的管理你的个人资产的合理运用。个人理财软件不仅可以帮你记帐,更多的是可以实时掌握你的收入与支出,掌握资金的变动情况,同时还可以统计出资金的主要流向,从而更合理的分配资金。本课题将达到以下几个目的:(1)清晰简便明了的操作,减少不必要的精力消耗。传统的
5、个人理财软件中,有大量的冗余功能,使用户的大部分精力将耗费在了解复杂的界面与繁琐的操作上,而作为缺少个人理财所应具有的简便明了的特点。通过此个人理财软件,用户可以将绝大部分精力放在对账目的研究上,而不是无意义的操作上。(2)提供更好的服务。个人理财软件可以较迅速、有效地收集各种个人财务信息,用户可以直接从系统中获得自己所需的个人财务信息,并根据相关的信息做出决策和相应的行动方案。(3)降低成本。个人理财软件没有繁琐的操作,简便易懂的操作使用户减少了上手时间,降低了使用成本。第一章 C+简介1.1组成部分根据Effective C+第三版第一条款的描述,现在C+由以下四个“子语言”组成: 1、C
6、子语言。C+支持C语言的几乎全部功能,主要是c89的部分,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C+标准文献)。 2、的C+语言。C+语言原本不具备面向对象的设计功能,然而随着的概念的提出以及如等语言的发展成熟,C+语言也开发出了支持面向对象功能的版本。 3、泛型编程语言。C+强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。 4、STL(C+标准模板库,Standard Template Library)。随着的不断发展,它已经逐渐成为C+中不可或缺的部分,其效率可能比一般的native低些,但是其安全性与规范性使它大受欢迎。 此外
7、,包含在TR1等中的C+0x将实现的新功能在开发和测试中。 语言特点 C+设计成静态类型、和C同样高效且可移植的多用途设计语言。 C+设计成直接的和广泛的支持多种(程序化程序设计、资料抽象化、泛型程序设计)。 C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 C+设计成尽可能与C兼容,籍此提供一个从C到C+的平滑过渡。 C+避免平台限定或没有普遍用途的特性。 C+不使用会带来额外开销的特性。 C+设计成无需复杂的程序设计环境。 出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,的C+语言的
8、设计和演化(1994)里做了详尽的陈述。 优点C+在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C+的集成开发环境中完成的。C+相对众多的面向对象的语言,具有相当高的性能。 C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C+。 争议C+由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是C+的编译系统受到C+的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。 由于本身的复杂性,复杂的C+程序的正确性相当难于保证。也有人提出不支持多线程
9、的原语等缺陷。不过有如此多的知名人士提出了如此多的缺陷,正说明C+被广泛使用和成功。 1.2代码性能人们一般认为,使用或的比C+低。但是,如果你能够充分分析C+和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:规模和复杂度都比较小。如果不超过3有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C+的优势将会越来越明显。造成这种差别的就是C+的软件工程性。 美国AT&T的()博士在20世纪80年代初期发明并实现了C+(最初这种语言被称作“C with Classes”)。一开始C+是作为的增强版出现的,从给C语言增加类开始,不断的增加新特性。(
10、virtual function)、(operator overloading)、(multiple inheritance)、(template)、异常(exception)、RTTI、命名空间(name space)逐渐被加入标准。1998年(ISO)颁布了的国际标准ISO/IEC 1988-1998。C+是具有国际标准的,通常称作ANSI/ISOC+。 1998年是C+标准委员会成立的第一年,以后每5年视实际需要更新一次标准。C+0x最终国际投票已于2011年8月10日结束,并且所有国家都投出了赞成票,C+0x已经毫无疑义地成为正式国际标准。先前被临时命名为C+0x的新标准将被称为C+
11、2011。C+ 2011将取代现行的C+标准ISO/IEC 14882,它公开于1998年并于2003年更新,通称C+98以及C+03。国际标准化组织于2011年9月1日出版发布ISO/IEC 14882:2011,名称是:Information technology - Programming languages - C+ Edition: 3。 C+语言发展大概可以分为三个阶段:第一阶段从80年代到。这一阶段C+语言基本上是传统类型上的,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额; 第二阶段从1995年到2000年,这一阶段由于(STL)和后来的等程序库的出现,泛
12、型程序设计在C+中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击; 第三阶段从至今,由于以、等程序库为代表的产生式编程和编程的出现,C+出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C+已经成为当今主流中最复杂的一员。 1.3编程技巧new和delete提供了存储的内存分配和释放功能,它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点: (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。 (2)
13、自动地返回正确的类型,不用进行强制指针类型转换。 (3)可以用new对分配的对象进行初始化。 对于频繁使用的,C语言建议使用宏调用代替以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏:#define abs(a)(a)0?(-a):(a),当使用abs(i+)时,这个宏就会出错。 所以在C+中应该使用inline内联函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。 使用内联函数只须把inline关键字放在函数返回类型的前面。例如: inline int Add(int a,int b);/声明Add()为内联函数 这样在遇到Add()函数时,
14、就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。 使用函数重载。在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C+中,函数名相同而参数不同的两个函数被解释为重载。例如: void PutHz(char* str);/在当前位置输出汉字 void PutHz(int x,?int y,?char * str);/在x,y处输入数字 使用可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。同时必须注意,参数账目类型相同,但是函数返回类型不同的两个
15、函数不能重载。 用引用(reference)代替指针进行参数传递。通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C+的代码中都大量地使用了缺省参数。 需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。否则当你省略其中一个参数的时候,编译器无法知道你是自定义了这个参数还是利用了缺省参数而定义了非缺省的参数。 1.4编程开发开发方式 :在unix世界有大量的程序员是传统的非IDE的方式进行软件开发。一般是如下组合: 1.编译器:gcc,clang等 2.编辑器:一般
16、是vim/emacs 3.make:gnu make 或者bsd 的pmake等,功能与用法基本一样 4.版本管理:cvs,svn,git等 5.代码阅读:cscope,ctags,lxr等 集成开发环境(IDE) 第二章 需求分析内蒙古科技大学课程设计任务书课程名称C+语言课程设计设计题目长途客运售票管理系统的设计指导教师时间2011-2012春学期 第17、18周一、教学要求1. 巩固和加深学生对C+语言课程的基本知识的理解和掌握2. 掌握C+语言编程和程序调试的基本技能3. 利用C+语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C+语言解决实际问题的能力二、设计
17、资料及参数用C+设计一个系统,能提供下列服务:(1) 录入消费和支出信息,格式为:日期金额操作类型消费类别备注2011-11-225支出食购买水果2011-11-1040收入食副食补贴其中操作类型包括收入和支出,消费类别为衣,食,住,行和其他。(2) 查询功能。查询某一天的消费和支出记录,并能进行修改; (3) 统计功能。统计某个区间的消费和支出,例如11月份,则输入时间段2011-11-1到2011-11-30统计总的支出和收入。按照消费类别统计某个时间段内的消费记录,如统计11月份买衣服的支出共有多少?三、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实
18、体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书功能:输入正确密码登录系统,增加账目,删除账目,查询及修改账目,统计账目信息,退出系统。设计思路:1.登录系统:输入正确密码进行登录,如密码错误提示重新输入密码,为确保账本安全,只有三次输入机会,三次后将不具有打开此账的权力。2.新增账目:可以增加账目内容,保存新增账目信息,以便查阅。3.删除账目:删除无用或过期账目,此功能为彻底删除,删除后不可恢
19、复数据,若输入日期有误系统给出提示。4.查询及修改:查看账目信息,查账后可以是否对账目进行修改,修改错误账目,并保存修改信息,若输入日期有误系统给出提示。5.统计账目:输入你想查询的账目的起、止日期,若输入日期有误系统给出提示,统计系统自动分类一段时间内的交易类别和消费类别,方便查看。第三章 设计分析3.1系统的基本功能 本软件具有六大模块:登录系统,输入账目,删除账目,查询及修改,统计信息,退出系统。登录系统:输入密码进行登录,如密码错误提示重新输入密码。新增账目:增加账目内容,方便查阅。删除账目:删除无用或过期账目。查询及修改:查看账目,修改错误账目。统计账目:统计与分析账目信息。功能图如
20、下:个人理财 图3.1 系统总体框架图登录系统输入数据删除数据查询及修改统计数据退出系统 3.2系统流程图3.2.1登录流程:开始输入密码 错误 正主菜单 三 确 次 错选择“退出系统” 序号 误结束图3.2.1 登录流程图3.2.2输入流程:开始输入密码 错误 正主菜单 三 确 次 错选择“新增账目”序号 误输入日期输入消费金额输入消操作类型输入消费类别输入备注结束图3.2.2 输入流程图3.2.3删除流程:开始输入密码 错误 正主菜单 三 确 次 错选择“删除账目”序号 误输入删除日期选择删除内容序号结束图3.2.3 删除流程图3.2.4查询及修改流程:开始输入密码 错误 正主菜单 三 确
21、 次 错选择“查询及修改”序号 误输入查询或修改日期是否修改信息 否输入修改内容的序号 是输入修改日期输入金额输入消操作类型输入消费类别输入备注结束图3.2.4 查询及修改流程图3.2.5统计流程:开始输入密码 错误 正主菜单 三 确 次 错选择“账目统计” 序号 误输入统计开始日期输入统计结束日期结束图3.2.5统计流程图第四章 运行及测试结果4.1、登录主界面 :图4.1.1主界面登录窗口,密码正确时进入主界面图4.1.2 系统主界面,选择系统功能4.2新增账目功能:图4.2.1 输入账目信息4.3修改账目信息:图4.3.1删除无用信息4.4查询、修改账目:图4.4.1 查询交易日期,并决
22、定是否修改图4.4.2 查询后修改信息4.5统计账目:图4.5.1 统计一段时间内总收支、以及各消费类别的金额4.6退出系统:图4.6.1 使用完毕,退出系统并保存第五章 总结 在为期两周的课程设计中,我体会颇多,学到很多东西。我懂得了如何用 MFC编写可视化界面的应用程序,利用设计个人记账系统的机会,我加强了对C+的认识,复习了自己以前的知识,自己的逻辑思考能力也提高不少。从而对Microsoft Visual C+ 6.0又有了更深入的认识!在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,比如总体设计、数据库设计(含概念设计、逻辑设计、物理设计)、程序模块设计(含功能需求、用户界
23、面设计、程序代码设计与分析、运行结果)、系统使用说明等。总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。 最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我对编程更加热爱了。整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。特别是学会了在Visual C+ 集成开发环境中如何调试程序的方法。 当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设计中所有辅导老
24、师对我的关心和帮助,诚心诚意感谢他们对我的鼓励与教导,是她们在我迷茫的时候给了我些许提示,激发了我编程的灵感;还有,我在此也十分感谢本次课程设计中同学们对我的帮助,尽管本次不是团队合作,但是他们也给了我不少的提示和帮助,是他们让我有信心坚持做下来,在此感谢他们! 通过完成本次面向对象程序设计的任务,使我熟练和掌握了这学期所学的有关visual c+中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。 面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能
25、力及面向对象程序设计技能。 此次,应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题。而这些问题,又都是课本上很少提到的、更深一层的知识领域和应用领域。这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。 当然,此次任务的完成,也体现出同学之间的团结精神。所遇种种难以解决的问题,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难。 “实践是检验真理的唯一标准”。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,
26、才会认可它的真实性。面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。 附录以下是程序的源代码,并且加上了详细的注释:#include /io流#include /字符#include /setw#include /对文件操作#include /exit(0); cstdlib是C+里面的一个常用函数库, 等价于C中的。 using namespace std; /标准命名空间 防止与全局标示符重名class book public: book();/默认构造函数 char inter_face();/首页 void add_info();/
27、添加数据 void del_info();/删除数据 void show_info();/显示指定数据 void count();/统计 void save_new();/保存新增加的数据 void CreateFile(char *s); void ReadFile(char *s); void print();private: string cosdate;/日期 float money;/交易金额 string coslx;/交易类型 string xflb;/消费类别 string rema;/备注; book:book() /构造函数 初始化 cosdate = 0; money =
28、 0; coslx = 0; xflb = 0; rema = 0; /首页char book:inter_face() system(cls); /清除屏幕 cout endl; couttt$ endl tt endltt$ 个 人 记 账 系 统 $ endl tt endltt$ endl tt$ $ endl tt$ 1.新增账目 4.账目统计 $ endl tt$ $ endl tt$ 2.删除账目 5.退出系统 $ endl tt$ $ endl tt$ 3.查询及修改 $ endl tt$ $ endltt$ endl endlchoose; fflush(stdin);/清缓
29、存 return choose; /添加数据 void book:add_info() cout endl 根据提示输入消费信息 endl endl cosdate; fflush(stdin); cout money; fflush(stdin); cout coslx; fflush(stdin); cout xflb; fflush(stdin); cout rema; fflush(stdin); save_new(); /保存信息函数 cout endl endl 信息已经保存! endl endl; system(pause); /等待 按任意键继续 /删除数据void book:
30、del_info() ofstream outtemp1(temp1.txt, ios:out); /写操作 输出方式打开ofstream outData(temp.txt, ios:out); ifstream indata(Personal system of accounting.txt, ios:in); / 读操作 输入方式打开if (!outData | !indata) cout endl 对不起!找不到文件! endl; system(pause); return; string sign; cout endl sign; bool flag = true; string st
31、r1,str2; string str200; int a=1,b; while (indata cosdate) getline(indata, stra);/按行读取if (sign=cosdate) if(flag)cout endl 你想删除的交易: endl endl;/格式化cout setiosflags(ios:left) setw(16) 交易日期 setw(10)交易金额 setw(16) 交易类型 setw(17) 消费类别 setw(20) 备注endl;cout序号:aendl;cout setiosflags(ios:left)cosdate stra endl;f
32、lag = false; a+; if (flag) cout endl 对不起!无记录! endl endl; else cout请选择要删除的记录(序号),退出请输入0,然后回车删除:a|bb;if(b=0)return;outtemp1 setiosflags(ios:left)signstrb endl;outtemp1.close();ifstream in1(temp1.txt, ios:in);getline(in1, str1);in1.close;indata.close(); ifstream indata(Personal system of accounting.txt
33、, ios:in);/将不是要删除的信息保存到temp文件中 while (getline(indata, str2) if(str2!=str1) outDatastr2endl; indata.close(); outData.close(); ofstream out(Personal system of accounting.txt, ios:out); ifstream in(temp.txt, ios:in); if (!out | !in) cout endl 对不起不能打开文件! endl endl; system(pause); return; while (getline(
34、in, str2) /用缓存数据覆盖源文件的数据 out str2endl; out.close();/关闭文件in.close(); cout endl 此交易记录已删除! endl endl; system(pause); /查询、修改void book:show_info() ofstream outData(temp.txt, ios:out);ofstream outtemp1(temp1.txt, ios:out); ifstream indata(Personal system of accounting.txt, ios:in); if (!outData | !indata)
35、 cout endl 对不起!找不到文件! endl; system(pause); return; string sign; cout endl sign; bool flag = true; string str200; int a=1,b=0,c; string str1,str2; while (indata cosdate) getline(indata, stra);if (sign=cosdate) if(flag)cout endl 你想查询/修改的交易: endl endl;cout setiosflags(ios:left) setw(16) 交易日期 setw(10)交易金额 setw(16) 交易类型 setw(17) 消费类别 setw(20) 备注endl;cout序号:aendl;cout setiosflags(ios:l