七《面向对象程序设计》_第1页
七《面向对象程序设计》_第2页
七《面向对象程序设计》_第3页
七《面向对象程序设计》_第4页
七《面向对象程序设计》_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、七面向对象程序设计大纲说明 :实验 1、2 为基本的验证设计实验,要求验证C+ 的新特性以及简单类的编写和应用实验 3为重点内容, 主要锻炼学生对继承与多态性的掌握, 并能灵活运用于简单的实际应用 问题的解决。实验4为综合应用实验,主要锻炼学生运用所学 C+知识,结合某一特定C+语言工具(如 VC+ )实现一个实用的窗口应用程序。实验4的内容一般由教师指定范围,学生自由选择一题,由学生独立或小组合作完成。实验一实现一个简单的C+交互程序一、所需主要仪器及环境 : 每人微机一台,安装 VC+二、实验目的和要求 :学会使用VC完成C+语言源程序的编辑、编译、运行,熟悉程序结构及非面向对象的新特性。

2、三、实验主要内容 :运行并初步了解 VC+ 环境;创建一个简单的 Win32 Console Application ;编写简单程 序;编译并调试运行程序。四、参考实验步骤: 运行 VC+, 并在新建菜单中选择创建一个空的 Win32 Console Application 类型的工程 引入头iostream.h文件,编写main函数,在其中实现:定义一个整型变量i;通过键盘给变量 i 赋值;显示变量 i 的值; 以 .cpp 为扩展名为存盘; 编译、运行。参考实例: #include <iostream.h> void main()int i;cout<< "

3、;欢迎来到C+的天地,请你输入一个整型值:”;cin>>i;cout<< ” =i”<<i<<endl;/根据需要学生自行测试所学内容,可测试教材中的有关例子! 实验二 实现一个简单的类应用VC+一、所需主要仪器及环境 每人微机一台,安装熟悉类成员的访问权限。 要求能够编写一个完整的类, 其中有一,并通过对象创建来测试类的功能。二、实验目的和要求 : 掌握类的编写和使用,定的成员变量和方法(至少一个构造方法)三、实验主要内容 :编写一个矩形类, 完成矩形面积、 周长的计算或者编写一个计算器类, 实现加、 减、乘、除等基本运算,要求将计算结果存放在

4、成员变量中。 四、参考实验步骤:确定类结构 如果是编写矩形类,则类中至少应包括存放矩形长、宽及矩形面积和周长的属性变量; 还有构造方法、分别计算矩形面积和周长的方法。如果编写计算器类,则类中至少应包括存放左右操作数和计算结果的属性变量;还有构 造方法、分别计算加、减、乘、除的方法。编程实现上述类结构 编写主函数,并在主函数中创建上述类的一个对象,通过该对象测试上述类的功能 以 .cpp 为扩展名为存盘;编译、运行。参考实例: 矩形类实例#include <iostream.h> class CRectangle/定义成员变量存储矩形的长、宽和面积、周长private: float

5、x, y, area, circum;public:CRectangle() x=0;y=0;/ 定义缺省构造函数CRectangle(float xi, float yi)x=xi; y=yi; / 定义初始化构造函数 void cal_area() area=x*y; /计算面积,结果存放在 area 成员变量 void cal_circum() circum=2*(x+y); / 计算周长,结果存放在 circum 成员变量 float getarea() const return area; / 返回矩形面积 float getcircum() const return circum;

6、 / 返回矩形周长;void main()float x,y;cout<<"please input the length x: " / 分别输入矩形的长和宽cin>>x;cout<<"the width y: "cin>>y;CRectangle myrec(x,y); /创建矩形类的一个对象,并用上述输入进行初始化 myrec.cal_area(); / 调用计算矩形面积的方法 myrec.cal_circum(); / 调用计算矩形周长的方法 cout<<"the area of

7、 the rectangle is "<<myrec.getarea()<<" and the circumstance is "<<myrec.getcircum()<<endl; / 输出计算结果计算器类实例 #include <iostream.h> class Calculatorprivate: float x, y, result; public:Calculator() x=0;y=0;/定义缺省构造函数Calculator(float xi, float yi) x=xi; y=yi; /

8、 定义初始化构造函数 void add() result=x+y; / 实现两个操作数相加 void minus() result=x-y; / 实现两个操作数相减 void multiple() result=x*y; / 实现两个操作数相乘 void divide() if(y=0) cout<<"error:divide by zero!"else result=x/y;/ 实现两个操作数相除float getresult() const return result; ;void main()float x,y; cout<<"ple

9、ase the left operator x: " cin>>x;cout<<"the right operator y: "cin>>y;Calculator mycal(x,y); /创建计算器类的一个对象,并用上述输入进行初始化 mycal.add();cout<<"the result of x+y is "<<mycal.getresult()<<endl; mycal.minus();cout<<"the result of x-y is

10、 "<<mycal.getresult()<<endl; mycal.multiple();cout<<"the result of x*y is "<<mycal.getresult()<<endl; mycal.divide();cout<<"the result of x/y is "<<mycal.getresult()<<endl;实验三 一个简单的学校教职工信息管理系统的设计一、所需主要仪器及环境 :每人微机一台,安装 VC+二、实验目的

11、和要求 :在继续熟悉已有类的编写和使用的基础上,加深对类的继承性和多态性的理解和运用。 要求学生要正确的设计类层次结构,并正确地使用类的继承机制,同时能灵活运用多态性。三、实验主要内容:使用继承机制编写一个学校教职工信息管理的应用, 完成简单的查询、 增删和修改等操 作。本实验只要求实现使用面向对象的方式实现简单的信息管理的模拟,不要求将数据永久保存。分析问题,归纳对象,从而确定类层次结构。结合前述类的编写方法,并使用 C+ 继承机制实现上述类层次结构 编写主函数,并在主函数中编程实现多个对象的增加、查询测试上述类的功能以.cpp为扩展名为存盘。注意:如果将各个类分别编程实现,则注意将他们所处

12、的头文四、参考实验步骤:件加入相应的.cpp文件中。 编译并调试程序。参考实例:女口:假设学校的教职工简单分为教师、行政人员和后勤人员。将这几类人概括成“类” 他们所具有的属性和方法分别如下:教师类二级学院等等;属性:职工号,姓名,性别,出生日,工作日,职称,工资级别,工资, 方法:新增教师,删除教师,教师信息修改等行政人员类工资等等;以及新增、删除属性:职工号,姓名,性别,出生日,工作日,职务,部门,工资级别, 方法:新增人员,删除人员,行政人员信息修改等后勤人员类属性:职工号,工资,姓名,性别,出生日,工作日,部门,工种等等; 方法:新增人员,删除人员,后勤人员信息修改等经观察发现,其中职

13、工号,姓名,性别,出生日,工作日和工资属性, 和修改等方法是三个具有的共同特征,于是将他们归纳出来构成学校职工类 学校职工类属性:职工号,姓名,性别,出生日,工作日,工资 方法:新增人员,删除人员,人员信息修改于是我们可以得到该应用的类层次结构,为方便传值,我们将这4个类的属性先封装成结构体(struct)类型,再作为一个结构变量 (也是一种对象)定义成相应类的成员变量。这几种结构体类型如下:struct empint no;char n ame20;int sex;char birthdate20;char join work_date20;float salary;struct emp _

14、teacheremp basici nfo;int exp ert_level;int sal_level;char school50;struct emp_official emp basicinfo; int sal_level; char position50; char dept50;struct emp_staff emp basicinfo; char jobtype50; char dept50;为便于动态增删结点, 我们采用链表形式组织人员信息, 同时构造 4 个链表类来存放各 类人员信息。用 C+ 语言的继承机制编写如下代码:class CSchoolEmppublic:in

15、t sex;char birthdate20;char joinwork_date20;float salary;int no;char name20; CSchoolEmp* next;CSchoolEmp()no=0; sex=0; salary=0; next=NULL;CSchoolEmp(emp &info)no=info.no;strcpy(name,);sex=info.sex;strcpy(birthdate,info.birthdate); strcpy(joinwork_date,info.joinwork_date); salary=info.s

16、alary;next=NULL; ;class CTeacher: public CSchoolEmp private:public:int expert_level;int sal_level;char school50;CTeacher *next;CTeacher()expert_level=0; sal_level=0; next=NULL;CTeacher(emp_teacher info):CSchoolEmp(info.basicinfo) expert_level=info.expert_level; sal_level=info.sal_level; strcpy(schoo

17、l,info.school); next=NULL; ;class COfficial: public CSchoolEmp private:int sal_level;char position50;char dept50;public:COfficial *next;COfficial() sal_level=0;next=NULL;COfficial(emp_official info):CSchoolEmp(info.basicinfo) sal_level=info.sal_level; strcpy(position,info.position); strcpy(dept,info

18、.dept); next=NULL; ;class CStaff: public CSchoolEmp private:char jobtype50;char dept50;public:CStaff *next;CStaff() next=NULL;CStaff(emp_staff info):CSchoolEmp(info.basicinfo) strcpy(jobtype,info.jobtype); strcpy(dept,info.dept); next=NULL; ;/用于实现链表的类class EmpLinkprivate:CSchoolEmp *head;CSchoolEmp

19、*tail;CSchoolEmp *curr;public:EmpLink()head=NULL; tail=NULL; curr=NULL; EmpLink(CSchoolEmp *emp) head=emp; tail=emp; curr=NULL; /注意:这个两个查询函数都只能返回满足条件的单个查询结果 virtual CSchoolEmp *query(int no)curr=head;doif(curr->no=no)return curr;else curr=curr->next; while (curr!=NULL); return curr;virtual CSc

20、hoolEmp *query(char* name)curr=head;doif(!strcmp(curr->name,name) return curr;else curr=curr->next; while(curr!=NULL); return curr;/采用链表形式添加条目virtual void additem(CSchoolEmp *info) tail->next=info;tail=info;/删除符合要求的单个记录,如成功返回0,否则返回 1virtual int delitem(int no) if(query(no)=NULL) return 1;el

21、se curr=head; CSchoolEmp *tmp=head; doif(curr->no=no)break;else tmp=curr; curr=curr->next; while (curr!=NULL); tmp->next=curr->next; delete curr;return 0;virtual int delitem(char *name)if(query(name)=NULL)return 1;else curr=head; CSchoolEmp *tmp=head; doif(!strcmp(curr->name,name) bre

22、ak;else tmp=curr; curr=curr->next; while (curr!=NULL); tmp->next=curr->next;delete curr;return 0;/显示链表所有结点信息virtual void displayall() curr=head; while(curr!=NULL) cout<<"n number: "<<curr->no;cout<<"n name: "<<curr->name;cout<<"n

23、sex: "<<curr->sex;cout<<"n birthdate: "<<curr->birthdate; cout<<"n joinwork-date: "<<curr->joinwork_date; cout<<"n salary: "<<curr->salary;"<<endl;cout<<"n curr=curr->next;/显示链表某一结点信息vir

24、tual void displayone(CSchoolEmp *curr) cout<<"n number: "<<curr->no;cout<<"n name: "<<curr->name;cout<<"n sex: "<<curr->sex;cout<<"n birthdate: "<<curr->birthdate; cout<<"n joinwork-date: &

25、quot;<<curr->joinwork_date; cout<<"n salary: "<<curr->salary;"<<endl;cout<<"n ;class TeacherLink: public EmpLinkCTeacher *head;CTeacher *tail;CTeacher *curr;public:TeacherLink()head=NULL; tail=NULL; curr=NULL;TeacherLink(CTeacher *emp) head=emp

26、; tail=emp; curr=NULL; void displayall()curr=head; while(curr!=NULL) cout<<"n number: "<<curr->no;cout<<"n name: "<<curr->name;cout<<"n sex: "<<curr->sex;cout<<"n birthdate: "<<curr->birthdate; cout&l

27、t;<"n joinwork-date: "<<curr->joinwork_date;cout<<"n salary: "<<curr->salary;cout<<"n expert_level: "<<curr->expert_level; cout<<"n salary_level: "<<curr->sal_level; cout<<"n school belong: &q

28、uot;<<curr->school; cout<<"n"<<endl;curr=curr->next;void displayone(CTeacher *curr)cout<<"n number: "<<curr->no; cout<<"n name: "<<curr->name; cout<<"n sex: "<<curr->sex;cout<<"n b

29、irthdate: "<<curr->birthdate; cout<<"n joinwork-date: "<<curr->joinwork_date; cout<<"n salary: "<<curr->salary;cout<<"n exp ert_level: "<<curr->ex pert_level; cout<<"n salary_level: "<<curr

30、->sal_level; cout<<"n school bel on g: "<<curr->school; cout<<"n"<<e ndl;上述代码只给出了部分对象和链表操作的定义,主函数的设计还需由学生自行完成。实验四一个Windows窗口应用程序的设计和实现(题目由学生选择)一、所需主要仪器及环境:每人微机一台,安装 VC+二、实验目的和要求 :综合应用已学的面向对象知识,初步体验使用VC+集成开发环境开发具有 window风格的复杂应用程序的方法。要求学生能设计出一款可用的有实际意义

31、的小软件。三、实验主要内容:根据所选择的题目,大致确定软件结构,划分软件的逻辑功能模块。了解VC+的MFC 基本类库,熟悉基于 MFC的VC应用成的开发步骤和特殊应用的开发方法,分析windows风格的应用程序消息传递的机制。在熟悉VC开发windows风格应用基本方法的基础上,进行软件开发设计。注意养成添加注释的习惯,提高程序的可读性, 注意保护某些特殊命令的安全执行。分析问题,归纳对象,从而确定类层次结构,并确定其中各个类的结构(包括属性与方 法),如果是数据库应用,还需要确定数据库表的结构 根据具体应用,确定各个类的主要方法的实现算法结合前述类的编写方法,以及C+继承、多态性的实现方法,

32、编程实现上述类层次结构,注意不同语言工具下,可视化编程略有不同,应结合具体的语言工具展开编程编译并调试程序。四、参考实验步骤: 参考实例:以开发一个简单的数据库应用为例,选择后台数据库为Access,编程环境为 VC+。我们将实验3中的应用转为窗口界面,并用数据库存储职工信息。第一步,分析问题,找出相关对象(同实验3),确定数据库表结构这里根据应用需要至少应有4张表,分别存放职工类,教师类,行政人员类和后勤人员类的有关信息。这4张表的结构如下empnonamesex birtlkdat« joiiworki 鱼 te日期/时间 日期/时间salarytftl数据类型I2STTeacL

33、er :表宇段名称empncftxper sal-level schofllTOfficial Z 表芋段名称empno posi tioii sal_lev»l departm entS TStaff :表这四张表的关系为,其中TTeacher、TOfficial和TStaff表都通过empno属性与basicinfo表发生关联(注意,这里未考虑关系数据库的规范化理)108第二步,创建 Access数据源,并将其添加入 ODBC数据管理器中。CODBC数£港管SS用P ESH I采言充DSK|文件BS1TI驰动程序I跟踪I连接池丨关于I用户数据源迈):名称Ch 姙 Tin

34、dIEASE FilesExcel filesMS Acc«5s Database iiiyAccessdt studentVisTial PaxFro Database71 snal FaxFr& Tables呃动程序 Mi crosaft MicrosoftDriver deMi crosaftMlcrQEoft Driver do Driver deMi crosoftWi cros&ftAccess Briv&r 仪.mdb Dr i vtr C*. dbf) Microsoft Access (* Excel Driver (*. xls) Acce

35、ss Driver C+. mdb Microsoft Access (*. Hicrosoft Access (*. Visual faxFro 71 snal FaxFr &Driver Br i ver添加电)I删除® ) 配置(£),I簷隔矗牆需矍嚅圈蘿臨離信息"用确定 I 取消 I 应用屯】帮助第三步,创建 VC+的一个MFC AppIication工程,注意在创建工程并设置属性时,选择使 用数据库支持,同时选择数据源为上述建好的ODBC数据源。JJ2SJ讨不iTlWhn| dnhbvvv 別阳厲呵oM yru lik? Id inchiic?D

36、il*h*i* QIldbi£h»I bl*VAVA*EiIer Ufine广 Header HIta onlyLe viev withoul file supp<jrtview lilt supII yihu i"匚lude a d-HlnliB-fie view yiiu niu=:1 SeIhdI a data source.ODBC;emprnange二r DAO:Ctijxun*MBASFFII 聲crrprnjinaqc广 OLF QB;Excel Files=1 nrfllSiuprM5 Access L afta baseDafti sour

37、ce広 Snapshfllr Dyna&rlr fabr-orCaftCtI IDatB SoufCf.The leble '(besHnlcp In data squ忙曾'empmanage' Is selected-ftxi”an ccd庚Dm匸日由书crrhimnm Djch I Mexi 卜 I5n 詬!1ICancel第四步,设计应用程序的显示界面(可使用Form形式,也可使用 List控键)第五步,编程实现数据库操作功能可有两种方法,一是使用DAO数据库类对象与定制的SQL语句来操作数据库,这一方法较灵活,能实现数据操作的大部分功能,但是操作不方便;

38、二是使用CRecordSet类提供的记录操作函数来实现数据库相关操作。具体请参考有关的VC+数据库编程书籍。本实验参考书籍:李博轩编,Visual C+6.0数据库开发指南,清华大学出版社,2000参考网站: ; http:/wwwvcheI ;附:简单MFC数据库操作的实现(以上述basicinfo进行单表操作为例)。首先按上述方式创建数据源(暂时只建立basicinfo 表)和 MFC 工程。设计如下显示界面,并将各Edit控键与相应的数据库属性相关联Maps MemberVofiablc J AuMm咄rm | ActiveXEfrils |Indo |A<ld职工号dbeKamp

39、IcConlral De;IK|E1i.LpHIDC_BUnOh_WDNI IDClBUTTOtJlDELEl IDC_BllTTOh_MODC iQcZeunouZfldEff 盤巴?削!吧IDC_EDIl_JCir<WOR IDCJUIT NAME IQC_EDIl_SAlJJiy irK.EOIT.5CKSfVAnympnaCance-IJptkDcf-rrifiljnn;'咔改当记录De 沁 HpliEin:CMriii 讪h kngtii vnlidniian使用CRecordSet类提供的数据集操作方法实现各数据库功能(其中涉及的新对话框的设计不再具体介绍)1 .查询

40、(使用 m_pSet的m_strFiler成员)void CDbexa mp leView:O nButto nQuery()CQueryname quedlg; / CQueryname为新建的专用于查询姓名的对话框if(quedlg.DoModal()=IDOK)CString quename=quedlg.m_Queryname; m_pSet->m_strFilter="name='"+quename+"'" / 设置过滤器 m_pSet->Requery(); /重新查询UpdateData(FALSE); / 显示

41、查询结果,这里只能显示第一个结果 2增加新记录 void CDbexampleView:OnButtonAddnew()CAddnewdlg addlg; / CAddnewdlg 为新建的专用于添加新记录的对话框 if(addlg.DoModal()=IDOK)if(addlg.m_empno=0) MessageBox(" 职工号不能为空 !");return;if(addlg.m_strname.IsEmpty()MessageBoxC姓名不能为空!");return; m_pSet->AddNew();/ 在数据库表末尾添加新记录m_pSet->m_empno=addlg.m_empno;/以下为值传递m_pSet->m_name=addlg.m_st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论