一年未入住 酒店寄祝福信
技术与开发
由于金融危机的影响,旅游业也受到冲击,我工作的酒店的生意日趋下滑。不久前,经理提出一个要求,向泰国东方饭店学习,凡是有一年未再入住本酒店的房客,都发去一封祝福信(平信)并欢迎他们再次下榻我们的酒店。可我们使用的酒店管理系统没有自动判断房客入住间隔时间的功能,怎么办?为了响应“领导”的号召,我单独开发了一个小程序(下载地址:http://www.shudoo.com/bzsoft),得到了经理的嘉奖。

酒店需求:我们酒店有自己的管理系统(BS框架),每天生成一个详细的房客登记网页(包含姓名、身份证号、入住时间、家庭住址)。现在,经理要求我们把一年未入住的房客信息集中起来,由人事部根据房客信息邮寄祝福信,并欢迎他们再次下榻我们酒店。
软件原理:先获取酒店管理系统自动生成的当天入住房客的网页源码,然后使用正则表达式筛选出网页源码中房客的相关字符串,并判断如果此房客在本酒店没有记录信息,则向数据库中插入一条记录,如果此房客在数据库中有记录则修改数据库中的这条记录。在程序启动时检索数据库的每一条记录,如果发现某位房客有一年没有入住,则生成一个TXT文件(含有姓名、身份证号、入住时间、家庭住址)到D盘。
技术要点:使用正则表达式把获取的网页源码做处理,提取我们需要的字符串(每个房客的姓名、身份证号、入住时间、家庭住址)。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述我们的需求,适用于查找符合某些复杂规则的字符串。在熟练掌握正则表达式的运用后,我们可以轻松提取复杂网页或者程序代码中的字符串,比如提取中彩网中每期双色球的数字信息来分析每期数据等。
软件开发步骤
第一步:启动Delphi7.0,新建一个工程,并在窗体上添加一个RegExp控件(用于使用正则表达式)、一个Edit控件(用于输入IP地址),四个按钮控件(用于获取网页源码、提取字符串、生成TXT文件)、一个WebBrowser控件、两个Memo控件(用于处理网页源码)、一个ADOConnection控件、一个ADODateSet控件(用于操作数据库)。
第二步:获取网页源码。获取网页源码采用WebBrowser,首先读取IP地址,然后把页面显示在WebBrowser中,最后调用OnDocumentComplete事件把网页源码显示到Memo1中。获取网页源码的关键代码如下(完整代码下载地址:http://www.shudoo.com/soft):
WebBrowser1.Navigate(Edit1.Text);
begin
if WebBrowser1.Application = pDisp then //判断所有网页打开完毕(也包含框架内网页)
strHTML:= GetHtml(WebBrowser1);//调用GetHtml函数
Memo1.text:= strHTML;//把网页源码写到Memo1中
BitBtn1.Click; //memo1处理完成后才能调用“写到数据库”按钮(实现自动提取网页后把字符串写到数据库的功能)
第三步:分析网页源码。要实现这个目的,需要使用数据库。 “写到数据库”按钮的关键代码如下(完整代码下载地址:http://www.shudoo.com/soft):
RegExp1.Global := true;
//正则式匹配表格内容,
RegExp1.Pattern := '>[\u4e00-\u9fa50-9\-\sa-zA-Z]+';
RegExp1.IgnoreCase := true;
//取出匹配的内容,存入集合中
machs := RegExp1.Execute(strHTML) as IMatchCollection;
//循环取出每条记录
for i := 4 to machs.Count - 1 do //0-3为表格标题
第四步:生成TXT文件。搜索数据库中已经一年没有入住本酒店的房客,如果存在这种房客,则提取此房客的信息写到TXT文件中,一个房客的信息占一行,然后自动保存到D盘根目录(TXT文件名取当天的日期),其代码如下:
txt:=Tstringlist.Create; //创建文件
txt.add('今天应该给下列人员发函');
txt.add(''); //加空行
ADODS1.Close;
ADODS1.CommandText:='select * from PersonInfo ';
ADODS1.Open;
for i:=0 to ADODS1.RecordCount-1 do
begin
Datetmp:=ADODS1.FieldByName('BulidTime').AsString ;
j:=daysbetween(strtodate(Datetmp),Now);
if (j=366) or (j=365) then//正好一年,生成文件
第五步:实现自动获取网页源码、自动生成字符串后写到数据库、自动生成文件的功能。在FormCreate事件中写入:Button1.Click;BitBtn2.Click;,在WebBrowser1的OnDocumentComplete事件代码末尾加入:BitBtn1.Click;。
编后
此软件主要特点是使用正则表达式来分析网页源码,并提取我们需要的字符串。正则表达式非常适用于在程序或者网页中查找符合某些复杂规则的字符串,可以用来制作双色球、七星彩等彩票分析软件。此软件还可以改进,变成客户提醒软件。