《C++》课件项目6 ATM机.ppt

上传人(卖家):momomo 文档编号:5787160 上传时间:2023-05-09 格式:PPT 页数:51 大小:2.85MB
下载 相关 举报
《C++》课件项目6 ATM机.ppt_第1页
第1页 / 共51页
《C++》课件项目6 ATM机.ppt_第2页
第2页 / 共51页
《C++》课件项目6 ATM机.ppt_第3页
第3页 / 共51页
《C++》课件项目6 ATM机.ppt_第4页
第4页 / 共51页
《C++》课件项目6 ATM机.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、项目6 ATM机课件目录6.1 项目情景16.2 知识准备26.3 项目解决36.4 知识拓展46.1 项目情景Angie:那我们用面向对象的方法设计程序就要分析程序中的事物有哪些?Daisy:比如ATM机中要有银行卡、取款机,还要有人操作。Angie:那通讯录中,要用到学生、教师;Blue Team接下来的任务就是用面向对象的方法实现ATM机。对于这一系列的任务他们做了分功:Angie负责再次分析ATM机,给出ATM中存在的事物。Daisy负责分析给出的事物,列举出它们的共性。Eva负责ATM 的测试。其实他们都参于了每一个环节。回主目录回主目录6.2 知识准备6.2.1 面向对象 6.2.

2、2 类 6.2.3 对象6.2.4 构造函数和析构函数 6.2.5 this指针6.2.6 友元函数 回主目录回主目录6.2.1 面向对象 1.简介 面向对象的方法是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。6.2.1 面向对象 2.面向对象可以有不同层次的理解 从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各

3、样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统6.2.1 面向对象 3.特点 1)信息隐藏和封装特性:封装把方法和数据包围起来,对数据的访问只能通过已定义的界面。2)继承:一个新类可以从现有的类中派生,这个过程称为类继承。新类继承

4、了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和数据成员,并且类可以修改或增加新的方法使之更适合特殊的需要。3)组合特性:组合用于表示类的“整体/部分”关系。4)动态特性 (1)抽象:是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用其它部分细节。(2)多态性:多态性是指允许不同类的对象对同一消息做出响应。回子目录回子目录6.2.2 类类 1.类的基本概念 生活当中具有共性的事物,我们通常都会概括成一类来进行描述,当我们提出某一类时我们很容易

5、的能够在脑中反应出,这个类中的事物都会有什么样的特点,能够做什么样的事,这是人类的一种自然思维模式。用这种思维来编写程序,会更易理解和修改,面向对象就是这样一种方法,那么面向对象中的类是如何定义的呢?类(class)是对具有共同属性和行为的一类事物的抽象描述。1)共同属性类似于生活中的同类事物所具有的特点,面向对象方法中把这些特点称之为属性。把这些特点的不同值称之为属性值,属性值可以相同。2)行为类似于生活中同类事物的行为特点,面向对象方法中把这些行为特点称之为方法。行为特点也允许与别人有所不同。6.2.2 类类2.类的定义定义类的一般格式如下:定义类的一般格式如下:class 类名类名 pr

6、ivate:私有数据成员和成员函数私有数据成员和成员函数 protected:保护数据成员和成员函数保护数据成员和成员函数 public:公有数据成员和成员函数公有数据成员和成员函数;6.2.2 类类 2.类的定义(1)public、private、protected是访问控制符,用于限制特征的可见性。(2)public声明的成员可以被任何方法访问,这样的成员被称为公有成员,描述了对象对外的可见属性,根据数据抽象的原理,这个控制符用来声明数据成员不太合适,所以通常只用来声明成员函数,声明的成员函数构成对象的操作接口,即用来完成任务或处理功能。6.2.2 类类(3)private声明的成员只允许

7、本类的方法和友元访问,这样的成员被称为私有成员,描述了对象内部的属性,通常用来实现数据结构,也可以用来声明成员函数,不过由于其“私有”特性,用此控制符声明的函数,在类的外部无法访问,所以也只能作为本类中其他函数的辅助。(4)protected声明的成员允许本类和其子类的方法访问,这样的成员被称为保护成员,可见性介于public和private之间。6.2.2 类类 3.成员函数的定义成员函数的定义 类的成员函数描述了类的行为,通过它实现了类的任务,或实现了对封闭数据的处理功能,是程序算法的实现部分,通常统一放在类定义后面,也可以在定义类的时直接实现。定义类的成员函数一般格式如下:定义类的成员函

8、数一般格式如下:返回值类型返回值类型 类名:函数名(参数表)类名:函数名(参数表)函数体函数体 6.2.2 类类 4.类作用域 类是由数据成员和成员函数组成,所以类的数据成员和成员函数都从属于该类的作用域,在此作用域中,类数据成员可以直接由该类的所有函数访问,并可以通过它的名称进行引用;在函数内定义的变量只能由该函数访问,也就是说函数中的变量是一个局部变量。如果函数内变量与类的数据成员同名,那么在此函数的作用域内,函数的局部变量会屏蔽类的数据成员。这种情况下如果想要访问被屏蔽的数据成员,可以使用关键字this和-运算符。回子目录回子目录6.2.3 对象对象 1.对象的创建 类是抽象的,而对象是

9、一个具有了类的属性和行为能力,并且在程序运行时真实存在的,真正用于完成任务处理的实体。语法格式如下:类名 对象名;除了用上述方法进行对象定义之外,也可以在声明类的同时,直接定义对象,在类定义后直接给出属于该类的对象名表。6.2.3 对象对象 2.对象的使用 类对象创建之后就可以使用对象的方法实现程序的处理功能了,语法格式如下:对象名.方法名(参数表);如果是通过指向对象的指针访问,语法格式如下:对象指针名-方法名(参数表);回子目录回子目录6.2.4 构造函数和析构函数构造函数和析构函数 1.构造函数 在声明对象的时候,也需要对相应的属性赋值,称之为对象的初始化,对象初始化由特殊的成员函数来完

10、成,这个函数 称之为构造函数。class 类名类名public:数据成员数据成员;类名(形参表)类名(形参表);/构造函数构造函数;类名:类名(形参表)类名:类名(形参表)数据成员初始化数据成员初始化;/函数体函数体 6.2.4 构造函数和析构函数构造函数和析构函数 1.构造函数 构造函数是一种特殊的函数,它只做一件事,就是在对象初始化时给对象的数据成员赋初值。(1)构造函数名必须与类名相同(包括大小写),否则编译程序将把它做为一般的成员函数进行处理。(2)构造函数没有返回值,所以在声明和定义时不能说明它的类型。(3)在实际应用中,通常情况下每个类都会有自己的构造函数,如果用户没有编写构造函数

11、,编译系统将自动生成一个缺省的构造函数。(4)构造函数不能像其他函数那样被显示调用,它是在创建对象时被自动调用的。6.2.4 构造函数和析构函数构造函数和析构函数 2.拷贝构造函数 一种特殊的构造函数,由编译器调用,使用已经存在的对象值来实例化另一个新的对象。它的唯一的一个参数,即引用对象是const型的,是不可改变的。在C+中,一般在下面三种情况下调用拷贝构造函数。(1)使用一个已存在的对象来实例化同类的另一个对象。使用一个已存在的对象来实例化同类的另一个对象。(2)在函数调用中,以值传递的方式传递类对象的拷贝。在函数调用中,以值传递的方式传递类对象的拷贝。(3)对象作为了函数的返回值。对象

12、作为了函数的返回值。6.2.4 构造函数和析构函数构造函数和析构函数 3.析构函数 析构函数是当对象脱离其作用域时,例如对象所在的函数已调用完毕,由系统自动执行析构函数,做“清理善后”的工作,例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放。析构函数名字也应与类名相同,不过在函数名前面要加上一个破折号,用于与构造函数相区别。析构函数不能带任何参数,也没有返回类型,而且每个类只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,该函数的函数体为空,不进行任何操作。回子目录回子目录6.2.5 this指针指针 this指针

13、是一种隐含指针,隐含于每个类的成员函数中,是每个成员函数都具有的默认参数,也就是说每个成员函数都有一个this指针。指针this通常在方法内部使用,表示对一个对象的引用,意味着此方法要对被引用的对象进行某种处理。成员函数使用this访问类中数据成员的一般格式如下:this-this-成员变量成员变量回子目录回子目录6.2.6 友友元函数元函数 友元函数是C+中特有的,作用是使不在这个类中声明的成员函数能够访问这个类的对象的私有成员,实质上是破坏了对象的封装性的,但是,有时候需要在类的外部访问类的私有成员,所以友元函数也是必不可少的。使用关键字friend声明,可以放在公有部分,也可以放在私有部

14、分;友元函数可以定义在类的内部,也可以定义在类的外部。语法格式如下:friend friend (););也可以把一个类定义成另一个类的友元:也可以把一个类定义成另一个类的友元:class c1;class c1;class c2class c2 friend class c1;friend class c1;回子目录回子目录6.3 项目解决项目解决 1.定义银行卡类。(1)银行卡类的基本数据成员,如表成员名称成员名称成员功能成员功能namename用于存储银行卡姓名用于存储银行卡姓名numnum用于银行卡卡号用于银行卡卡号moneymoney用于存储银行卡余额用于存储银行卡余额passwor

15、dpassword用于存储银行卡密码用于存储银行卡密码6.3 项目解决项目解决(2)银行卡类的基本成员函数,如表成员名称成员名称成员功能成员功能BankCardBankCard(string(string Name,stringName,string Num,floatNum,float Money,string Money,string Password)Password)构造函数完成银行卡的构造函数完成银行卡的初始化初始化GetNameGetName()()用于取得卡主姓名用于取得卡主姓名GetNumGetNum()()用于取得卡号用于取得卡号GetMoney()GetMoney()用于完

16、成取款用于完成取款SetMoney(float m)SetMoney(float m)用于完成存款用于完成存款GetPassword()GetPassword()用于取得卡密码用于取得卡密码SetPassword(string pwd)SetPassword(string pwd)用于设置卡密码用于设置卡密码6.3 项目解决项目解决(3)声明取款机ATM类是银行卡的友元类,以完成ATM对银行卡的操作。(4)银行卡类定义参考代码,见下页。6.3 项目解决项目解决 class BankCardpublic:friend class ATM;BankCard(string Name,string N

17、um,float Money,string Password);protected:string GetName();/取得银行卡姓名string GetNum();/取得银行卡卡号float GetMoney();/取得银行卡余额string GetPassword();/取得银行卡密码void SetPassword(string pwd);/设置银行卡密码void SetMoney(float m);/当发生存取款时更新银行卡余额 private:string name;/银行卡姓名string num;/银行卡卡号float money;/银行卡余额string password;/银

18、行卡密码;6.3 项目解决项目解决 2.定义取款机类(1)取款机类的基本数据成员,如表 成员名称成员名称成员功能成员功能times times 记录密码输入次数记录密码输入次数totalmoneytotalmoney 记录本机存款总额记录本机存款总额leftmoneyleftmoney 记录本机剩余金额记录本机剩余金额oncemoney oncemoney 单笔取款最高金额单笔取款最高金额BankCardAtATM BankCardAtATM 插入插入ATMATM机的银行卡机的银行卡6.3 项目解决项目解决(2)取款机类的基本成员函数,如表 成员名称成员功能ATM(BankCard&bc):B

19、ankCardAtATM(bc)构造函数完成取款机与银行卡的初始化ChangePassword()通过ATM修改银行卡密码FetchMoney()通过ATM在卡中取款Information()显示中银行卡信息ExitATM()退出系统FunctionShow()ATM功能界面Lock()锁卡退出系统6.3 项目解决项目解决(3)ATM类参考代码。class ATMpublic:ATM(BankCard&bc):BankCardAtATM(bc)totalmoney=20000.0;/本机最高存款oncemoney=5000.0;/单笔最高取款leftmoney=20000.0;/本机剩余金额

20、void Welcome();/ATM机登录界面bool CheckPassword(string n,string pwd);/核对卡号、密码是否正确6.3 项目解决项目解决 void ChangePassword();/改密码void FetchMoney();/取款void Information();/显示ATM中银行卡信息void ExitATM();/退出系统void FunctionShow();/功能界面void Lock();/锁卡退出系统 private:int times;/记录密码输入次数float totalmoney;/记录本机存款总额float leftmoney

21、;/记录剩余金额float oncemoney;/单笔取款最高金额BankCard&BankCardAtATM;/插入ATM机的银行卡;6.3 项目解决项目解决 3.实现实现BankCard类的成员函数。类的成员函数。BankCard:BankCard(string Name,string Num,float Money,string Password)name=Name;num=Num;password=Password;money=Money;string BankCard:GetName()return name;string BankCard:GetNum()return num;6.

22、3 项目解决项目解决 float BankCard:GetMoney()return money;string BankCard:GetPassword()return password;void BankCard:SetPassword(string pwd)password=pwd;void BankCard:SetMoney(float m)money=money-m;6.3 项目解决项目解决 4.实现实现ATM类成员函数。类成员函数。void ATM:Welcome()/显示欢迎界面显示欢迎界面times=0;cout*欢迎使用本ATM自动取款机*endl;string pwd,num

23、;int i=0;do coutnum;coutpwd;if(!CheckPassword(num,pwd)cout你输入的卡号、密码不正确,请重新输入endl;6.3 项目解决项目解决 times+;elseFunctionShow();while(times3);Lock();bool ATM:CheckPassword(string num,string pwd)/验证密码if(num=BankCardAtATM.GetNum()&(pwd=BankCardAtATM.GetPassword()return true;elsereturn false;回主目录回主目录6.3 项目解决项目

24、解决 void ATM:FunctionShow()/功能界面功能界面int n;docoutendl*请你输入相应的操作序号进行操作*:endl;coutt修改密码-1endl;coutt取款-2endl;coutt查询余额-3endl;coutt退出系统-4endl;coutn;while(n4)6.3 项目解决项目解决 cout请输入正确的操作序号!endl;coutn;switch(n)case 1:ChangePassword();break;case 2:FetchMoney();break;case 3:Information();break;case 4:ExitATM();b

25、reak;while(true);6.3 项目解决项目解决 void ATM:ChangePassword()/修改密码修改密码string pwd,repwd;times=0;docoutendlpwd;if(!CheckPassword(BankCardAtATM.GetNum(),pwd)times+;elsebreak;while(times3);if(times=3)6.3 项目解决项目解决 Lock();int t=0;docoutpwd;coutrepwd;if(pwd!=repwd)cout你输入的两次密码不一样,请重新输入!endl;while(t!=0);BankCardA

26、tATM.SetPassword(pwd);cout密码修改成功,请牢记!endl;6.3 项目解决项目解决 void ATM:FetchMoney()/取款取款float m;char ch;docout 你要取多少钱?m;while(m=0);if(BankCardAtATM.GetMoney()-m0)cout 对不起,你的余额不足!oncemoney)cout 单笔取款超过限制!leftmoney)cout 本机取款余额不足!endl;elseleftmoney=leftmoney-m;cout 操作成功,请收好钱!endl;BankCardAtATM.SetMoney(m);cout

27、 是否要继续该项操作:(Y/N)?endl;docin.get(ch);while(ch!=n&ch!=N&ch!=Y&ch!=y);while(ch=y|ch=Y);6.3 项目解决项目解决 void ATM:Information()/银行卡信息显示银行卡信息显示cout*endl;cout*endl;cout*用户姓名:BankCardAtATM.GetName()endl;cout*卡号:BankCardAtATM.GetNum()endl;cout*余额:BankCardAtATM.GetMoney()endl;cout*endl;6.3 项目解决项目解决 void ATM:Lock

28、()/锁卡锁卡coutendl;cout对不起,由于你的操作有误,你的卡已经被没收!endl;exit(1);void ATM:ExitATM()/退出系统退出系统coutendl感谢你对本银行的支持,欢迎下次光临!endl;cout请取卡endl;exit(0);6.3 项目解决项目解决.测试。测试。#include atm.h/该头文件包含银行卡和取款机类的定义#includestdafx.h void main()BankCard bc1(许华,622*123,30000,*);/创建一个银行卡 ATM atm(bc1);/创建一个ATM自动取款机并把卡c1插入ATMatm.Welcom

29、e();/登录ATM进行操作6.3 项目解决项目解决-运行结果运行结果 回主目录回主目录6.4 知识拓展知识拓展 6.4.1 静态数据成员6.4.2 静态成员函数回主目录回主目录6.4.1 静态数据成员 定义静态的数据成员的关键字是static。静态数据成员仅在程序开始执行的时创建和初始化一次,初始化必须在类外的其他地方,不能在类中,因为在类中没办法给它分配内存空间。一般在主函数main()开始之前,类声明之后的特殊地方为它提供定义和初始化,缺省时静态成员被初始化为零。类外初始化静态数据成员的语法格式如下:数据类型 类名:静态数据成员=值;回子目录回子目录6.4.1 静态数据成员 例例6.8

30、通过静态数据成员统计学生人数。通过静态数据成员统计学生人数。class Studentstatic int sum;/声明静态数据成员,用来统计学生的总数 private:int sno;string name;string bj;public:Student(string na,string b);void print();Student:Student(string na,string b)sum+;/每创建一个学生对象,学生总数加1 sno=sum;/赋值为当前学生的学号 name=na;bj=b;6.4.1 静态数据成员void Student:print()coutStudentsn

31、o ;coutnamename ;coutclassbj ;coutsum=sumendl;int Student:sum=0;/给静态数据成员sum赋初值 void main()Student s1(张三,计算机网络);s1.print();Student s2(李四,计算机网络);Student s3(王五,计算机网络);s3.print();s2.print();s1.print();回子目录回子目录6.4.2 静态成员函数 定义静态成员函数的关键字也是static。同样的静态成员函数也是属于整个类,可以被这个类的所有对象所共享,不专属于某一个对象。静态成员函数是一个成员函数,因此不能像

32、使用普通函数那样使用它,可以使用“类名:”对它作限定,也可以通过对象进行调用。静态成员函数是静态的,不属于特定对象,静态成员函数通常用来处理静态数据成员或全局变量。调用静态成员函数的方法如下:类名:静态成员函数名();回回子目录子目录6.4.2 静态成员函数在例6.8基础上用静态成员函数显示静态数据成员。class Studentstatic int sum;/声明静态数据成员,用来统计学生的总数 public:Student(string na,string b);void print();static void showsum();int Student:sum=0;/给静态数据成员sum

33、赋初值 Student:Student(string na,string b)sum+;/每创建一个学生对象,学生总数加1 sno=sum;/赋值为当前学生的学号 name=na;bj=b;6.4.2 静态成员函数void Student:print()coutStudentsno ;coutnamename ;coutclassbjendl;void Student:showsum()coutsum=sumendl;void main()Student s1(张三,计算机网络);Student s2(王五,计算机网络);s1.showsum();s2.showsum();Student:showsum();END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《C++》课件项目6 ATM机.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|