医院信息系统设计中的算法描述

来源 :城市建设理论研究 | 被引量 : 0次 | 上传用户:lkzhlk
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:通过对医院信息系统的需求分析,我们得出了相应的算法,并对在医院信息系统开发中所涉及到的算法进行了详细的描述。
  关键字:医院系统,设计,算法
  
   算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
   一、算法的主要功能
   医院信息系统中排队叫号系统用到的数据结构是队列结构,根据各科室共享信息的原理,我们选择链队。
  由于就诊患者的数量具有不确定性,所以不适合采用静态数组,应该选择具有动态性的链表。而根据患者就诊原则——“先到先诊,后到后诊”,采用具有“先进先出,后进后出”特点的队列可以满足;但由于一位患者可能有多项检查检验,则排队过程中会存在多科室同时候诊,患者可以在等候时间最短的科室得以检查,同时为了避免漏诊,所以要将跳号的仍然保留在队列中继续处于候诊状态,所以采用链式结构能合理地解决这一问题。
  候诊链队的基本操作主要存在每日上班科室初始化候诊队列操作、下班前队列判空操作以及销毁队列操作、挂号室患者入队操作、诊断时患者取对头元素以及出队操作操作。
  1、链队结构描述如下:
  Typedefstructnode
   { datatypedata;
   structnode *next;
   } QNode; /*链队结点的类型*/
  Typedefstruct
   { QNnode *front,*rear;
   }LQueue; /*将头尾指针封装在一起的链队*/
  其示意图如图所示。
  
  
  
  链队示意图
  候诊循环链队中,结点主要有两种类型:队首结点和记录就诊患者挂号信息的结点。其中,通过队首结点的front指针和rear可以判断候诊队列中是否还有候诊患者;通过向元素入队操作实现候诊患者的排队候诊;通过对队列元素的出对操作实现候诊患者就诊。
   2、用到的基本操作
  (1)功能:初始化一新队列
   入口参数:无
   返回值:新顺序队列指针,null表示失败
  LQueueInit_SeqQueue( )
  { LQueueQ;
  Q=( PSeqQueue )malloc(sizeof(SeqQueue));
  if (Q)
  { Q->front=0;
   Q->rear=0;
   printf("置空队列成功!");
  }
  return Q;
  }
  (2)功能:判断队列是否为空
   入口参数:顺序队列
   返回值:1表示为空,0表示非空
  intEmpty_LQueue(LQueue Q)
  {if (Q && Q->front==Q->rear)
   return (1);
   else
  return (0);
  }
  (3)功能:入队操作
   入口参数:顺序队列和待入队元素x
   返回值:1表示成功,-1表示队满溢出
  int In_LQueue (LQueue Q , DataTypex)
  { if ((Q->rear+1)%MAXSIZE==Q->front)
  { printf("队满");
   return -1; /*队满不能入队*/
  }
  else
  { Q->rear=(Q->rear+1) % MAXSIZE;
  Q->data[Q->rear]=x;
   return 1;/*入队完成*/
   }
   }
   二、主要算法描述
  (1)用户登录验证算法:
  【定义】在多用户的大型数据库系统,用户对数据库操作权限会有区别,因此,我们需要设计系统用户登录窗口,来完成用户的确认与权限控制。通常我们都是在数据库中添加一张人员表,保存人员信息、登录用户名以及口令,但这种方法安全性并不是很高。其它,我们可以使用该方法登录窗口时,需要采用动态生成数据库连接代码,然后连接数据库,如果用户存在,并且录入的口令正确,则数据库连接成功,这样便可以打开系统主窗口了。
  【输出】响应前台的用户验证请求。
  【算法流程】设计“确定”按钮Clicked事件的代码如下:
  w_login.visible = false//暂时隐藏登录窗口Open(w_welcome)//打开欢迎或者数据库连接等待窗口
  SetPointer(HOURGLASS!) //将光标变成沙漏型string ls_user,ls_pass //读取用户录入的用户名与口令ls_user = sle_username.text
  ls_pass = sle_password.text
  //从注册表中读取所有数据库信息并存储在“sqlca”中,其中gs_key是你的软件注册位置
  RegistryGet(gs_hkey, "DBMS", RegString!, sqlca.DBMS)
  RegistryGet(gs_hkey, "Database", RegString!, sqlca.Database)
  //生成数据库连接参数,除了用户名与口令外,其他由系统的需要而定。
  SQLCA.DBParm+= ;UID="+ls_user+";PWD="+ls_pass+&&"',PBUseProcOwner='Yes',
  ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT'"CONNECT using sqlca;
  if sqlca.sqlcode<>0 then
  //数据库连接失败,说明用戶录入口令不正确,或者不存在该用户
  close(w_welcome)messagebox("登录","数据库连接失败!")
  le_password.text=""
  sle_password.setfocus()
  success=false
  w_login.visible=true
  elsesuccess=true
  open(w_main)//进入主窗口
  close(w_parent)end if
  (2)门诊挂号算法:
  【定义】在窗体w_mzgh1的OPEN事件中,先设置单个控件的状态,然后从数据库取得收费类型、挂号类型、科室资料、医生资料等信息添加到相应的下拉列表框中。
  【输出】患者的就诊科室以及就诊号。
  【算法流程】
  string ls_temp //设置单个控件的状态
  sle_xm.displayonly = true
  ddlb_xb.enabled = false
  sle_nl.displayonly = true
  ddlb_mz.enabled = false
  ddlb_fylx.enabled = false
  ddlb_ghks.enabled = false
  ddlb_ghlx.enabled = false//添加下拉列表框的值
  //收费类型
   DECLARE lc_sflx CURSOR FOR 
    SELECT DISTINCT(门诊收费项目.名称) 
      FROM 门诊收费项目  ;
  OPEN lc_sflx ;
  do while sqlca.sqlcode = 0
       fetch lc_sflx into :ls_temp ;
       if sqlca.sqlcode = 0 then
           ddlb_fylx.additem(ls_temp) 
       end if
  loopclose lc_sflx ;
   //挂号类型
   DECLARE lc_ghlx CURSOR FOR 
    SELECT DISTINCT(门诊挂号类型.挂号类型) 
      FROM 门诊挂号类型  ;
  OPEN lc_ghlx ;
  do while sqlca.sqlcode = 0
       fetch lc_ghlx into :ls_temp ;
       if sqlca.sqlcode = 0 then
           ddlb_ghlx.additem(ls_temp) 
       end if
  loopclose lc_ghlx ;//科室资料
   DECLARE lc_ghks CURSOR FOR 
    SELECT DISTINCT(科室资料.名称) 
      FROM 科室资料  ;
  OPEN lc_ghks ;
  do while sqlca.sqlcode = 0
       fetch lc_ghks into :ls_temp ;
       if sqlca.sqlcode = 0 then
           ddlb_ghks.additem(ls_temp) 
       end if
  loopclose lc_ghks ;
   //医生资料
   DECLARE lc_ghys CURSOR FOR 
    SELECT DISTINCT(医生资料.姓名) 
      FROM 医生资料  ;
  OPEN lc_ghys ;
  do while sqlca.sqlcode = 0
       fetch lc_ghys into :ls_temp ;
       if sqlca.sqlcode = 0 then
           ddlb_ys.additem(ls_temp)   
       end if
  loopclose lc_ghys ;
  //赋值日期
  em_2.text = string(today(),'yyyy-mm-dd')
  //在按钮cb_add的CLICKED事件中加入以下代码,重新设置各控件的状态,方便继续增加新的挂号
  sle_xm.text = ''
  sle_nl.text = ''
  ddlb_ys.enabled = true
  //在按钮pb_save的CLICKED事件中加入以下代码,保存输入的门诊挂号的信息,并将输入的病人信息添加到病人信息库表中。
  string ls_xm,ls_xb,ls_mz,ls_fylx,ls_bh,ls_brbh
  string ls_ghlx,ls_ghks,ls_ys
  decimal ld_ghfy
  date ld_ghsj
  integer li_nl
  //姓名不能为空
  if isnull(ls_xm) or ls_xm = '' then
       messagebox("提示","姓名不能为空!")
       sle_xm.setfocus()
       return
  end if
  //费用类型不能为空
  if isnull(ls_fylx) or ls_fylx = '' then
       messagebox("提示","费用类型不能为空!")
       ddlb_fylx.setfocus()
       return
  end if
  //挂号科室不能为空
  if isnull(ls_ghks) or ls_ghks = '' then
       messagebox("提示","挂号科室不能为空!")
       ddlb_ghks.setfocus()return
  end if//医生不能为空!
  if isnull(ls_ys) or ls_ys = '' then
       messagebox("提示","医生不能为空!")
       ddlb_ys.setfocus() return
  end if//得到病人信息库的编号
  select max(编号)
  into:ls_brbh
  from 病人信息库;//生产编号
  if isnull(ls_brbh) then
       ls_brbh = "BR0000001"
  else
       ls_brbh = "BR" + string(long(right(ls_brbh,7)  ) + 1,'0000000')
  end if
  //插入数据到病人信息库
    INSERT INTO 病人信息库 
           ( 编号,  姓名,   性别,    年龄,  民族,   费用类型) 
    VALUES ( :ls_brbh,  :ls_xm,   :ls_xb,  :li_nl,   :ls_mz,   :ls_fylx   )  ;
  //插入失敗则回滚数据并返回
    if sqlca.sqlcode <> 0 then
           messagebox("提示","插入病人信息失败!")
           rollback ;return
    end if//得到门诊挂号的编号
  select max(编号)
  into:ls_bhfrom 门诊挂号;
  //生成门诊挂号编号
  if isnull(ls_bh) then
       ls_bh = "GH0000001"else
       ls_bh = "GH" + string(long(right(ls_bh,7) ) + 1,'0000000')
  end if//插入数据到门诊挂号表
  INSERT INTO 门诊挂号  ( 编号,   病人编号,  姓名,  性别,  挂号科室,  费用类型,  挂号类型,  挂号费用,  医生,   时间,  是否已划价 ) 
    VALUES ( :ls_bh,  :ls_brbh, :ls_xm,  :ls_xb,  :ls_ghks,  :ls_fylx, :ls_ghlx,  :ld_ghfy,  :ls_ys,   :ld_ghsj ,  '否')  ;//插入失败则返回
   if sqlca.sqlcode <> 0 thenmessagebox("提示","插入挂号信息失败!")
           rollback ; return
  end if //提交数据 commit ;
  messagebox("提示","挂号成功!")
  //在按钮cb_cancel的CLICKED事件中加入以下代码,回滚数据。
  rollback;  //回滚数据
  //在按钮cb_exit的CLICKED事件中加入以下代码,关闭窗口。
  close(parent)
  (3)患者基本信息查询算法:
  【定义】建立一个合适的数据源,建立一个的数据窗口(里面含一个数据窗口控件和sle_1控件,sle_2控件……,cb_1按钮), 通过在sle_1输入name属性的一个值, 在sle_2输入sex属性的一个值,在sle_3输入bir属性的一个值进行查询,最后在数据窗口控件里面显示出该相关的组信息。
  【输出】响应患者基本信息查询。
  【算法流程】设计“确定”按钮Clicked事件的代码如下:
  //OPEN事件:
  dw_1.settransobject(sqlca)
  dw_1.retrieve('%')
  //"检索"按钮: string ls_name
  //获取输入的患者姓名
  ls_name=trim(sle_1.text)
  //获取输入患者的性别信息
  ls_sex=trim(sle_2.text)
  //获取输入患者的出生日期信息
  ls_bir=trim(sle_3.text)
  //查找患者存在,则显示相关信息
  if not ls_name=”****”and ls_sex= “”andls_bir=”” then
   dw_1.retrieve(ls_name)
  else //查找信息不存在,重新输入
  MessageBox("数据不全!","请输入要查询的姓名!") end if
  
  参考文献
  [1]毛国君.数据挖掘原理与算法[M].北京:清华大学出版社,2007.
  [2] 陈卓.基于 Windows DNA 的门诊挂号系统的研究与应用[D].长春:吉林大学,2004.
  [3] 王安平,李燕燕,陈季妍.《医院信息系统投资分析》,山西财政税务专科学校报,2001,17(5),51-52.
  [4] 顾海.现代医院管理学.北京,中国医药科技出版社,2004.
  [5] 杨善发,王德斌,沈敏祥等.卫生信息化中的几个关键问题[J].中国卫生事业管理,001(6): 382-383.
  
  注:文章内所有公式及图表请用PDF形式查看。
其他文献
在我国,造价人员主要是通过工程建设定额对工程计价,为项目提供投资决策依据。但在市场经济中,信息和要素都是动态的,基于定额的造价显然不能完全反应一项工程的真实成本,一味调整定额中的相关系数显然与工程造价实质过程不相一致。因此,必须从动态化的系统工程角度来管控工程造价。这不仅意味着公司工程造价部门在估算、概算、预结算及决算过程中有效控制工程造价,更要从意识和理念上具备系统化的成本管控理念。工程概预算人
期刊
[摘要]本文依据可持续发展理念探讨了如何有效选用节电产品、科学开展建筑电气设计、实施人性化设备管理从而切实促进建筑电气节能发展,令企业真正实现节能、环保、高效、优质的电气工程管理。  [关键字]建筑;电气节能;科学策略  科学选用节电设备产品  倘若在建筑工程内部合理采用节电、节能型用电设备便可为建筑行业实现电气节能打下良好基础。因此无论是电气工程人员、给排水工程师还是暖通工作人员均应在设计选型环
期刊
摘要:单位大院内居住区的破旧老化已成为上世纪中国的遗留问题。本文以一实例来阐述在不大拆大建的前提下,如何更新单位大院居住区的面貌。提出现阶段大院住区整合的一条可行之路  关键词:单位大院居住区立面改造    单位大院是计划经济的产物。在我国建国初期,经济比较落后,为了快速稳定社会状况,将单位在区域上进行用地划拨,形成相对独立的单位用地空间。由于政治、经济、文化观念的限制,单位大院内的居住区以经济实
期刊
“翡翠齐火,络以美玉。流悬黎之夜光,缀隋珠以为烛。金玉阶,彤庭煇煇。珊瑚琳碧,瓀珉璘彬”。 这是《西京赋》咏玉的名句。笔者从艺二十六年如一日,把美石作为精神的寄托,表达思想,铭记生活;把通灵的材质、绝妙的设计、精湛的工艺、深远的意境……凝聚在雕刀下,打开了莆田玉雕的一扇门,使莆田玉雕成为一个代名词,成为盛世收藏的象征之一。  中国有句至理名言,叫“他山之石,可以攻玉”,这道出了琢玉的真谛。事实上,
期刊
摘要:针对高速公路服务区污水处理装置设置不合理、污水处理效果较差的现状,分析总结了目前我国高速公路服务区污水水质、水量等特点,并从处理工艺、设备选择和运行管理方面给出了对策和建议。实践证明:采用接触氧化法处理高速公路服务区污水是完全可行的,处理出水能够达标排放且运行费用较低(0.4元/m3)。  关键词:高速公路服务区污水处理工艺流程    随着社会经济的飞速发展,我国高速公路的建设规模不断扩大。
期刊
摘要:本文结合中国房地产泡沫现状,分析了造成房地产泡沫的成因、危害,进而提出了控制房地产泡沫的措施,为领导决策提供参考。  关键词:房地产泡沫;土地价格;措施    美国著名经济学家查尔斯·P·金德伯格认为:房地产泡沫可理解为房地产价格在一个连续的过程中的持续上涨,这种价格的上涨使人们产生价格会进一步上涨的预期,并不断吸引新的买者--随着价格的不断上涨与投机资本的持续增加,房地产的价格远远高于与之
期刊
摘要:城市现代化的发展,促进了交通道路建设和桥梁建设的发展。桥梁作为沟通道路的动脉,它能否正常安全运行关系到了经济社会的发展和人们的生命财产安全问题。桥梁系统的养护作为桥梁建设后期工作的一部分,它对桥梁的使用寿命、使用安全等问题有至关重要的作用。本文从桥梁养护出现的问题出发,分析了桥梁养护管理系统的基本理论,最后分析了桥梁技术状况评估和养护策略,以达到对桥梁更好养护的目标。  关键词:桥梁养护;桥
期刊
摘要:随着高强度钢筋的采用,钢筋工作应力的提高,以及日益突出的耐久性问题,裂缝控制越来越成为需要特别考虑的问题。鉴于此,本文对钢筋混凝土土结构施工中裂缝的控制进行了探讨。  关键词:钢筋混凝土;施工;裂缝    一、钢筋混凝土结构施工中裂缝的危害  目前钢筋混凝土结构的建筑在我国各类建设项目中占绝大多数。随着钢筋混凝土建筑物服役时间的增长,老旧建筑物日益增多,钢筋混凝土结构的安全可靠性己逐渐成为土
期刊
摘要:园林绿化对提高居民生活环境质量,增进居民身心健康至关重要。随着城市现代化进程步伐的加快,园林绿化水平也应相应提高,以更好地满足人们对居住环境质量的要求。本文就住宅小区园园林绿化工程施工的要点问题做分析探讨。  关键词:住宅小区园林绿化施工    住宅小区园林绿化工程是建设城市、住宅小区的重点工程之一。要求经济、美观、实用、持久,故而加强园林绿化施工管理十分必要。园林工程包括土方、水景、园路、
期刊
【摘要】随着生活水平的提高,人们越来越注重环境质量问题,这不仅体现在室外环境,如今更关注室内环境的绿化。因此室内植物景观设计成为社会关注的一大主题。本文主要就室内植物景观设计的相关概念进行阐述,并在此基础上对卧室设计和室内庭园设计进行剖析,加深对室内植物景观设计的理解。  【关键词】植物;景观设计;空间设计    室内植物景观的装饰在我国已经历史悠久。随着人们生活水平的提高,对精神方面需求也成几何
期刊