面向对象程序设计大作业

合集下载

西电2022年秋季《面向对象程序设计(c++)》大作业及答案

西电2022年秋季《面向对象程序设计(c++)》大作业及答案

学习中心/函授站姓名学号西安电子科技大学网络与继续教育学院2022 学年下学期《面向对象程序设计(C++)》期末考试试题(综合大作业)考试说明:1、大作业试题公布时间:(1)毕业班:2022 年10 月21 日;(2)正常班:2022 年11 月18 日;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院2022 秋期末考试答题纸》(个人专属答题纸)手写完成,要求字迹工整、卷面干净、整齐;4、在线上传时间:(1)毕业班学生于2022 年10 月21 日至2022 年11 月1 日在线上传大作业答卷;(2)正常班学生于2022 年11 月18 日至2022 年12 月5 日在线上传大作业答卷;5、拍照要求完整、清晰,一张图片对应一张个人专属答题纸(A4 纸),正确上传。

一、简答题(10 分)1、运算符 new 和 delete 的功能分别是什么?(3 分)答案:运算符new的功能是创建动态对象;delete的功能是释放由new创建的动态对象。

2、若派生类以 private 方式从一个基类派生,派生类的对象可以访问基类中的哪些成员?派生类的成员函数可以访问基类中的哪些成员?(3 分)答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的public和protected成员(2分)。

3、构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?(4 分)答案:构造函数的作用是创建对象并对其进行必要的初始化。

(1分)构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。

(2分)二、填空题(每空 2 分,共 20 分)1、函数的返回值是通过函数体中的return语句带回的;若被调用函数被定义为 void 类型,则被调用函数不带回任何值。

2、表示逻辑关系“ a 大于等于8 或者 a 小于等于5”的C++表达式是。

面向对象程序设计大作业VB_NET

面向对象程序设计大作业VB_NET

《面向对象程序设计》大作业题目:记事本的设计及实现姓名:学号:专业:学院:指导教师:1 课程设计题目和要求 (3)2 功能分析 (3)3 系统设计 (3)3.1主流程图 (3)3.2 “文件”菜单操作流程图 (4)3.3 “编辑”菜单操作流程图 (5)3.4 “格式”菜单操作流程图 (6)3.5“帮助”菜单操作流程图 (7)4. 界面设计 (8)4.1 系统主界面设计 (8)4.2“文件”菜单的菜单项 (8)4.3 打开文件及另存文件时的界面 (9)4.4“编辑”菜单的菜单项 (9)4.5“格式”菜单的菜单项 (10)4.6“帮助”菜单的菜单项 (10)4.7 帮助界面设计 (11)4.8 “查找”功能界面设计 (12)5 总结 (12)6. 附录(源程序清单) (14)6.1全局变量 (14)6.2主程序加载 (14)6.3新建记事本文件 (14)6.4打开已有的记事本文件 (14)6.5 保存记事本文件 (15)6.6另存为所打开的记事本文件 (15)6.7打印所打开的记事本文件 (16)6.8退出主程序 (16)6.9 撤销命令 (16)6.10 剪切命令 (16)6.11 复制命令 (17)6.12 黏贴命令 (17)6.13 “删除”菜单源程序 (17)6.14“查找”菜单源程序 (17)6.15“查找下一个”菜单源程序 (17)6.16“全选”菜单源程序 (18)6.17插入时间/日期源程序 (18)6.18 统计字数源程序 (18)6.19 “自动换行”菜单源程序 (19)6.20 字体的选择 (19)6.21 “帮助”菜单栏源程序 (19)6.22 关于此记事本的信息 (19)1 课程设计题目和要求题目:记事本的设计及实现基本设计要求:(1)功能齐全;(2)保证文件安全,操作简便;(3)操作方便、简单,界面友好;(4)易于维护和补充;(5)对系统的运行效率要高,绝对不能出错,对系统响应速度的要求不高;2 功能分析本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:(1) 菜单中有“文件”、“编辑”、“格式”、“帮助”四个主菜单;(2) “文件”有“新建”、“打开”、“保存”、“另存为”、“打印”及“退出”分别用于新建文件,打开文件,保存文件,另存文件,打印文件及退出记事本。

面向对象程序设计大作业

面向对象程序设计大作业

面向对象程序设计大作业在当今的计算机科学领域,面向对象程序设计(ObjectOriented Programming,简称 OOP)已经成为了一种主流的编程范式。

它为我们提供了一种更加直观、灵活和可维护的方式来构建软件系统。

本次大作业旨在深入探讨和实践面向对象程序设计的核心概念和技术,通过实际的项目开发,提升我们对 OOP 的理解和应用能力。

面向对象程序设计的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。

类是对具有相同属性和行为的对象的抽象描述,它定义了对象的属性和方法。

对象则是类的具体实例,具有自己的状态和行为。

封装将对象的内部实现细节隐藏起来,只对外提供公共的接口,提高了代码的安全性和可维护性。

继承允许子类继承父类的属性和方法,并可以在此基础上进行扩展和修改,实现了代码的复用。

多态则使得不同的对象可以对相同的消息做出不同的响应,增加了程序的灵活性和可扩展性。

在本次大作业中,我们选择了一个图书管理系统作为项目开发的主题。

这个系统需要实现图书的添加、删除、修改、查询等功能,同时还要能够处理用户的借阅和归还操作。

为了实现这个系统,我们首先对系统进行了需求分析,确定了系统的功能和性能要求。

然后,我们根据需求分析的结果,设计了系统的架构和类图。

在设计类图时,我们定义了几个主要的类,包括图书类(Book)、用户类(User)、借阅记录类(BorrowRecord)和图书管理类(LibraryManager)。

图书类包含了图书的基本信息,如书名、作者、出版社、出版日期、ISBN 号等,以及一些操作图书信息的方法,如获取图书信息、修改图书信息等。

用户类包含了用户的基本信息,如用户名、密码、借阅权限等,以及一些操作用户信息的方法,如注册用户、登录用户、修改用户信息等。

借阅记录类包含了借阅的图书、借阅用户、借阅日期、归还日期等信息,以及一些操作借阅记录的方法,如添加借阅记录、删除借阅记录、查询借阅记录等。

吉林大学-2019-2020学年第一学期期末考试《面向对象程序设计》大作业答案

吉林大学-2019-2020学年第一学期期末考试《面向对象程序设计》大作业答案

吉林大学网络教育学院2019-2020学年第一学期期末考试《面向对象程序设计》大作业答案参考答案在后面学生姓名专业层次年级学号学习中心成绩年月日作业完成要求:大作业要求学生手写,提供手写文档的清晰扫描图片,并将图片添加到word文档内,最终wod文档上传平台,不允许学生提交其他格式文件(如JPG,RAR等非word文档格式),如有雷同、抄袭成绩按不及格处理。

一、名词解释(每小题2分,共20分)1、预处理2、宏3、文档4、视图5、控件6、全局变量7、局部变量8、对象9、派生10、继承二、简答题(每小题6分,共60分)1、简要说明Visual C++和C++的区别:2、C++程序与C程序文件扩展名有什么区别?3、简述计算机程序设计语言的发展历程。

4、“编程就是用开发工具写软件”,这种理解你怎么看。

5、C语言是一门面向过程的语言,那么C++是面向什么的语言?6、面向对象的程序设计,其一个重要特点就是“类”的封装,请问“类”中封装了什么?7、初始化一个整型数组,内容是1,2,3:8、简述C++的主要特点9、面向对象程序设计,其“对象”指什么?10、MFC作为一个Windows编程类库,它包含了200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。

请简述采用MFC 编程的优点。

三编程题(每小题10分,共20分)1、输入三个数并求和#include<iostream.h>void main(){cout<<”please enter the value of x,y,z: ”;——————————————————}2、编写一个函数,实现两个数的交换。

void f(int *a, int *b){————————————————————————}答案:一、名词解释(每小题2分,共20分)1、预处理答:程序设计领域中,预处理一般是指在程序源代码被翻译为目标代码的过程中,生成二进制代码之前的过程。

《面向对象程序设计》大作业

《面向对象程序设计》大作业

《面向对象程序设计》大作业项目名称基于C#的一款扫雷游戏班级7B1551组员李豪雄曹启李宁一、开发环境开发环境:vs2010开发语言:C#二、系统功能设计1.创建项目功能实现创建项目,找图片素材2.界面设计介绍关于扫雷游戏界面的设计提出希望在对应级别(初级、中级、高级、自定义)的按钮的显示勾,以表示目前的游戏等级。

3.雷区绘制界面中雷区的绘制方法4.菜单操作有两个时候需要对它进行操作,一个是加载上次游戏设置的时候,一个是在游戏过程中进行设置的时候,设计菜单中的相关方法5.内部实现内部埋雷,放雷,标旗子,标问号的方法6.整体完善写游戏的胜利条件,自定义游戏的初始化及相关调试任务三、实现1、创建项目功能实现玩过扫雷的读者应该知道,扫雷需要用到三种图片素材——地雷、红旗、问号。

当右击一个方块的时候,会插上红旗,表示游戏者认为该方块内有地雷;再次右击该方块,会变成问号,表示不确定该方块内是否有地雷;第三次右击该方块,问号消失,恢复到初始的状态。

我们前往Iconfinder寻找合适的图标,并且通过Photoshop或者Illustrator的处理得到我们所需要的图标。

文章中含有下载地址的图标资源可以使用右键—目标另存为进行下载。

通过一定的搜索以及图片的处理,得到了下面一组素材图标,下载地址:Doubbt、Flag、Mine。

除了这些素材以外,我们还需要找一个图标,使得整个程序看上去更加正式一点,这里使用图标如下,注意程序图标的后缀为ico,下载地址:favicon接下来,我们打开Visual Studio 2013开始创建工程,界面如下:创建好的项目如下图所示。

我们需要对这个窗口的几项属性进行修改,首先通过Text属性将它的标题修改为“Minesweeper”;通过FormBorderStyle属性将它的大小设置为“FixedSingle”,即为不可调节窗口大小;通过MaximizeBox属性将它的最大化按钮设置为“False”,即最大化按钮失效;通过Name属性将它的名称修改为“Form_Main”,修改这个属性主要用于后面书写代码的方便;通过BackColor属性将它的背景修改为“White”。

面向对象程序设计大作业(C++)

面向对象程序设计大作业(C++)

面向对象分析/设计课程大作业银行业务处理系统13级软件学院测试班1367004029曾丹1.需求分析随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。

现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。

近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。

随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。

如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。

支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。

特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。

主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。

此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。

2022春西安电子科技大学《面向对象程序设计(C++)》大作业答案

2022春西安电子科技大学《面向对象程序设计(C++)》大作业答案

学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院2022 学年上学期《面向对象程序设计(C++)》期末考试试题(综合大作业)一、简答题(共 10 分)1.(3 分)什么是引用?它与指针有什么区别?答:(任选一个版本,不要两个版本都抄)答案版本1:引用是为已存在的变量取了一个别名,引用和引用的变量共用同一块内存空间。

1) 引用必须被初始化,指针不必。

所以不存在指向空值的引用,但是存在指向空值的指针。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

答案版本2:引用是某个变量或对象的别名。

(1)引用不是变量,它不占据内存空间,它本身没有内存地址。

引用只是被引用的变量或对象的替身。

(2)引用与指针的区别在于应用不是变量,而指针是变量。

没有引用的引用,却有指针的引用。

2.(3 分)C++提供了哪些循环语句?它们各自的特点是什么?答:C++提供了三种循环语句for、while和do-while。

while循环语句先判断是否满足循环条件,如果满足循环条件,则执行一次循环体,再判断是否执行下一次循环,否则退出循环。

do-while循环语句先执行一次循环体后再判断是继续执行循环体还是退出循环。

for循环先设置循环变量的初值,再判断是执行循环体还是退出循环体。

如果执行了循环体,再改变循环变量值后,判断是执行下一次循环体还是退出循环,依此类推。

3.(4 分)构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?答:构造函数的作用是创建对象并对其进行必要的初始化。

构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。

二、填空题(每空 2 分,共 20 分)1.C++程序中的数据可以分为两大类,;2.C++x = 5,y = 0,z = 3,则表达式 !x || y++ && z 执行表达式后y的值4.下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。

吉林大学2020-2021学年第一学期期末考试《面向对象程序设计》大作业参考答案

吉林大学2020-2021学年第一学期期末考试《面向对象程序设计》大作业参考答案

2020-2021学年第一学期期末考试《面向对象程序设计》大作业一名词解释题 (共10题,总分值30分 )1. 全局变量(3 分):变量分为局部与全局,局部变量又可称之为内部变量。

由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

2. 菜单(3 分):实际是一种树型结构,为软件的大多数功能提供功能入口。

3. 图标(3 分):通常用来做广告宣传的商标或特定标志。

4. main函数(3 分):又称主函数,是程序执行的起点,main是相对来说的,如同音学理论之主调于泛音,泛音即程序中的除main之外的其他函数,迎合人们的思考方式而生成的而非必定的模式。

有主有次,执行起来条清缕析,既可将程序模块化又实现了一个闭合的整体。

5. 控件(3 分):Windows设计了一些具有图形外观的程序实体,这些程序实体在鼠标或键盘的作用下会使程序出现不同的响应,这些可以接收或者产生事件的程序实体就叫做控件。

6. 继承(3 分):指一个类(即称子类)因承袭而具有另一个类(或称父类)的能力和特征的机制或关系。

7. 宏(3 分):计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。

解释器或编译器在遇到宏时会自动进行这一模式替换。

8. 用户界面(3 分):信息系统中需要用户交互的输入和输出部分。

9. 窗口(3 分):计算机图形学中的窗口是用户坐标系中需要进行观察和处理的一个坐标区域。

10. 数据成员(3 分):包含与非叶成员直接相关的值,该值独立于由该成员的后代计算得到的汇总值。

二简答题 (共5题,总分值40分 )11. While语句的形式为while(<表达式> ) <语句> ;当表达式满足什么条件时可以执行语句的内容?(8 分)答:以下是while语句的基本形式: while(表达式)语句:其中“表达式”可以是任意合法的表达式。

面向对象程序设计大作业

面向对象程序设计大作业

《面向对象程序设计》期末大作业一、大作业题目二、要求(1)依照学生人数分成原那么上2至3人(少量4人)一组,各小组选择感爱好的题目,也可自拟题目。

(2)解题要求:现面向对象程序设计语言的特点,程序代码很多于400行;利用技术:表现OOP 的抽象、封装、继承、多态等4种关键技术中的两种或多种;程序结构良好,没有明显错误;依照大作业格式,在课程终止最后两周(1六、17周)上交电子稿。

(3)最终提交。

●大作业报告依照原有的系统设计,编码时期的工作,整理书写实验报告,内容包括:①系统说明②实验分析与结论③收成与体会④附程序代码●最后提交材料:①大作业报告(打印稿和电子稿)②源程序代码(CPP文件),执行文件(EXE)③小组内分工说明(人员名单(不超过4人)、学号、角色分工)三、说明假设两人和多人程序大体相同或撰写的报告大体相同的情形下,经认真比较查证属彼此剽窃的,剽窃者和被剽窃者均按“0”分计。

大作业报告样式如下:(1) 大作业的页面设置为上、下、左、右页边距都为厘米,格式段落中行距为固定值20磅。

(2) 中文字体为宋体小四号,英文字体为Times New Roman小四。

补充说明:关于大作业中的程序、类或函数必然要有详细的注释,如下例所示。

关于类包括:类的成员变量说明,类的成员函数说明,功能,基类、继承类、实现进程等等。

/********************************************************************类名:私有成员:公有成员:功能:作为下面要概念派生类的基类实现步骤:(1)概念类名(2)声明私有成员(3)声明必要的函数作为公有成员,其中狗狗找函数用来分派存储空间,对私有对象进行初始化(4)对类进行封装/********************************************************************关于函数包括:先对函数及各参数进行说明,函数功能说明,实现原理及步骤说明,函数中的关键部位也需要进行说明。

《面向对象程序设计C》课程大作业_1-1

《面向对象程序设计C》课程大作业_1-1
3.在date类中定义成员函数,用于处理月、日的进位的改变问题,特别注意不同月份天数的问题,判断闰年问题。
4.在date类中重载+或-,++或--运算符.设计一个双计时器界面,提供人工设定起始日期,人工加、减日期操作,测试date类中各成员函数是否能正确运行,并给出测试结果的运行截图。
15分
5分
5分
5分
20分
扣5分
成绩评定
基本1
基本2
基本3
基本4
基本5
基本6
提高1
提高2
报告
延期提交
合计
标准分数
10分
5分
15分
20分
15分
5分
5分
5分
20分
扣5分
100分
实际完成情况
教师签名:
2020年月日
报告正文
【注】:
(1)请根据“基本要求”和“提高要求”中列出的项目撰写对应的内容。
(2)请将完整的源码作为附录放在报告正文的最后。
6.对本大作业进行总结(存在的不足、问题、经验等)。
二、提高要求
1.通过继承方式设计出时间类(类名为DateTime)(包含年、月、日、时、分、秒),给出类DateTime的定义和实现,描述设计思路。
2.给出设完整的日历表类(类名为CDate)设计,描述设计思路。
三、其他要求
1.运用课堂所学的知识,按题目的要求独立完成大作业及报告。
2.被认定为抄袭或被抄袭者,本课程最终成绩作不及格处理。
3.在网络教学平台上提交:(最后截止日期为:2020年7月12日)
(1)大作业报告(word版和pdf版各一份)
(2)源代码(仅提交.h和.cpp文件)

面向对象程序设计大作业

面向对象程序设计大作业

面向对象程序设计(C++)大作业(总20页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除面向对象程序设计(C++)课程大作业设计题目:院系:计算机科学与信息工程学院专业班级: 09软件工程(2)班学号姓名: 0042 刘国松4012 吕秀锦0034 高婉婉指导教师:李源2015 年 1月目录一、成员分工 (1)二、需求分析 (2)三、总体设计 (3)四、详细设计 (8)五、系统测试 (24)六、总结 (30)七、参考文献 (31)一成员分工我们小组成员共有三名,分别是刘国松、吕秀锦、高婉婉,为了能按时圆满的完成这次VC++课程设计,我们小组进行了详细的分工,以确保设计能按时完成。

经过周密的考虑和详细的调查最终确定该俄罗斯方块游戏需要以下几个功能模块:(1)需求分析(2)界面的设计(3)背景色的选择模块(4)游戏随机选择方块模块(5)游戏预览功能模块(6)收埋功能模块(7)记分功能模块(8)鼠标控制功能模块(9)模块联结(10)系统测试经过小组成员的讨论,并根据个人的特长和具体爱好做如下具体分工:刘国松具体完成以下模块的设计与实现:(1)需求分析(2)界面的设计(3)背景色的选择模块吕秀锦具体完成以下模块的设计与实现:(1)游戏随机选择方块模块(2)游戏预览功能模块(3)收埋功能模块(4)记分功能模块高婉婉主要具体完成以下模块的设计与实现:(1)鼠标控制功能模块(2)模块联结(3)系统测试二需求分析1.系统概述该游戏软件在Windows系统为玩家提供传统俄罗斯方块游戏的基本功能,玩家可以通过键盘控制在游戏区中堆积软件随机提供的由四个小方块不同组合的7种类型不同颜色的方块,每个小方格的颜色也是随机的,并且在整个下落的过程中,其颜色也呈动态变化。

游戏过程中,每在游戏区堆满一行后,自动消除并记分。

同时消去的行数越多,那一次性所加的分数也就越多。

面向对象程序设计大作业报告模板

面向对象程序设计大作业报告模板

面向对象程序设计大作业------计算器类学院名称信息科学与工程学院专业班级学生姓名 ***** 学号指导教师完成时间: 2012年06月25日计算器类1.编程目的1.1、巩固并加深学生对C++语言程序设计知识的理解;1.2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;1.3、进一步掌握和应用VC++ 6.0集成开发环境;1.4、提高运用C++语言解决实际问题的能力;1.5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;1.6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。

2.系统简介2.1系统目标我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。

要计算功能有以下几个方面:加法,减法,乘法,除法,求Sin,求Cos。

2.2主体功能1、十进制数的加、减、乘、除、乘方等简单计算。

2、科学计算函数,包括正弦、余弦、正切、余切、指数等函数运算。

3、进制间的相互转换函数。

2.3开发环境W indows操作系统,VC++ 6.0, OFFICE WORD3.编程思路3.1我们建立一个calculator类,再通过向这个类中添加各种函数,逐渐完善计算器的各种功能。

3.2对calculator类中的各个函数进行定义,使之能进行所需的运算。

3.3最后通过主函数完成运算。

4.总体设计(附类图)图3-1 系统流程图5.源代码#include<iostream>#include<cmath>#include<string>using namespace std;const double pi = 3.14159265;const double e = 2.718281828459;const int SIZE = 1000;typedef struct node{char data;node *next;}node;typedef struct stack_num//存储数的栈{double *top;double *base;}stack_num;typedef struct stack_char//存储运算符号的栈{char *top;char *base;}stack_char;stack_num S_num;stack_char S_char;char fu[18] = {'\n', ')', '+', '-', '*', '/', '%', '^','Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '('};int compare[1000];double shu[1000];double dai_result;int biao = 0;char line[SIZE];void init()//初始化{compare[fu[0]] = -2;//用数字的大小表现出符号的优先级compare[fu[1]] = -1;compare[fu[2]] = 2;compare[fu[3]] = 2;compare[fu[4]] = 4;compare[fu[5]] = 4;compare[fu[6]] = 4;compare[fu[7]] = 5;for(int i = 8; i <= 15; i++)compare[fu[i]] = 6;compare[fu[16]] = 7;S_num.base = (double*)malloc(sizeof(double)*SIZE);//为栈开辟空间S_char.base = (char*)malloc(sizeof(char)*SIZE);//同上S_num.top = S_num.base;S_char.top = S_char.base;}void push_num(double n)//数字进栈{* ++S_num.top = n;}void push_char(char c)//运算符号进栈{* ++S_char.top = c;}double pop_num()//数字出栈{double m = *S_num.top;S_num.top--;return m;}char pop_char()//运算符号出栈{char cc = *S_char.top;S_char.top--;return cc;}char get_top_char()//得到运算符号的栈中最顶端的运算符号{return *S_char.top;}double operate(double y, char c, double x){double r;if(c == '-')r = x - y;else if(c == '+')r = x + y;else if(c == '/' && y != 0)r = x / y;else if(c == '*')r = x * y;else if(c == '^'){r = 1;for(int i = 1; i <= y; i++)r *= x;}else if(c == '%'){int r0 = (int)x % (int)y;r = double(r0);}return r;}double operate_one(double one, char cc){double r;if(cc == 'Q')r = sqrt(one);else if(cc == 'C')r = cos(one);else if(cc == 'S')r = sin(one);else if(cc == 'T')r = tan(one);else if(cc == 'c')r = acos(one);else if(cc == 's')r = asin(one);else if(cc == 't')r = atan(one);return r;}double operate_L(double a, double b, char dian)//求对数的值{double r = log(b) / log(a);return r;}double compute()//对整个表达式的计算{char c;//表示运算符号int p = 0;//用于shu[++p], 先初始化int i, j;init();//进行初始化push_char('\n');line[strlen(line)] = '\n';line[strlen(line)+1] = '\0';if(biao)push_num(dai_result);biao = 0;for(i = 0; line[i] != '\0';){int flag = 0;int flag1 = 1;//标记是否是运算符号int flag2 = 1;//标记是否出现'_';double h = 0;int ge;//位数int biao_dian = 0;//是否是小数的类型while(1){flag1 = 1;for(j = 0; j <= 16; j++){if(line[i] == fu[j]){flag1 = 0;break;}}if(line[i] == '_'){break;}if(line[i] == '.'){i++;ge = 0;biao_dian = 1;}if(line[i] == 'P'){shu[++p] = pi;i++;break;}if(line[i] == 'E'){shu[++p] = e;i++;break;}if(flag1){h = h * 10 + (line[i] - '0');flag = 1;i++;if(biao_dian)ge++;}elsebreak;}if(flag){if(biao_dian){int r = 1;for(int k = 1; k <= ge; k++)r *= 10;h /= r;}shu[++p] = h;//把转化而来的数字存于数组}if(line[i] == '+')shu[++p] = -1;else if(line[i] == '-')shu[++p] = -2;else if(line[i] == '*')shu[++p] = -3;else if(line[i] == '/')shu[++p] = -4;else if(line[i] == '%')shu[++p] = -5;else if(line[i] == '^')shu[++p] = -6;else if(line[i] == 'Q')shu[++p] = -7;else if(line[i] == 'L')shu[++p] = -8;else if(line[i] == 'C')shu[++p] = -9;else if(line[i] == 'S')shu[++p] = -10;else if(line[i] == 'T')shu[++p] = -11;else if(line[i] == 'c')shu[++p] = -12;else if(line[i] == 's')shu[++p] = -13;else if(line[i] == 't')shu[++p] = -14;else if(line[i] == '(')shu[++p] = -15;else if(line[i] == ')')shu[++p] = -16;else if(line[i] == '\n')shu[++p] = -17;i++;}i = 1;while(shu[i] != -17 || get_top_char() != '\n'){double m = shu[i];if(m >= 0){push_num(m);i++;}else{if(m == -1)c = '+';else if(m == -2)c = '-';else if(m == -3)c = '*';else if(m == -4)c = '/';else if(m == -5)c = '%';else if(m == -6)c = '^';else if(m == -7)c = 'Q';else if(m == -8)c = 'L';else if(m == -9)c = 'C';else if(m == -10)c = 'S';else if(m == -11)c = 'T';else if(m == -12)c = 'c';else if(m == -13)c = 's';else if(m == -14)c = 't';else if(m == -15)c = '(';else if(m == -16)c = ')';else if(m == -17)c = '\n';char ch = get_top_char();//得到最顶端运算符号if(compare[ch] < compare[c])//运算符号级别的比较{push_char(c);i++;}else if(ch == '(' && c == ')'){pop_char();i++;}else if(compare[ch] >= compare[c] && ch != '(' && ch != '\n'){if(ch == 'Q' || ch == 'C' || ch == 'S'|| ch == 'T'|| ch == 'c' || ch == 's' || ch == 't'){double one = pop_num();char dian = pop_char();push_num(operate_one(one, dian));}else if(ch == 'L'){double one_L = pop_num();double two_L = pop_num();char dian = pop_char();push_num(operate_L(two_L, one_L, dian));}else{double x = pop_num();double y = pop_num();char dian = pop_char();if(dian == '/' && x == 0)//判断是否除了"零"{cout<<"由于您除了零,结果将是错误的"<<endl;}push_num(operate(x, dian, y));//把进行一次计算的结果入栈}}else{push_char(c);i++;}}}double result = pop_num();//得到结果return result;}int check_kuohao()//检查表达式括号是否匹配{int i, f = 0;int kuo[SIZE], key = 1;memset(kuo, 0, sizeof(kuo));for(i = 0; line[i] != '\0'; i++){if(line[i] == '(')kuo[++f] = 1;else if(line[i] == ')'){if(kuo[f] == 1){kuo[f] = 0;f--;}else{key = 0;break;}}}if(key && f == 0)return 1;elsereturn 0;}int check_char()//检查运算符号是否合法(如: 1 +* 4) {int i, ge;for(i = 0; line[i] != '\0'; ){ge = 0;while(line[i] == '+' || line[i] == '-' || line[i] == '*'|| line[i] == '/' || line[i] == '%' || line[i] == '^'|| line[i] == 'Q' || line[i] == 'L' || line[i] == 'S'|| line[i] == 'C' || line[i] == 'T' || line[i] == 's'|| line[i] == 'c' || line[i] == 't'){ge++;i++;}i++;}if(ge >= 3)return 0;elsereturn 1;}void output(double result)//打出结果{printf("所得结果是: ");cout<<result<<endl;}void check()//检查表达式是否合法{void introduce();char cc;//决定计算器按哪种功能进行计算double result;//结果void input();//定义if( check_kuohao() && check_char() )//看是否合法, 合法则计算{result = compute();output(result);cout<<"输入一个字符'M'或'D'或'F', 决定是否继续: "<<endl;while(cin>>cc){if(cc == 'M'){system("cls");introduce();printf("您上次所得结果为: ");cout<<result<<endl;cout<<"在上次计算结果的基础上, 请继续输入想计算的表达式"<<endl;dai_result = result;biao = 1;input();//输入表达式break;}else if(cc == 'D'){system("cls");introduce();cout<<"计算器已清零, 请输入您所要计算的表达式"<<endl;input();//输入表达式break;}else if(cc == 'F'){system("cls");cout<<"计算器关闭, 谢谢使用!"<<endl;break;}else{cout<<"所输入字符无效, 请输入一个字符'M'或'D'或'F'!"<<endl;continue;}}}else//不合法,分两种不合法{if(check_kuohao() == 0 && check_char() == 1){cout<<"您所输入的表达式括号不匹配, 请重新输入:"<<endl;input();//输入表达式}else{cout<<"您所输入的表达式不合法, 请重新输入:"<<endl;input();//输入表达式}}}void tackle_fuhao()//处理负号{node *root, *head, *p, *q, *p1;root = head = new node;head->next = NULL;int i;for(i = 0; line[i] != '\0'; i++)//建立链表{p = new node;p->data = line[i];p->next = head->next;head->next = p;head = p;}q = (node*)malloc(sizeof(node));head = root;if(root->next->data == '+' || root->next->data == '-')//处理第一个字符{p = new node;p->data = '0';p->next = head->next;head->next = p;}if(root->next != NULL){for(q = root->next; q; q = q->next){if(q->data == '(' && (q->next->data == '-' || q->next->data == '+')){p = new node;p->data = '0';p->next = q->next;q->next = p;}}}p1 = new node;int qi = -1;for(p1 = root->next; p1; p1 = p1->next){line[++qi] = p1->data;}line[++qi] = '\0';}void input()//输入{cin>>line;if(biao == 0)tackle_fuhao();//处理负号check();//检查表达式是否合法}void introduce()//对计算器的符号功能的简要介绍{cout<<"★★★★★★★★★欢迎使用本计算器★★★★★★★★★"<<endl;cout<<"*******************计算器简要介绍*******************"<<endl;cout<<"C(cos) S(sin) T(tan) a(arccos) c(arcsin) "<<endl;cout<<"7 8 9 / on t(arctan) "<<endl;cout<<"4 5 6 * % L(log)"<<endl;cout<<"1 2 3 - M(M+) Q(sqrt) "<<endl;cout<<"0 . + ^ F(off) Enter(=) "<<endl;cout<<"☆☆☆☆☆☆☆关于计算器的一些输入说明☆☆☆☆☆☆☆"<<endl;; cout<<"*******对于对数输入 L2_5 表示以2为底5的对数*********"<<endl; cout<<"*M(继续上次的计算,如:上次结果为10,现输入+10.5*2)*"<<endl; cout<<"*****************D(清零并继续输入)******************"<<endl;cout<<"********************F(程序结束)*********************"<<endl;cout<<"**输入 P 就代表输入圆周率, 输入 E 代表输入自然对数**"<<endl<<endl; }void if_start()//是否启动计算器{introduce();//对计算器的简要介绍cout<<"现在,请输入您所要计算的表达式"<<endl;input();//输入所要计算的表达式}int main(){if_start();//调用是否启动计算器函数return 0;}6.测试(主界面及各功能模块的运行图及说明)进入主菜单,选择要进行的运算。

面向对象程序设计大作业要求

面向对象程序设计大作业要求

面向对象程序设计大作业
姓名:
班级:
学号:
一、论述(20分)
面向对象程序设计思想的优缺点,并详细举例说明其与C语言程序编程的不同。

答:
二、程序设计(80分)
参考实际生活中图书管理、商品销售、餐饮管理、客房管理、工资管理、人事考勤管理系统、文档管理系统,选取其中之一进行程序设计。

要求:按照选取得系统设计相应的类,设计的类至少包括添加、删除、查看(添加信息、删除信息)、退出四个,每个类至少包括四种数据成员,三种成员函数,实现的功能按照对应类设计,可按照自己设计再酌情添加相关类,同时可保存为文件。

(提示:作业重点是四个类的设计,并在设计作业中说明这四个类应该如何使用,程序具备的功能。


时间要求:截至12月5日前完成大作业,作业分纸质报告和程序电子文档。

纸质文档要求:1. 针对所编写的程序设计,重点要求分条(至少三条)写明所采用的课程中概念和思想,及具体使用方法。

2.(1)类的主要功能描述(1页左右),(2)重点函数实现方法描述(1页左右),(3)有简单应用示例(至少四张图),(4)类代码(五号新罗马字体,单倍行间距,建议分栏排版和双面打印,以内容整齐为准,学生自行掌握);
电子文档要求:(1)由类代码文件、main()函数文件及cpp、obj、exe文件组成的文件夹,(2)应用示例(各功能运行结果截图),每人一个文件夹(命名方式:学号_19x班_姓名),班长收齐,集中上交。

大作业程序设计如下:。

面向对象程序设计大作业报告

面向对象程序设计大作业报告

面向对象程序设计大作业------计算器类学院名称(四号宋体居中)填写全称专业班级(四号宋体居中)填写全称学生姓名(四号宋体居中)学号(四号宋体居中)指导教师(四号宋体居中)完成时间:年月日计算器类1.编程目的2.系统简介本计算器程序可以进行加减乘除平方的基本运算,及二进制,十进制,八进制,十六进制之间的转换,三角函数的计算。

程序是用类实现的,采用多文件结构。

3.编程思路将程序分成三个模块,分别是:加减乘除平方基本运算模块;进制转换模块;三角函数计算模块;然后设计一个menu()函数将对三个模块进行调用,该函数通过主函数进行调用。

程序分成三个文件,分别是:calculator.h 、caculator.cpp main.cpp;4.总体设计(附类图)(1)加减乘除平方进本运算模块:该功能主要是利用运算符重载,对+ - * / ^ 进行重载,使其完成相应的计算;用户首先输入要计算的表达式,然后从表达式中提取出运算数和运算符,如果输入有误则对用户进行提示,让其重新进行输入;利用构造函数构造三个变量,分别对应运算数和结果,判断运算符的类型,调用重载函数进行计算通过构造函数将计算结果进行保存,最后调用类中的show()函数将结果显示出来;特别的,对于除法运算,应该判断除数是否为0,然后进行计算,由于计算结果可能不是整数,所以增加对double类型的构造函数,显示结果时调用的是show2()函数进行显示。

(2)进制转换模块:本程序不光可以进行2,4,8,16进制之间的转换,可以进行任意进制之间的转换。

用户首先输入需要进行进制转换的数和该数的进制,然后输入想要转换的进制。

通过构造函数产生两个变量,然后调用scalechange()函数进行进制转换。

并将结果进行输出。

(3)三角函数模块:程序可对8种三角函数进行计算,用户首先输入三角函数表达式,然后程序从表达式中提取出想用的三角函数和运算数,然后判断三角函数的类型,通过构造函数定义类的变量,调用TriFunction()进行计算,同样的因为计算的三角函数的数比一定为整数,所以设置flaot类型的构造函数;在类中分别实现8中三角函数的功能,判断用户要计算的函数进行调用。

面向对象程序设计(C++)大作业任务书

面向对象程序设计(C++)大作业任务书

《面向对象程序设计(C++)》大作业任务书一、题目每组同学(3人一组)可从下列给出的参考题目中任选一题完成,不可以重复。

(1)消费卡支付管理系统(2)驾校学员管理系统(3)网吧上网管理系统(4)超市管理系统(5)网上购物管理系统(6)校园一卡通管理系统(7)家族族谱管理系统(8)银行管理系统(9)个人财务管理系统(10)图书馆管理系统(11)学生成绩管理系统(12)药店进销存管理系统(13) 学生选课管理系统(14)高校招生管理系统(15)公交一卡通管理系统(16)食品安全管理系统(17)机场汽车出入管理系统(18)个人电话簿管理系统(19)建筑公司承包管理系统(20)餐馆营业管理系统其余题目略。

二、对象本学期“面向对象程序设计(C++)”选课班全体同学。

三、目的(1)掌握面向对象程序设计(OOP)的思想,区别传统的过程式程序设计思想,能够使用面向对象的程序设计思想解决实际问题;(2)掌握在Visual C++集成开发环境下编辑、编译、链接和运行一个C++程序的基本方法;(3)独立完成每个程序设计和编码,能够灵活运用各种调试命令修改源程序中可能出现的错误,并能根据问题进行学习、拓广、深化。

(4)学会科学地撰写总结报告,加深对所学知识的理解和掌握,答辩中考察学生的技能,并培养学生的表达和思辨能力。

四、要求(1)根据学生人数分成原则上3人(少量4人)一组,各小组选择感兴趣的题目,在课外完成查找资料、选题、拟大纲、小组讨论、研究写作等各环节;每一环节完成后,在课堂上进行小组之间的讨论、教师点评,最后确定解决问题的方案。

(2)问题规模:体现面向对象程序设计语言的特点,程序代码不少于400行;使用技术:体现OOP的抽象、封装、继承、多态等4种关键技术中的两种或多种;程序结构良好,没有明显错误;按照大作业格式,在课程结束前一周交电子稿和打印稿。

五、内容(1)系统说明书内容包括:①问题描述②类体系设计和程序流程图③各类定义的基本功能,即主要数据和函数功能描述④拟采用开发平台(Visual C++,Borland C++等)(2)大作业报告根据原有的系统设计,编码阶段的工作,整理书写实验报告,内容包括:①系统说明②实验分析与结论③收获与体会④附程序代码(3)最后提交材料:①大作业报告(打印稿和电子稿)②源程序代码(CPP文件),执行文件(EXE)六、评分本次大作业占期末考试总成绩的20%,满分20分。

面向对象程序设计大作业参考题目及要求

面向对象程序设计大作业参考题目及要求

面向对象程序设计大作业参考题目1、学生信息管理(1)问题描述学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。

试设计一学生信息管理系统,使之能提供以下功能:●系统以菜单方式工作●学生信息录入功能(学生信息用文件保存)---输入●学生信息浏览功能——输出●查询、排序功能——算法1、按学号查询2、按姓名查询●学生信息的删除与修改(可选项)(2)功能要求●界面简单明了;●有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入;●最好用链表的方式实现。

(3)算法分析首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:是定义一个数组来存储,还是定义一个链表呢?在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。

对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。

文件的读写操作大家参照书中的有关文件的章节。

2、学生综合测评系统每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。

考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。

A、学生信息处理(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。

提示:学生信息可先输入到数组中,排序后可写到文件中。

(2) 插入(修改)同学信息:提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容,(3) 删除同学信息:提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删除后的信息写到文件中。

面向对象程序设计大作业

面向对象程序设计大作业

一、编程题。

根据程序要求,写出函数的完整定义。

(40分)1.写一个函数,找出给定字符串中大写字母字符(即’A’-‘Z’这26个字母)的个数(如字符串”China Computer Wrold”中大写字母字符的个数为3个)。

函数的原型:int CalcCapital (char *str);函数参数:str为所要处理的字符串;函数返回值:所给字符串中数字字符的个数2.写一个函数,用递归函数完成以下运算:sum(n) = 1 –1/2 + 1/3 –1/4 + …-(1/n)*(-1)n (其中n>0)函数原型:float sum(int n);函数参数:n为正整数。

函数返回值:相应于给定的n,右边表达式运算结果。

提示:你可以使用递归表达式:sum(n) = sum(n-1) -(1/n)*(-1)n3. 给定新数值,在一个按节点所存放数值从大到小排序的链表中,找适当位置插一个新节点,仍保持有序的链表,写一个函数,完成此操作。

函数的原型:Node * InsNode(Node * head, int newV alue);其中,链表节点的定义如下:struct Nodee{int Value; //存放数值Node * next; //指向链表中的下一个节点};函数参数:函数的第一个参数head指向链表头一节点的指针,如果链表为空,则head的值为NULL。

第二个参数newValue为所给定的插入新节点的新数值。

函数返回值:当成功地插入新的节点时,函数返回指向新链表头一节点的指针,否则,若不能申请到内存空间,则返回NULL。

4.写一个函数,找出给定数组中具有最小值的元素。

函数的原型:char MinCode(char charAry[]);函数参数:charAry所要处理的字符数组名;函数返回值:返回具有最小ASCII码的字符。

二、理解问答题:(20分)下面的文件stack.h是一个堆栈类模板Stack的完整实现。

《面向对象程序设计》大作业要求和任务书范文

《面向对象程序设计》大作业要求和任务书范文

《面向对象程序设计》大作业要求和任务书一、目的和要求检验学生学习《面向对象程序设计》课程后的学习成果,对于软件程序设计主流方法和思想——面向对象程序设计方法和思想的牢固掌握和熟练应用是一个非常重要的检测,是后续实践课程得以顺利进行的必要保证,对学生的程序设计能力培养和软件工程能力的培养具有重要的作用和意义。

要求学生综合应用已学的相关知识,例如程序设计基本思想和方法、C++语言、面向对象程序设计思想和方法,通过对真实世界的模拟和抽象来解决一些比较简单的实际问题。

要求学生针对比较系统的题目进行编码、测试,并进行设计说明书的撰写,从而培养和锻炼学生初步的工程意识和做法。

加深对所学知识的理解和掌握,巩固课程学习的内容,培养学生掌握面向对象程序设计(OOP)的思想,锻炼其使用面向对象的程序设计思想分析和解决实际问题的能力,培养上机动手能力,培养文档报告书面表达和思辨的能力。

要求学生对自己学过的C++知识进行综合运用,要求要用到类的特性:即类的封装、类的抽象、继承和多态,编写一些小型的具有一定应用价值的程序,通过对真实世界的模拟和抽象来解决一些比较简单的实际问题;掌握在Visual C++集成开发环境下编辑、编译、链接和运行一个C++程序的基本方法。

二、任务内容参考后附的大作业题目,规定每位同学完成两道题目(第一个题目是计算机类,第二个题目从第2-4题中任选一题)。

针对所选题目完成如下具体任务:1. 问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?对功能进行说明;2. 类设计:综合考虑系统功能,对问题描述中涉及的操作对象定义相应的数据类型。

抽象数据类型的实现尽可能做到数据封装,充分运用继承、派生、多态等知识,给出用UML描述的类之间的关系图;3. 详细设计:给出各个主要模块的算法,并画出模块之间的调用关系图;要使得系统结构清晰、合理、简单和易于调试,写出主要函数的算法框架;4. 程序编码:把详细设计的结果进一步求精为程序设计语言程序。

面向对象程序设计(大作业)

面向对象程序设计(大作业)

一、名词解释(每题4分,共40分)1.面向对象面向对象:相对于面向过程而言的,所谓面向对象就是不在追求其操作的过程而是去实现其中的方法。

2.对象对象:对象就是用来描述客观事物的一个实体,有一组属性和方法构成的。

3.构造函数构造函数:主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new 运算符一起使用在创建对象的语句中,也是一种特殊的方法。

4.析构函数析构函数:是与构造函数相反,当对象结束其生命周期时,系统自动执析构函数。

其主要作用是用delete释放建立对象用new开辟内存空间。

5.继承继承:继承是指一个对象直接使用另一对象的属性和方法6.多态多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性7.引用引用:使用它指向了一个A对象,也可以说它引用了一个A对象8.友元友元:指某些虽然不是类成员却能够访问类的所有成员的函数。

9.模板模板:某种事物所依照的样本10.异常处理异常处理:是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况。

二、综合回答题(每小题15分,共60分)1.请介绍运算符重载的意义。

答:所谓重载,就是重新赋予新的含义。

运算符函数重载就是对原有元算符进行赋予新的含义从而实现运算符的重载.可以实现运算符重载的包括:算术运算符:+,-,*,/,%,++,--;位操作运算符:&,,~,^,<<,>>逻辑运算符:!,&&,;比较运算符:<,>,>=,<=,==,!=;赋值运算符:=,+=,-=,*=,/=,%=,&=,=,^=,<<=,>>=;其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*不能实现运算符重载的运算符包括:.,.*,::,?:2.谈谈多态的意义。

答:封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了代码重用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象程序设计大作业------计算器类、学校人员管理系统学院名称数学与系统科学学院专业班级信息与计算科学2013-2班学生姓名陈涛学号 ************ 指导教师孙红梅完成时间:2015 年 7月 1 日计算器类目的和要求设计一个计算器类模板,适用各类型表达式的“+、-、×、/”数学四则运算以及“>、>=、<、<=、!=、==”等关系运算。

数学四则运算表达式中可含有加、减、乘、除运算符以及各型数据的运算对象。

程序可以直接输入数学表达式以及关系表达式,不需要任何转换,就可以直接输出数学四则运算和逻辑运算的结果。

并且操作简单、界面清晰、灵活、实用、方便等。

(系统功能可充分自由发挥)。

扩展功能:三角运算、进制转换、开方、幂指数等。

问题描述设计一个简单计算器。

用户输入四则运算表达式,程序输出正确结果。

当表达式中数据格式或运算符输入错误,程序给出错误信息。

要求:(1)表达式的左、右操作数可以为整数或实数。

(2)运算符限制为+,-,*,/(3)输入表达式允许有前导空格,允许在运算符前后嵌入空格。

(4)检测表达式由以下函数完成:void check(char *input, int &a, double &y, int &op, char * &err);其中参数意义如下:input 输入表达式的字符串。

x 返回表达式的左操作数转换结果数值。

此题为简单起见,把数据统一转换成double类型。

y 返回表达式的右操作数转换结果数值。

op 返回对运算式的判断结果。

若输入表达式左、右操作数和运算符都正确,则返回值为1、2、3、4,分别表示做+、-、*、/运算。

若返回-1,表示左操作数错;若返回-2,表示右操作数错;若返回-3,表示操作符错。

err 返回显示错误信息的字符串。

附录(源程序代码)#include "iostream"#include "string"using namespace std;void check(char *input, double &x, double &y, int &op, char * &err); double chage(char *ch);int main(){double x,y;int op;char input[40],*err;double result;gets(input);check(input,x,y,op,err);if(op<0){cout<<err<<endl; return 0;}switch(op){case 1: result=x+y; break;case 2: result=x-y; break;case 3: result=x*y; break;case 4: result=x/y; break;}cout<<input<<"="<<result<<endl;return 0;}void check(char * input, double &x, double &y, int &op, char * &err) {int i=0,j=0,k;int point=0;char leftx[20],righty[20];while(input[i]==' ') i++;j=i;if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9')){err="左操作数错误!"; op=-1; return;}while((input[j]>='0'&&input[j]<='9')||input[j]=='.'){if(input[j]=='.') point++;if(point>1) {err="左操作数错误!"; op=-1; return;}j++;}k=0;while(i<j) leftx[k++]=input[i++];leftx[k]='\0';x=chage(leftx);while(input[i]==' ') i++;switch(input[i]){case '+': op=1; i++; break;case '-': op=2; i++; break;case '*': op=3; i++; break;case '/': op=4; i++; break;default: op=-3;err="运算符错误!";return;}while(input[i]==' ') i++;j=i;point=0;if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9')) {err="右操作数错误!"; op=-2; return;}while((input[j]>='0'&&input[j]<='9')||input[j]=='.'){if(input[j]=='.') point++;if(point>1) {err="右操作数错误!"; op=-2; return;}j++;}k=0;while(i<j) righty[k++]=input[i++];righty[k]='\0';y=chage(righty);if(op==4&&y==0){err="除数不能为0"; op=-2; return;}}double chage(char *ch){int i=0,j,f=-1;double result=0,wre;while(ch[i]){if(ch[i]=='.') break;i++;}f=i;for(i=f-1;i>=0;i--){wre=1;j=0;while(j<f-i-1) {wre*=10; j++;}result+=(ch[i]-'0')*wre;}for(i=f+1;ch[f]&&ch[i];i++){wre=1;j=0;while(j<i-f) {wre*=0.1; j++;}result+=(ch[i]-'0')*wre;}return result;}指导教师评语成绩:指导教师(签章):2015年月日目的与要求本程序用于管理一个公司的人员工资,所有雇员类(Employee)有共性的数据成员是:编号、姓名和工资。

技术员类(Technician)的数据成员包括共性的数据成员以及工作时间(每月的)、每小时的工资。

销售员类(Salesman)的数据成员包括共性的数据成员以及销售额(本月)、提成。

经理类(Manager)的数据成员包括共性的数据成员以及月工资。

销售员兼经理类(Salesmanager)的数据成员包括销售员类和经理类的数据成员。

问题描述(1)公司主要有4类人:经理、计术员、销售员、销售经理。

要求存储这些人的职工号、姓名、月工资、年龄、性别等信息。

(2)工资的计算方法A、经理:固定月薪为8000元;B、技术员:工作时间*小时工资(100元每小时);C、销售员:销售额*4%提成;D、销售经理:底薪(5000元)+所辖部门销售额总额*0.5%;(3)输入员工基本数据,要求每类人员不能少于2人。

(4)实现功能数据录入:输入各项数据;数据统计:统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行的冒泡排序;数据打印:打印各类员工的数据信息;数据备份:把各类员工的数据信息写入文件中保存;退出:退出本系统(6)菜单说明数据录入指通过键盘输入各类员工的各项数据;数据统计指统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行的冒泡排序;数据打印指按照表格的格式在屏幕上输出各类员工的信息;数据备份指将所有员工的信息保存到文件;退出:结束程序的运行。

附录(源程序代码)#include<iostream>#include<string>#include<stdlib.h>#include<iomanip>#include<fstream>using namespace std;ofstream outfile;const int B=2;const int T=2;const int SB=2;const int S=4;int wage(int n);void technicianinformatian();void managerinformation();void salesmanagerinformation();void sellerinformation();void total();void maopao();void yejibiao();void SBrank();void excelhead();void excelmiddle();void excelend();void backup_yejibiao();void backup_SBrank();void backup_technicianinformatian(); void backup_managerinformation();void backup_salesmanagerinformation(); void backup_sellerinformation();class Employee{public:int nume() {return(num);}string nam(){return(name);}char showsex() {return(sex);}int showage() {return(age);} protected:int num;string name;char sex;int age;int wage;};class Manager:public Employee{public:Manager() //8000元为经理固定月薪{wage=8000;}int managerwage() {return(wage);}void set_in(){cout<<"经理的编号:";cin>>num;cout<<endl;cout<<"其姓名:";cin>>name;cout<<endl;cout<<"性别(m/w):";cin>>sex;cout<<endl;cout<<"年龄:";cin>>age;cout<<endl;}};class Technician:public Employee{public:void set_in(){cout<<"技术员的编号:";cin>>num;cout<<endl;cout<<"其姓名:";cin>>name;cout<<endl;cout<<"性别(m/w):";cin>>sex;cout<<endl;cout<<"年龄:";cin>>age;cout<<endl;cout<<"工作时间:";cin>>worktime;cout<<endl;}int get_wage(){return (worktime*100);} //100元为单位小时工资protected:int worktime;};class Salesmanager:public Employee{public:Salesmanager(){allsale=0;}void set_in(){cout<<"销售经理的编号:";cin>>num;cout<<endl;cout<<"其姓名:";cin>>name;cout<<endl;cout<<"性别(m/w):";cin>>sex;cout<<endl;cout<<"年龄:";cin>>age;cout<<endl;}int get_wage(){return (5000+allsale*0.005);} //5000元为销售经理底薪protected:int allsale;};class Seller:public Employee{public:int bossnume() {return(bossnum);} int money() {return(salesmoney);} void set_in(){cout<<"销售员的编号:";cin>>num;cout<<endl;cout<<"其姓名:";cin>>name;cout<<endl;cout<<"性别(m/w):";cin>>sex;cout<<endl;cout<<"年龄:";cin>>age;cout<<endl;cout<<"销售额:";cin>>salesmoney;cout<<endl;cout<<"所属销售经理的编号:";cin>>bossnum;cout<<endl;}int get_wage(){return (salesmoney*0.04);}protected:int salesmoney;int bossnum;};Manager boss[B];Technician techni[T];Seller salesman[S];Salesmanager salesboss[SB];int salesbosstotale[SB]={0};Salesmanager exchangeSB;int exchange;int b=0,t=0,sb=0,s=0;int Inputboss(){for(int i=0;i<B;i++)boss[i].set_in();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;return 0;}int Inputtechni(){for(int j=0;j<T;j++)techni[j].set_in();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;return 0;}int Inputsalesman(){for(int n=0;n<S;n++)salesman[n].set_in();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;return 0;}int Inputsalesboss(){for(int m=0;m<SB;m++)salesboss[m].set_in();return 0;}int main (){for(;;){cout<<" ★★小型公司工资管理系统★★"<<endl;cout<<"┏━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃请选择您所需要的操作┃"<<endl;cout<<"┃数据输入:1,并按回车键┃"<<endl;cout<<"┃数据统计:2,并按回车键┃"<<endl;cout<<"┃数据打印:3,并按回车键┃"<<endl;cout<<"┃数据备份:4,并按回车键┃"<<endl;cout<<"┃退出系统:5,并按回车键┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━┛"<<endl;cout<<"请选择一个操作:";int select;cin>>select;switch(select){case 1:for(;;){cout<<" ★★小型公司工资管理系统★★"<<endl;cout<<"┏━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃请选择您所需要的操作┃"<<endl;cout<<"┃经理数据输入:1,并按回车键┃"<<endl;cout<<"┃技术员数据输入:2,并按回车键┃"<<endl;cout<<"┃销售员数据输入:3,并按回车键┃"<<endl;cout<<"┃销售经理数据输入:4,并按回车键┃"<<endl;cout<<"┃返回上一级:5,并按回车键┃"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━━━━┛"<<endl;cout<<"请选择一个操作:";int choice;cin>>choice;switch(choice){case 1:Inputboss();b++;break;case 2:Inputtechni();t++;break;case 3:Inputsalesman();s++;break;case 4:Inputsalesboss();sb++;break;case 5:break;default:cout<<"输入有误,请重新输入..."<<endl;}if(choice==5) break;}break;case 2:if(s==0) cout<<"尚未输入销售员数据..."<<endl;if(sb==0) cout<<"尚未输入销售经理数据..."<<endl;if(s==0||sb==0) break;total();maopao();yejibiao();SBrank();break;case 3:cout<<"请等待..."<<endl;if(t!=0||b!=0||sb!=0||s!=0){cout<<"职工基本情况一览表如下"<<endl;}if(t!=0){cout<<"技术员"<<endl;technicianinformatian();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;}if(b!=0){cout<<"经理"<<endl;managerinformation();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;}if(sb!=0){cout<<"销售经理"<<endl;salesmanagerinformation();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;}if(s!=0){cout<<"销售员"<<endl;sellerinformation();cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;}if(t==0&&b==0&&sb==0&&s==0){cout<<"尚未录入任何人员数据..."<<endl;}else{if(t==0){cout<<"尚未录入技术员数据..."<<endl;}if(b==0){cout<<"尚未录入经理数据..."<<endl;}if(sb==0){cout<<"尚未录入销售经理数据..."<<endl;}if(s==0){cout<<"尚未录入销售员数据..."<<endl;}}if(t==0||b==0||sb==0||s==0){cout<<"请录入所需打印数据或进行其他操作"<<endl;}break;case 4:if(t==0||b==0||sb==0||s==0){cout<<"人员数据输入尚未完全,请打印确认后再备份..."<<endl;break;}backup_yejibiao();backup_SBrank();backup_technicianinformatian();backup_managerinformation();backup_salesmanagerinformation();backup_sellerinformation();cout<<"备份中,请等待..."<<endl;break;case 5:char choice;for(;;){cout<<"确认退出(Y/N)";cin>>choice;if(choice=='Y') exit(0);else if(choice=='N') break;else cout<<"输入有误,请重新输入..."<<endl;}default:cout<<"输入有误,请重新输入..."<<endl;}}return 0;}int wage(int n){return(5000+n*0.005);}//以下为第二步代码━━━━━┓void total() //求总销售额{ for(int n=0;n<S;n++)for(int m=0;m<SB;m++)if(salesman[n].bossnume()==salesboss[m].nume()){salesbosstotale[m]+=salesman[n].money();break;}}void maopao() //冒泡法排序{for(int n=1;n<SB;n++)for(int m=1;m<=SB-n;m++)if(salesbosstotale[m-1]>salesbosstotale[m]){exchangeSB=salesboss[m-1];salesboss[m-1]=salesboss[m];salesboss[m]=exchangeSB;exchange=salesbosstotale[m-1];salesbosstotale[m-1]=exchange;salesbosstotale[m]=exchange;}}void yejibiao(){ for(int n=0;n<SB;n++){cout<<"职工号为"<<salesboss[n].nume()<<"销售经理"<<salesboss[n].nam()<<"下属的销售员业绩为:"<<endl;cout<<"┏━━━━━━┳━━━━━━┳━━━━━━━┓"<<endl;cout<<"┃职工号┃姓名┃销售额┃"<<endl;for(int j=0;j<S;j++)if(salesman[j].bossnume()==salesboss[n].nume()){cout<<"┣━━━━━━╋━━━━━━╋━━━━━━━┫"<<endl;cout<<"┃"<<setw(12)<<salesman[j].nume()<<"┃"<<setw(12)<<salesman[j].nam()<<"┃"<<setw(14)<<salesman[j].money()<<"┃"<<endl;}cout<<"┣━━━━━━╋━━━━━━┻━━━━━━━┫"<<endl;cout<<"┃销售额总计: ┃"<<setw(28)<<salesbosstotale[n]<<"┃"<<endl;cout<<"┗━━━━━━┻━━━━━━━━━━━━━━┛"<<endl;}}void SBrank(){cout<<"销售经理按工资排序为:"<<endl;excelhead();for(int n=SB-1;n>-1;n--){excelmiddle();cout<<"┃"<<setw(8)<<salesboss[n].nume()<<"┃"<<setw(8)<<salesboss[n].nam()<<"┃"<<setw(6)<<salesboss[n].showsex()<<"┃"<<setw(8)<<salesboss[n].showage()<<"┃"<<setw(8)<<wage(salesbosstotale[n])<<"┃"<<endl;}excelend();}//以上为第二步代码━━━━━┛//以下为职工信息一览表代码━━━━━┓void technicianinformatian(){excelhead();for(int k=0;k<T;k++){excelmiddle();cout<<"┃"<<setw(8)<<techni[k].nume()<<"┃"<<setw(8)<<techni[k].nam()<<"┃"<<setw(6)<<techni[k].showsex()<<"┃"<<setw(8)<<techni[k].showage()<<"┃"<<setw(8)<<techni[k].get_wage()<<"┃"<<endl;}excelend();}void managerinformation(){excelhead();for(int k=0;k<B;k++){excelmiddle();cout<<"┃"<<setw(8)<<boss[k].nume()<<"┃"<<setw(8)<<boss[k].nam()<<"┃"<<setw(6)<<boss[k].showsex()<<"┃"<<setw(8)<<boss[k].showage()<<"┃"<<setw(8)<<boss[k].managerwage()<<"┃"<<endl;}excelend();}void salesmanagerinformation(){excelhead();for(int k=SB-1;k>-1;k--){excelmiddle();cout<<"┃"<<setw(8)<<salesboss[k].nume()<<"┃"<<setw(8)<<salesboss[k].nam()<<"┃"<<setw(6)<<salesboss[k].showsex()<<"┃"<<setw(8)<<salesboss[k].showage()<<"┃"<<setw(8)<<wage(salesbosstotale[k])<<"┃"<<endl;}excelend();}void sellerinformation(){cout<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┳━━━━━━━━┓"<<endl;cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃所属部门经理编号┃"<<endl;for(int k=0;k<S;k++){cout<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━╋━━━━━━━━┫"<<endl;cout<<"┃"<<setw(8)<<salesman[k].nume()<<"┃"<<setw(8)<<salesman[k].nam()<<"┃"<<setw(6)<<salesman[k].showsex()<<"┃"<<setw(8)<<salesman[k].showage()<<"┃"<<setw(8)<<salesman[k].get_wage()<<"┃"<<setw(16)<<salesman[k].bossnume()<<"┃"<<endl;}cout<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┻━━━━━━━━┛"<<endl;}//以上为职工信息一览表代码━━━━━┛//各步表格的表头,表中和表尾━━━━━┓void excelhead(){cout<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┓"<<endl;cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl; }void excelmiddle(){cout<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━┫"<<endl; }void excelend(){cout<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┛"<<endl; }//各步表格的表头,表中和表尾━━━━━┛//数据备份━━━━━┓void backup_yejibiao(){outfile.open("备份数据.text",ios::out);for(int n=0;n<SB;n++){outfile<<"职工号为"<<salesboss[n].nume()<<"销售经理"<<salesboss[n].nam()<<"下属的销售员业绩为:"<<endl;outfile<<"┏━━━━━━┳━━━━━━┳━━━━━━━┓"<<endl;outfile<<"┃职工号┃姓名┃销售额┃"<<endl;for(int j=0;j<S;j++)if(salesman[j].bossnume()==salesboss[n].nume()){outfile<<"┣━━━━━━╋━━━━━━╋━━━━━━━┫"<<endl;outfile<<"┃"<<setw(12)<<salesman[j].nume()<<"┃"<<setw(12)<<salesman[j].nam()<<"┃"<<setw(14)<<salesman[j].money()<<"┃"<<endl;}outfile<<"┣━━━━━━╋━━━━━━┻━━━━━━━┫"<<endl;outfile<<"┃销售额总计: ┃"<<setw(28)<<salesbosstotale[n]<<"┃"<<endl;outfile<<"┗━━━━━━┻━━━━━━━━━━━━━━┛"<<endl;}}void backup_SBrank(){outfile<<"销售经理按工资排序为:"<<endl;outfile<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┓"<<endl;outfile<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;for(int n=SB-1;n>-1;n--){outfile<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━┫"<<endl;outfile<<"┃"<<setw(8)<<salesboss[n].nume()<<"┃"<<setw(8)<<salesboss[n].nam()<<"┃"<<setw(6)<<salesboss[n].showsex()<<"┃"<<setw(8)<<salesboss[n].showage()<<"┃"<<setw(8)<<wage(salesbosstotale[n])<<"┃"<<endl;}outfile<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┛"<<endl;}void backup_technicianinformatian(){outfile<<"职工基本情况一览表如下"<<endl;outfile<<"技术员"<<endl;outfile<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┓"<<endl;outfile<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;for(int k=0;k<T;k++){outfile<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━┫"<<endl;outfile<<"┃"<<setw(8)<<techni[k].nume()<<"┃"<<setw(8)<<techni[k].nam()<<"┃"<<setw(6)<<techni[k].showsex()<<"┃"<<setw(8)<<techni[k].showage()<<"┃"<<setw(8)<<techni[k].get_wage()<<"┃"<<endl;}outfile<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┛"<<endl; }void backup_managerinformation(){outfile<<"经理"<<endl;outfile<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┓"<<endl;outfile<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;for(int k=0;k<B;k++){outfile<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━┫"<<endl;outfile<<"┃"<<setw(8)<<boss[k].nume()<<"┃"<<setw(8)<<boss[k].nam()<<"┃"<<setw(6)<<boss[k].showsex()<<"┃"<<setw(8)<<boss[k].showage()<<"┃"<<setw(8)<<boss[k].managerwage()<<"┃"<<endl;}outfile<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┛"<<endl;}void backup_salesmanagerinformation(){outfile<<"销售经理"<<endl;outfile<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┓"<<endl;outfile<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;for(int k=0;k<SB;k++){outfile<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━┫"<<endl;outfile<<"┃"<<setw(8)<<salesboss[k].nume()<<"┃"<<setw(8)<<salesboss[k].nam()<<"┃"<<setw(6)<<salesboss[k].showsex()<<"┃"<<setw(8)<<salesboss[k].showage()<<"┃"<<setw(8)<<wage(salesbosstotale[k])<<"┃"<<endl;}outfile<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┛"<<endl;}void backup_sellerinformation(){outfile<<"销售员"<<endl;outfile<<"┏━━━━┳━━━━┳━━━┳━━━━┳━━━━┳━━━━━━━━┓"<<endl;outfile<<"┃职工号┃姓名┃性别┃年龄┃工资┃所属部门经理编号┃"<<endl;for(int k=0;k<S;k++){outfile<<"┣━━━━╋━━━━╋━━━╋━━━━╋━━━━╋━━━━━━━━┫"<<endl;outfile<<"┃"<<setw(8)<<salesman[k].nume()<<"┃"<<setw(8)<<salesman[k].nam()<<"┃"<<setw(6)<<salesman[k].showsex()<<"┃"<<setw(8)<<salesman[k].showage()<<"┃"<<setw(8)<<salesman[k].get_wage()<<"┃"<<setw(16)<<salesman[k].bossnume()<<"┃"<<endl;}outfile<<"┗━━━━┻━━━━┻━━━┻━━━━┻━━━━┻━━━━━━━━┛"<<endl;outfile.close();}//数据备份━━━━━┛指导教师评语成绩:指导教师(签章):2015年月日。

相关文档
最新文档