《面向对象程序设计》实验指导书
《面向对象程序设计》实验指导书
课程代码:04420280
适用专业:计算机科学与技术、网络工程、数字媒体技术
制定人:汪海鹰
计算机学院
2015 年9 月
前言 (2)
实验一 C++基础 (4)
实验二 C++对C的扩充 (8)
实验三 C++输入输出流操作 (9)
实验四类与对象初步 (11)
实验五类与对象的使用 (13)
实验六运算符重载 (15)
实验七继承与派生 (16)
实验八多态性与虚函数 (20)
实验九课程期末综合设计 (21)
一、说明
本实验指导书根据《面向对象程序设计》教学大纲和实验大纲编写。
二、实验目的
面向对象程序设计(Object Oriented Programming, OOP)方法是当前主流的程序设计方法,具有抽象性、封装性、继承性和多态性的特点。
本实验课程的目标是通过实验,使学生能够熟练使用Visual C++ 6.0 和VS2010开发平台,掌握面向对象的程序设计语言C++中的类、对象、继承、封装、多态等概念及使用方法,掌握虚函数、异常、I/O流处理等编程技巧,养成严谨的程序设计风格和习惯。
三、实验安排
《面向对象程序设计》实验课程共有8个实验和1个期末课程设计,分配学时如下所示,共28个课时。具体安排如下表所示:
档、源代码并以小组形式答辩。
四、实验考核
实验的考核形式以实验报告和期末课程设计为主,结合实验课程提问及考勤。具体成绩评定原则为:单个实验成绩记分制为等级制,在计算总成绩时转换为百分制。实验总成绩由6个课程实验的平均成绩及1个学期期末综合设计成绩组成,课程实验占80%,期末综合设计占20%。实验成绩等级转换百分制的对照表如下表所示:
实验一 C++基础
-C++程序的运行环境和运行C++程序的方法
一、实验目的
⑴熟悉和理解C++语言中的数据类型、运算、表达式;
⑵初步了解C++源程序的结构和特点;
⑶能够掌握在一种以上的编译环境中调试和运行简单的C++程序。
二、实验内容和要求
阅读下列代码,写出结果,并编写C++程序验证;
⑴混合运算
int a=1,b=3,i;
①i=--a||++b,a+b;则a的值为,b的值为,i的值为。
②i=a--||(++b,a+b); 则a的值为,b的值为,i的值为。
③i=--a||(++b,a+b); 则a的值为,b的值为,i的值为。
④i=((--a||++b),a+b); 则a的值为,b的值为,i的值为。
⑵整形、字符型间的相互赋值
char c; short a; unsigned short u_a;
c=128; a=c; u_a=c; 则c的值为,a的值为,u_a的值为。
c=0501; a=c; u_a=c; 则c的值为,a的值为,u_a的值为。
⑶浮点型数据的赋值及精度
int i;short j;char k;long l;float m;double n;
n=50000.222233334445;
i=n;j=n;k=n;l=n;m=n;
则i的值为,j的值为,k的值为, l的值为,m的值为,n的值为。
三、操作步骤
(以VC6.0++编译环境为例)
⑴.新建一个win32 Console Application的工程:打开VC++开发软件,从[文件]菜单中点击[新建]菜单项,出现如图1-1所示对话框,在右上角的工程下输入该工程的名称hello,并设置该工程所保存的路径,最后点击确定。
⑵.当确定后会出现选择工程类型的对话框,如图1-2所示:请选择一个空的工程,即第一个选项。
图1-2
⑶.单击确定后,工程建立完毕,接下来建立程序源文件,请再单击[文件]菜单下的[新建]出现原先出现的对话框,请选择“文件”选项卡中的c++ source file选项,并取名hello,如图1-3。
图1-3
⑷确定后,就进入了源代码的编辑窗口,如图1-4所示:
⑸.编辑好开始设置的源代码:
进入了编译和调试阶段,请按如图1-5所示的第二个按钮,这个称作为构件,它的功能是先进行编译,同时如果编译成功的话自动建立EXE可执行文件,同时将可执行文件和编译和连接过程中的中间代码一起放置在debug文件夹中。
图1-5
⑹.执行可执行文件,单击编译条上的第四个按钮,即惊叹号,如图1-5所示,对编译成功的程序进行执行。
(以VS2010编译环境为例)
⑴. VS2010不能单独编译一个.cpp或者一个.c文件,这些文件必须依赖于某一个项目,因此必须首先创建一个项目。有多种方法都可以创建项目,可以通过菜单:文件,新建,项目;也可以通过工具栏点击新建项目进行创建。
点击起始页面上面的新建项目,点击之后进入新建项目向导,上面选择Win32控制台应用程序,名称中输入HelloWorld点确定,接下来进入创建页面,在Win32应用程序向导的第一个页面直接点下一步即可,如下图1-6.
图1-6
⑵.右键单击项目名称,选择添加,新建项,在向导中选择代码:C++文件(.cpp),如下图1-7所示。
图1-7
⑶.单击添加后,可在如下图1-8中进行代码的撰写工作。
图1-8
⑷. 代码编写完毕,可使用图中的进行编译,或者快捷键Ctrl+F5。结果如图1-9所示:
图1-9
四、实验分析
代码分析:
⑴混合运算:逗号运算符优先级最低;逻辑运算符是双目运算符,后部分不一定会执行;
⑵整形、字符型间的相互赋值:按存储单元中的存储形式直接传送;若多字节复制到少字节,则低位复制,多出的高位舍弃;若少字节复制到多字节,则低位复制,高位根据少字节的最高位一致进行扩展;
⑶浮点型数据的赋值及精度:常实数的存储形式为该编译系统支持的最高精度(一般为双精度);浮点型数据的输入和输出有精度和广度的限制,总体来说误差是必然的,准确是偶然的;浮点型数据赋值给整形或字符型数据,首先去掉小数部分,然后按照该整数在存储单元中的存储形式直接传送。
五、实验补充要求
本实验为演示性,不需要撰写实验报告,学生按照3-4人分组,每组成员之间相互检查,教师抽查。
实验二 C++对C的扩充
一、实验目的
⑴了解在面向过程程序设计中C++对C功能的扩充与增强;
⑵进一步熟练在不同系统和编译环境下编辑、编译和运行C++程序的方法;
⑶进一步熟悉C++程序的结构和编程方法。
二、实验内容与要求
本实验由4个小程序组成,要求如下:
⑴编写一个程序,用来实现2个或3个正整数中的最大数。
①用不带默认参数的函数实现;
②用带默认参数的函数实现。
对比两种方法,分析带默认参数的函数优点和应用场合,并分析本题中默认参数的取值应该在什么范围。
⑵编写一个程序,输入两个整数,将它们由大到小的顺序输出。
①使用指针方法;
②使用变量引用方法。
对比两种方法,分析这两种方法的特点和使用技巧。
⑶有5个字符串,要求对它们由小到大的顺序排列,用string方法。
⑷编写一个程序,用同一个函数名对n个数据从小到大排序,数据类型可以是整形、单精度型和双精度型。对比以下两种方法,分析这两种方法的特点和使用技巧。
①用重载函数实现;
②用函数模板实现。
三.实验步骤(实验操作类似实验一的操作步骤)
四、实验分析
⑴有默认值的形参必须放在形参表的右边,不允许无默认参数值和有默认参数值的形参交
错排列。
⑵用指针变量做形参,可将实参变量的地址传递给形参,在函数内用“*指针变量”的方
式访问实参变量。而引用变量是变量的别名,在调用函数时,用引用变量做的形参就成了实参变量的别名,在函数中用的形参名就是实参的别名,这样比用指针变量更直观、更方便。
⑶C++提供了字符串类类型string,实际上它不是C++的基本类型,它是在C++标准库
中声明的一个字符串类,程序可以用它定义对象,但是需要在程序开始用包含语句把C++标准库的string头文件包含进来。
⑷用函数模板比用函数重载更方便,但是函数模板只适用于函数参数的个数相同而类型不
同,并且函数体相同的情况,如果函数的参数个数不同,则不能用函数模板。
五、实验补充要求
本实验为验证性,需要撰写实验报告,实验报告书写格式及要求见附件:《实验报告模板.doc》文档。学生按照3-4人分组,每组成员之间相互检查,教师抽查。
实验三 C++输入输出流操作
一、实验目的
⑴掌握C++的3种输入输出方法:标准I/O,文件I/O和串I/O;
⑵熟练使用多种输入方法;
⑶熟练使用C++的格式输出
二、实验内容与要求
本实验由3个小程序组成,要求如下:
⑴ASCII文件流的写操作
编写代码,将实验1的输出结果存入文件中,要求该文件名为学号,扩展名为dat;
⑵标准输入输出流及输入函数实现
将学号、性别、姓名、年龄及班级输入到一个结构体中,结构体的定义如下所示。
要求结构体中的每个成员的输入方法不同,即使用5种不同的C++输入方法;尝试不同的输入,通过输出结果验证输入方法是否正确。输出的每项宽度为16位,左对齐。
struct stud{
char number[13];//学号
char sex;//性别,f代表女,m代表男
char name[20];//姓名
unsigned short age;//年龄
char class_number;//班级,1或2
}stud1;
⑶字符串流的读、写操作
设输入字符串“ChengDu University 1978”,用串I/O的方法编程逐个读取这个串的每个字符,直到读完为止,并在屏幕上输出;编写代码,用串I/O的方法将字符串逆序输出。部分代码如下:
char str1[]="ChengDu University 1978",str2[50];
istrstream s_in(str1);//建立输入串流对象s_in并与字符数组str1关联
for(i=0;i< ;i++){
s_in>>c;//从字符数组str1中读入字符,不含空格,赋值给字符变量c
str2[ ]=c; cout< ostrstream s_out(str1,sizeof(str1));//建立输出串流对象s_out并与字符数组 str1关联 for(i=0;i< ;i++)s_out< cout<<"逆序:"< 三.实验步骤 实验操作类似实验一的操作步骤; 四、实验分析 ⑴ASCII文件流的写操作:要写数据到一个文件中,首先要打开文件,使文件流对象与 要使用的文件名之间建立联系;ofstream outfile("*.dat",ios::out);打开文件“*.dat” 用于输出,并将这个文件与输出文件类对象outfile建立联系,在程序中,用到这个文件“*.dat”的地方就用outfile来代替。 ⑵标准输入输出流及输入函数实现:输入的方法主要有6种,分别是cin、cin.getline()、 cin.get()、getline()、gets()和getchar(),其中后5种是字符或字符变量的输入;C++中的输入和输出是“流”的操作,键盘上键入的任意一个按键都会在流中占据一个位置,使用2次及以上的输入操作时,应注意对多余字符的舍弃(缓冲区的重置和清空)。 ⑶字符串流的读、写操作:字符串流一定和字符数组相关,但不仅仅操作字符,还可操 作数值;字符串流的读取类似使用cin的读取,空格不是有效字符。 五、实验补充要求 本实验为演示性,不需要撰写实验报告,学生按照3-4人分组,每组成员之间相互检查,教师抽查。 实验四类与对象初步 一、实验目的 ⑴掌握类与对象的定义和使用;理解具有不同访问属性的成员的访问方式; ⑵观察构造函数和析构函数的执行过程;学习类的聚集使用方法; ⑶使用DEBUG来调试程序,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 二、实验内容与要求 编写一个程序,分别对CPU、计算机、公司职员定义三个类,要求全面考虑其数据成员和函数成员的定义和说明,对程序的执行过程进行跟踪观察,深入理解构造函数和析构函数。 ①定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中rank为枚举类型CPU_Rank,定义为enum CPU_Rank={P1,P2,P3,P4,P5,P6,P7},frequency为单位为MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 ②定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。 ③定义一个用于人事管理的People(人员)类。抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数。 三.实验步骤 下面以第1个CPU类小实验为例,简要描述实验步骤。其他2个小实验类似。 首先定义枚举类型CPU_Rank,enum CPU_Rank{ P1=1,P2,P3,P4,P5,P6,P7}, 再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。本小实验的文件名:实验4-1 CPU类.cpp。 使用debug调试功能观察实验4-1 CPU类.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。 调试操作步骤如下: Build|Start Debug|Step Into 命令,系统进行单步执行状态,程序开始运行,一个DOS 窗口出现,此时光标停在main()函数的入口处; A)从Debug菜单栏中单击Step Over(F10),此时,光标下移,程序准备执行CPU对象 的初始化; B)单击Step Into(F11),程序准备执行CPU类的构造函数; C)连续单击Step Over,观察构造函数的执行情况,直到执行完构造函数,程序回到主 函数; D)此时程序准备执行CPU对象的run()函数,单击Step Into,程序进入run()成员函数, 连续单击Step Over,直到回到main()函数; E)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析 构函数、成员函数的执行顺序的认识; F)再试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。 四、实验分析 实验表明构造函数可以重载,而析构函数只有一个。先执行的构造函数后析构,后构造的函数先析构。类的私有成员,外部不可直接访问,需要通过该类的公有函数访问。 五、实验补充要求 本实验为验证性,需要撰写实验报告,实验报告书写格式及要求见附件:《实验报告模板.doc》文档。学生按照3-4人分组,每组成员之间相互检查,教师抽查。 实验五类与对象的使用 一、实验目的 ⑴掌握具有不同访问属性的成员的访问方式; ⑵熟练使用成员、方法的概念以及构造方法的概念; ⑶熟练使用类与对象编写程序。 二、实验内容与要求 编写1个程序,实现如下要求之一: ①用基于对象的方法设计一个程序,该程序提示用户输入学生的姓名及考试分数(假定每个班级学生人数最多为30人),并完成下列要求:学生姓名(英文或汉语拼音)和2门课程的成绩输入,高数和英语;可按照用户要求,分别对不同课程的成绩和平均成绩排序;输出班级平均分;根据要求输出成绩排名,后5名的学生姓名加密输出; 程序要点分析: 定义学生类student,创建对象数组,存放多个对象元素,定义计算平均分的average 函数,排序函数sort,加密函数e ncryption,输出函数output等。 ②用基于对象的方法实现个人资金的管理:定义一个资金管理的类,应包含日期,资金数目,一段时间的变动情况,收入、支出、显示等操作。程序的主要功能包括帐务收支明细、数据的录入、查找、修改、删除、统计、排序等。 程序要点分析: 个人帐务数据是由帐务明细条目构成,其信息包括:序号,日期(年、月、日),收支项名称,收支类型(收入/支出),收支金额(正/负数表示收支),备注等。 界面功能要求:采用友好的字符界面,实现一个功能控制菜单。每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。 数据保存形式:所有个人帐务数据要以文本或二进制文件保存。 实现的功能:(可部分完成) 1) 新增帐务明细数据。 2) 查找帐务数据(可按序号、日期(年、月、日)、名称、金额等查找)。 3) 修改帐务明细条目(先查找,再修改。若查找出多个条目,则进一步提示用户选择条目的序号,再修改)。 4) 删除帐务明细条目(请参考上面修改的处理)。 5) 对帐务数据排序(可按日期、名称、金额等排序。要求排序后,记录的序号也要重新编排)。 6) 显示当前所有帐务数据列表。 7) 帐务统计(根据日期范围,可分别按年、月或日统计收、支、结余总金额,并显示) 8) 保存帐务数据到文件中、从文件中读入帐务数据。 三.实验步骤 先抽象出类,仔细考虑类的接口,即公有函数的定义。具体功能函数可先写一个,比如先完成求最高分的函数,按照实验4的方法调试成功后,然后再逐步增加功能。 四、实验分析 要求1中,要注意到动态对象数组的创建,并在使用完成后销毁。指针对象在调用其成员时,用法与一般调用时不一样的,使用"->"符号,而不是"点"。 要求2中,类定义中接口,即收支函数的定义很重要,收支函数会对私有成员(即金额)进行修改。 五、实验补充要求 本实验为设计性,需要撰写实验报告,实验报告书写格式及要求见附件:《实验报告模板.doc》文档。学生按照3-4人分组,每组成员之间相互检查,教师抽查。 实验六运算符重载 一、实验目的 ⑴理解运算符重载的概念; ⑵掌握几种常用的运算符重载的方法; ⑶了解转换构造函数的使用方法。 二、实验内容与要求 ①声明一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类的对象,也可以其中一个是整数,顺序任意。运行该程序,分别求两个复数的和,整数和复数的和。 ②声明一个Teacher(教师)类和一个Student(学生)类,两者有一部分数据成员相同。编写程序,将一个Student对象转换为Teacher类。 三.实验步骤(实验操作类似实验一的操作步骤) 四、实验分析 ①有3种运算形式,因此需要有3个重载函数对"+"重载,其中左值为整数类型的重载函数只能使用友元函数,而不能使用成员函数。 ②转换构造函数可以将一种类的对象转换为另一种类的对象,本程序中转换构造函数的写法应为Teache(Student& );的形式。但是数据成员具体如何转换完全可以自己决定。五、实验补充要求 本实验为验证性,需要撰写实验报告,实验报告书写格式及要求见附件:《实验报告模板.doc》文档。学生按照3-4人分组,每组成员之间相互检查,教师抽查。 实验七继承与派生 一、实验目的 ⑴理解继承的含义; ⑵掌握从现有类派生出新类的方式; ⑶熟练在派生类中使用基类的成员; ⑷掌握虚基类的定义和使用技巧。 二、实验内容与要求 编写1个程序,进行雇员工资的计算,要求如下: ①新建一个雇员类,它的数据成员有雇员编号,年龄,工资,性别,姓名,输入雇员资料方法,打印雇员资料方法。 ②以此雇员类为基类,从中派生出教师类,其中要求在教师类中加入一个计算教师工资的方法,教师工资=基本工资(1000)+课时(月工作量)×30。 ③以此雇员类为基类,从中派生出实验员类,其中要求在实验员类中加入一个计算实验员工资的方法,实验员工资=基本工资(800)+实验室补助(150)+值班时间(月工作量)×5。 ④以此雇员类为基类,从中派生出行政人员类,其中要求在行政人员类中加入一个计算行政人员工资的方法,行政人员工资=基本工资(900)+行政补贴(200)。 ⑤以教师类与行政人员为基类,派生出“双肩挑”类,即具有教师和行政双重身份的类,其工资计算方法为:基本工资(1000)+课时(月工作量)×30+行政补贴(200) 三.实验步骤 根据以上分析,可大致按照如下步骤进行代码的编写,注意:下面只是代码编写的步骤和大致框架,具体内容请自行添加。 1.定义基类 (1) 定义雇员基类 class employer{ };; (2) 定义职工号、年龄、性别、姓名等基本信息变量。protected: int code,age;//职工编号及年龄 char sex[10];//性别 char name[10];//姓名 (3) 构造成方法初始化雇员基本信息 public: employer() { code=0; age=0; } (4) 获得数据方法:getdata()函数 void getdata() { cin >>code>> age >>sex >> name; } 2. 定义教师派生类 (1) 定义教师派生类teacher class teacher:public employer { }; (2) 定义课时等变量。 protected: int hour;//课时 (3) 构造成方法初始化 public: teacher() { hour=30; } (4) 获得数据方法:getdata()函数 void getdata() { employer::getdata(); cin>>hour; } 3. 定义实验员派生类 (1) 定义实验员派生类labworker class labworker:public employer { }; (2) 定义值班时间等变量。protected: int hour ;//值班时间 (3) 构造方法初始化 public: labworker() { } (4) 获得数据方法:getdata void getdata() { employer::getdata(); cin>>hour; } 4. 定义行政人员派生类 (1) 定义行政人员派生类admin class admin:public employer { }; (2) 定义补贴等变量。protected: double addition;//补贴(3) 构造成方法初始化 public: admin() { } (4) 获得数据方法:getdata void getdata() { employer::getdata(); } 5.编写主菜单函数 (1) 定义三个函数分别实现输入教师信息、输入实验员信息、输入行政人员信息。 例:void input_teacher(teacher *temp,int count) cout <<"职工号\t姓名\t性别\t年龄\t课时\n"; for(i=0;i { temp[i].getdata(); } (2) 定义三个函数分别实现输出教师信息、输出实验员信息、输出行政人员信息。 int i; cout <<"职工号\t姓名\t性别\t年龄\t薪水\n"; for(i=0;i { t[i].print(); } 6.编写一个主函数,实现输入、输出教师、实验员、行政人员信息。 teacher *t; int choice,count; while(1) { cout <<"1.输入教师资料\n2.输入实验员资料\n3.输入行政人员资料\n0.退出\n 选择您要进行的操作:"; cin >>choice; switch(choice) {case 1: cin>>count;//输入人数 t=new teacher [count]; input_teacher(t,count);break; } } 四、实验分析 本实验中双肩挑类是教师类和行政人员类共同派生得到,而教师类和行政人员类又由同一个雇员基类派生得到,因此在定义教师类和行政人员类时,应将雇员基类定为虚基类。同时,我们应注意到雇员类在主函数中是没有直接定义和使用的,雇员类的成员不会被无继承关系的外界对象或其他所访问,因此,可以将雇员类的成员都定义为保护权限,即抽象类。 虚基类的声明: class <派生类名>: virtual <权限> <基类名>{}; 本实验的第二个重点就是动态的创建对象数组,其一般定义格式为: <类名> *p=new <类名> [个数]; 或者分开写:<类名> *p; p=new <类名> [个数]; 五、实验补充要求 本实验为设计性,需要撰写实验报告,实验报告书写格式及要求见附件:《实验报告模板.doc》文档。学生按照3-4人分组,每组成员之间相互检查,教师抽查。 空间分析实验指导书 黎华 武汉理工大学资环学院 2011年9月 目录 实验一、市区择房分析 (2) 实验二、最短路径分析 (3) 实验三、寻找最佳路径 (5) 实验四(综合实验一)、学校选址规划 (7) 实验一、市区择房分析 1、背景 如何找到环境好、购物方便、小孩上学方便的居住区地段是购房者最关心的问题,因此购房者就需要从总体上对商品房的信息进行研究分析,选择最适宜的购房地段。 2、数据 ●城市市区交通网络图(network.shp) ●商业中心分布图(marketplace.shp) ●名牌高中分布图(school.shp) ●名胜古迹分布图(famous place.shp) 3、步骤 1)所寻找的区域应该满足以下条件 ●离主要交通要道200米之外,以减少噪音污染 ●在商业中心的服务范围内,服务范围以商业中心规模的大小(属性字段YUZHI)来 确定 ●距名牌高中在750米内,以便小孩上学便捷 ●距名胜古迹500米内,环境幽雅 2)对每个条件进行缓冲区分析,得到各个条件所对应的区域 3)运用空间叠置分析对上述4个图层进行叠加,得到适合的购房地段 实验二、最短路径分析 1.背景:在现实生活中寻求最短,最快,提高效率有着重大意义,而交通网络中要素的设置如权重的改变和阻强的设置对最短路径的选择也有着很大的影响,研究这些因子的改变究竟对最短路径能造成多大的影响,对于现实也有一定的指导意义。 2.目的:学会用ArcGIS9 进行各种类型的最短路径分析,了解内在的运算机理。 3.数据:试验数据位于\Chp7\Ex2,请将练习拷贝至E:\Chp7\Ex2\ 一个GeoDatabase 地理数据库:City.mdb,内含有城市交通网、超市分布图,家庭住址以及网络关系。 4.要求:应该能够给出到达指定目的地的路径选择方案根据不同的权重要求得到不同的最佳路径,并给出路径的长度;根据需求找出最近的设施的路径,这里是以超市为例。 (1)在网络中指定一个超市,要求分别求出在距离、时间限制上从家到超市的最佳路径。 (2)给定访问顺序,按要求找出从家经逐个地点达到目的地的最佳路径。 5.操作步骤: 首先打开ArcMap选择E:\Chp7\Ex2\city.mdb再双击后选择将整个要素数据集city加载进来。然后将place 点状要素以HOME 字段属性值进行符号化,1 值是家,0 值是超市,(1)无权重最佳路径的选择 1)在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放在家和想要去的超市点上。 2)确认在Analysis 下拉菜单中的Options 按钮打开的Analysis Options 对话框中的weight 和weight filter 标签项全部是none,这样使得进行的最短路径分析是完全按照这个网络自身的长短来确定的。 3)点选追踪工作(Track task)下拉菜单选择寻找路径(find path)。单击solve 键,则最短路径将显示出来,这条路径的总成本将显示在状态列。 (2)加权最佳路径选择 1)在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放在家和想去的某个超市点上。 2)选择Analysis 下拉菜单,选择Option按钮,打开Analysis Option对话框,选择Weight 标签页,在边的权重(edge weight)上,全部选择长度(length)权重属性。 3)点选追踪工作(Track task)下拉菜单选择寻找路径(find path)。单击solve键,则以长度为比重为基础的最短路径将显示出来,这条路径的总成本将显示在状态列。 4)上述是通过距离的远近选择而得到的最佳路径,而不同类型的道路由于道路车流量的问题,有时候要选择时间较短的路径,同样可以利用网络分析进行获得最佳路径。 这里的时间属性是在建网之前,通过各个道路的类型(主干道,次要道等)来给定速度属性,然后通过距离和速度的商值确定的,并将其作为属性设定于每个道路上,这里没有考虑红灯问题以及其他因素,而是一种理想情况,不过可以将其他的要素可以逐渐加入来完善。 (3)按要求和顺序逐个对目的点的路径的实现 1)在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标按照车辆访问的顺序逐个放在点上。 矿压测试技术实验指导书 学号: 班级: 姓名: 安徽理工大学 能源与安全学院采矿工程实验室 实验一常用矿山压力仪器原理及使用方法 第一部分观测岩层移动的部分仪器 ☆深基点钻孔多点位移计 一、结构简介 深基点钻孔多点位移计是监测巷道在掘进和受采动影响的整个服务期间,围岩内部变形随时间变化情况的一种仪器。 深基点钻孔多点位移包括孔内固定装置、孔中连接钢丝绳、孔口测读装置组成。每套位移计内有5~6个测点。其结构及其安装如图1所示。 二、安装方法 1.在巷道两帮及顶板各钻出φ32的钻孔。 2.将带有连接钢丝绳的孔内固定装置,由远及近分别用安装圆管将其推至所要求的深度。(每个钻孔布置5~6个测点,分别为;6m、5m、4m、3m、2m、lm或12m、10m、8m、6m、4m、2m)。 3.将孔口测读装置,用水泥药圈或木条固定在孔口。 4。拉紧每个测点的钢丝绳,将孔口测读装置上的测尺推至l00mm左右的位置后,由螺丝将钢丝绳与测尺固定在一起。 三、测试方法 安装后先读出每个测点的初读数,以后每次读得的数值与初读数之差,即为测点的位移值。当读数将到零刻度时,松开螺丝,使测尺再回到l00mm左右的位置,重新读出初读数。 ☆顶板离层指示仪 一、结构简介: 顶板离层指示仪是监测顶板锚杆范围内及锚固范围外离层值大小的一种监测仪器,在顶板钻孔中布置两个测点,一个在围岩深部稳定处,一个在锚杆端部围岩中。离层值就是围岩中两测点之间以及锚杆端部围岩与巷道顶板表面间的相对位移值。顶板离层指示仪由孔内固定装置、测量钢丝绳及孔口显示装置组成如图1所示。 二、安装方法: 1.在巷道顶板钻出φ32的钻孔,孔深由要求而定。 2.将带有长钢丝绳的孔内固定装置用安装杆推到所要求的位置;抽出安装杆后再将带有短钢丝绳的孔内固定装置推到所要求的位置。 3.将孔口显示装置用木条固定在孔口(在显示装置与钻孔间要留有钢丝绳运动的间隙)。 4.将钢丝绳拉紧后,用螺丝将其分别与孔口显示装置中的圆管相连接,且使其显示读数超过零刻度线。 三、测读方法: 孔口测读装置上所显示的颜色,反映出顶板离层的范围及所处状态,显示数值表示顶板的离层量。☆DY—82型顶板动态仪 一、用途 DY-82型顶板动态仪是一种机械式高灵敏位移计。用于监测顶底板移近量、移近速度,进行采场“初次来压”和“周期来压”的预报,探测超前支撑压力高 峰位置,监测顶板活动及其它相对位移的测量。 二、技术特征 (1)灵敏度(mm) 0.01 (2)精度(%) 粗读±1,微读±2.5 (3)量程(mm) 0~200 (4)使用高度(mm) 1000~3000 三、原理、结构 其结构和安装见图。仪器的核心部件是齿条6、指针8 以及与指针相连的齿轮、微读数刻线盘9、齿条下端带有读 数横刻线的游标和粗读数刻度管11。 当动态仪安装在顶底板之间时,依靠压力弹簧7产生的 弹力而站立。安好后记下读数(初读数)并由手表读出时间。 粗读数由游标10的横刻线在刻度管11上的位置读出,每小 格2毫米,每大格(标有“1”、“22'’等)为10毫米,微读数 由指针8在刻线盘9的位置读出,每小格为0.01毫米(共200 小格,对应2毫米)。粗读数加微读数即为此时刻的读数。当 顶底板移近时,通过压杆3压缩压力弹簧7,推动齿条6下 移,带动齿轮,齿轮带动指针8顺时针方向旋转,顶底板每 移近0.01毫米,指针转过1小格;同时齿条下端游标随齿条 下移,读数增大。后次读数减去前次读数,即为这段时间内的顶底板移近量。除以经过的时间,即得 1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。 淮海工学院计算机科学系 大型数据库实验指导书 计算机网络教研室 实验1安装配置与基本操作 实验目的 1. 掌握Oracle9i服务器和客户端软件的安装配置方法。 2. 掌握Oracle9i数据库的登录、启动和关闭。 实验环境 局域网,windows 2000 实验学时 2学时,必做实验。 实验内容 1. 在局域网环境下安装配置Oracle9i服务器和客户端软件。 2. 练习Oracle9i数据库的登录、启动和关闭等基本操作。 实验步骤 1、将Oracle 9i的第1号安装盘放入光驱,双击setup,将弹出“Oracle Universal Installer:欢迎使用”对话框。 2、单击“下一步”按钮,出现“Oracle Universal Installer:文件定位”对话框。 在路径中输入“E:\Oracle\ora92”,其它取默认值。 3、启动第1号盘的安装程序setup,具体方法同安装Oracle 9i服务器,不同的是在 选择安装产品时选择“Oracle9i Client 9.2.0.1.0”选项; 4、安装结束后,弹出“Oracle Net Configuration Assistant:欢迎使用”对话框。取 默认值。 5、登录Oracle9i数据库:选择“开始”→“所有程序”→Oracle-OraHome92→Enterprise Manager Console ; 6、系统出现“登录”对话框。选择“独立启动”。 分析与思考 (1)简述启动Oracle9i数据库的一般步骤。 (2)简述启动Oracle9i模式中三个选项的区别? (3)简述关闭Oracle9i模式中四个选项的区别? 土木工程学院 《混凝土结构设计基本原理》实验指导书 及实验报告 适用专业:土木工程周淼 编 班级::学 号: 理工大学 2018 年9 月 实验一钢筋混凝土梁受弯性能试验 一、实验目的 1.了解适筋梁的受力过程和破坏特征; 2.验证钢筋混凝土受弯构件正截面强度理论和计算公式; 3.掌握钢筋混凝土受弯构件的实验方法及荷载、应变、挠度、裂缝宽度等数据的测试技术 和有关仪器的使用方法; 4.培养学生对钢筋混凝土基本构件的初步实验分析能力。 二、基本原理当梁中纵向受力钢筋的配筋率适中时,梁正截面受弯破坏过程表现为典型的三个阶段:第一阶段——弹性阶段(I阶段):当荷载较小时,混凝土梁如同两种弹性材料组成的组合梁,梁截面的应力呈线性分布,卸载后几乎无残余变形。当梁受拉区混凝土的最大拉应力达到混凝土的抗拉强度,且最大的混凝土拉应变超过混凝土的极限受拉应变时,在纯弯段某一薄弱截面出现首条垂直裂缝。梁开裂标志着第一阶段的结束。此时,梁纯弯段截面承担的弯矩M cr称为开裂弯矩。第二阶段——带裂缝工作阶段(II阶段):梁开裂后,裂缝处混凝土退出工作,钢筋应力急增,且通过粘结力向未开裂的混凝土传递拉应力,使得梁中继续出现拉裂缝。压区混凝土中压应力也由线性分布转化为非线性分布。当受拉钢筋屈服时标志着第二阶段的结束。此时梁纯弯段截面承担的弯矩M y称为屈服弯矩。第三阶段——破坏阶段(III阶段):钢筋屈服后,在很小的荷载增量下,梁会产生很大的变形。裂缝的高度和宽度进一步发展,中和轴不断上移,压区混凝土应力分布曲线渐趋丰满。当受压区混凝土的最大压应变达到混凝土的极限压应变时,压区混凝土压碎,梁正截面受弯破坏。此时,梁承担的弯矩M u 称为极限弯矩。适筋梁的破坏始于纵筋屈服,终于混凝土压碎。整个过程要经历相当大的变形,破坏前有明显的预兆。这种破坏称为适筋破坏,属于延性破坏。 三、试验装置空间分析实验指导书
测试技术实验指导书及实验报告2006级用汇总
什么是面向对象程序设计
大型数据库实验指导书
混凝土结构实验指导书及实验报告(学生用)
《面向对象程序设计》答案