系统架构设计实验指导书.docx
《系统架构设计实验指导书.docx》由会员分享,可在线阅读,更多相关《系统架构设计实验指导书.docx(49页珍藏版)》请在冰豆网上搜索。
系统架构设计实验指导书
《系统架构设计》实验指导书
前言
系统架构是一门实践性与综合性很强的课程,也是软件工程科学中一门前沿性课程。
本系统架构设计实验指导书主要是通过对系统架构的各个主要部分(包括操作系统,数据库,网络和安全四部分)进行介绍,使学生了解当前软件公司对高端技术人才的需求。
学生通过相关实验,了解系统架构的一些主要知识和环境。
同时也有助于学生理解系统架构所遇到的概念。
此外,本书还引导学生编写系统架构所涉及的主要知识的某些模块的模拟程序以加深对系统架构所研究内容的设计思想、典型算法和设计技巧的理解,并将这些思想、算法和技巧应用于自己所设计的程序中。
本实验指导书是为本专科学生学习系统架构上机而设计的。
本实验指导书中的每部分实验大概需要六个学时,即需要三次上机完成。
对于学时较少的,可以适当的选作一部分实验。
对于学时较多的,根据学生情况对某些实验的上机时间可以适当延长学时。
一、课程编号4
二、课程类型4
三、本课程的地位、作用与任务4
四、课程基本要求4
五、试验安排5
1、Java语言实验机器与环境5
(一)计算机的硬件配置5
(二)计算机的软件配置5
2、JDK1.6的安装和设置5
(一)下载JDK1.65
(二)安装JDK1.65
(三)运行11
第一部分 操作系统部分
实验3:
用JAVA模拟线程间的死锁………………… ………………………23
实验4:
用JAVA模拟操作系统的I/O操作26
第二部分 数据库部分
实验5:
利用Oracle模拟常见的SQL常用操作上半部分28
实验6:
利用Oracle模拟常见的SQL常用操作下半部分30
第三部分 计算机网络部分
实验7:
用Java模拟网络节点的UDP通信32
实验8:
用Java模拟网络节点的TCP通信上部分34
实验9:
用Java模拟网络节点的TCP通信下部分38
第四部分 系统开发部分
实验10:
软件开发工具ROSE上半部分实验42
实验11:
软件开发工具ROSE上半部分实验48
实验12:
用Rose画时序图54
六、教材60
七、成绩考核办法60
系统架构设计
一、课程编号
130289(本科)
二、课程类型
课程类型:
任选课。
适用专业:
软件工程
试验学时:
24学时
三、本课程的地位、作用与任务
信息系统的规模日益庞大,复杂程度日益增加,系统结构日益繁杂,对总体系统结构的选择要比某些算法或数据结构的选择更为重要。
通过本课程的学习,不仅能让学生将大学四年学到的软件开发的相关知串联起来,更加深入地理解企业级项目开发所涉及的主要知识和技巧,还能掌握当前最新的面向对象以及网络编程技术,提高学生分析问题、解决问题的能力,从而为今后步入新世纪知识经济领域打下坚实基础。
四、课程基本要求
1、学生应根据每个上机试验的任务和教师所提的要求,上机前准备好上机内容。
2、上机输入程序并调试出结果。
3、上机结束后应按时提交试验报告,对于上机未完成部分,应该下机后利用课余时间完成。
五、试验安排
1、Java语言实验机器与环境
(一)计算机的硬件配置
PC系列微机,包括286、386、486、奔腾及各种兼容机,要求内存为64M以上,一个硬盘驱动器和一个软盘驱动器。
80列字符监视器。
配备鼠标器。
(二)计算机的软件配置
DOS6.22或Windows98、Windowsxp、Windows2000。
JDK1.6的安装软件j2sdk-1_6_05-win.exe
2、JDK1.6的安装和设置
(一)下载JDK1.61
JDK开发工具包可以免费下载。
下载网址——
下载如下文件:
j2sdk-1_6_05-win.exe。
(二)安装JDK1.6
由于目前大多数用户使用的是WindowXP操作系统,所以我们以在WindowXP操作系统上安装JDK1.6为例,说明安装JDK1.6的过程。
j2sdk-1_6_05-win.exe是一个字解压文件,双击它就可以解压缩,同时进行安装工作。
j2sdk-1_6_05-win.exe中包含了JavaRuntimeEnvironment。
所以只要安装了j2sdk-1_6_05-win.exe,浏览器就自然可以运行JavaApplet。
安装工作实际上分为两个步骤。
安装程序首先会收集一些信息,用于安装的选择,然后才开始拷贝文件,设置Windows注册表等具体的安装工作。
双击j2sdk-1_6_05-win.exe,文件会自动解压缩,如图2.1.1所示。
图2.1.1
解压缩工作完成之后,会出现JDK1.6的安装欢迎界面,如图2.1.2
图2.1.2
点击“next”按钮,会出现JDK1.6的许可协议,如图2.1.3
如图2.1.3
点击“Yes”按钮,接受许可协议,安装程序会出现让用户选择安装目标路径的对话框。
如图2.1.4
图2.1.4
在这个对话框中,系统让用户选择JDK程序的安装路径,系统默认的路径是C:
\jdk1.6_05,点击“next”按钮,JDK的所有程序就会被安装到C:
\jdk1.6_05目录下。
用户也可以在本对话框中点击“Browse”按钮,修改JDK程序的目标安装路径。
下一个对话框让用户选择所使用的浏览器,如图2.1.5所示
图2.1.5
Windows用户常用的浏览器是IE,所以选择“MicrosoftInternetExplorer”复选框。
点击“Next”按钮,进入下一个对话框,如图2.1.6所示。
图2.1.6
这个对话框让用户选择要安装的JDK组件,我们选择全部的组件,点击“Next”按钮,就会开始正式的安装工作。
JDK1.6安装结束之后,会继续安装Java2RuntimeEnvironment,用于Java程序的执行。
安装程序给出如下提示,如图2.1.7
图2.1.7
Java2RuntimeEnvironment安装完成之后,结束安装,出现如下对话框,如图2.1.8
图2.1.8
在这里,点击“Finish”按钮,结束安装。
(三)配置环境变量
平台为WindowXP时,需要修改系统根目录下的autoexec.bat文件。
使用记事本或任何文本编辑器打开文件autuexec.bat,在该文件的最后增加如下两行
SETPATH=%PATH%;c:
\jdk1.3.1_02\bin
SETCLASSPATH=.;c:
\jdk1.3.1_02\lib
其中,环境变量path和classpath分别指定了JDK命令搜索路径和Java类路径。
在这里我们假设JDK安装在C:
\jdk1.6_05目录下,JDK的所有命令都放在c:
\jdk1.6_05\bin目录下。
设置环境变量path的作用是使DOS操作系统可以找到JDK命令。
设置环境变量classpath的作用是告诉Java类装载器到哪里去寻找第三方提供的类和用户定义的类。
JVM和其它JDK工具通过依次搜索平台库、库扩展和类路径来查找类。
如果用户在安装jdk1.6时,选择了另外的JDK安装路径,则环境变量path和classpath要作相应的调整。
(四)测试安装
环境变量设置完成后,重新启动计算机,在DOS窗口下,敲入javac并回车后,如果出现Javac的用法参数提示信息,则安装正确。
否则要检查环境变量设置是否正确。
3、JDK开发工具简介
在JDK的bin目录下,存放着Java2提供的一些可执行程序,为我们开发和测试Java程序提供了工具。
在我们的学习中,常用的JDK开发工具有如下几种:
(1)javac.exe:
Java语言的编译器。
(2)java.exe:
Java程序执行引擎。
(3)appletviewer:
小应用程序浏览器。
4、Java程序开发步骤
开发一个Java程序由三个步骤:
(一)编辑
使用任何的文本编辑器编辑Java源程序文件。
Java源程序文件的扩展名为java。
(二)编译
打开MS-DOS窗口,进入源程序所在目录。
然后键入命令:
javacfilename.java
其中,filename.java表示要编译的源程序文件名。
代表回车。
将源程序编译成字节码文件。
字节码文件的扩展名为class。
(三)运行
Java程序有两种类型--Application和Applet。
(1)对于Application,打开MS-DOS窗口,进入Java字节码文件所在目录,在命令行状态下执行javafilename
可将Application字节码文件解释为本地计算机能够执行的指令并予以执行。
其中filename为以编译的Java字节码文件名。
(2)对于Applet,可以将Applet字节码文件加入到一个网页(HTML文件),然后用浏览器打开该网页,Applet的运行结果就会在浏览器窗口中显示出来。
我们也可以在命令行状态下执行appletviewer来查看网页,同样会看到Applet的运行结果。
4、上机实验
第一部分 操作系统部分
实验1:
用JAVA模拟线程间的同步与互斥上部分
1.实验目的
1.熟悉JDK开发环境。
2.熟悉EditPlus编辑器的使用。
3.掌握JavaApplication的程序结构和开发过程。
4.体会并发线程竞争资源所引发的较简单的互斥与同步问题。
2.实验内容
(1).JDK开发环境
(1)JDK1.2.1开发环境安装在“C:
\JDK1.6\”目录下。
(2)设置环境变量PATH和CLASSPATH(如果在autoexec.bat中没有进行设置)。
进入命令行(MS-DOS)方式,进行如下设置:
SETPATH=C:
\JDK1.6\BIN;%PATH%
SETCLASSPATH=.;%CLASSPATH%
(2).EditPlus编辑器
(1)单击“开始”菜单,选择“程序”,选择“EditPlus”,单击“EditPlus”项。
(2)在“File”菜单中选择“New””建立新文件;“Open”打开已存在的文件;“Save”保存文件;“Close”关闭文件。
(3)在“Edit”菜单中选择“Undo”取消上次操作;“Redo”重复上次操作;“Cut”块剪切;“Copy”块复制;“Paste”块粘贴;“Delete”块删除。
(4)在“Search”菜单中选择“Find”查找;“Change”查找并替换。
(3).掌握JavaApplication程序开发过程
(1)打开EditPlus编辑器。
(2)键入如下程序:
publicclassTestSyncimplementsRunnable{
Timertimer=newTimer();
publicstaticvoidmain(String[]args){
TestSynctest=newTestSync();
Threadt1=newThread(test);
Threadt2=newThread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
publicvoidrun(){
timer.add(Thread.currentThread().getName());
}
}
classTimer{
privatestaticintnum=0;
publicsynchronizedvoidadd(Stringname){
//synchronized(this){
num++;
try{
Thread.sleep
(1);
}catch(InterruptedExceptione){}
System.out.println(name+",你是第"+num+"个使用timer的线程");
//}
}
}
(3)检查无误后(注意大小写)保存文件。
可将文件保存在“D:
\Java\”目录中,注意文件名为TestSync.java。
(4)进入命令行(MS-DOS)方式,设定当前目录为“D:
\Java\”,运行Java编译器:
D:
\Java>javacTestSync.java
(5)如果输出错误信息,则根据错误信息提示的错误所在行返回EditPlus编辑器进行修改。
常见错误是类名与文件名不一致、当前目录中没有所需源程序、标点符号全角等。
如果没有输出任何信息或者出现“deprecation”警告,则认为编译成功,此时会在当前目录中生成TestSync.class文件。
(6)利用Java解释器运行这个JavaApplication程序,并查看运行结果。
D:
\Java>javaTestSync
3.思考问题
1.什么是Java虚拟机?
它的作用是什么?
2.JavaApplication程序与JavaApplet程序的不同之处有那些?
实验2:
用JAVA模拟线程间的同步与互斥下半部分
1.实验目的
(1)掌握使用JDK开发Java程序的步骤。
(2)掌握Java程序的基本语法。
(3)实现用Java语言来模拟操作系统中经典的生产者消费者问题
2.实验内容
按下面步骤进行实验
(1)开机后,创建目录C:
\java。
把这个目录作为我们的工作目录。
我们的Java源程序、编译后的字节码文件和用来运行JavaApplet的html文件都放在这个目录中。
(2)在WindowsXP中启动Eclipse。
(3)用Eclipse编辑如下源程序
publicclassProducerConsumer{
publicstaticvoidmain(String[]args){
SyncStackss=newSyncStack();
Producerp=newProducer(ss);
Producerq=newProducer(ss);
Consumerc=newConsumer(ss);
newThread(p).start();
newThread(c).start();
newThread(q).start();
}
}
classProduct{
staticintid=0;
Product(){
id++;
}
publicStringtoString(){
return"第"+id+"个产品。
";
}
}
classSyncStack{
intindex=0;
Product[]arrPD=newProduct[6];
publicsynchronizedvoidpush(Productpd){
while(index==arrPD.length){
try{
this.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
this.notifyAll();
arrPD[index]=pd;
index++;
}
publicsynchronizedProductpop(){
while(index==0){
try{
this.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
this.notifyAll();
index--;
returnarrPD[index];
}
}
classProducerimplementsRunnable{
SyncStackss=null;
Producer(SyncStackss){
this.ss=ss;
}
publicvoidrun(){
for(inti=0;i<20;i++){
Productpd=newProduct();
ss.push(pd);
System.out.println("生产了"+pd);
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
classConsumerimplementsRunnable{
SyncStackss=null;
Consumer(SyncStackss){
this.ss=ss;
}
publicvoidrun(){
for(inti=0;i<40;i++){
Productpd=ss.pop();
System.out.println("消费了"+pd);
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
(4)保存程序。
注意,保存源程序时,程序名要与主类名一致。
所以用ProducerConsumer.java作为本程序的文件名。
记把该文件保存到目录D:
\java中。
(5)编译程序。
启动MS_DOS窗口,键入如下命令,
D:
\WINDOWS>cd\java
进入源程序所在目录C:
\java。
其中表示回车。
键入如下命令,把ProducerConsumer.java编译成字节码文件。
D:
\JAVA>javacProducerConsumer.java
如果编译成功,则在D:
\java目录中生成字节码文件ProducerConsumer.class
(6)运行程序
进入ProducerConsumer.class所在目录D:
\java,键入命令
D:
\JAVA>javaProducerConsumer
就可以运行程序
(7)观察程序的运行结果
(8)思考生产者与消费者问题的模拟程序是否有可改进的地方。
下面是一个参考的改进方案:
publicclassProducerConsumer1{
publicstaticvoidmain(String[]args){
SuperMarketwalmart=newSuperMarket();
Producer1p1=newProducer1(walmart);
Consumer1c1=newConsumer1(walmart);
Producer1p2=newProducer1(walmart);
Consumer1c2=newConsumer1(walmart);
Producer1p3=newProducer1(walmart);
Consumer1c3=newConsumer1(walmart);
Producer1p4=newProducer1(walmart);
Consumer1c4=newConsumer1(walmart);
Threadt1=newThread(p1);
t1.setName("联想公司");
Threadt2=newThread(c1);
t2.setName("重庆邮电大学软件学院");
Threadt3=newThread(p2);
t3.setName("惠普公司");
Threadt4=newThread(c2);
t4.setName("中国人民银行重庆营管部");
Threadt5=newThread(p3);
t5.setName("苹果公司");
Threadt6=newThread(c3);
t6.setName("重庆移动公司");
Threadt7=newThread(p4);
t7.setName("戴尔公司");
Threadt8=newThread(c4);
t8.setName("重庆力帆集团");
t1.start();
t4.start();
t6.start();
t8.start();
t7.start();
t2.start();
t3.start();
t5.start();
}
}
classProduct1{
publicstaticintid=0;
publicProduct1(){
++id;
}
publicStringtoString(){
return"第"+id+"台笔记本";
}
}
classSuperMarket{
intindex=0;
Product1[]hj=newProduct1[10];
publicsynchronizedvoidpush(Product1pd){
while(index==hj.length){
try{
this.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
this.notifyAll();
hj[index]=pd;
index++;
}
publicsynchronizedProduct1pop(){
while(index==0){
try{
this.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
this.notifyAll();
index--;
returnhj[index];
}
}
classProducer1implementsRunnable{
privateSuperMarkets=null;
publicProducer1(SuperMarkets){
this.s=s;
}
publicvoidrun(){
for(inti=0;i<20;i++){
Product1pd=newProduct1()