这里我们介绍医院管理系统HIS的应用设计,它包括医院门诊时间表线上查询系统、线上医院预约挂号系统等应用的点子、设计实例、以及详细解说,让您快速地设计出各种医院的网站应用。
医院网站资料库应用
医院使用网站资料库,可以透过Internet、或Intranet提供以下的应用∶
* 线上查询医院门诊时间表*
* 线上医院预约挂号*
右上角标示*的应用,本节将提供设计的范例,并详加解说。
执行本章资料库的范例,所用的资料库可为Microsoft Access、Microsoft SQL Server、或Text档案(读者可修改成其他支援ODBC的资料库,详见1-5节),须於NT安装IIS 3.0,并於「控制台」中的「ODBC」,新建一个名称为「BookSamp」的资料来源,驱动程式为「Microsoft Access Driver」、「SQL Server」、或「Microsoft Text 驱动程式」。详见附录 范例磁片。
1
医院门诊时间表线上查询系统
「医院门诊时间表线上查询系统」,可以透过Internet,查询医院门诊时间表。
一般的医院,每月会提供一张新的医院门诊时间表。看病的人可以透过Internet,连线上医院的「医院门诊时间表线上查询系统」,即可线上查询新的医院门诊时间表。
设计实例
让我们执行一个实例。
( 范例 data7.asp 医院门诊时间表线上查询
若要查询门诊时间表,於用户端使用浏览器,浏览本书所附安装於网站伺服器的data7.asp,即可显示查询的结果如下,包括科别、星期一~星期六的门诊医师姓名∶
设计实例详细解说
建立资料表
首先使用Microsoft Access、Microsoft SQL Server 、Text档案、或任何一种支援ODBC的资料库,建立一个资料表HospitalSchedule。
於栏名CLASS、A1~A6分别输入科别、星期一~星期六的门诊医师姓名。
使用Microsoft Access建立一个资料表HospitalSchedule,如下∶
或使用Microsoft SQL Server建立一个资料表HospitalSchedule,如下∶
或使用Text档案建立一个资料表HospitalSchedule,如下∶
查询资料库
接著,网站伺服器执行data7.asp档案,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。
再使用SELECT的SQL指令查询资料库的资料,设定SQL指令,查询HospitalSchedule的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。
程式码如下∶
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM HospitalSchedule"
Set RS = Conn.Execute(SQL)
接著,要显示查询的结果了。首先,由「 IF RS.EOF THEN ...」判断是否找到HospitalSchedule的资料,若RS.EOF为TRUE,则显示「本月无门诊」。
程式码,如下∶
查询结果:<br>
<% IF RS.EOF THEN %>
<FONT COLOR="#FF0000">本月无门诊</FONT>
若找到HospitalSchedule的资料,则显示科别、星期一~星期六的门诊医师姓名,分别由RecordSets物件的RS(0)、RS(1) ~RS(6) 取得。
RS.Fields.Count表示RecordSets物件的栏位数,由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各栏位的资料。配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。
若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。
程式码,如下∶
<% ELSE %>
<FONT COLOR="#0000ff">本月份 门诊时间表如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期一</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期二</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期三</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期四</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期五</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期六</FONT></TD>
</TR>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<% If LEFT(RS(i).Name,1) = "W" Then %>
<TD BGCOLOR="f7efde" ALIGN=CENTER>
<FONT COLOR="#0000"><%= RS(i) %></FONT></TD>
<% Else %>
<TD ALIGN=CENTER BGCOLOR="#800000">
<FONT><%= RS(i) %></FONT></TD>
<% END IF %>
<% Next %>
</TR>
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
</TABLE>
<% END IF %>
最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。
全部的程式码,如下∶
<HTML>
<HEAD>
<TITLE>医院门诊时间表 线上查询系统</TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5">
</HEAD>
<CENTER>
<BODY BGCOLOR=#FFFFFF>
<FONT SIZE=+2 COLOR="#0000FF">医院门诊时间表 线上查询系统</FONT>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM HospitalSchedule"
Set RS = Conn.Execute(SQL)
%>
<HR>
查询结果:<br>
<% IF RS.EOF THEN %>
<FONT COLOR="#FF0000">本月无门诊</FONT>
<% ELSE %>
<FONT COLOR="#0000ff">本月份 门诊时间表如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期一</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期二</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期三</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期四</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期五</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>星期六</FONT></TD>
</TR>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<% If LEFT(RS(i).Name,1) = "W" Then %>
<TD BGCOLOR="f7efde" ALIGN=CENTER>
<FONT COLOR="#0000"><%= RS(i) %></FONT></TD>
<% Else %>
<TD ALIGN=CENTER BGCOLOR="#800000">
<FONT><%= RS(i) %></FONT></TD>
<% END IF %>
<% Next %>
</TR>
<%
RS.MoveNext
Loop
RS.Close
Conn.Close
%>
</TABLE>
<% END IF %>
<HR>
</CENTER>
</BODY>
</HTML>
2
线上医院预约挂号系统
「线上医院预约挂号系统」,可以透过Internet,完成医院预约挂号的手续。
一般的医院,提供排队、人工接听电话、或语音系统等多种预约挂号的方式。透过Internet,现在可以提供比较丰富、生动的预约挂号方式。
看病的人可以透过Internet,连线上医院的「线上医院预约挂号系统」,在电脑上输入病历号码(或身分证号码),再输入要预约的科别、医师、预约日期、和上下午夜间,即可完成预约挂号的手续。
挂号系统将告诉您挂几号的看诊顺序,并自动统计每一个门诊的预约人数,若超过名额,将自动告之,要求预约其他的时间。
预约时,预约系统提供可以增加、取消、查询预约的功能。
看病的人并可线上查询医院门诊时间表、医师简介、用药须知、健康新知、医院活动、医院地址等资讯。
挂号系统将自动印出所预约的每日挂号表,以供医院相关部门准备病历表。
设计实例
让我们执行一个实例。
( 范例 data12.asp 线上医院预约挂号
若要线上预约医院挂号,於用户端使用浏览器,浏览本书所附安装於网站伺服器的data12.asp,於「科别」处选择科别如内科,於「病历号码」处输入病历号码如123456後,於「看诊日期」处输入看诊日期如870701後,按下「预约挂号」按钮,即可显示预约挂号的结果如下,包括病历号码、看诊日期、科别、看诊顺序∶
预约医院挂号时,若预约的诊次已经预约过,则重覆预约相同的诊次将显示「已经预约挂号」如下∶
预约医院挂号时,若超过诊次的100个名额时,则显示「预约挂号已满」如下∶
取消预约挂号
预约医院挂号後,可以取消所预约的挂号,於「选修课程」处选择待取消选修课程如婚姻学,於「科别」处选择科别如神经科,於「病历号码」处输入病历号码如123456後,於「看诊日期」处输入看诊日期如870701後,按下「取消预约挂号」按钮,即可显示取消预约挂号的结果如下∶
若待取消的诊次尚未预约过,则取消预约挂号时显示「尚未预约挂号」如下∶
查询预约挂号
预约医院挂号後,可以查询所有预约的诊次,仅须於「病历号码」处输入病历号码如123456後,按下「查询预约挂号」按钮,即可显示查询预约挂号的结果如下∶
查询预约挂号时,若尚未预约挂号,则查询预约挂号时将显示「尚未预约挂号」如下∶
门诊时间表
按下「门诊时间表」按钮,即可显示门诊时间表如下∶
设计实例详细解说
建立资料表
首先使用Microsoft Access、Microsoft SQL Server 、Text档案、或任何一种支援ODBC的资料库,建立一个资料表HospitalCount,储存一个诊次的预约挂号人数、和最後看诊顺序。
这个资料表系供预约挂号和取消预约挂号时,记录预约挂号人数、和最後看诊顺序号码之用。建立栏位TOTAL、COUNT0、DATE0、CLASS,分别代表一个诊次的预约挂号人数、最後看诊顺序号码、预约日期、科别名称。建立资料表时不必输入资料。
使用Microsoft Access建立一个资料表HospitalCount,如下∶
或使用Microsoft SQL Server建立一个资料表HospitalCount,如下∶
或使用Text档案建立一个资料表HospitalCount,如下∶
尚需要建立另一个资料表HospitalReserve,储存预约挂号的记录,建立栏位ID、COUNT0、DATE0、CLASS,分别代表一笔预约挂号记录的病历号码、看诊顺序号码、预约日期、科别名称。
这个资料表系供预约挂号、查询预约挂号、和取消预约挂号时,记录预约诊次、和看诊顺序之用。
建立资料表时不必输入资料。
使用Microsoft Access建立一个资料表HospitalReserve,如下∶
或使用Microsoft SQL Server建立一个资料表HospitalReserve,如下∶
或使用Text档案建立一个资料表HospitalReserve,如下∶
设计输入的表单
接著,设计输入的表单form,当病患选择科别CLASS1,输入病历号码ID1,看诊日期DATE1,按下「预约挂号」等按钮submit时,即使用POST的方式将输入资料传送到网站伺服器,并执行於「form action=...」所设定的data12.asp档案(与form为同一个ASP档案),程式码如下∶
预约挂号, 请输入以下资料 (初诊者以身分证字号代替病历号码):<br>
<form action="data12.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>科别:
<select name="CLASS1">
<OPTION SELECTED>内科
<OPTION>神经科
<OPTION>小儿科
<OPTION>外科
<OPTION>妇产科
<OPTION>耳鼻喉科
<OPTION>眼科
<OPTION>皮肤科
</select>
<br>
<FONT COLOR="#FF8080">■ </FONT>病历号码 (如123456):
<INPUT TYPE=TEXT VALUE="123456" NAME="ID1" SIZE=10><BR>
<FONT COLOR="#FF8080">■ </FONT>看诊日期 (如87年7月1日请输入870701):
<INPUT TYPE=TEXT VALUE="870701" NAME="DATE1" SIZE=6><BR>
<INPUT TYPE=submit VALUE="预约挂号" name="Action">
<INPUT TYPE=submit VALUE="取消预约挂号" name="Action"><br>
<INPUT TYPE=submit VALUE="查询预约挂号" name="Action"> 仅须填入病历号码<br>
</form>
<form>
<INPUT TYPE=button VALUE="门诊时间表" OnClick="location.href='data7.asp'">
</form>
若按了「门诊时间表」按钮时,将执行data7.asp,以显示门诊时间表。
网站伺服器执行data12.asp档案,首先经由Request.Form("Action")取得所按submit按钮上的显示文字VALUE,Left(Request.Form("Action"),2)系只取前两个中文字,若Request.Form("Action")非空白时,表示为表单输入所呼叫执行。
由「SELECT CASE Left(Request.Form("Action"),2) 」判断是按了那个按钮。若按钮上前两个字为「预约」时,则执行AddReserve() 副程式;若为「取消」时,则执行DeleteReserve() 副程式;若为「查询」时,则执行CheckReserve() 副程式。
<%
SELECT CASE Left(Request.Form("Action"),2)
CASE "预约"
AddReserve()
CASE "取消"
DeleteReserve()
CASE "查询"
CheckReserve()
END SELECT
%>
预约挂号
按了「预约挂号」按钮时,将执行AddReserve() 副程式。
首先,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。
再寻找所待新增的预约挂号记录,以检查是否已经预约过,使用SELECT的SQL指令查询资料库的资料,於HospitalReserve资料表,设定SQL指令,查询病历号码栏位ID符合所输入Request.Form("ID1"),看诊日期栏位DATE0符合所输入Request.Form("DATE1"),和科别栏位CLASS符合所选择Request.Form("CLASS1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。
程式码如下∶
Sub AddReserve()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
接著,要显示执行的结果了。
首先於HospitalReserve资料表,寻找预约挂号的记录,由「IF RS.EOF THEN ...」判断是否找到病历号码栏位ID符合所输入Request.Form("ID1"),看诊日期栏位DATE0符合所输入Request.Form("DATE1"),和科别栏位CLASS符合所选择Request.Form("CLASS1")的资料。
若RS.EOF为TRUE,表示尚未预约挂号,再寻找所待预约挂号的诊次是否已经有人预约挂号过。於HospitalCount资料表,设定SQL指令,查询看诊日期栏位DATE0符合所输入Request.Form("DATE1"),和科别栏位CLASS符合所选择Request.Form("CLASS1")的资料。若RS.EOF为TRUE,表示此诊次尚未有人预约挂号过,则於HospitalCount资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的预约挂号人数栏位TOTAL、和最後看诊顺序号码栏位COUNT0都设定为1,科别栏位CLASS设定为Request.Form("CLASS1"),日期栏位DATE0设定为Request.Form("DATE1")。
然後再於HospitalReserve资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的看诊顺序号码栏位COUNT0为1,病历号码栏位ID为Request.Form("ID1"),科别栏位CLASS设定为Request.Form("CLASS1"),日期栏位DATE0设定为Request.Form("DATE1")。
显示执行的结果时,配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。程式码,如下∶
<FONT COLOR="#0000FF">预约挂号结果:</FONT><br>
<%
IF RS.EOF THEN
RS.Close
SQL = "SELECT * FROM HospitalCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
'此科次尚未有人预约挂号 ! 於HospitalCount新增一笔
SQL = "INSERT INTO HospitalCount(COUNT0, TOTAL, DATE0, CLASS) VALUES(1,1,'" & Request.Form("DATE1") & "','" & LEFT(Request.Form("CLASS1"),2) & "')"
Set RS = Conn.Execute(SQL)
'HospitalReserve新增一笔
SQL = "INSERT INTO HospitalReserve(COUNT0, ID, DATE0, CLASS) VALUES(1,'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & LEFT(Request.Form("CLASS1"),2) & "')"
Set RS = Conn.Execute(SQL)
%>
<FONT COLOR="#0000FF">预约挂号 OK ! 看诊顺序为第 1 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD>
</TR>
</TABLE>
若RS.EOF为FALSE,表示此诊次已有人预约挂号。
由「IF RS(0) < 100 THEN...」判断RS(0) 预约挂号人数TOTAL是否超过100个名额。
若未超过,则於HospitalCount资料表,使用「UPDATE...」指令,将此笔资料的预约挂号人数TOTAL、和最後看诊顺序号码COUNT0都加一。
然後,再於HospitalReserve资料表,使用「INSERT INTO...」指令新增一笔资料。此笔新增资料的看诊顺序号码栏位COUNT0为HospitalCount资料表的加一後之COUNT0新值,病历号码栏位ID为Request.Form("ID1"),科别栏位CLASS设定为Request.Form("CLASS1"),日期栏位DATE0设定为Request.Form("DATE1")。
接著,显示执行的结果时,配合<TABLE>表格的HTML语法,将於HospitalReserve资料表新增的资料,填入表格的各栏位当中显示出来。
程式码,如下∶
<% ELSE
IF RS(0) < 100 THEN
'此诊次已有人预约挂号 ! HospitalCount的COUNT,TOTAL增一
TotalNo = RS(0)+1
CountNo = RS(1)+1
SQL = "UPDATE HospitalCount SET TOTAL = " & TotalNo & ",COUNT0 = " & CountNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
'HospitalReserve新增一笔
SQL = "INSERT INTO HospitalReserve(COUNT0, ID, DATE0, CLASS) VALUES(" & CountNo & ",'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & LEFT(Request.Form("CLASS1"),2) & "')"
Set RS = Conn.Execute(SQL)
%>
<FONT COLOR="#0000FF">预约挂号 OK ! 看诊顺序为第 <% =CountNo %> 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =CountNo %></FONT></TD>
</TR>
</TABLE>
若此课程的预约挂号人数TOTAL超过100个名额,则显示「预约挂号已满 ! 请预约其他诊次 !」。
接著,显示执行的结果,配合<TABLE>表格的HTML语法,将病历号码和看诊日期等资料,填入表格的各栏位当中显示出来。
程式码,如下∶
<% ELSE %>
<% '100预约挂号已满 %>
<FONT COLOR="#FF0000">报歉 !</FONT><br>
<FONT COLOR="#FF0000">预约挂号已满 ! 请预约其他诊次 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
</TR>
</TABLE>
<% END IF %>
<% END IF %>
当於HospitalReserve资料表,由「IF RS.EOF THEN ...」判断是否已经预约挂号时,若RS.EOF为FALSE,表示此诊次已经预约挂号过,则显示「报歉! 已经预约挂号! 看诊顺序为第...号」。
接著,显示执行的结果,配合<TABLE>表格的HTML语法,将病历号码、看诊日期、和看诊顺序等资料,填入表格的各栏位当中显示出来。
程式码,如下∶
<% ELSE %>
<% '已经预约挂号 %>
<FONT COLOR="#FF0000">报歉 !</FONT><br>
<FONT COLOR="#FF0000">已经预约挂号 !</FONT> 看诊顺序为第 <% =RS(1) %> 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =RS(1) %></FONT></TD>
</TR>
</TABLE>
<% END IF
Conn.Close
End Sub %>
最後,使用Conn.Close关闭资料库。
取消预约挂号
按了「取消预约挂号」按钮时,将执行DeleteReserve() 副程式。
首先,先寻找到所待取消的预约挂号记录,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。
再使用SELECT的SQL指令查询资料库的资料,於HospitalReserve资料表,设定SQL指令,查询病历号码栏位ID符合所输入Request.Form("ID1"),查询看诊日期栏位DATE0符合所输入Request.Form("DATE1"),和科别栏位CLASS符合所选择Request.Form("CLASS1")的资料,,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。
由「IF RS.EOF THEN ...」判断是否找到所待取消的预约挂号记录,若RS.EOF为TRUE,表示此诊次尚未预约挂号,则显示「找不到 ! 尚未预约挂号 !」。
程式码如下∶
<%
Sub DeleteReserve()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">取消预约挂号结果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未预约挂号 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未预约挂号 !</FONT>
若找到所待取消的预约挂号记录,则於HospitalReserve资料表,使用「DELETE FROM...」指令删除此笔资料。
然後,再於HospitalCount资料表,使用「UPDATE...」指令,将此笔课程的预约挂号人数TOTAL减一。
接著,显示执行的结果,配合<TABLE>表格的HTML语法,将於HospitalReserve资料表删除的资料,填入表格的各栏位当中,以显示出来。
程式码,如下∶
<% ELSE
'取消预约挂号 !
'HospitalReserve删除一笔
SQL = "DELETE FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
'HospitalCount的TOTAL减一
'RS.Close
SQL = "SELECT * FROM HospitalCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
%>
<FONT COLOR="#FF0000">找不到预约挂号资料 !</FONT>
<%
ELSE
TotalNo = RS(0)-1
SQL = "UPDATE HospitalCount SET TOTAL = " & TotalNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
%>
<FONT COLOR="#FF0000">预约挂号已经取消 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
</TR>
</TABLE>
<% END IF
END IF
Conn.Close
End Sub %>
最後,使用Conn.Close关闭资料库。
查询预约挂号
按了「查询预约挂号」按钮时,执行CheckReserve() 副程式。
首先,先寻找到所待查询的预约挂号记录,使用「Server.CreateObject」建立连线的物件,并使用「Open」开启待存取查询资料库BookSamp。
再使用SELECT的SQL指令查询资料库的资料,於HospitalReserve资料表,设定SQL指令,查询病历号码栏位ID符合所输入Request.Form("ID1")的资料,下个「Execute」指令,即可开始执行存取查询资料库的动作,并将查询结果储存到RecordSets物件RS。
由「IF RS.EOF THEN ...」判断是否找到所待查询病历号码的所有预约挂号记录,若RS.EOF为TRUE,表示此病历号码尚未预约挂号,则显示「找不到 ! 尚未预约挂号 !」。
程式码如下∶
<%
Sub CheckReserve()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT ID,DATE0,CLASS,COUNT0 FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">查询预约挂号结果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未预约挂号 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未预约挂号 !</FONT>
若找到ID为病历号码Request.Form("ID1")的资料,则显示查询的结果,包括病历号码、看诊日期、科别、看诊顺序,分别由RecordSets物件的RS(0)、RS(1)、RS(2)、RS(3)取得。
RS.Fields.Count表示RecordSets物件的栏位数,由「For i = 0 to RS.Fields.Count - 1」取得RS(i) 各栏位的资料。配合<TABLE>表格的HTML语法,将结果填入表格的各栏位当中。
由「If INT(j/2)*2 <> j Then... 」判断显示奇偶笔的预约挂号资料,奇偶列显示不同的颜色。
若还有下一笔资料,使用RS.MoveNext移到下一笔的位置。
程式码,如下∶
<% ELSE %>
<% '有预约挂号 ! %>
<FONT COLOR="#0000ff">预约挂号如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<% j = 1 %>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<% If INT(j/2)*2 <> j Then %>
<TD BGCOLOR="E8FFFF" ALIGN=CENTER>
<FONT COLOR="#000000"><%= RS(i) %></FONT></TD>
<% Else %>
<TD ALIGN=CENTER BGCOLOR="#C0FFFF">
<FONT COLOR="#000000"><%= RS(i) %></FONT></TD>
<% END IF %>
<% Next %>
</TR>
<%
RS.MoveNext
j = j + 1
Loop
%>
</TABLE>
<% END IF
RS.Close
Conn.Close
End Sub %>
最後,使用RS.Close关闭RecordSet,使用Conn.Close关闭资料库。
全部的程式码,如下∶
<HTML>
<HEAD>
<TITLE>线上医院预约挂号系统</TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=big5">
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<FONT SIZE=+2 COLOR="#0000FF">线上医院预约挂号系统</FONT>
<%
SELECT CASE Left(Request.Form("Action"),2)
CASE "预约"
AddReserve()
CASE "取消"
DeleteReserve()
CASE "查询"
CheckReserve()
END SELECT
Sub AddReserve()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">预约挂号结果:</FONT><br>
<%
IF RS.EOF THEN
RS.Close
SQL = "SELECT * FROM HospitalCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
'此科次尚未有人预约挂号 ! 於HospitalCount新增一笔
SQL = "INSERT INTO HospitalCount(COUNT0, TOTAL, DATE0, CLASS) VALUES(1,1,'" & Request.Form("DATE1") & "','" & LEFT(Request.Form("CLASS1"),2) & "')"
Set RS = Conn.Execute(SQL)
'HospitalReserve新增一笔
SQL = "INSERT INTO HospitalReserve(COUNT0, ID, DATE0, CLASS) VALUES(1,'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & LEFT(Request.Form("CLASS1"),2) & "')"
Set RS = Conn.Execute(SQL)
%>
<FONT COLOR="#0000FF">预约挂号 OK ! 看诊顺序为第 1 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000">1</FONT></TD>
</TR>
</TABLE>
<% ELSE
IF RS(0) < 100 THEN
'此诊次已有人预约挂号 ! HospitalCount的COUNT0,TOTAL增一
TotalNo = RS(0)+1
CountNo = RS(1)+1
SQL = "UPDATE HospitalCount SET TOTAL = " & TotalNo & ",COUNT0 = " & CountNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
'HospitalReserve新增一笔
SQL = "INSERT INTO HospitalReserve(COUNT0, ID, DATE0, CLASS) VALUES(" & CountNo & ",'" & Request.Form("ID1") & "','" & Request.Form("DATE1") & "','" & LEFT(Request.Form("CLASS1"),2) & "')"
Set RS = Conn.Execute(SQL)
%>
<FONT COLOR="#0000FF">预约挂号 OK ! 看诊顺序为第 <% =CountNo %> 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =CountNo %></FONT></TD>
</TR>
</TABLE>
<% ELSE %>
<% '100预约挂号已满 %>
<FONT COLOR="#FF0000">报歉 !</FONT><br>
<FONT COLOR="#FF0000">预约挂号已满 ! 请预约其他诊次 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
</TR>
</TABLE>
<% END IF %>
<% END IF %>
<% ELSE %>
<% '已经预约挂号 %>
<FONT COLOR="#FF0000">报歉 !</FONT><br>
<FONT COLOR="#FF0000">已经预约挂号 !</FONT> 看诊顺序为第 <% =RS(1) %> 号</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =RS(1) %></FONT></TD>
</TR>
</TABLE>
<% END IF
Conn.Close
End Sub %>
<%
Sub DeleteReserve()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT * FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">取消预约挂号结果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未预约挂号 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未预约挂号 !</FONT>
<% ELSE
'取消预约挂号 !
'HospitalReserve删除一笔
SQL = "DELETE FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "' AND DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
'HospitalCount的TOTAL减一
'RS.Close
SQL = "SELECT * FROM HospitalCount WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
IF RS.EOF THEN
%>
<FONT COLOR="#FF0000">找不到预约挂号资料 !</FONT>
<%
ELSE
TotalNo = RS(0)-1
SQL = "UPDATE HospitalCount SET TOTAL = " & TotalNo & " WHERE DATE0 = '" & Request.Form("DATE1") & "' AND CLASS = '" & LEFT(Request.Form("CLASS1"),2) & "'"
Set RS = Conn.Execute(SQL)
%>
<FONT COLOR="#FF0000">预约挂号已经取消 !</FONT>
<TABLE COLSPAN=8 CELLPADDING=1 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
</TR>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("ID1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =Request.Form("DATE1") %></FONT></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><FONT COLOR="#0000"><% =LEFT(Request.Form("CLASS1"),2) %></FONT></TD>
</TR>
</TABLE>
<% END IF
END IF
Conn.Close
End Sub %>
<%
Sub CheckReserve()
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "BookSamp","sa",""
SQL = "SELECT ID,DATE0,CLASS,COUNT0 FROM HospitalReserve WHERE ID = '" & Request.Form("ID1") & "'"
Set RS = Conn.Execute(SQL)
%>
<HR>
<FONT COLOR="#0000FF">查询预约挂号结果:</FONT><br>
<%
IF RS.EOF THEN
'找不到 ! 尚未预约挂号 !
%>
<FONT COLOR="#FF0000">找不到 ! 尚未预约挂号 !</FONT>
<% ELSE %>
<% '有预约挂号 ! %>
<FONT COLOR="#0000ff">预约挂号如下:</FONT>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=1>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>病历号码</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊日期</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>科别</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT>看诊顺序</FONT></TD>
</TR>
<% j = 1 %>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<% If INT(j/2)*2 <> j Then %>
<TD BGCOLOR="E8FFFF" ALIGN=CENTER>
<FONT COLOR="#000000"><%= RS(i) %></FONT></TD>
<% Else %>
<TD ALIGN=CENTER BGCOLOR="#C0FFFF">
<FONT COLOR="#000000"><%= RS(i) %></FONT></TD>
<% END IF %>
<% Next %>
</TR>
<%
RS.MoveNext
j = j + 1
Loop
%>
</TABLE>
<% END IF
RS.Close
Conn.Close
End Sub %>
<HR>
预约挂号, 请输入以下资料 (初诊者以身分证字号代替病历号码):<br>
<form action="data12.asp" method="post">
<FONT COLOR="#FF8080">■ </FONT>科别:
<select name="CLASS1">
<OPTION SELECTED>内科
<OPTION>神经科
<OPTION>小儿科
<OPTION>外科
<OPTION>妇产科
<OPTION>耳鼻喉科
<OPTION>眼科
<OPTION>皮肤科
</select>
<br>
<FONT COLOR="#FF8080">■ </FONT>病历号码 (如123456):
<INPUT TYPE=TEXT VALUE="123456" NAME="ID1" SIZE=10><BR>
<FONT COLOR="#FF8080">■ </FONT>看诊日期 (如87年7月1日请输入870701):
<INPUT TYPE=TEXT VALUE="870701" NAME="DATE1" SIZE=6><BR>
<INPUT TYPE=submit VALUE="预约挂号" name="Action">
<INPUT TYPE=submit VALUE="取消预约挂号" name="Action"><br>
<INPUT TYPE=submit VALUE="查询预约挂号" name="Action"> 仅须填入病历号码<br>
</form>
<form>
<INPUT TYPE=button VALUE="门诊时间表" OnClick="location.href='data7.asp'">
</form>
<HR>
</BODY>
</HTML>
本实例未考虑到上下午和晚间门诊的部份,留给读者自行发挥。
……