教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

软件设计模式复习题(3)

来源:网络收集 时间:2026-08-31
导读: 答:public class Form1 : System.Windows.Forms.Form { private bel lbSalary; private ponentModel.Container components = null; AbstractEmployee prez, marketVP, salesMgr; TreeNode rootNode; AbstractEmplo

答:public class Form1 : System.Windows.Forms.Form { private bel lbSalary; private ponentModel.Container components = null; AbstractEmployee prez, marketVP, salesMgr; TreeNode rootNode; AbstractEmployee advMgr, emp, prodVP, prodMgr, shipMgr; private System.Windows.Forms.TreeView EmpTree; private Random rand; private void init() { rand = new Random (); buildEmployeeList(); buildTree();} private void buildEmployeeList() { prez = new Boss("CEO", 200000); marketVP = new Boss("Marketing VP", 100000); prez.add(marketVP); salesMgr = new Boss("Sales Mgr", 50000); advMgr = new Boss("Advt Mgr", 50000); marketVP.add(salesMgr); marketVP.add(advMgr); prodVP = new Boss("Production VP", 100000); prez.add(prodVP); advMgr.add("Secy", 20000); for (int i = 1; i<=5; i++){ salesMgr.add("Sales" + i.ToString(), rand_sal(30000));} prodMgr = new Boss("Prod Mgr", 40000); shipMgr = new Boss("Ship Mgr", 35000); prodVP.add(prodMgr); prodVP.add(shipMgr);

for (int i = 1; i<=3; i++){ shipMgr.add("Ship" + i.ToString(), rand_sal(25000));} for (int i = 1; i<=4; i++){ prodMgr.add("Manuf" + i.ToString(), rand_sal(20000));}} private void buildTree() { EmpNode nod; nod = new EmpNode(prez); rootNode = nod; EmpTree.Nodes.Add(nod); addNodes(nod, prez);} private void getNodeSum(EmpNode node) { AbstractEmployee emp; float sum;

emp = node.getEmployee(); sum = emp.getSalaries();

lbSalary.Text = sum.ToString ();} private void addNodes(EmpNode nod, AbstractEmployee emp) { AbstractEmployee newEmp; EmpNode newNode; IEnumerator empEnum;

empEnum = emp.getSubordinates(); while (empEnum.MoveNext()) {

newEmp = (AbstractEmployee)empEnum.Current; newNode = new EmpNode(newEmp); nod.Nodes.Add(newNode); addNodes(newNode, newEmp);}} private float rand_sal(float sal) { float rnum = rand.Next (); rnum = rnum / Int32.MaxValue; return rnum * sal / 5 + sal;} public Form1() { InitializeComponent(); init();} protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose();}} base.Dispose( disposing );} private void InitializeComponent() { } [STAThread] static void Main() { Application.Run(new Form1());} private void EmpTree_AfterSelect(object sender, TreeViewEventArgs e) { EmpNode node;

node = (EmpNode)EmpTree.SelectedNode; getNodeSum(node);}} public class Boss:Employee{ public Boss(string name, float salary):base(name,salary) {} public Boss(AbstractEmployee emp):base(emp.getName() , emp.getSalary()) {} public override void add(string nm, float salary) { AbstractEmployee emp = new Employee(nm,salary); subordinates.Add (emp);} public override void add(AbstractEmployee emp){ subordinates.Add(emp)} public override AbstractEmployee getChild() { bool found; AbstractEmployee tEmp = null; IEnumerator esub ;

if (getName().Equals (getName())) return this; else {

found = false;

esub = subordinates.GetEnumerator (); while (! found && esub.MoveNext()) { tEmp = (AbstractEmployee)esub.Current; found = (tEmp.getName().Equals(name)); if (! found) {

if (! tEmp.isLeaf()) {

tEmp = tEmp.getChild(); found = (tEmp.getName().Equals(name));} if (found) return tEmp; else return new Employee("New person", 0);}}} public class Employee :AbstractEmployee { protected float salary; protected string name; protected ArrayList subordinates; public Employee(string nm, float salry) { subordinates = new ArrayList(); name = nm; salary = salry;} public float getSalary() { return salary;} public string getName() { return name;} public bool isLeaf() { return subordinates.Count == 0;}

} }

public virtual void add(string nm, float salary) { throw new Exception("No subordinates in base employee class");} public virtual void add(AbstractEmployee emp) { throw new Exception("No subordinates in base employee class");} public IEnumerator getSubordinates() { return subordinates.GetEnumerator ();} public virtual AbstractEmployee getChild() { return null;} public float getSalaries() { float sum; AbstractEmployee esub; sum = getSalary(); IEnumerator enumSub = subordinates.GetEnumerator() ; while (enumSub.MoveNext()) { esub = (AbstractEmployee)enumSub.Current; sum += esub.getSalaries();} return sum;}}

public interface AbstractEmployee { float getSalary(); string getName(); bool isLeaf(); void add(string nm, float salary); void add(AbstractEmployee emp); IEnumerator getSubordinates(); AbstractEmployee getChild(); float getSalaries(); }

public class EmpNode:TreeNode { private AbstractEmployee emp; public EmpNode(AbstractEmployee aemp ):base(aemp.getName ()) { emp = aemp; } public AbstractEmployee getEmployee() { return emp;}} 10、 综合应用装饰模式、命令模式和状态模式实现工具条命令按钮鼠标进入时高亮显

示状态以及鼠标单击按钮后呈现凹陷状态,表明当前按钮为选中状态。 答:Decorator类 namespace CoolDec{

public interface Decorator {

void mouseDown(object sender, EventArgs e); void paint(object sender, PaintEventArgs e); }} Form1窗口

namespace CoolDec{

public class Form1 : System.Windows.Forms.Form{

private System.Windows.Forms.Button btButtonA; private CoolDecorator cdec, cqdec;

public Form1(){

InitializeComponent(); init();}

private void init() {

cdec = new CoolDecorator (btButtonA);

this.Controls.AddRange(new System.Windows.Forms.Control[] {c …… 此处隐藏:4718字,全部文档内容请下载后查看。喜欢就下载吧 ……

软件设计模式复习题(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/42737.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)