面向对象程序设计大作业(C++)
- 格式:doc
- 大小:1.82 MB
- 文档页数:36
学习中心/函授站姓名学号西安电子科技大学网络与继续教育学院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++表达式是。
武汉轻工大学面向对象程序设计期末大作业专业:电子信息科学与技术班级:电信产业1301班学号:1304100025姓名:肖梦1目的与要求学生能够比较熟练地掌握C++语言的基本语法规则;熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例—对象、实现类的继承等;掌握各种面向对象的程序设计技术,如继承和派生,虚继承、虚函数、抽象类、多态的实现等。
掌握在VC++平台上进行程序设计和调试的方法。
学生利用学到的面向对象的基本原理和C++语言语法以及编程技巧,通过灵活应用Visual C++6.0 集成开发环境进行应用程序和系统的开发设计,掌握可视化程序设计的基本方法和步骤,强化巩固已有编程知识,训练新的设计与编程思路,帮助熟悉程序编写,及时查究错误。
要求学生独立完成完整的用C++语言编写的应用程序,以全面掌握C++面向对象程序设计的基础知识。
2 设计内容2.1计算两点之间的距离用类实现计算两点之间的距离。
(可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。
)2.1.1 程序设计方案和原理根据题目要求本题可以用类的组合来实现。
我们可以用一个point类来描述平面上点的的坐标,然后为Distance类添加一个Point类的对象作为其数据成员,用来计算两个点之间的距离。
2.1.2 程序的代码实现#include<iostream.h>#include<math.h>class Point //定义Point类{public:Point(int a=0,int b=0){x=a;y=b;}int xcord(){return x;}int ycord (){return y;}private:int x,y;};class Distance //定义Distance类作为容器类{public:Distance(Point q1,Point q2);float getdist(){return dist;}private:Point p1,p2; //p1,p2是类嵌对象float dist;};Distance::Distance(Point q1,Point q2):p1(q1),p2(q2) /*Distance类的构造函数通过初始化列表向类嵌对象的构造函数赋值*/{float x=float(p1.xcord()-p2.xcord());float y=float(p1.ycord()-p2.ycord());dist=sqrt(x*x+y*y); //两点间距离}void main(){Point p(0,0),q(1,1); //创建Point类对象Distance dis(p,q); //创建Distance类对象cout<<"The distance is: "<<dis.getdist()<<endl;}Distance类为容器类,包含Point类的内嵌对象q1和q2,Distance类的构造函数通过初始化列表向Point类的构造函数传递参数。
c面向对象程序设计期末考试题及答案一、选择题(每题2分,共20分)1. 下列哪个是面向对象程序设计的特点?A. 封装B. 继承C. 多态D. 所有选项都是2. 在Java中,以下哪个关键字用于定义类?A. classB. structC. typeD. classdef3. 以下哪个是Java中不允许的类成员访问修饰符?A. publicB. protectedC. privateD. global4. 以下哪个是Java中实现多态的方式?A. 函数重载B. 函数重写C. 接口D. 抽象类5. 在Java中,哪个关键字用于声明一个方法,该方法没有返回值?A. voidB. returnC. noneD. null6. 以下哪个是Java中创建对象的语法?A. new ClassName();B. create ClassName;C. make ClassName;D. ClassName();7. 在Java中,以下哪个是正确的构造方法声明?A. public ClassName();B. public ClassName new();C. public new ClassName();D. public ClassName create();8. 以下哪个是Java中实现继承的方式?A. 使用extends关键字B. 使用implements关键字C. 使用interface关键字D. 使用new关键字9. 在Java中,以下哪个关键字用于实现接口?A. implementsB. extendsC. interfaceD. class10. 以下哪个是Java中实现封装的方式?A. 使用public关键字B. 使用private关键字C. 使用protected关键字D. 使用default关键字答案:1. D2. A3. D4. B5. A6. A7. A8. A9. A10. B二、简答题(每题10分,共20分)1. 简述面向对象程序设计中的“封装”概念及其重要性。
学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院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.下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。
第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再由类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。
(2)需要用属性来描述它的某些特性。
(3)有一组操作,每一个操作决定了对象的一种行为。
(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
C++程序设计大作业要求一、作业目的1、掌握用C++实现面向对象程序设计的基本方法。
2、熟练掌握window控制台应用程序的编写,初步掌握window可视化界面应用程序的编写方法。
3、初步完成一个应用程序的设计、编码、调试,了解程序设计过程,锻炼实际应用能力,为后续课程打下基础。
二、对象本学期“面向对象程序设计(C++)”选课班全体同学。
三、作业内容1、学生信息管理系统基本功能要求:学生信息存储在文件中,不同班级可以用不同文件,要求能添加学生记录(系、专业、年级、班级、学号、姓名、性别、宿舍、联系电话),能删除学生记录,能修改学生记录,能按不同字段(学号、姓名)查找、浏览学生信息,能对学生信息按某些字段进行排序浏览,可以从txt文本导数据,实现可视化界面。
进行所有修改后,退出系统之前提示用户修改完的数据是否存储到文件中。
基本要求:按上述要求建立一个CStudent类,类的设计参照上述要求。
使用类作为基本的结构完成上述系统2、电费收缴信息管理系统基本功能要求:水电费信息存储在文件中,每个月新建一个文件,每条记录以宿舍为单位,字段(楼号,宿舍号、上期行度(由上月文件中信息获得或直接输入)、本期行度、电费(由输入的电费单价计算得到)、缴费人(若没有交则为空)、缴费日期)。
本程序可以浏览所有情况、若有人缴费则修改缴费信息、查询未缴费信息,可导出txt文本,实现可视化界面,对电费信息按缴费日期排序。
进行所有修改后,退出系统之前将内存中数据存储到文件中。
基本要求:按上述要求建立一个CElefee类,类的设计参照上述要求。
使用类作为基本的结构完成上述系统3、图书信息管理系统基本功能要求:图书信息存储在文件中,每种书库(流通书库、阅览室、保留书库)新建一个文件,每条记录以图书为单位,字段(图书号、书名、出版社、ISBN、著者、出版日期、简介、共有存书数、现有存书数)。
本程序可以浏览所有图书,按书名、著者、出版日期模糊查询,按图书号、ISBN、出版社精确查询,查询结果要注明哪个书库哪种图书及图书的详细信息。
面向对象程序设计(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种类型不同颜色的方块,每个小方格的颜色也是随机的,并且在整个下落的过程中,其颜色也呈动态变化。
游戏过程中,每在游戏区堆满一行后,自动消除并记分。
同时消去的行数越多,那一次性所加的分数也就越多。
《面向对象程序设计》大作业的说明一、3个示例(相应的cpp文件和h文件具有完整的源代码)1.以下程序涉及类模板,补充顺序栈类模板成员函数的定义,利用队列实现栈的逆置。
//sq_queue_sq_stack.h#include<iostream.h>//定义循环队列模板类template <class T>class sq_queue{protected:int mm; //循环队列容量int front,rear; //队头、队尾指针T*q; //循环队列向量指针public:sq_queue(int); //构造函数,建立空循环队列int emptyqueue(); //测试队列是否下溢void enqueue(T); //入队T dequeue(); //出队};//定义顺序栈模板类template <class T>class sq_stack{private:int mm; //顺序栈容量int top; //栈顶指针T*s; //顺序栈向量指针public:sq_stack(int); //构造函数,建立空栈int emptystack(); //测试栈是否下溢void push(T); //入栈T pop(); //出栈T get(); //读栈顶元素void print(); //从栈顶到栈底输出栈中元素};//定义循环队列类模板构造函数template<class T>sq_queue<T>::sq_queue(int m){mm=m+1; //设置队列容量,考虑到循环队列少用一个存储单元q=new T[mm]; //动态分配循环队列存储空间front=rear=mm-1; //设置空队列}//定义顺序栈类模板构造函数template<class T>sq_stack<T>::sq_stack(int m){mm=m; //设置顺序栈容量s=new T[mm]; //动态分配顺序栈存储空间top=0; //设置空栈}//定义循环队列类模板成员函数template<class T>int sq_queue<T>::emptyqueue(){if(front==rear) return 1;else return 0;}template<class T>void sq_queue<T>::enqueue(T x){rear=(rear+1)%mm;q[rear]=x;}template<class T>T sq_queue<T>::dequeue(){front=(front+1)%mm;return q[front];}//定义顺序栈类模板成员函数//顺序表逆置.cpp#include "sq_queue_sq_stack.h"void main(){sq_queue<char> queue(20); //建立容量为20的队列对象sq_stack<char> stack(20); //建立容量为20的栈对象char ch;for(ch='a';ch<='f';ch++)stack.push(ch);stack.print();while(!stack.emptystack())queue.enqueue(stack.pop());while(!queue.emptyqueue())stack.push(queue.dequeue());stack.print();cout<<"按“Y”键结束";cin>>ch;}2.以下程序涉及类模板、友元函数、插入符“<<”重载函数,补充成员函数、友元函数的定义,实现将顺序表A按元素值奇、偶数拆分成两个表,A表存放奇数,B表存放偶数。
《面向对象程序设计》大作业项目名称基于C#的一款扫雷游戏班级组员一、开发环境开发环境: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”。
面向对象分析/设计课程大作业银行业务处理系统13级软件学院测试班1367004029曾丹1.需求分析随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。
现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。
近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。
随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。
如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。
支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。
特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。
主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。
此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。
系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。
储蓄卡开户管理模块:卡号、姓名、开户金额、身份证号、地址、电话、密码、确认密码和保存组成。
(开户金额必须是数字,密码和确认密码必须一样是六位数字)*注销模块:一旦注销该卡号就不存在且余额提醒你取出。
通过该银行账户管理系统地运行,使办公人员可以轻松快捷的完成对账户管理的任务,提高账目管理效率,使银行的账目管理工作系统化、规范化、自动化。
该银行帐目管理信息系统,优点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。
经过实践证明,该划分是合理的,极大得提高了本系统的实现。
2.UML静态建模表示2.1用例图2.2类图3.UML动态建模表示3.1序列图3.2协同图3.3状态图4.UML物理架构建模表示4.1组件图4.2配置图5.系统总体框架5.1框架图5.2数据流图5.3实体关系图6.模块设计与分析储蓄卡开户管理模块:6.1 登录页面输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。
若卡号存在和密码不匹配或无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。
6.2 主界面页面主要导航栏有:欢迎使用储蓄卡管理(存款、取款、修改密码、转账功能、注销退出)6.3 储蓄卡开户页面提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。
6.4 存钱页面从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。
从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。
6.5 取款页面从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上,。
6.6 注销页面从关闭文件,状态为注销,最后关闭整个系统。
列举取款模块进行分析:void consumer::fetchmoney(){float m;char ch;do{cout<<endl<<"输入取款金额:"<<"¥>"<<endl ;cin>>m;while(m<=0){cout<<"请输入正确的数字!"<<endl;cout<<"→";cin>>m;}if(money<m){cout<<"对不起,你的余额不足!"<<endl;}else{money=money-m;cout<<endl<<"操作成功,请收好钱!"<<endl;}cout<<"是否要继续该项操作:(Y/N) "<<endl;cout<<"→";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')//选择错误时判定{cout<<"→";cin>>ch;}}while(ch=='y'||ch=='Y');}在取款页面中,输入取款金额并对取款金额与存款余额进行比较,如果取款金额小于零,请输入正确的数字;如果取款金额大于存款金额,对不起,您的余额不足;如果取款金额小于存款余额的话就执行,并保存记录。
7.类的设计与分析7.1 consumer类class consumer:public YH//用户类,继承银行类的属性{public:friend class YH;consumer(int id,string Name,int Number,double IN,string Company,string Address,string PassWord,float m){ID=id;name=Name;number=Number;in=IN;company=Company;address=Addres s;money=m;passwd=PassWord;}consumer(){ID=0;name='0';number=0;in=0;company='0';address='0';money=0;p asswd='0';}int get_id(){return ID;}void savemoney();// 取钱string get_passwd(){return passwd;}// 取得密码void display();void fetchmoney(); //取钱void change_passwd();void add_money(float);//计算余额void dec_money(float);//计算余额float get_money();//卡卡转帐private:int ID; //开户帐号string passwd; // 用户密码string name; // 用户姓名float money; //开户金额int number;string company;string address;double in;};名称属性说明ID 数据成员用户账户数据name 数据成员用户姓名money 数据成员用户首次金额in 数据成员用户身份证号address 数据成员用户地址number 数据成员用户电话Passwd 数据成员用户密码savemoney() 成员方法存钱fetchmoney () 成员方法取钱change_passwd() 成员方法修改密码get_money() 成员方法卡卡转账7.2 YH 类class YH //银行类{public:void set_account();//银行开户功能void del_account(); //注销账户功能void transfer(int); //转账功能void enter_account(); //进入用户个人信息功能oid addmoney(int,float);//存款功能void exitYH();// 退出系统void functionshow();void save();void load();// 功能界面protected:consumer *account[20];static int acnum;//账户数名称属性说明acnum 数据成员账户数set_account () 成员方法开户功能del_account () 成员方法注销账户功能transfer () 成员方法转账功能functionshow() 成员方法主界面显示功能addmoney() 成员方法存钱功能exitYH() 成员方法退出系统功能8.程序源码consumer.cpp#include<iostream>#include <string>#include<fstream>using namespace std;class consumer;class YH //银行类{public:void set_account();//银行开户功能void del_account(); //注销账户功能void transfer(int); //转账功能void enter_account(); //进入用户个人信息功能void addmoney(int,float);//存款功能void exitYH();// 退出系统void functionshow();void save();void load();// 功能界面protected:consumer *account[20];static int acnum;//账户数};class consumer:public YH//用户类,继承银行类的属性{public:friend class YH;consumer(int id,string Name,int Number,double IN,string Company,string Address,string PassWord,float m){ID=id;name=Name;number=Number;in=IN;company=Company;address=Address; money=m;passwd=PassWord;}consumer(){ID=0;name='0';number=0;in=0;company='0';address='0';money =0;passwd='0';}int get_id(){return ID;}void savemoney();// 取钱string get_passwd(){return passwd;}// 取得密码void display();void fetchmoney(); //取钱void change_passwd();void add_money(float);//计算余额void dec_money(float);//计算余额float get_money();//卡卡转帐private:int ID; //开户帐号string passwd; // 用户密码string name; // 用户姓名float money; //开户金额int number;string company;string address;double in;};void YH::save(){ofstream ofile("bankdat.dat",ios::out);//以输出方式打开文件ofstream outfile("bankdat.dat",ios::out);//以输出方式打开文件bankdat.dat接收从内存输出的数据int n=0;outfile<<acnum<<" ";for(n=0;n<acnum;n++){outfile<<account[n]->ID<<" ";//把信息写入磁盘文件bankdat.datoutfile<<account[n]->money<<" ";outfile<<account[n]->name<<" ";outfile<<account[n]->passwd<<" ";outfile<<account[n]->number<<" ";outfile<<account[n]->company<<" ";outfile<<account[n]->address<<" ";outfile<<account[n]->in<<" ";}outfile.close();}/*读入用户信息功能实现*/void YH::load(){ifstream infile("bankdat.dat",ios::in);//以输入方式打开文件if(!infile){cerr<<"读取错误,无资料中!"<<endl;return;}int n=0;int id,m;string nam,passw;int number;string company;string address;double in; infile>>acnum;for(n=0;n<acnum;n++)//全部读入{infile>>id;//从磁盘文件bankdat.dat读入信息infile>>m;infile>>nam;infile>>passw;infile>>company;infile>>number;infile>>address;infile>>in;account[n]->passwd;consumer * acc = new consumer(id,nam,number,in,company,address,passw,m); //每读入一个n开辟一段内存account[n] = acc; //赋值首地址}infile.close();cout<<"系统正在正常运行,您可以办理以下业务:"<<endl;}/*转账功能实现*/void YH::transfer(int x){int id;cout<<"请输入帐号:";cin>>id;int flag = 1;int i = 0;while((i<acnum)&&(flag)) //查找要转入的账号{if(id==account[i]->get_id()) flag = 0; else i++;}if(flag){cout<<"帐号不存在!"<<endl<<endl;return ;}float b;cout<<endl<<"请输入你要转帐的金额:";cin>>b;while(b<=0){cout<<"请输入正确的数字!"<<endl;cout<<"→";cin>>b;}if(account[x]->get_money()<b) //调用友元类consumer的公有成员函数cout<<"对不起,金额不够!!"<<endl;else {account[x]->dec_money(b);account[i]->add_money(b);} cout<<"转账成功!!"<<endl;return;}/*账户金额计算*/void consumer::add_money(float x){money=x+money;}void consumer::dec_money(float x){money=money-x;}void YH::addmoney(int x,float y){account[x]->money=account[x]->money-y;}float consumer::get_money(){return money;}void main(){YH yh;yh.functionshow();}/*主界面显示*/void YH::functionshow(){int n;do{system("cls");load();cout<<"____________________________________________________________" <<endl;cout<<"| |"<<endl;cout<<"| 1:开户|"<<endl;cout<<"| |"<<endl;cout<<"| 2:账户登录|"<<endl;cout<<"| |"<<endl;cout<<"| 3:账户注销|"<<endl;cout<<"| |"<<endl;cout<<"| 4:退出系统|"<<endl;cout<<"| |"<<endl;cout<<"____________________________________________________________" <<endl;cout<<endl<<"请您输入你要进行的相应操作前的数字:"<<endl;cout<<"→";cin>>n;while(n<1||n>4){cout<<"您输入的数字有误!请重新输入..."<<endl;cout<<"→";cin>>n;}switch(n){case 1: set_account();//开户break;case 2:enter_account();//登录break;case 3: del_account();//注销break;case 4: exitYH();//退出break;}cin.get();//输入流类istream的成员函数}while(true);}void YH::enter_account(){int id;cout<<"请输入帐号:";cin>>id;int flag = 1;int i = 0; //__page_break__while((i<acnum)&&(flag)) //循环查找{if(id==account[i]->get_id()) flag = 0; else i++;}if(flag){cout<<"帐号不存在!"<<endl;return;}cout<<"请输入密码:";string passw;cin>>passw;if(passw!=account[i]->get_passwd()) return;//返回到登录界面account[i]->display();cin.get();cin.get();int n;do{system("cls");cout<<"请选择下列操作:"<<endl;cout<<"__________________________________________________"<<endl;cout<<"| |"<<endl; cout<<"| 1.查看账户信息 |"<<endl; cout<<"| |"<<endl; cout<<"| 2.取款 |"<<endl; cout<<"| |"<<endl; cout<<"| 3.存款 |"<<endl; cout<<"| |"<<endl; cout<<"| 4.修改密码 |"<<endl; cout<<"| |"<<endl; cout<<"| 5.转账 |"<<endl; cout<<"| |"<<endl; cout<<"| 6.返回 |"<<endl; cout<<"| |"<<endl; cout<<"__________________________________________________"<<endl; cout<<"→";cin>>n;switch(n){case 1: account[i]->display();break;case 2: account[i]->fetchmoney();save();break;//从2-5功能,每执行一次调用一次save函数,重新写入数据case 3:account[i]->savemoney();save();break;case 4:account[i]->change_passwd();save();break;case 5:transfer(i);save();break;case 6:return;}cin.get();cin.get();}while(1);}void YH::set_account(){int id;string nam;string passw;float m;string company;string address;int number;double in;cout<<"请输入开户账号:"<<endl;cin>>id;cout<<"请输入开户人姓名:"<<endl;cin>>nam;cout<<"请输入开户密码:"<<endl;cin>>passw;cout<<"请输入存入金额:"<<endl;cin>>m;cout<<"请输入开户人电话:"<<endl;cin>>number;cout<<"请输入开户人公司:"<<endl;cin>>company;cout<<"请输入开户人地址:"<<endl;cin>>address;cout<<"请输入开户人身份证号码:"<<endl;cin>>in;while(m<=0){cout<<"请输入正确的数字!"<<endl;cin>>m;}consumer * acc = newconsumer(id,nam,number,in,company,address,passw,m);account[acnum] = acc;cout<<"您好,你已开户成功,请牢记您的账号和密码,注意账号安全!"<<endl<<endl;acnum++;save();cin.get();return;}void YH::del_account(){int id;cout<<endl<<"请输入您要注销的帐户号:";cin>>id;int flag = 1;int i = 0;while((i<acnum)&&(flag)) //循环查找{if(id == account[i]->get_id()){flag = 0;}else{i++;}}if(flag){cout<<"对不起,你输入的该帐号不存在或有误,请重新输入!"<<endl; return; //返回到登陆界面}for(int j=i;j<acnum;j++) //所有被删号后的数据重新存储{account[j] = account[j+1];}account[acnum-1]=NULL;acnum--; //账号总数自减一次cout<<"您好,您的账号已成功注销!"<<endl<<endl;save();cin.get();return;}void consumer::change_passwd(){string pwd,repwd;cout<<"请输入新密码:";cin>>pwd;cout<<"请确认新密码:";cin>>repwd;if(pwd!=repwd)cout<<"对不起,您输入的两次密码不一致,按输入键返回上一层菜单!"<<endl; elsecout<<"您好,您的密码已修改成功,请牢记并注意账号安全!"<<endl;cin.get();}void consumer::fetchmoney(){float m;char ch;do{cout<<endl<<"请输入您的取款金额:"<<"¥>"<<endl ;cin>>m;while(m<=0){cout<<"请您输入正确的金额!"<<endl;cout<<"→";cin>>m;}if(money<m){cout<<"对不起,您的余额不足!"<<endl;}else{money=money-m;cout<<endl<<"操作成功,请拿好您的钱!"<<endl;}cout<<"是否要继续该项操作:(Y/N) "<<endl;cout<<"→";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')//选择错误时判定{cout<<"→";cin>>ch;}}while(ch=='y'||ch=='Y');}void consumer::savemoney()//存钱函数功能实现{float c;char ch;do{cout<<endl<<"请输入要存入的金额:"<<"¥>"<<endl ;cin>>c;while(c<=0){cout<<"对不起您输入的金额错误,请重新输入!"<<endl;cout<<"→";cin>>c;}money=money+c;cout<<"操作已成功!"<<endl;cout<<"是否要继续该项操作:(Y/N) "<<endl;cout<<"→";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'){cout<<"→";cin>>ch;}}while(ch=='y'||ch=='Y');}int YH::acnum=0;void consumer::display()//用户信息界面{system("cls");cout<<"_____________________________________________"<<endl; cout<<"| |"<<endl; cout<<"| 用户姓名:"<<name<<endl;cout<<"| |"<<endl; cout<<"| 帐号:"<<ID<<endl;cout<<"| |"<<endl; cout<<"| 余额:"<<money<<endl;cout<<"| |"<<endl; cout<<"| 返回(Enter键) |"<<endl; cout<<"| |"<<endl; cout<<"_____________________________________________"<<endl; cout<<"→";}void YH::exitYH()//退出系统{cout<<endl<<"感谢您对XX银行的支持,欢迎下次光临!"<<endl;exit(0);}9.程序截图。