实验六代码
vb6.0实验六习题与答案
vb6.0实验六习题与答案实验六专业_1、认识常用控件:单选按钮、复选框、框架、列表框、组合框、滚动条、滑动器(slider)、时钟、图形控件;2.学习在表单中创建常用控件2、学习在属性窗口和在程序代码中设置属性3、学习调用控件的方法4.学习编写每个控件、鼠标和键盘的事件过程。
二、实验内容1、单选按钮、复选框、框架1)将表格F1的标题设置为“复选框、框架和单选按钮”;将表格中复选框ch1、ch2ch1和CH2的高度和宽度分别设置为360和1000;程序运行时,check2处于非零状态。
FR1帧包含单选按钮OP1和op2。
2)设计窗体,要求①标题为“设置字体”;② 带边框的标签控件Label1以表格形式设置,高度和宽度分别为450和3800,标题为“欢迎VB”,字体大小为“4”,并显示在中间;③标题为“字体”框架包含两个标题分别为“楷体_gb2312”和“华文新魏”的单选按钮op1和op2;④ 标题为“Italic”的框架包含两个标题为“是”和“否”的单选按钮。
⑤ 编写相应控件的事件进程,使程序运行时,点击“Kaiti_gb2312”,标签控件的字体为Kaiti_gb2312,点击“Chinese New Wei”,标签控件的字体为Chinese New Wei;单击Yes,label控件的字体将为斜体。
单击“否”取消标签控件字体的斜体化。
privatesuboption1_click()标签1。
fontname=option1。
说明文字endsubprivatesuboption2_uu单击()label1.fontname=option2.captionendsubprivatesuboption3_click()label1.fontitalic=trueendsubprivatesuboption4_click()label1.fontitalic=falseendsub3)在窗体是设置设置框text1,其中文字为:黑体、四号、居中;设置单选按钮option1和option2,标题分别为“福州大学”和“阳光学院”,编写行当的事件过程,使得程序时,单击“福州大学”或“阳光学院”,在文本框中显示“福州大学”或“阳光学院”。
实验六 ADC0809AD转换实验
实验六 ADC0809AD转换实验一、实验目的1、掌握ADC0809AD芯片的工作原理和使用方法。
2、掌握如何使用51单片机配合ADC0809AD芯片实现模拟量转换。
二、实验原理ADC0809AD是一种8位分辨率、并行输出、单通道,3MHz 工作速率的A/D转换器。
ADC 有两个输入电压端子,IN+和IN-,它们之间加入了一个内部参考电压源(RE),所以在输入模拟信号时常在IN+端连接信号输入,而IN-端接地。
当选用RE = +2.5 V时,IN+的输入范围约为0-VREF,在本实验中选用的是RE = +5 V,所以IN+的输入范围约为0-5V。
当外部触发信号TRIGGER开启后,ADC执行转换操作。
在转换时,电压采样保持时间通常为 100 ns,最长转换时间为 200 us,当转换结束时,ADC将数字输出置在低电平并发出一个中断请求(INTR)信号。
转换结果可以通过 8个输出线路(DB0-DB7)获得。
三、实验器材2、*1 9针座(1x9 Pin Socket)。
3、*1 51单片机学习板。
4、*1 电阻10KΩ。
5、*1 电压源。
6、*1 面包板。
7、*5 条杜邦线。
四、实验步骤1、根据下表将ADC0809AD芯片插入到面包板中。
ADC0809AD引脚码ADC0809AD引脚名称功能1 A0- A/D输入(低、多路)引脚17 AGND 模拟地18 VREF/2 参考电压输出19 VCC 数字电源2、将9脚座插入面包板的横向边缘上。
3、使用杜邦线将ADC0809AD转换器连接到学习板上,并根据原理部分对芯片引脚进行接线。
4、将一个10KΩ的电阻连接到ADC0809AD芯片的IN+引脚和GND之间。
6、使用杜邦线将ADC0809AD芯片的DB0-DB7引脚连接到学习板的P0.0-P0.7引脚上。
7、将学习板的P0.0-P0.7引脚转为输出模式。
五、实验代码#include <reg52.h>// SFR位定义sfr ADC_CONTR = 0xBC; // ADC控制寄存器sfr ADC_RES = 0xBD; // ADC结果寄存器sfr ADC_RESL = 0xBE; // ADC结果低字节寄存器sfr P0 = 0x80; // P0口// 公用函数void delay(int time) // 延时函数{int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 125; j++);}}while (1) {ADC_CONTR |= 0x08; // 开始转换while (!(ADC_CONTR & 0x10)); // 等待转换结束P0 = ADC_RES; // 将结果输出到P0口delay(1000); // 延时1000ms}}根据程序分析,程序采用了循环语句控制ADC的转换、输出,程序中实现的是ADC的一次转换。
实验六_网络攻击与防范
《网络攻击与防范》实验报告(2)单击“下一步”按钮·进人如图 4-2 所示的“禁止功能选项”设定界面.根据需要进行设定。
例如。
如果选中“禁止右键菜单”复选框.当运行了该病毒后.右击时将无法弹出快捷菜单。
图 4-2 设置“禁止功能选项”(3)单击“下一步”按钮.进入如图 4-3 所示的“病毒提示对话框”设定界面时。
根据需要设置有关开机时病毒的执行情况。
当选中“设置开机提示对话框”复选框.并设置了提示框标题和内容等后,相关信息将以对话框方式在开机时自动显示图4-3 设置开机时病毒的执行情况(4)单击“下一步”按钮,进入如图 4-4 所示的“病毒传播选项”设定界面,根据需要进行设定。
当选中“通过电子邮件进行自动传播(蠕虫)”复选框时.病毒可以向指定数量的用户发送垃圾邮件。
图4-3 设置开机时病毒的执行情况下一步夏上一步图4-4“病毒传播选项”设定界面(5)单击“下一步”按钮,进入“IE 修改选项”设定界面,根据需要进行设定。
注意.当选中“设置默认主页”复选框后,会弹出“设置主页”对话框,需要读者输人要修改的IE 浏览器主页地址(即每次打开IE 浏览器时默认打开的主页地址).如图 4-5 所示图4-5设置IE浏览器修改选项(6)单击“下一步”按钮,在出现的如图 4-6 所示的对话框中选择所生成的脚本病毒存放的位置,单击“开始制造”按钮,生成病毒文件。
图4-6选择所生成的脚本病毒存放的位置此时,可看到相应路径下,已经生成了脚本病毒文件3.2感染病毒并观察感染后的系统变化情况(1)将生成的脚本病毒文件置于虚拟机中,在其上双击使之运行。
为保证完整准确地查看病毒的感染效果.可重启已经感染了病毒的虚拟机系统。
然后,根据病毒文件生成时的设置,观察系统感染了病毒后的表现情况。
主要操作步骤如下。
(2)观察系统文件夹下的异常变化,可以发现,在 C:\ Windows,C:\Windows\system32下多了不明来源的脚本文件。
《面向对象程序设计》实验指导书 (1-6个实验,含参考代码)要点
面向对象程序设计实验指导书(适用:电子信息11级)彭召意陶立新编写计算机与通信学院2014.9目录实验一 C++基础的应用 (1)实验二类和对象的应用 (3)实验三类的构造函数、析构函数的应用 (4)实验四友员和运算符重载 (5)实验五类的继承与派生 (6)实验六类的多态性与虚函数 (7)附录:各实验的程序代码 (8)实验一 C++基础的应用(实验课时:2 实验性质:设计)实验名称: C++基础的应用实验目的: (1)进一步学习VC++6.0开发环境及程序调试方法。
(2)练习C++函数的定义及使用;(3)练习C++数组的定义及使用;(4)练习C++指针的定义及使用;(5)练习C++结构体的定义及使用;(6)练习多文件的程序的编译和运行方法;实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。
实验内容: (1)熟悉Visual C++6.0编译系统的常用功能,特别是debug调试功能;(2)编程1:编写一个程序c1.cpp,用来求2个或3个整数的最大数。
要求:用重载函数的方法来求最大数;函数原型:int max( int a, int b) 和int max( int a, int b,int c)。
(3)编程2:编写一个程序c2.cpp,求:a!+ b! + c!的值。
要求:使用递归函数。
主程序和函数分开到两个源程序文件中,分别进行编译后,再运行;(4)编程3:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号;(5)编程4:建立一个动态链表并进行输出和删除管理。
链表的每个节点为学生信息,包括:学号,姓名,性别,下一学生信息的指针。
程序的工作:(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;(b)删除中间的节点,再顺序输出学生信息。
《C语言程序设计》实验报告实验六
《C语言程序设计》实验报告实验六使用指针的程序设计学号姓名一、实验目的1、掌握指针的概念,会定义和使用指针变量;2、能正确使用数组的指针和指向数组的指针变量;3、熟悉指针作为函数参数的定义和调用方法;4、能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容1.分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。
#include <stdio.h>void main(){int *p1,*p2,*p;int a,b;printf("Input a b please");scanf("%d%d",&a,&b);p1=&a;p2=&b;if(a>b){ p=p1;p1=p2;p2=p;}printf("*p1=%d, *p2=%d\n",*p1,*p2);printf("a=%d, b=%d\n",a,b);}『运行结果:』输入1,2得:*p1=1,*p2=2a=1,b=2输入2,1得:*p1=1,*p2=2a=2,b=1输入56,123得:*p1=56,*p2=123a=56,b=1232.下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even 返回偶数之和。
请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。
#include <stdio.h>#define N 10void fun(int *a,int n,int *odd,int *even){int m;*odd=0; *even=0;for(m=0;m<n;m++)if(*(a+m)%2==0)*even+=*(a+m);else*odd+=*(a+m);}void main(){int a[N]={1,10,2,3,19,6},i,n=6,odd,even;printf("The original data is:\n");for(i=0;i<n;i++)printf("%5d",*(a+i));printf("\n\n");fun(a,n,&odd,&even);printf("The sum of odd numbers:%d\n",odd);printf("The sum of even number:%d\n",even);}『运行结果:』3.编程实现从键盘输入一个字符ch和一个字符串str,利用字符指针实现删除字符串str中和字符ch相等所有字符,然后输出字符串str。
实验六 基于VHDL语言的分频器设计与实现
实验六基于VHDL语言的分频器设计与实现报告一、实验目的1、进一步掌握VHDL语言的基本结构及设计的输入方法。
2、掌握VHDL基本逻辑电路的综合设计应用。
二、实验原理在数字电路系统中,分频电路应用得十分广泛。
例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。
因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。
三、实验内容1、设计并实现一个6分频的分频电路,要求其输出信号的占空比为50%。
请分析分频电路设计原理并编写VHDL语言程序,利用Max+PlusII开发软件对其进行编译和仿真。
6分频电路实现程序代码如下:2、在实际数字电路设计过程中,往往需要得到占空比不是1:1的分频时钟,方法是:首先描述一个计数器电路,然后根据计数器电路的并行输出信号来决定输出时钟的高低电平。
请设计、编写VHDL 语言程序实现分频后时钟信号的占空比为1:15的16分频电路,并利用Max+PlusII开发软件对其进行编译和仿真。
四、实验设计1.程序代码:图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clk_div6 isport(clk:in std_logic;clk_out:out std_logic);end clk_div6;architecture rtl of clk_div6 issignal clk_temp:std_logic;beginprocess(clk)variable counter:integer range 0 to 15;constant md:integer:=2;beginif clk'event and clk='1'thenif counter=md thencounter:=0;clk_temp<=not clk_temp;elsecounter:=counter+1;end if;end if;end process;clk_out<=clk_temp;end rtl;2.仿真结果:五、实验结果分析本实验利用VHDL语言设计分频电路,目的在于进一步掌握VHDL语言的基本结构及设计的输入方法,掌握VHDL基本逻辑电路的综合设计应用。
实验六 内排序
实验六内排序一、实验目的和要求通过本次实验,掌握线性表几种的常用排序方法。
二、实验内容和原理C语言结构化程序设计思想,数组的应用。
三、主要仪器设备装有Visual C++/Turbo C++等C程序编译软件的计算机。
四、实验中程序的源码1. 直接插入排序算法程序代码如下:#include <stdio.h>#include "table.h"/*****************************************//* 函数功能:建立待排序的初始数据*//* 函数参数:指针变量t *//* 函数返回值:空*//* 文件名:init.c 函数名:init() *//*****************************************/void init(table *t){int x;t->length=0;/*初始化*/printf("请输入待排序数据的排序码(-999结束):\n");scanf("%d",&x);/*从键盘输入数据*/while(x!=-999) /*假设输入数据为-999则输入结束*/{t->length++;t->r[t->length].key=x;scanf("%d",&x);}}/*除通过键盘接受数据外,也可以通过从数据文件中等方式接受数据*//*这里仅对待排序记录的排序码进行了输入,记录的其他数据没有输入*//*这里假设接受的数据总数不会超过MAXSIZE个,所以没有进行判断是否溢出*//*****************************************//* 函数功能:输出数据*//* 函数参数:结构变量t *//* 函数返回值:空*//* 文件名:display.c 函数名:display() *//*****************************************/void display(table t){int i;for(i=1;i<=t.length;i++) printf("%5d",t.r[i].key);}/********************************************//* 函数功能:直接插入排序算法*//* 函数参数:结构类型table的指针变量tab *//* 函数返回值:空*//* 文件名insesort, 函数名insertsort() *//********************************************/void insertsort(table *tab){int i,j;for(i=2;i<=tab->length;i++)/*依次插入从第2个开始的所有元素*/{j=i-1;tab->r[0]=tab->r[i];/*设置哨兵,准备找插入位置*/while(tab->r[0].key<tab->r[j].key) /*找插入位置并后移*/{tab->r[j+1]=tab->r[j]; /*后移*/j=j-1; /*继续向前(左)查找*/}tab->r[j+1]=tab->r[0]; /*插入第i个元素的副本,即前面设置的哨兵*/ }}void main(){table T;init(&T);insertsort(&T);display(T);printf(“\n”);}2. 直接选择排序算法程序代码如下:#include <stdio.h>#include "table.h"/*****************************************//* 函数功能:建立待排序的初始数据*//* 函数参数:指针变量t *//* 函数返回值:空*//* 文件名:init.c 函数名:init() *//*****************************************/void init(table *t){int x;t->length=0;/*初始化*/printf("请输入待排序数据的排序码(-999结束):\n");scanf("%d",&x);/*从键盘输入数据*/while(x!=-999) /*假设输入数据为-999则输入结束*/{t->length++;t->r[t->length].key=x;scanf("%d",&x);}}/*除通过键盘接受数据外,也可以通过从数据文件中等方式接受数据*//*这里仅对待排序记录的排序码进行了输入,记录的其他数据没有输入*//*这里假设接受的数据总数不会超过MAXSIZE个,所以没有进行判断是否溢出*//*****************************************//* 函数功能:输出数据*//* 函数参数:结构变量t *//* 函数返回值:空*//* 文件名:display.c 函数名:display() *//*****************************************/void display(table t){int i;for(i=1;i<=t.length;i++) printf("%5d",t.r[i].key);}/**************************************************//* 函数功能:直接选择排序算法*//* 函数参数:结构类型table的指针变量tab *//* 函数返回值:空*//* 文件名:selesort.c 函数名:simpleselectsort() *//**************************************************/void simpleselectsort(table *tab){int i,j,k;for(i=1;i<=tab->length-1;i++) /*每次选择一个最小的元素(的位置),和第i个元素交换*/{k=i; /*记下当前最小元素的位置*/for(j=i+1;j<=tab->length;j++) /*向右查找更小的元素*/if(tab->r[j].key<tab->r[k].key) k=j; /*修改当前最小元素的位置*/if(k!=i) /*如果第i次选到的最小元素位置k不等于i,则将第k、i个元素交换*/{tab->r[0]=tab->r[k]; /*以没有用到的第0个元素作为中间单元进行交换*/tab->r[k]=tab->r[i];tab->r[i]=tab->r[0];}}}void main(){table T;init(&T);simpleselectsort(&T);display(T);printf("\n");}3. 冒泡排序算法程序代码如下:#include <stdio.h>#include "table.h"/*****************************************//* 函数功能:建立待排序的初始数据*//* 函数参数:指针变量t *//* 函数返回值:空*//* 文件名:init.c 函数名:init() *//*****************************************/void init(table *t){int x;t->length=0;/*初始化*/printf("请输入待排序数据的排序码(-999结束):\n");scanf("%d",&x);/*从键盘输入数据*/while(x!=-999) /*假设输入数据为-999则输入结束*/{t->length++;t->r[t->length].key=x;scanf("%d",&x);}}/*除通过键盘接受数据外,也可以通过从数据文件中等方式接受数据*//*这里仅对待排序记录的排序码进行了输入,记录的其他数据没有输入*//*这里假设接受的数据总数不会超过MAXSIZE个,所以没有进行判断是否溢出*//*****************************************//* 函数功能:输出数据*//* 函数参数:结构变量t *//* 函数返回值:空*//* 文件名:display.c 函数名:display() *//*****************************************/void display(table t){int i;for(i=1;i<=t.length;i++) printf("%5d",t.r[i].key);}/**************************************************//* 函数功能:冒泡排序算法*//* 函数参数:结构类型table的指针变量tab *//* 函数返回值:空*//* 文件名:bubbsort.c 函数名:bubblesort () *//**************************************************/void bubblesort(table *tab){int i,j,done;i=1;done=1;while(i<tab->length&&done) /*最多进行tab->length次冒泡,如没有发生交换则结束*/ {done=0;for(j=1;j<=tab->length-i;j++)if(tab->r[j+1].key<tab->r[j].key)/*相邻两记录的排序码不符合排序要求,则进行交换*/ {tab->r[0]=tab->r[j]; /*以第0个元素作为中间单元进行交换*/tab->r[j]=tab->r[j+1];tab->r[j+1]=tab->r[0];done=1;}i++;}}void main(){table T;init(&T);bubblesort(&T);display(T);printf("\n");}五、实验结果与分析1. 这里写出第一个程序的结果与分析2. 这里写出第一个程序的结果与分析3. 这里写出第一个程序的结果与分析。
C语言程序设计实验六函数答案《西北民大电气学院》
实验六函数一,实验目的:1,掌握定义函数的方法.2,掌握函数实参与形参的对应关系,以及"值传递"的方式.3,掌握函数的嵌套调用和递归调用的方法.4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.二,实验准备:1,复习函数调用的基本理论知识.2,复习函数的嵌套调用和递归调用的方法.3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用. 4,源程序.三,实验步骤及内容:1,运行程序并回答问题(1)程序main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n")}void print_message(){ printf("Good Friend! \n");}void play(n)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}}问题:运行后出现什么错误为什么应如何修改请上机调试.修改:main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n");(缺少分号)}void print_message(){ printf("Good Friend! \n");}play(n)(原先void的与声明类型不同)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}getch();}运行结果(2)以下程序用于计算1+2+3+4+5.main(){ int i,sum;for(i=1;i<=5;++i)sum=add(i);printf("sum=%d\n",sum);getch();}add (a)int a;{static int s=0;s=s+a;return(s);}运行结果:问题:此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.(3)程序int x=567,y=890;main(){ printf("x=%d,y=%d\n",x,y);}运行结果:问题:运行程序后出现什么错误为什么如何修改答:定义位置出错,y的定义在主函数之后了,将y的定义改在和x一样的位置处。
OS实验六——精选推荐
OS实验六《操作系统》实验报告实验三进程管理及进程通信⼀.实验⽬的利⽤Linux提供的系统调⽤设计程序,加深对进程概念的理解。
体会系统进程调度的⽅法和效果。
了解进程之间的通信⽅式以及各种通信⽅式的使⽤。
⼆.实验准备复习操作系统课程中有关进程、进程控制的概念以及进程通信等内容(包括软中断通信、管道、消息队列、共享内存通信及信号量概念)。
熟悉本《实验指导》第五部分有关进程控制、进程通信的系统调⽤。
它会引导你学会怎样掌握进程控制。
阅读例程中的程序段。
三.实验⽅法⽤vi 编写c 程序(假定程序⽂件名为prog1.c)编译程序$ gcc -o prog1.o prog1.c 或$ cc -o prog1.o prog1.c运⾏$./prog1.o四.实验内容及步骤⽤v i编写使⽤系统调⽤的C语⾔程序。
1.编写程序。
显⽰进程的有关标识(进程标识、组标识、⽤户标识等)。
经过5 秒钟后,执⾏另⼀个程序,最后按⽤户指⽰(如:Y/N)结束操作。
编译运⾏结果:2.编写程序。
实现⽗进程创建⼀个⼦进程。
体会⼦进程与⽗进程分别获得不同返回值,进⽽执⾏不同的程序段的⽅法。
编译运⾏:思考:⼦进程是如何产⽣的?⼜是如何结束的?⼦进程被创建后它的运⾏环境是怎样建⽴的?答:⼦进程由fork()函数创建,通过exit()函数⾃我结束,⼦进程被创建后核⼼将为其分配⼀个进程表项和进程标识符,检查同时运⾏的进程数⽬,并且拷贝进程表项的数据,由⼦进程继承⽗进程的所有⽂件。
3.编写程序。
⽗进程通过循环语句创建若⼲⼦进程。
探讨进程的家族树以及⼦进程继承⽗进程的资源的关系。
程序如下:编译运⾏:思考:①画出进程的家族树。
⼦进程的运⾏环境是怎样建⽴的?反复运⾏此程序看会有什么情况?解释⼀下。
183922472248 2252 22542249 2251 22532250每⼀次运⾏返回的进程号都不相同,但是都符合家族进程树,出现这样的情况是由于系统本⾝就是随机分配进程号的。
java实验报告:实验六
java实验报告:实验六一、实验目的本次实验的主要目的是深入理解和掌握 Java 中的一些关键概念和技术,包括面向对象编程的特性、异常处理机制以及文件操作等。
通过实际的编程实践,提高我们运用 Java 解决实际问题的能力。
二、实验环境本次实验使用的开发工具是 IntelliJ IDEA,操作系统为 Windows 10。
三、实验内容(一)面向对象编程实践1、定义一个名为“Student”的类,包含学生的姓名、学号和成绩等属性,并实现相应的 getter 和 setter 方法。
2、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出。
(二)异常处理1、编写一个方法,实现两数相除的运算。
如果除数为 0,抛出“ArithmeticException”异常。
2、在主函数中调用该方法,并使用trycatch 语句捕获并处理异常。
(三)文件操作1、创建一个文本文件,并向其中写入一些数据。
2、读取该文件中的数据,并将其输出到控制台。
四、实验步骤(一)面向对象编程实践1、首先,在 IntelliJ IDEA 中创建一个新的 Java 项目。
2、然后,创建“Student”类,代码如下:```javapublic class Student {private String name;private int studentId;private double score;public String getName(){return name;}public void setName(String name) {thisname = name;}public int getStudentId(){return studentId;}public void setStudentId(int studentId) {thisstudentId = studentId;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```3、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出,代码如下:```javapublic class Main {public static void main(String args) {Student student = new Student();studentsetName("张三");studentsetStudentId(1001);studentsetScore(905);Systemoutprintln("学生姓名:"+ studentgetName());Systemoutprintln("学生学号:"+ studentgetStudentId());Systemoutprintln("学生成绩:"+ studentgetScore());}}```(二)异常处理1、编写一个名为“divide”的方法,实现两数相除的运算,代码如下:```javapublic class ExceptionHandling {public static double divide(double num1, double num2) {if (num2 == 0) {throw new ArithmeticException("除数不能为 0");}return num1 / num2;}public static void main(String args) {try {double result = divide(10, 0);Systemoutprintln("结果:"+ result);} catch (ArithmeticException e) {Systemoutprintln("捕获到异常:"+ egetMessage());}}}```(三)文件操作1、创建一个名为“FileOperation”的类,用于实现文件的写入和读取操作,代码如下:```javaimport javaioBufferedWriter;import javaioFileWriter;import javaioIOException;import javaioBufferedReader;import javaioFileReader;public class FileOperation {public static void writeToFile(String filePath, String content) {try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))){writerwrite(content);} catch (IOException e) {eprintStackTrace();}}public static String readFromFile(String filePath) {StringBuilder content = new StringBuilder();try (BufferedReader reader = new BufferedReader(new FileReader(filePath))){String line;while ((line = readerreadLine())!= null) {contentappend(line)append("\n");}} catch (IOException e) {eprintStackTrace();}return contenttoString();}public static void main(String args) {String filePath ="testtxt";String data ="这是写入文件的内容";writeToFile(filePath, data);String readData = readFromFile(filePath);Systemoutprintln("读取到的文件内容:\n" + readData);}}```五、实验结果(一)面向对象编程实践成功创建了“Student”类的对象,并正确地对其属性进行了赋值和输出。
实验六 陶陶摘苹果
实验六一、题目大意:陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。
苹果成熟的时候,陶陶就会跑去摘苹果,陶陶有个30厘米高的板凳。
当她不能直接用手摘到苹的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算下她能够摘到的苹果的数目。
假设她碰到苹果,苹果就会掉下来。
二、解题思路淘淘的身高以及十个苹果的高度。
那么淘淘能摘下苹果呢?那就是当海淘的身高加上板凳的身高能到或高于苹果的高度时,就可以掉下来。
伪代码:关系式: (伪代码) {如果(淘高+凳高>=苹高)计数器+1; }三、实验操作#include<iostream>#include<cstdio>using namespace std;int a[15];int main() {int b=0,n;cout<<"请输入十个苹果所在的高度:"<<endl;for(int i=1;i<=10;i++)cin>>a[i];cout<<"请输入陶陶张开手臂能到达的最高高度:"<<endl;cin>>n;n=n+30;for(int j=1;j<=10;++j)if(n>=a[j])b++;cout<<"陶陶能摘到的苹果个数是:"<<endl;cout<<b<<endl;return 0; }四、实验总结要学好C++,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。
只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。
java实验报告实验六Java图形用户界面.docx
信息工程学院1JaVa程序设计实习报告JAVA图形用户界面实验六JaVa图形用户界面1. 实验目的(1)掌握图形用户界面基本组件。
(2)了解如何使用布局管理器对组件进行管理。
(3)掌握JaVa事件处理机制。
2. 实验内容实验题1编写一个模拟计算器的程序,使用面板和网格布局,添加一个文本框,10个数字按钮(0-9) , 4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式和结果显示在文本框中。
运行结果:_•小程序亘看器:PaClCageI.Calculator.classI实验报告的内容与格式按任课教师的要求书写。
加法:主要代码:PriVate Void in itComp Onen ts() {jButt on1 = :new javax.swing.JButton();jButt on2 = :new javax.swing.JButton();jButt on3 = :new javax.swing.JButton();jButt on4 = :new javax.swing.JButton();jButt on5 = :new javax.swing.JButton();jButt on6 = :new javax.swing.JButton();jButt on7 = :new javax.swing.JButton();jButt on8 = :new javax.swing.JButton();jButt on9 = :new javax.swing.JButton();jButto n10 =new javax.swing.JButton();jButto n11 =new javax.swing.JButton();jButto n12 =new javax.swing.JButton();jButto n13 =new javax.swing.JButton();jButto n14 =new javax.swing.JButton();jButto n15 =new javax.swing.JButton();jTextField1 =new javax.swing.JTextField();SetStUb( null ); jButton1 .setText( "3" );jButton1 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton1ActionPerformed(evt); }});jButton2 .setText( "1" );jButton2 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton2ActionPerformed(evt); }});jButton3 .setText( "5" );jButton3 .addActionListener( new java.awt.event.ActionListener() {public voidactionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt);}});jButton4 .setText( "2" );jButton4 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton4ActionPerformed(evt); }});jButton5 .setText( "6" );jButton5 .addActionListener(newjava.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton5ActionPerformed(evt); }});jButton6 .setText( "8" );jButton6 .addActionListener( newjava.awt.event.ActionListener() {public voidactionPerformed(java.awt.event.ActionEvent evt) {jButton6ActionPerformed(evt); }});jButton7 .setText( "4" );jButton7 .addActionListener( newjava.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton7ActionPerformed(evt); }});jButton8 .setText( "7" );jButton8 .addActionListener( newjava.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton8ActionPerformed(evt); }});jButton9 .setText( "0" );jButton9 .addActionListener( newjava.awt.event.ActionListener() {public voidactionPerformed(java.awt.event.ActionEvent evt) {jButton9ActionPerformed(evt); }});jButton10 .setText( "9" );jButton10 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) { jButton10ActionPerformed(evt);}});jButton11 .setText( "\u00f7" );jButton11 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton11ActionPerformed(evt); }});jButton12 .setText( "\u00d7" );jButton12 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton12ActionPerformed(evt); }});jButton13 .setText( "-" );jButton13 .addActionListener( new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton13ActionPerformed(evt);});jButton14 .setText( "+" );jButton14 .addActionListener( newjava.awt.event.ActionListener() {public voidactionPerformed(java.awt.event.ActionEvent evt) {jButton14ActionPerformed(evt);}});jButton15 .setText( "=" );jButton15 .addActionListener( newjava.awt.event.ActionListener() {public voidactionPerformed(java.awt.event.ActionEvent evt) {jButton15ActionPerformed(evt);}});实验题2 编写一个程序,有一个窗口,该窗口为BorderLayout 布局。
实验六 汇编程序语法和伪指令的使用
实验六汇编程序语法和数据定义伪指令1. 定义一数据段,依次定义以下数据:(1)STR 为字符串INTERNET(2)A为十六进制字节数据30H(3)B为十进制字节数据10(4)C为二进制字节数01010101B(5)D为包含10个字的数据,初值为2009(要求使用DUP重复因子)要求:编程实现该题目。
在所建文件中,包含一个数据段和一个代码段,代码段中可填入最基本的对数据段的初始化设置及退出系统的指令即可,数据段中将题目要求变量进行定义。
并在汇编完成后,通过【查看】/【变量】命令,查看相应变量的初值情况。
2. 对下面数据定义,指令“MOV AX,COUNT1”,“MOV AX,COUNT2”,“MOV AX,[COUNT2]”执行后有何异同?COUNT1 EQU 16HCOUNT2 DW 16H要求:编程实现该题目,并注意在代码段定义中,一定要有对数据段的初始化设置。
3.阅读下面程序,分析该程序所实现的功能,并对程序中的所有语句给出注释,说明各语句在程序中的作用。
DA TA SEGMENT ;初始化时:记住DA TA的段地址、记住SUM 的内存单元、到堆栈里看看SUM DW 0DA TA ENDSSTACK SEGMENTDB 20 DUP(33H)STACK ENDSCODE SEGMENTASSUME DS:DA TA,SS:STACK,CS:CODESTART: MOV AX,DATA ;看看AX里是否为DATA段地址MOV DS,AXMOV CX,50MOV AX,0MOV BX,2NEXT1: ADD AX,BXINC BXINC BXLOOP NEXT1MOV SUM,AX ;到SUM里看看是否有结果MOV BX,SUMMOV AH,4CHINT 21HCODE ENDSEND START。
实验六线程的创建与调度剖析
OS实验六学号:姓名:座位号实验六线程的创立与调度一、实验目的1、线程是操作系统中最重要的概念之一。
现代操作系统为了增加程序的并发度,减少进程转换中系统的时空开销,几乎都引入了线程。
线程,也叫轻量级进程,引入线程后,仍以进程为单位分配系统资源,但处理机却是以线程为单位进行指派。
通过该实验,让学生体会线程的存在,了解线程与进程的关系,学习线程的创立与终止方法。
二、实验预习1、什么是线程?为什么要建立线程?一个线程一般有几种不同的状态?答:线程具有许多传统进程所具有的特征,所以又称为轻型进程或进程元,作为调度和分派的根本单位。
建立线程的目的是为了使多个程序能够并发执行,以提高资源利用率和系统吞吐量。
线程在运行时具有三种根本状态:执行状态,表示线程已获得处理机而正在运行;就绪状态,表示线程已具备了各种执行条件,只须再获得CPU便可立即执行;阻塞状态,表示线程在执行中因某事件受阻而处于暂停状态。
2、线程的实现方式有哪几种?操作系统是根据什么来感知线程的存在的?答:线程的实现方式有用户级线程和内核支持线程以及实现了这两种类型的线程三种。
内核支持线程〔KST〕:又称为内核级线程〔KIT〕,在OS中的所有进程,无论是系统进程还是用户进程,都是在操作系统内核的支持下运行的,是和内核紧密相关的。
当前大多数OS都支持内核支持线程。
用户级线程〔ULT〕:用户级线程是和内核无关的,对于设置了用户级线程的系统,其调度仍是以进程为单位进行的。
用户级线程的主要缺点有系统调用的阻塞问题和进程中仅有一个线程能够执行。
组合方式:在组合方式线程系统中,内核支持多个内核支持线程的建立、调度和管理,同时,也允许用户应用程序建立、调度和管理用户级线程。
操作系统是根据线程控制块〔TCB〕来感知线程的存在的。
三、实验内容和要求实验要求:写出实验过程和实验结果,给出实验结论。
实验内容:1.通过SPY++工具来查看系统中的进程和线程;查看进程和线程的关系以及它们的优先级等信息。
单片机实验代码
单片机实验代码文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]单片机实验代码实验一ORG 0000hAJMP HA1SORG 0030HHA1S: MOV A,#00HHA1S1: JB P3.3,HA1S1MOV R2,#20HLCALL DELAYJB P3.3,HA1S1HA1S2: JNB P3.3,HA1S2MOV R2,#20HLCALL DELAYJNB P3.3,HA1S2INC APUSH ACCMOV P1,APOP ACCAJMP HA1S1DELAY: PUSH 02HDELAY1: PUSH 02HDELAY2: PUSH 02HDELAY3: DJNZ R2,DELAY3POP 02HDJNZ R2,DELAY2POP 02HDJNZ R2,DELAY1POP 02HDJNZ R2,DELAYRETEND实验二ORG 0000HAJMP 0030HORG 0013HLJMP HA2S3ORG 0030HHA2S: MOV P1,#0fFH ORL P3,#00HHA2S1: JB P3.4,HA2S1 ORL IE,#84HORL IP,#04HMOV PSW,#00HMOV SP,#53HHA2S2: MOV P1,#081H ACALL HA2S7MOV P1,#082HACALL HA2S7MOV P1,#084HACALL HA2S7MOV P1,#088HACALL HA2S7MOV P1,#090HACALL HA2S7MOV P1,#0A0HACALL HA2S7MOV P1,#0C0HACALL HA2S7SJMP HA2S2HA2S3: MOV B,R2HA2S5: SETB P1.7ACALL HA2S6CLR P1.7ACALL HA2S6JNB P3.3,HA2S5MOV R2,BRETIHA2S6: MOV R2,#06H ACALL DELAYRETHA2S7: MOV R2,#30HACALL DELAYRETDELAY: PUSH 02H DELAY1: PUSH 02H DELAY2: PUSH 02H DELAY3: DJNZ R2,DELAY3 POP 02HDJNZ R2,DELAY2POP 02HDJNZ R2,DELAY1POP 02HDJNZ R2,DELAYRETEND实验10org 0000hSjmp MAINorg 000bhmov th0,r1mov tl0,r0cpl p1.0RETIMAIN:MOV TMOD,#01H MOV IE,#82HMOV DPTR,#TABLOOP: CLR AMOVC A,@A+DPTRMOV R1,AINC DPTRCLR AMOVC A,@A+DPTRMOV R0,AORL A,R1JZ NEXT0MOV A,R0ANL A,R1CJNE A,#0FFH,NEXTSJMP MAINNEXT : MOV TH0,R1MOV TL0,R0SETB TR0SJMP NEXT1NEXT0:CLR TR0NEXT1: CLR AINC DPTRMOVC A,@A+DPTRMOV R2,ALOOP1: ACALL D200CDJNZ R2,LOOP1INC DPTRAJMP LOOPD200C:MOV R3,#81HD200B:MOV A,#0FFHD200A:DEC AJNZ D200ADEC R3CJNE R3,#00H,D200BRETTAB: DB 0FEH,25H,04H,0FEH,25H,02H ;11 1 5 DB 0FEH,25H,02H,0FDH,80H,04HDB 0FEH,84H,02H,0FEH,84H,02H;33 3 1DB 0FEH,84H,04H,0FEH,25H,04HDB 0FEH,25H,02H,0FEH,84H,02H;13 5 5DB 0FEH,0C0H,04H,0FEH,84H,02HDB 0FEH,98H,02H,0FEH,84H,02H;43 2 -DB 0FEH,57H,08H,00H,00H,04HDB 0FFH,0FFHEND;1=131 262 523 1047;2=147 294 587 1175;3=165 330 659 1319;4=175 349 698 1397;5=196 392 784 1568;6=220 440 880 1760;7=247 494 988 1976实验十一ORG 0000HAJMP STARTORG 0030HSTART: SETB P1.0 LCALL DELAYCLR P1.0LCALL DELAYSJMP STARTDELAY: MOV R7,#0FFH DELAY1: MOV R6,#0FFH DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1RETEND实验六ORG 0000HAJMP HA6SORG 0030HHA6S: MOV SP,#53HHA6S1: MOV R6,#00HHA6S2: MOV DPTR,#8000H MOV A,R6MOVX @DPTR,AMOV R2,#30HLCALL DELAY;INC R6;CJNE R6,#0FFH,HA6S2 HA6S3: MOV R6,#0FFH MOV DPTR,#8000H; DEC R6MOV A,R6MOVX @DPTR,AMOV R2,#30HLCALL DELAY;CJNE R6,#00H,HA6S3 SJMP HA6S1DELAY: PUSH 02HDELAY1: PUSH 02H DELAY2: PUSH 02H DELAY3: DJNZ R2,DELAY3 POP 02HDJNZ R2,DELAY2POP 02HDJNZ R2,DELAY1POP 02HDJNZ R2,DELAYRETEND实验29TIMER EQU 01Horg 0000hajmp STARTORG 000BHAJMP INT_T0ORG 070HSTART: MOV SP,#53H MOV TMOD,#01HMOV TL0,#00HMOV TH0,#4BHMOV R0,#0HMOV TIMER,#20MOV SCON,#00HCLR TICLR RISETB TR0SETB ET0SETB EASJMP $INT_T0: PUSH ACCPUSH PSWCLR EACLR TR0MOV TL0,#0HMOV TH0,#4BHSETB TR0DJNZ TIMER,EXITMOV TIMER,#20MOV DPTR,#CDATAMOV A,R0MOVC A,@A+DPTRCLR TICPL AMOV SBUF,AINC R0CJNE R0,#0AH,EXITMOV R0,#0HEXIT: SETB EAPOP PSWPOP ACCRETICDATA: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H END相关文档:更多相关文档请访问:。
实验六步骤
1、使用AppWizard创建一个单文档(SDI)应用程序Eg9_2。
2、在工作区中选择ClassView标签,展开Eg9_2 classes|CEg9_2View。
右键单击CEg9_2View,在弹出的快键菜单中选择Add Member Variable,为视图类添加如下成员变量,并选择所加的变量为保护的(Protected)。
添加成员变量对话框内输入一下类型和变量名:Access当中选择:Protected变量类型:变量名CPoint m_ptStart //用于定义开始的点坐标CPoint m_ptEnd //用于定义结束的点坐标CPoint m_ptOld //用于保存点的坐标BOOL m_bDrawFlag //是否手工绘制图形BOOL m_bLineFlag //是否画线BOOL m_bFillFlag //是否填充图形BOOL m_bRectFlag //是否画一个矩形BOOL m_bEllipseFlag //是否画椭圆依次类推:添加成员变量********************************************或者也可以等价实现上述操作,即也可以直接在Eg9_2View.h文件中的构造函数段直接输入如下代码:BOOL m_bFillFlag;BOOL m_bEllipseFlag;BOOL m_bRectFlag;BOOL m_bLineFlag;BOOL m_bDrawFlag;CPoint m_ptOld;CPoint m_ptEnd;CPoint m_ptStart;***********************************************3、在构造函数中添加新的对象方法SetFlagsFalse (),将所有的标志设置为False :在工作区中选择ClassView 标签,右键单击CEg9_2View ,在弹出的快键菜单中选择Add Member Function ,在弹出的对话框中输入方法的名称及类型。
软件测试实验六 动态测试6
实验六动态测试1提交期限和方式期限:第16周周三(2015-6-17)23:59 pm方式:由学习委员收集所有学生的实验报告,以电子档的形式提交给任课教师(发邮箱:)。
2实验目的和内容2.1实验目的结合黑盒与白盒测试技术,编写驱动程序,掌握基本模块的动态测试是如何实现的。
2.2实验内容通过账单优惠计算问题,综合使用黑盒和白盒测试方法来设计测试用例,并编写模块的驱动程序,完成基本模块的动态测试。
3案例实践:账单优惠计算问题的动态测试3.1问题简述问题描述如下:账单优惠计算问题主要是根据账单的消费数额大小,给予不同程度的折扣优惠,但当账单上的消费数额无效时,程序应提示消费数额无效。
程序代码如下:3.2编译执行首先对该段程序进行编译,由于没有语法错误,因此编译通过。
接着运行程序,输入数值600,按回车。
观察程序执行结果,输出为600,符合预期结果。
3.3静态测试单元测试不应仅针对程序来测试,那样只能证明代码是可以运行的。
单元测试的首要任务是对照被测对象的详细设计,查看程序是否按照详细设计的功能来实现。
通过检查能够发现,账单优惠计算问题缺少详细的折扣优惠政策,也并未明确说明什么条件下消费数额无效。
因此,程序代码中所展示的折扣无从考证,不知是否正确。
于是,首先应补充账单优惠计算的详细功能说明如下:账单优惠计算的具体折扣优惠规则为:♦当账单上的一次性消费数额为负数或零时,返回负数表示消费数额无效;♦当账单上的一次性消费数额在800元到1800元之间时(含1800元),为九折;♦当账单上的一次性消费数额在1800元到4800元之间时(含1800元),为八折;♦当账单上的一次性消费数额在4800元以上时(不含4800元),一律为七折。
接着,对照缺陷检查表和编码规范,发现程序中没有任何注释,应补充必要的注释。
同时发现一处代码错误,即FuncRevenueAccount()函数中的第2条语句,在该逻辑判断表达式中仅考虑当amount小于800的情况,却为考虑应将amount <=0(无效的数据输入)与amount>0(有效的数据输入)这两种完全不同的情况区分开来。
实验六 JAVA 面向对象编程
实验六JA V A 面向对象编程【实验目的】1.掌握JAVA语言类的定义和使用。
2.掌握JAVA语言对象的声明和使用。
3.掌握JAVA语言构造方法的概念和使用。
4.掌握类及其成员的访问控制符的区别和使用。
【预习内容】1. JA V A 类的定义格式;2.JAVA对象的使用三步骤:声明、创建以及初始化;3.访问控制修饰符:public、private和protected的功能和区别;4.JAVA构造方法的概念和特点;5.JAVA多态的概念,及重载和覆盖的区别;【实验内容及步骤】1.上机验证题1.创建对象并使用对象(1)程序功能:这个Applet 程序要在页面上输出两个矩形,并伴有文字输出。
程序的源代码如下。
(2)编写一个浏览Applet 应用程序的页面文件LX6_1.HTML<html><applet code=" LX6_1.class" height=200 width=400></applet></html>(3)将LX6_1.java 源程序编译为LX6_1.class 文件(4)使用浏览器或使用小程序查看器浏览LX6_1.HTML 文件(即在命令提示符下输入:appletviewer LX6_1.HTML),运行结果如下图所示。
2.上机编程题1..编程实现Fibonacci数列。
Fibonacci数列的定义为:F1=1,F2=1,…Fn=Fn-1+Fn-2 (n>=3)[程序清单]public class Fibonacci{public static void main(String[] args){int fb[]=new int[10];fb[0]=1;fb[1]=1;System.out.println("Fibonacci数列第1项为:"+fb[0]);System.out.println("Fibonacci数列第2项为:"+fb[1]);for (int i=2;i<10 ;i++ ){fb[i]=fb[i-1]+fb[i-2];System.out.println("Fibonacci数列第" + (i+1) + "项为:"+fb[i]);}}}[程序运行过程]2、编程创建一个Point类,在其中定义两个变量表示一个点的坐标值,再定义构造方法初始化为坐标原点,然后定义一个方法实现点的移动,再定义一个方法打印当前点的坐标。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六代理模式的应用
实验目的
1) 掌握代理模式(Proxy)的特点
2) 分析具体问题,使用代理模式进行设计。
实验内容和要求
生产商(Factory)需要销售商品(Product),网上商城(E-Shop)提供了一个平台,可以帮助销售这些商品,获得更大的销量。
当顾客(Custom)从网上商城选购商品的时候,实际是从生产商获得的商品。
应用代理模式,用C#控制台应用程序改进该设计。
绘制该模式的UML图。
实验UML图
实验源代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxyPattern
{
class Program
{
interface Business
{
void sell(string product);
void buy(string product);
}
public class Factory
{
public string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
public class E_shop : Business
{
Factory factory;
public E_shop(Factory factory)
{
this.factory =factory;
}
public void buy(string product)
{
Console.WriteLine(+",有人要买" + product+",请尽早发货!"); }
public void sell(string product)
{
Console.WriteLine(+",有人买卖" + product+",望及时回购!"); }
}
public class Custom :Business
{
E_shop e_shop;
public Custom(Factory factory)
{
e_shop = new E_shop(factory);
}
public void buy(string product)
{
e_shop.buy(product);
}
public void sell(string product)
{
e_shop.sell(product);
}
}
static void Main(string[] args)
{
Factory factory = new Factory();
= "IphoneFactory";
Custom custom = new Custom(factory);
custom.buy("iphone6Plus");
custom.sell("iphone4S");
Console.Read();
Console.ReadLine();
}
}
}
实验运行结果截屏
实验小结
通过本次实验,使我更好的掌握了代理模式,对其优缺点有了更深入的理解
代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度。
当对象在远程机器上,要通过网络来生成时速度可能会很慢,此时应用代理模式可以掩盖对象在网络上生成的过程,系统的速度会加快。
对于大对象的加载(如大图片),虚拟代理可以让加载过程在后台执行,前台使用的代理对象会使得整体运行速度得到优化。
代理模式的缺点是请求的处理速度会变慢,并且实现代理模式需要额外的工作。