设计一个医院

源于个人网站:http://programmer.2008red.com/programmer/article_647_777_1.shtml

 

 

收到一封来自Exoweb的邮件,让去面试(败的很惨,呵呵。过了好长时间了,都忘记这事了,结果这公司来了邮件,说不能提供给我职位,还安慰我。不过就不过是了,弄这些做什么,害我出了一肚子火),就查了查这个公司。以前去面试过的前辈提到了他们会让我们设计医院,学校之类的东东,觉得应该先自己尝试做一下,就做了!

 

 

 病人Patient分别在各个部门挂号,交费,然后检查身体,具体的动作由各个部门去做(operation)。

 病人与部门分开,使用组合/聚合关系,个人觉得有点桥梁模式的意思!

假如将来医院增加新的部门,只要在Patient和Department下增加单层的子类就可以了。

 

具体代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace Hospital
{
    delegate void UpdateDelegate();


    abstract class  Patient
    {
        protected string name;

        public string Name
        {
            get { return this.name;  }
            set { this.name = value; }
        }

            
    }

    class Register:Patient
    {
      
    }

    class Payer:Patient
    {
      
    }

    class Inspector:Patient
    {
      
    }

    interface Department
    {
        void Operation();
    }


    class Registe:Department
    {
        public Patient patient;

        public Registe(Patient register)
        {
            this.patient = register;
        }

        public void Operation()
        {
            Console.WriteLine(this.patient.Name + "已登记!");
        }
       
    }

    class Pay:Department
    {
        public Patient patient;

        public Pay(Patient payer)
        {
            this.patient = payer;
        }

        public void Operation()
        {
            Console.WriteLine(this.patient.Name+"已交钱!");
        }
    }

    class Inspecte:Department
    {
        public Patient patient;

        public Inspecte(Patient inspector)
        {
            this.patient = inspector;
        }

        public Patient Patients
        {
            get { return this.patient; }
            set { this.patient = value; }
        }

        public void Operation()
        {
            Console.WriteLine(this.patient.Name + "已治疗!");
        }
    }

 

    class Treatment
    {
        public Department[]  dm=new Department[3];
            
        public Treatment(Patient d1,Patient d2,Patient d3)
        {
            dm[0]=new Registe(d1);
            dm[1] = new Pay(d2);
            dm[2] = new Inspecte(d3);
        }

        public void run()
        {
            dm[0].Operation();
            dm[1].Operation();
            dm[2].Operation();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            string name = "zhong";
            Register r1 = new Register();
            Payer p1 = new Payer();
            Inspector i1 = new Inspector();
            r1.Name = name;          
            p1.Name = name;           
            i1.Name = name;
            Treatment tm = new Treatment(r1,p1,i1);
            tm.run();

            Console.ReadLine();
           
        }
    }
}

挂号,交费,检查可以设置成一个观察者模式,在C#里当然是用委托来做最好了。

还可以设置很多病人,排队来看病。这可以用一个Arraylist或哈希表来存储各个病人的信息,用循环输出。

由于这是我写的第一个有关模式的文章,时间上也有点紧,不但上面的想法没去实现,可能还有一些我不

知道的错误缺点列在其中,希望大家原谅并指正。

 

希望自己能尽快实现这些没完成的想法。

 

和宿舍的人出去吃了个饭,今天端午,呵呵,晚上十二点回到宿舍后一点也不想睡,又开始写了起来,呵呵!

下面为用一个ArrayList记录病人的修改。

 

 {

   ***

 class Treatment
    {
      
        public Department[]  dm=new Department[3];
        public ArrayList list = new ArrayList();

        public void show(string name)
        {
            Register r1 = new Register();
            Payer p1 = new Payer();
            Inspector i1 = new Inspector();
            r1.Name = name;
            p1.Name = name;
            i1.Name = name;
            dm[0] = new Registe(r1);
            dm[1] = new Pay(p1);
            dm[2] = new Inspecte(i1);
            dm[0].Operation();
            dm[1].Operation();
            dm[2].Operation();
        }


        public void add(string name)
        {
            list.Add(name);
        }

        public void remove(string name)
        {
            list.Remove(name);
        }

        public void run()
        {
            foreach (string uh in list)
            {
                show(uh);
            }
         
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Treatment tm = new Treatment();

            string name = "zhong";      
            tm.add(name);                   
            tm.add("liu");
           // tm.remove("zhong");
            tm.run();

            Console.ReadLine();
           
        }
    }

}

这块是使用委托处理的程序:

 

 

{

  ***

 class Subject
    {
        public event UpdateDelegate UpdateHandler;
        public void add(UpdateDelegate ud)
        {
            UpdateHandler += ud;
        }

        public void remove(UpdateDelegate ud)
        {
            UpdateHandler -= ud;
        }

        public void run()
        {           
            if (UpdateHandler != null)
                UpdateHandler();           
        }
    }

    class Treatment
    {
       
        public Department[]  dm=new Department[3];
        public ArrayList list = new ArrayList();

        public Treatment(string name)
        {
            Register r1 = new Register();
            Payer p1 = new Payer();
            Inspector i1 = new Inspector();
            r1.Name = name;
            p1.Name = name;
            i1.Name = name;
            dm[0] = new Registe(r1);
            dm[1] = new Pay(p1);
            dm[2] = new Inspecte(i1); 
        }

        public void show()
        {
            dm[0].Operation();
            dm[1].Operation();
            dm[2].Operation();
        }
       
    }

    class Program
    {
        static void Main(string[] args)
        {
            Treatment t1 = new Treatment("zhong");
            Treatment t2 = new Treatment("liu");

            Subject sj = new Subject();
            sj.add(new UpdateDelegate(t1.show));
            sj.add(new UpdateDelegate(t2.show));
          //  sj.remove(new UpdateDelegate(t1.show));
            sj.run();
            
            Console.ReadLine();
           
        }
    }

}

 

 

分别实现了ArrayList和委托来处理多人的情况。也算是运用了观察者模式了。

转载于:https://www.cnblogs.com/sqlite3/archive/2009/06/06/2566671.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powerbi的功能介绍_Power BI:1分钟快速生成可视化报表

1.什么是Power BI ?Power BI 是微软推出的可视化工具,先来看看微软官方是怎么介绍的:使用用于自助服务和企业商业智能 (BI) 的统一、可扩展平台(该平台易于使用,可帮助获取更深入的数据见解),连…

易语言 java支持_开源Java客户端可以连接易语言服务器

我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后,都要先跟当前的客户端通信完之后才能再处理下一个连接请求。 这在并发比较多的情况下会严重影响程序的性能,为此,我们可以把它改为如下这种异步…

Javascript--File对象

描述: 提供对文件属性的访问.属性: 属性描述Attributes设置或返回文件或文件夹的属性DateCreated返回指定文件或文件夹的创建时间DateLastAccessed返回最近访问文件或文件夹的创建时间DateLastModified返回最后修改指定文件和文件夹的日期和日期Drive返回指定文件或文件夹所在的…

idea怎么调试jsp页面_解决idea的c标签错误

Hello,World.土土来啦!最近做jq项目,遇到各种各样的问题。首先就是c标签的错误。对,没错,就是这一串因为土土上学期学的是jsp,所以是在myeclipse做的,这学期就想在idea做后端。然后复制粘贴之前的项目的时候&#xff0…

[SlickEdit] SlickEdit支持目录别名FTP控件更新

有阵没写代码了,SlickEdit升级到2009还没怎么用过,Option面板改动得更像Eclipse了,反正IDE工具也不知道到底谁抄袭谁,只是Symbol Coloring设置太唬人了吧,,默认的symbol coloring总是出现字符偏移&#xff…

有一台服务器远程失败其他电脑可以_使用闲置电视盒子打造家庭网盘和远程下载器和小型服务器(二)...

使用闲置电视盒子打造家庭网盘和远程下载器系列(二)本系列分为五章一、综述二、电视盒子的root三、app的安装和服务器环境的搭建四、网盘系统的部署和使用五、远程下载系统搭建和实现昨天写了第一章,我这是首次写东西,没想到能得到这么多朋友关注&#x…

基于C#.NET的--Windows进程管理工具

基于.NET(C#)编写。 实现了进程的树状显示父子关系,其中应用到了WMI编程,以及P-invoke. 下载地址: 点击右键另存为 地址如上,需要安装.NET环境,地址:http://www.microsoft.com/downloads/details.aspx?displaylangzh-…

前端的请求最大线程数是多少啊_面试官:创建多少个线程合适,我该怎么说?...

转载:https://mp.weixin.qq.com/s/j5d4Jtxo0RgJWgpnG9HxlQ为什么要使用多线程?防止并发编程出错最好的办法就是不写并发程序既然多线程编程容易出错,为什么它还经久不衰呢?A:那还用说,肯定在某些方面有特长…

百度地图infowindow的close事件_百度地图蒙圈:车主要加油误导母婴店 跑偏理由令人啼笑皆非...

常在江湖飘,哪有不挨刀。经常驾车出门在外的您,有过被导航坑的经历么?其实在早些年手机导航刚刚兴起的时候,这类现象确实比较常见,但是到了如今大数据的时代,手机导航数据更新比较及时,问题已经…

商业模式新生代_业务分析基础 - 商业模式新生代01篇

商业模式画布商业模式新生代由亚历山大奥斯特瓦德(Alexander Osterwalder)和伊夫皮尼厄(Yves Pigneur)编写,发表于2016年。该书提出了商业模式画布模型,既可以用于创业公司(Start-ups&#xff0…

折半查找和二叉排序树的时间性能_leecode刷题----二分搜索与二叉查找(排序)树...

预备知识:二分查找已知一个排序数组A,如A[-1,2,5,20,90,100,207,800],另外一个乱序数组B,如B[50,90,3,-1,2-7,80],求B中任意某个元素是否在A中出现,结果存储在数组C中,出现用1代表,未出现用0代表…

php pacs,DICOM医学图像处理:WEB PACS初谈四,PHP DICOM Class – 只要踏出一步,路就在前方——zssure – CSDN博客...

背景:预告了好久的几篇专栏博文一直没有整理好,主要原因是早前希望搭建的WML服务器计划遇到了问题。起初以为参照DCMTK的官方文档wwwapp.txt结合前两天搭建的WAMP服务器可以顺利的实现WML服务,借此就可以同时完成WEB PACS系列以及搭建Dicom W…

mfc在运行的时候为什么没有实例化_为什么不建议把数据库部署在Docker容器内?...

本文同步Java知音社区,专注于Java原文:https://www.toutiao.com/i6805798581971190276/近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?这个…

泛型的优势

假设需要一个两个整形变量交换的函数,我们很快就可以嗒嗒嗒嗒的敲出下面的 Swap 函数:void Swap(ref int lhs, ref int rhs){int temp lhs;lhs rhs;rhs temp;}随着项目进展,我们发现,需要用到 Swap 函数的不仅是整形,变量 还有…

系统分析师资料_如何成为一名数据分析师?

随着大数据的逐渐普及,数据分析越来越普遍应用到各个职能岗位,也就是说,不论你在哪个行业,都会需要数据分析技能。数据岗位的薪资水涨船高,成为目前最有潜力的职业选择之一。根据猎聘发布《猎聘2019年中国AI&大数据…

设置文本区域大小_数据验证基本设置技巧

数据验证可以规范用户的文本及数字输入格式,如只能输入指定区间的数值、只能输入文本数据、限制输入空格、限制输入重复值等。设置了数据验证条件后,对符合条件的数据允许输入,对不符合条件的数据则禁止输入。因此,利用此设置可以…

mysql5.7修改root密码_七小服公开课EMC isilon修改丢失的root密码

1、连接串口,并重启2、在终端上,当引导过程中看到如下提示符时,按下空格键:Hit [Enter] to boot immediately, or any other key for command prompt.3、在OK提示符下,运行以下命令:boot -s4、看到 "Enter full pathname of …

服务器php只显示文本,服务器上的php echos文件是文本而不是二进制文件

我编写了一个PHP页面,它读取一个文件,并在添加了一些头文件后对其进行回显:header(Content-disposition: filename" . $fname . ");header(Pragma: no-cache);header(Expires: 0);header(Cache-Control: must-revalidate, post-check0, pre-check0);header(Pragma: p…

vc 6.0 显示文件全路径_配送路径规划思考(十二)

前面十一集的链接配送路径规划思考(十一)配送路径规划思考(十)配送路径规划思考(九)配送路径规划思考(八)配送路径规划思考(七)配送路径规划思考(六)配送路径规划思考(五)配送路径规划思考(四)配送路径规划思考(三)配送路径规划思考(二)配送最短路径思考(一)思考(十一)分享了政…

怎么暂时关闭网站php,WordPress怎么临时关闭网站进行维护

有时可能会因为各种原因导致我们的网站出现访问错误,此时我们就需要临时关闭站点进行维护,那么我们该如何临时关闭站点进行维护呢?下面让我们来看一下如何临时关闭我们的站点吧。1、.maintenance法在WordPress根目录下新建一个名为.maintenan…