C#程序设计主讲教师:杨剑1项目5:面向对象程序设计——银行账户管理系统一、教学内容及要求能力培养:1、理解面向对象的基本概念,正确区分类和对象,对象的声明和对象的创建。2、掌握类的定义与使用方法,正确定义类的数据成员、属性和方法。3、理解类的可访问性、正确使用访问修饰符控制对类成员的访问。4、掌握类的方法的定义、调用与重载,理解方法的参数传递的工作机制。5、理解值类型和引用类型的区别。6、理解构造函数与析构函数的作用,掌握其使用方法。核心技能点:1、C#中类的定义、类的数据成员、属性和方法。2、类的构造函数3、方法的重载和参数传递扩展技能点:1、类和对象的关系2、方法的重载和参数传递3、值类型和引用类型及对象的生命周期教学内容:1、项目介绍。任务1:银行账户管理系统(5分钟)2、由若干实例引出面向对象的概念。任务2:了解面向对象的概念(10分钟)3、案例演示:类的定义任务3:掌握类的定义与使用方法(25分钟)演示,定义student类并实例化类的对象任务4:熟练掌握类的定义与使用方法(15分钟)实践,定义Book类并实例化类的对象。任务5:理解类的可访问性、正确使用访问修饰符控制对类成员的访问(15分钟)实践,自定义一个时间类。该类包含小时、分、秒字段与属性,具有将秒增加1秒的方法,任务7:正确定义类的方法(25分钟)实践,工资计税功能的实现C#程序设计主讲教师:杨剑2任务8:方法的传参(20分钟)实践,工资计税功能的实现任务9:方法的重载(20分钟)实践,求整数,双精度数的最大值4、案例演示:变量作用域任务10:理解变量作用域(10分钟)5、案例演示:构造函数任务11:理解构造函数与析构函数的作用,掌握其使用方法(25分钟)演示,利用构造函数重载实现不同对象实例化任务12:理解构造函数中只读字段的定义与使用(5分钟)6、项目实现:任务13:银行账户管理系统(30分钟)7、课内实践:任务14:熟练掌握面向对象程序设计,综合应用面向对象设计方法解决实际问题。(40分钟)显示两点之间的距离二、教学重点、难点及解决办法教学重点:1.C#中类的定义、类的数据成员、属性和方法。2.类的构造函数3.方法的重载和参数传递;教学难点:1.类和对象的关系2.方法的重载和参数传递3.值类型和引用类型及对象的生命周期教学方法:基于CDIO的课程改革,应用了CDIO教育模式。以“做中学”为出发点,实施“知识讲解案例化、课内课外协作化、实战演练一体化”的教学模式。由传统的教师引导课堂转变为以学生为主体,课本中的知识点讲解转变为“项目”主导,将传统的课堂模式转变为了以实际经验为核心。三、教学设计1、教学进程工程化将教学内容按CDIO理念,以项目为核心,并结合课程内容设计了四个环节的内容,包括构思环节、设计环节、实现环节、运作环节,同时,在课程的教学C#程序设计主讲教师:杨剑3过程中,主要采用“做中学”的教学理念来实现“教学做”一体化。以项目为载体,将抽象的知识融入到项目中,通过项目的学习将知识点分解,将“工程”教学思想体现在教学中,进而提高学生的学习效果。2、教学设计递进化根据“工程化”的思想,教学模式的设计呈递进化趋势,每一个教学项目的实现将分成四个部分来完成:任务的明确,实施方案的编写,项目的实施和项目的评价3、实践设计层次化在项目的实施过程中,主要组织层次化教学。在教学中,采取“基础实验”“综合实验”,“综合性课程设计”的设计。4、课程考核工程化考核以过程考核和工程验收测试相结合的方式进行。本门课程采取的是形成性考核方式,考试成绩由本门课程学习期间的多项过程成绩组合而成5、知识讲解案例化根据CDIO的思想,对知识点采取案例化教学法,6、课内课外协作化7、实战演练一体化为了让学生对所学课程加深理论知识,并能够将相关知识结合到实际应用中,学生需要自选一个相关主题进行综合项目的开发,提高综合应用能力。在这个环节中,学生是主体,教师主要负责引导和监控,学生需要在这个阶段发挥自身能力,以团队的形式完成项目,并由此锻炼学生的团队合作意识。四、教学过程1、项目介绍。任务1:银行账户管理系统(5分钟)设计一个Windows应用程序,模拟一个简单的银行账户管理系统。完成“创建账户”、“取款”、“存款”和“查询余额”的模拟操作。程序功能如下:(1)当点击“创建账户”按钮时,显示如图所示信息,其中卡号为随机生成的一个在100000到499999之间的一个值,余额初始化为100元;C#程序设计主讲教师:杨剑4(2)在“取款”文本框中输入取款金额后,点击“取款”按钮,显示如图所示信息,如果没有创建账户或没有输入取款金额而点击“取款”按钮或余额不足时,需要给出适当提示;(3)在“存款”文本框中输入存款金额后,点击“存款”按钮,显示如图所示信息,如果没有创建账户或没有输入存款金额而点击“存款”按钮时,需要给出适当提示;(4)当点击“查询余额”按钮时,显示如图所示信息;2、由若干实例引出面向对象的概念。任务2:了解面向对象的概念(10分钟)(1)理解面向对象(2)对象的特征——属性①属性——对象具有的各种特征②每个对象的每个属性都拥有特定值(3)对象的特征——方法C#程序设计主讲教师:杨剑5方法——对象执行的操作(4)封装①对象同时具有属性和方法两项特性②对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割(5)从对象抽象出“类”——抽取出下列对象的属性和方法的共同特征(6)OOP—类和对象①类:相对对象而言,类似于蓝图,包含方法和数据②对象:是类的实例,使用关键字new创建,对象具有行为3、案例演示:类的定义任务3:掌握类的定义与使用方法(25分钟)(1)类的定义[访问修饰符]class类名[:基类]{类的成员;}类的成员包括常量、字段、属性、索引器、方法、事件、构造函数等(2)演示,定义student类并实例化类的对象publicclassStudent{publicstringname;//数据成员publicintage;publicstringGetMessage()//方法成员{returnstring.Format(姓名:{0},年龄:{1}岁。,name,age);}}(3)定义类和创建对象C#程序设计主讲教师:杨剑6任务4:熟练掌握类的定义与使用方法(15分钟)实践,定义Book类并实例化类的对象publicpartialclassTest4_1:Form{privatevoidTest4_1_Load(objectsender,EventArgse){Bookbook1;//声明一个Book对象book1book1=newBook();//为book1分配内存空间Bookbook2=newBook();//声明同时创建对象book1.title=VisualC#.NET程序设计教程;//修改对象的数据成员的值book1.price=32;stringstrMsg=book1.GetMessage();//调用对象的方法成员lblShow.Text=strMsg;book2.title=数据结构;//修改对象的数据成员的值book2.price=28;lblShow.Text+=\n\n+book2.GetMessage();//调用对象的方法成员}publicclassBook{//定义类的数据成员publicstringtitle;publicdoubleprice;//定义类的方法成员publicstringGetMessage(){C#程序设计主讲教师:杨剑7returnstring.Format(书名:{0},价格:{1}元。,this.title,this.price);}}}该程序的运行效果如图所示。任务5:理解类的可访问性、正确使用访问修饰符控制对类成员的访问(15分钟)(1)访问修饰符(2)使用访问修饰符,可以定义应用程序中类成员的作用域访问修饰符只是控制类外对类成员的访问,类的内部对自己成员的访问不受其限制,即在类的内部可以访问所有的类成员(3)演示,Student类和Teacher类的访问任务6:正确定义类的数据成员、属性(25分钟)(1)常量C#程序设计主讲教师:杨剑8[访问修饰符]const数据类型常量名=常量的值;如:publicconstdoublepi=3.1415926;(2)字段[访问修饰符]数据类型字段名;publicdoubleradius;如果未指定访问修饰符,则使用默认的可访问性,类的成员默认为private第一级类型(指不嵌套在其他类型中的类型)的可访问性只能是internal或public,默认可访问性是internal(3)属性——是限制对类成员访问的方法①读/写属性[访问修饰符]数据类型属性名{get{//获取属性的代码,用return返回值}set{//设置属性的代码,用value赋值}}②只读属性[访问修饰符]数据类型属性名{get{//获取属性的代码,用return返回值}}③只写属性[访问修饰符]数据类型属性名{set{//设置属性的代码,用value赋值C#程序设计主讲教师:杨剑9}}(4)实践,自定义一个时间类。该类包含小时、分、秒字段与属性,具有将秒增加1秒的方法,如图所示。要求定义一个Time类,包括:①3个私有字段表示时、分、秒②两个构造函数,一个通过传入的参数对时间初始化,一个获取系统当前的时间。③3个只读属性对时、分、秒的读取,④一个方法用于对秒增加1秒(注意60进位的问题)。核心代码提示:classTime{……publicTime(){hour=System.DateTime.Now.Hour;//获取系统当前的小时minute=System.DateTime.Now.Minute;//获取系统当前的分钟second=System.DateTime.Now.Second;//获取系统当前的秒}publicTime(inth,intm,ints){hour=h;minute=m;second=s;}……publicvoidAddSecond(){second++;if(second=60){second=second%60;minute++;C#程序设计主讲教师:杨剑10}if(minute=60){minute=minute%60;hour++;}}}任务7:正确定义类的方法(25分钟)(1)类的方法—方法的声明①类的方法定义类的某种行为(或功能)②语法:[访问修饰符]返回值类型方法名([参数列表]){语句;……[return返回值;]}③访问修饰符(可选),默认情况下为private④方法的返回类型用于指定由该方法计算和返回的值的类型,如果不返回一个值,则返回值类型使用void关键字来表示,一个方法只能返回一个值⑤参数列表是方法可以接受的输入数据,当方法不需要参数时,可省略参数列表,但不能省略圆括号;当参数不止一个时,需要使用逗号分隔,同时每一个参数都必须声明数据类型,即使这些参数的数据类型相同也不例外(2)方法的返回值①如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型return表达式;②如果方法没有返回值,返回类型为void(3)常见错误(4)方法调用:方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果①在方法声明的类定义中调用该方法语法:方法名(参数列表),如:Sum(x,y)②在方法声明的类定义外部调用该方法,需要通过类声明的对象调用该方法语法:对象名.方法名(参数列表),如:add.Sum(x,y);C#程序设计主讲教师:杨剑11示例:实现两个整型的加法classAdd{publicintSum(intpara1,intpara2){returnpara1+para2;}}使用方法AddmyAdd=newAdd();//实例化一个对象intsum=myAdd.Sum(2,3);//调用方法③类的方法被调用时,有以下几种使用方法1作为一条独立的语句使用Adda=newAdd();