面向对象程序设计实验指导书资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象程序设计实验指导书
--级
信息与计算科学适用专业: 计算机科学与技术、网络工程、
苏波
实验一使用面向对象程序设计语言, 编写简单的程序
本实验 4 学时
1. 实验目的
熟悉编程环境, 熟悉标准库, 编制简单程序
2. 实验环境与条件
JDK1.6, Net Beans
3. 实验内容和步骤
3.1 编写一个输出hello,World 的Java 程序, 然后进行编译
运行。

3.2 编写程序询问用户姓名, 然后向用户问好
4. 实验程序示例
注意: 实验程序不允许和实验示例完全一致。

public class hello {
public static void main(String[] args) {
java.util.Scanner aScanner new
java.util.Scanner(System.in);
System.out.print("Name: ");
String name = aScanner.next();
System.out.println("Hello + name + Please Input Your Age");
System.out.print("Age:");
int aNum = aScanner.nextInt();
if(aNum<12)
System.out.println("Hello, Kid");
else if(aNum<18)
System.out.println("Hello, How about you study?");
else if(aNum<60)
System.out.println("You have to work hard.");
else
System.out.println("Are you still working?");
把上面的程序保存为hello.java
使用命令javac hello.java 编译hello.java, 得到java 可执行程序hello.class
使用命令java hello 执行, 得到数据显示结果如下:
Name: Dan.
Hello Dan! Please Input Your Age
Age:25
You have to work hard.
程序说明:
1. 在netbeans 中直接执行上面的程序时会发现语句System.out.print("Name: "); 并不立即输出出来, 而是在输入了名字如Dan后才一齐输出出来,这是集成开发环境的系统的标准输出缓存造成的.
2. new
java.util.Scanner(System.in) 产生了一个java.util.Scanner 对象, 由于产生这个对象时用System.in 作为参数, 这个Scanner 对象会扫描系统的标准输入. java.util.Scanner aScanner 定义了一个java.util.Scanner 类型的名字叫做aScanner.
这里的Scanner 类型在java.util 包里面.
语句java.util.Scanner aScanner = new 这一个
Scanner 类型的对象, 起一个名字叫做aScanner
java.util.Scanner(System.in); 中的=的作用是让为产生出来的
3. aScanner.next() 会把用户输入的数据作为一个字符串读入. String name 是定义一个String( 字符串) 类型的变量名字name 语句String name = aScanner.next(); 是把用户输入的字符串用变量name代表
4. aScanner.nextInt() 会把用户输入的数据作为一个整数(int类型)读入.
int aNum 是定义一个int( 整数)类型的变量名字aNum
语句int aNum = aScanner.nextInt(); 是把用户输入的整数赋值给变量aNum
附录A: JDK 的安装
(在实验室的计算机里面, JDK 和Net Beans 已经安装好, 可是没有为操作系统配置到JDK的路径,参考步骤3)
(一)安装JDK
本节下面假设使用的是JDK是Java SE 6 Update 24 版(Java Development Kit Standard Edition 6 Update 24)。

能够根据实际情况选择最新版本的JDK, 并把本节下面示例中的24 换成实际的数值, 如果使用Java 7, 那么需要把本节下面示例中的 6 换成7。

第一步, 下载JDK
访问JDK的下载页面。

下载网址
根据提示选择运行平台(操作系统和CPU 的类型, 例如: windows 操作系统, i586 兼容类型的CPU)和语言(实际上只能选
多国语言) , 而且必须同意Java SE Development Kit 版权协议后, 就
开始下载JDK 安装程序。

第二步,运行JDK安装程序
•对于windows 操作系统
直接运行jdk-6u24-windows-i586-p.exe
•对于Linux 操作系统
打开Linux 的终端(控制台) , 一般是选择: 应用程序->附件
->终端。

执行命令:
chmod +x jdk-6u24-linux-i586.bin
把jdk-6u24-linux-i586.bin 的属性改为可执行。

然后运行JDK 安装程序
./jdk-6u24-linux-i586.bin
然后根据提示进行安装即可。

第三步,设置JAVA_H0M环境变量和PATH环境变量
环境变量的作用是让操作系统知道一些软件设置信息, 例如
软件的安装路径。

环境变量PATH是操作系统寻找可执行程序的路
径序列。

操作系统根据环境变量PATH的值(用:或者;分隔的多个目录路径) , 查找要执行的命令(可执行文件)。

•对于windows 操作系统
环境变量位置
windows 7:选择开始->控制面板->系统和安全->系统-

高级系统设置->环境变量
windows XP:选择开始->控制面板->系统->高级->环境变量
windows :选择开始->设置->控制面板->系统->高级->环境变量
设置JAVA_HOM环境变量
增加一个新的环境变量,名称为JAVA_HOME值为JDK安装到的目录路径。

JDK安装到的目录路径的类似于C:\Program
Files\Java\jdk1.6.0_24 。

提示: 该路径中有bin 和jre 子目录。

设置PATH环境变量
把JDK安装到的目录路径中的bin目录的路径追加在PATH变量的后面。

在PATH环境变量中,各个目录路径之间用英文的分号;进行分隔,向PATH环境变量追加的新的目录路径的方法为,在已有的PATH的值的后面,增加英文分号;和路径,例如:增加目录路径为;C:\Program Files\Java\jdk1.6.0_24\bin
提示: 这个目录路径中有名称为java 和javac 的程序。

保存后, 注销并重新登录Windows。

•对于Linux 操作系统
这里假设是使用bash shell 的Linux, 使用其它shell 的Linux 与此类似。

在Linux 的终端中执行命令
cd
到用户的主目录, 使用nano, 或者vi, 或者gedit 修改用户配置文件.bash_profile(如果是ubuntu Linux 是.profile)
在.bash_profile(或者.profile)文件末尾追加三行命令:
JAVA_HOME=$HOME/jdk1.6.0_24
export JAVA_HOME
PATH=$JAVA_HOME/bin:"${PATH}"
保存后, 注销并重新登录Linux 。

第四步,测试安装和配置JDK是否成功
检查Java 虚拟机的版本。

执行
java -version
应当看到Java 虚拟机的信息。

看到Java 版本与安装的JDK 的版本一致, 表示安装配置Java 虚拟机/Java 编译器成功, 否则表示安装或者配置有问题, 需要重新安装或者重新配置(一般是没有配置好PATH环境变量造成的错误)。

检查Java 编译器的版本。

Java 编译器的名称是javac 。

执行javac -version
应当看到Java 编译器的信息。

看到显示的Java 版本与安装的
JDK的版本一致,表示安装配置Java虚拟机/Java编译器成功,否则表示安装或者配置有问题, 需要重新安装或者重新配置(一般是没有配置好PATH环境变量造成的错误)。

附录B: Java 程序设计的基本步骤示例
编写并执行第一个java 程序的具体过程
(一)编写Java 源程序.
使用文本编辑器
windows 的记事本,Unix/Linux 的gedit 文本编辑器或者
vi/emacs(如果你会用它们)
(注意: word/Office 等图文混排工具不能够). 用文本编辑器编写源程序如下:
public class hello {
public static void main(String[] args) {
System.out.println(" 世界, 你好!");
}
} 把上面的源程序存为文件hello.java 注意: 必须使用这个文件名. 因为文件的名称必须和文件内的类(class)的名称保持一致, 而且增加.java 为文件名的后缀.
(二)编译把源程序翻译为Java 可执行程序打开控制台界面, 到保存hello.java 文件的目录, 执行下面的命令javac hello.java
如果产生了一个新的文件hello.class, 那么编译成功. 如果没有产生了一个新的文件hello.class, 那么编译失败, 一般是源程序中有语法错误.
(三)执行
在java.class 的目录, 实际上就是当前的目录不用变化, 执行下面的命令:
java hello 将得到程序的执行结果显示如下: 世界, 你好!
如果得到上面的结果, 那么庆祝你的第一个java 程序执行成功! 如果没有得到上面的结果, 那么参考以前的步骤, 看看哪个步骤错了
实验二基本语句和函数
本实验 4 学时
1、实验目的:
练习函数的参数、返回值和对象名字( 引用) 。

2、实验环境与条件:
JDK1.6, Netbeans
3、实验内容:
编写程序: 验证用户名字和口令. 使用Java.
具体内容:
在main() 提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 由身份验证函数验证用户姓名和口令是否与预先设定的用户姓名和口令一致, 并通知用户验证结果.
提示:
Java 中的函数必须在类里面定义
附录A: Java 编写的用户名口令检测函数示例
import java.util.Scanner;
public class Main {
public static boolean check(String name, String password){
if(("Dan".equals(name))&&("123456".equals( passw ord)))
return true;
else
return false;
}
public static String inputUserName(){
Scanner aScanner = new Scanner(System.in);
System.out.println("Name:");
String name = aScanner.next(); return name;
}
public static String inputUserPassword(){
Scanner aScanner = new Scanner(System.in);
System.out.println("Password:");
String password = aScanner.next();
return password;
}
public static void main(String[] args) {
String name = inputUserName();
String password = inputUserPassword();
if(check(name, password)) System.out.println("Check
OK");
else
System.out.println("Wrong name or password"); }
实验三类与对象
本实验 4 学时
1、实验目的:
类与对象、数据成员、成员函数、构造函数
2、实验环境与条件:
JDK1.6, Netbeans
3、实验内容:
编写程序: 验证用户名字和口令. 使用Java.
具体内容:
编写一个用户接口对象, 提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令.
在main() 由用户接口对象提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 然后, 由身份验证对象验证用户姓名和口令是否与预先设定的用户姓名和口令一致, 并通知用户验证结果.
附录A: 类与对象的基本使用示例
public class Login {
private String name;
private Scanner aScanner;
private String _name;
public Login(){
name = new String();
_name = "SHE";
aScanner = new Scanner(System.in);
}
public Login(String aName){
name = new String();
_name = aName;
aScanner = new Scanner(System.in);
}
public void check(){
if( (_name.equals(name)) )
System.out.println("OK");
else
System.out.println("Error");
}
public static void main(String[] args) {
Login aLogin = new Login();
Login anotherLogin = new Login("AAA");
aLogin.inputName();
aLogin.check();
anotherLogin.inputName();
anotherLogin.check();
}
public void inputName() {
System.out.println("Name:");
name = aScanner.next();
}
实验四文件流
本实验 4 学时
1、实验目的:
文件流的基本操作
2、实验环境与条件:
JDK1.6, Netbeans
3、实验内容:
编写一个身份验证对象,验证用户名字和口令是否正确. 要求用户的名字和口令来自于一个配置文件( 纯文本文件格式).
编写一个用户接口对象, 提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令.
在main() 由用户接口对象提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 然后, 由身份验证对象验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 并通知用户验证结果.
配置文件的具体格式示例如下:
用户名1: 口令 1 选做的实验内容:
编写一个用户接口对象,提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令.
在main() 由用户接口对象提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 然后, 由身份验证对象验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 并通知用户验证结果.
在上述过程中, 使用字符串流处理类
java.io.Reader,java.io.Writer 处理utf-8 文件. 要求配置文件中保存多个用户名和口令, 能够使用任意一对( 用户名, 口令)都能够登录成功. 提示, 使用字符串分割.
配置文件的具体格式示例如下:
用户名1: 口令1
用户名2: 口令2
用户名3: 口令3
用户名4: 口令4
用户名5: 口令5
用户名6: 口令6
附录: 一个文件读写的示例
public class FileDemo {
* @param args the command line arguments
*/
public static void main(String[] args) {
FileDemo fileDemoReadWrite = new FileDemo();
// fileDemoReadWrite.fileCreate();
fileDemoReadWrite.fileWrite();
fileDemoReadWrite.fileRead();
}
String fileName = "demofile.txt";
FileInputStream fileInput = null;
private FileOutputStream fileOutput;
public void fileCreate() {
File file = new File(this.fileName);
if (file.exists() != true) {
try {
file.createNewFile();
System.out.println(this.fileName Created!");
} catch (IOException ex) {
+ I!
Logger.getLogger(FileDemo.class.getName()).log(Level.SEVE
RE, null, ex);
Logger.getLogger(FileDemo.class.getName()).log(Level.SEVE RE, null, ex);
}
} else {
file.delete();
}
}
public void fileRead() {
try {
fileInput = new FileInputStream(fileName);
BufferedReader fileReader =
BufferedReader(new InputStreamReader(fileInput, "utf8")); while
(fileReader.ready()) {
String content = fileReader.readLine();
System.out.println(content);
}
} catch (IOException ex) {
} finally {
new
try {
fileInput.close();
} catch (IOException ex) {
Logger.getLogger(FileDemo.class.getName()).log(Level.SEVE
RE, null, ex);
}
}
}
public void fileWrite() {
try {
fileOutput = new FileOutputStream(fileName);
fileOutput.write("java:
simplecomplexlanguage\n".getBytes("utf8"));
fileOutput.write("java: 简单复合语言\n".getBytes("utf8"));
} catch (IOException ex) {
Logger.getLogger(FileDemo.class.getName()).log(Level.SEVE
RE, null, ex);
} finally {
try {
fileOutput.close();
} catch (IOException ex) {
Logger.getLogger(FileDemo.class.getName()).log(Level.SEVE RE, null, ex);
}
}
}
实验五具体类与继承、访问控制
本实验 4 学时
1、实验目的:
利用继承, 实现程序功能的扩充, 字符串和文件流的基本操作
2、实验环境与条件:
JDK1.6, Netbeans
3、实验内容:
编写程序:
在前一个实验的基础上完成。

增加: 一个具有修改口令功能的身份验证对象。

口令要求保存到文件中。

验证用户名字和口令:
编写一个身份验证对象,验证用户名字和口令是否正确. 在此基础上, 利用类继承, 编写一个利用配置文件的身份验证对象, 要求用户的名字和口令来自于一个配置文件(纯文本文件格式).
编写一个用户接口对象, 提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令.
在main() 由用户接口对象提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 然后, 由身份验证对象验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 并通知用户验证结果.。

重新运行程序, 能够使用用户ID 和新的口令经过验证。

一些可能有用的提示:
能够使用构造函数中从文件中读出口令。

选做的内容:
在此基础上, 提供一个用”加密”的方式保存口令的身份验证类。

最简单的”加密”的方法能够使用按位异或实现。

算法如下:
假设口令为Password, x 是一个密钥, 使用按位异或方式进行加密
和解密。

在C++中用八表示按位异或操作。

力口密:Password 八 x = Passwordx
解密:Passwordx 八 x = Password
实验六多态性和异常处理
本实验 4 学时
1、实验目的:
学习使用虚函数实现多态性。

经过编写、调试程序理解异常的产生和处理。

2、实验环境与条件:
JDK1.6, Netbeans
3、实验内容:
设计一个身份验证接口Auth, 用于验证用户名字和口令是否正确.
编写一个利用配置文件的身份验证类Auth1, 具有用户名和口令验证功能. 要求用户的名字和口令来自于一个配置文件(纯文本文件格式). 配置文件格式为:
姓名1: 密码1
姓名2: 密码2
编写另一个利用配置文件的身份验证类Auth2, 具有用户名和口令验证功能. 要求用户的名字和口令来自于一个配置文件(纯文本文件格式). 配置文件格式为:
姓名1
密码1
姓名2
密码2
在main() 中创立用户姓名和口令输入对象, 提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 然后, 分别创立两种类型的身份认证对象, 以验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 利用一个专门的函数通知用户验证结果. void echoResult(Auth aAuth, String name, String password) {
if(aAuth.check(name, password))
System.out.println("OK");
else
System.out.println("Error");
}
异常处理在派生类的构造函数中增加异常处理。

例如: 当保存密码的文件不存在时, 产生异常。

相关文档
最新文档