面向对象程序设计课程设计报告1课程设计2009~2010学年第一学期设计题目《面向对象程序设计》课程设计院(系)计算机科学与信息工程学院专业计算机科学与技术班级学号学生姓名设计时间2010年1月25日--1月29日指导教师提交日期2010年1月29日面向对象程序设计课程设计报告2上海应用技术学院课程设计任务书课程名称《面向对象程序设计》课程设计课程代码B704210设计题目科研经费管理系统的设计题目序号设计时间2010年1月25日——2010年1月29日系(院)计算机科学与信息工程系专业班级一、课程设计任务(条件)、具体技术参数(指标)本课程设计是《面向对象程序设计》课程的后继教学环节,学好C++语言就必须坚持用面向对象的思维方式分析问题、解决问题。科研经费管理系统课程设计题目:实现一个简单的科研经费管理系统。系统的主要功能是计算科研经费的使用情况并存档。项目内有5种不同类型的经费支出:图书、培训、调研、出差、设备,他们的经费计算方式各不相同。图书按照实际发票金额计算经费;设备是按照实际发票经额计算经费;培训按照培训费用实际支出*人数;出差按照出差的天数支出出差补贴100/天,调研是培训费+出差补贴科研经费管理系统的设计:对于整个系统的设计思路是,首先,输入编号,支出项;然后,在计算该支出项经费的时候,系统先从已输入的支出项,调用不同的处理程序进行计算;最后将结果存档。从用户需求中,可以发现5种类型的支出项都可以分别设计为一个类。首先,他们都属于支出,因此可以设计一个基类expenditure,然后从中派生出book类,hardware类、training类和travel类。从travel和training中派生出一个research类。根据用户需要expenditure类应该拥有的属性有:编号,支出项名称,支出项编号。expenditure类的服务可以包括info()、search()、countPay()、recordInfo()和recordPay()。其中,info()函数用于接收用户输入的支出信息;search()函数用来根据支出名称查找支出信息;countPay()函数为支出计算函数,但在基类中为空,原因是各类支出项目的计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo()函数和recordPay()函数分别是支出信息和支出经额,分别将信息面向对象程序设计课程设计报告3存入文件info.txt和pay.txt。二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求)(1)分析科研经费管理系统程序结构:画出程序粗略的流程图和各个模块的详细流程图,每个功能模块用文字说明他们的功能(与对应流程图放在一起);(2)对你已经实现的功能(修改的、新编写的)做详细的说明,并附上流程图及程序清单。(3)自己对该科研经费管理系统的进一步设想;(4)对于有设想但最终未实现的功能的大致编程思路的阐述;(5)论述在设计过程中遇到的并且对你具有启发性的问题。(6)严禁抄袭,发现雷同,双方扣分。三、课程设计工作进度计划:周一白天:教师布置任务,讲解本课设模块。周一晚上:画出主程序粗略的流程图和各个模块的详细流程图。周三:设计程序及调试程序。同时着手写报告。周四:完成设计,提交报告,接受教师考评。四、主要参考资料(1)《面向对象程序设计》,郑莉,清华大学出版社,(2)《面向对象程序设计C++语言》,朱战立等编西安电子科技大学出版社(3)《面向对象程序设计----VisualC++》,刘斌等编,清华大学出版社(4)《面向对象程序设计----C++语言描述》,RichardJohnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003指导教师(签名):教研室主任(签名):面向对象程序设计课程设计报告4目录1概述:.....................................................................................错误!未定义书签。1.1XXXXXX................................................错误!未定义书签。1.2XXXXXX:..............................................错误!未定义书签。2课题分析.................................................................................错误!未定义书签。2.1XXXX.................................................错误!未定义书签。2.2XXXX.................................................错误!未定义书签。3详细设计说明.........................................................................错误!未定义书签。3.1XXXX.................................................错误!未定义书签。3.2XXX..................................................错误!未定义书签。3.3XXX..................................................错误!未定义书签。4课程设计总结.........................................................................错误!未定义书签。5软件使用说明.........................................................................错误!未定义书签。6附录(参考文献,原代码:)...............................................错误!未定义书签。参考文献:.................................................错误!未定义书签。原代码....................................................错误!未定义书签。面向对象程序设计课程设计报告51.概述1.1基本功能实现一个简单的科研经费管理系统。系统的主要功能是计算科研经费的使用情况并存档。(1)可以输入各个支出项的费用、人数和天数等。(2)可以计算支出项费用。(3)可以查找支出项信息。(4)可以将支出项信息保存进文件。1.2拓展功能无2.课题分析2.1类的设计在这个课程设计中,需要有6个类。根据设计任务,设计一个虚基类expenditure,然后派生出book(图书)类,hardware(硬件)类,training(培训)类和travel(出差)类,从travel类和training类中派生出一个research(调研)类。在基类中,除了定义构造函数和析构函数外,还应定义对各类支出项信息应有的操作,这样可以规范类族中各派生类的基本行为。由于各类支出项经费的计算方法不同,在基类中将countpay()定义为纯虚函数,然后在派生类中进行重新定义其具体实现,以便实现运行时的多态性。classexpenditure{protected:longnumber;charname[20];intpay;public:expenditure();~expenditure();voidinfo();virtualvoidcountpay()=0;intgetpay();char*getname();voidrecordinfo();voidrecordpay();longgetnumber();};classbook:publicexpenditure{private:intbpay;public:voidinfor();voidcountpay();面向对象程序设计课程设计报告6};classhardware:publicexpenditure{private:inthpay;public:voidinfor();voidcountpay();};classtraining:virtualpublicexpenditure{public:inttrainpay;intpeople;voidinfor();voidcountpay();};classtravel:virtualpublicexpenditure{public:intday;inttravelpay;travel();voidinfor();voidcountpay();};classresearch:publictraining,publictravel{public:voidcountpay();voidinfor();};2.2类的实现通过构建变量和函数来体现该类的属性。根据用户需要expenditure类应该拥有的属性有:编号,支出项名称,支出项编号。expenditure类的服务可以包括info()、search()、countPay()、recordInfo()和recordPay()。其中,info()函数用于接收用户输入的支出信息;search()函数用来根据支出名称查找支出信息;countPay()函数为支出计算函数,但在基类中为空,原因是各类支出项目的计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo()函数和recordPay()函数分别是支出信息和支出经额,分别将信息存入文件info.txt和pay.txt。#includeiostream#includefstream面向对象程序设计课程设计报告7#includecstring#includestdlib.husingnamespacestd;expenditure::expenditure(){}expenditure::~expenditure(){}voidexpenditure::info(){cout请输入编号:;cinnumber;cout请输入名称:;cinname;}longexpenditure::getnumber(){returnnumber;}intexpenditure::getpay(){returnpay;}char*expenditure::getname(){returnname;}voidexpenditure::recordinfo(){ofstreamfile(info.txt,ios::app);file编号:numberendl;file名称:nameendlendl;file.close();}voidexpenditure::recordpay(){ofstreamfile(pay.txt,ios::app);file编号:numberendl;file名称:nameendl;file费用:payendlendl;file.close();}voidbook::infor(){cout请输入图书的发票金额:;面向对象程序设计课程设计报告8cinbpay;}voidbook::countpay(){pay=bpay;}voidhardware::infor(){cout请输入设备的发票金额:;cinhpay;}voidhardware::countpay(){pay=hpay;}voidtraining::infor(){cout请输入培训费用:;cintrainpay;cout请输入培训人数:;cinpeople;}v