试用EF开发WEB应用程序(7): Query String应用,简单计算器

题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.****.net/liigo/在线留言


试用EF开发WEB应用程序(7):Query String应用,简单计算器

  前面的系列文章讲了很多Query String,现在给大家看一个Query String的实际应用,简单计算器。这个小小的网络程序功能很简单,就是对用户输入的两个数值进行加减乘除运算,输出计算结果。

下面请看“易语言.飞扬”源代码:

引入fastcgi;

公开类启动类
{
公开静态启动()
{
FCGIfcgi
=newFCGI;
while(fcgi.Accept()>=0)
{
文本html
=html_template.替换全部("$(title)","简单计算器(由EF开发)");
文本result
="?";
if(fcgi.QUERY_STRING!="")
result
=doCalc(fcgi.QUERY_STRING("op"),fcgi.QUERY_STRING("op1"),fcgi.QUERY_STRING("op2"));
html
=html.替换("$(op1)",fcgi.QUERY_STRING("op1"));
html
=html.替换("$(op2)",fcgi.QUERY_STRING("op2"));
html
=html.替换("$(result)",result);
html
=setSelectedOp(html,fcgi.QUERY_STRING("op"));
fcgi.Output(html.到UTF8());
}
}

静态文本doCalc(文本op,文本op1,文本op2)
{
假如(op)
{
"+":返回(op1.到小数()+op2.到小数()).到文本();
"-":返回(op1.到小数()-op2.到小数()).到文本();
"*":返回(op1.到小数()*op2.到小数()).到文本();
"/":返回(op1.到小数()/op2.到小数()).到文本();
为其他:返回
"[error]";
}
}

静态文本setSelectedOp(文本html,文本op)
{
文本s1,s2,s3,s4;

假如(op)
{
"+":s1="selected";
"-":s2="selected";
"*":s3="selected";
"/":s4="selected";
}

html
=html.替换("$(isSelected+)",s1);
html
=html.替换("$(isSelected-)",s2);
html
=html.替换("$(isSelected*)",s3);
html
=html.替换("$(isSelected/)",s4);

返回html;
}

常量文本html_template
=["Content-type:text/html

<html><head>
<metahttp-equiv="content-type"content="text/html;charset=utf-8">
<title>$(title)</title>
</head>
<body>
<h1>$(title)</h1>
<hr></hr>

<form>
<inputtype="text"name="op1"size=10maxlength=10value="$(op1)">

<selectname="op">
<optionvalue="+"$(isSelected+)>+</option>
<optionvalue="-"$(isSelected-)>-</option>
<optionvalue="*"$(isSelected*)>*</option>
<optionvalue="/"$(isSelected/)>/</option>
</select>

<inputtype="text"name="op2"size=10maxlength=10value="$(op2)">

=$(result)

<p><inputtype="submit"value="计算"></input></p>
</form>

<hr></hr>
<p>byliigo,<ahref="http://blog.****.net/liigo/">http://blog.****.net/liigo/</a></p>
</body>
</html>
"];
}

有机会将提供在线演示地址(欢迎推荐支持FastCGI的优秀的虚拟空间),现在只能先看图片了,下面是运行结果:

试用EF开发WEB应用程序(7): Query String应用,简单计算器

认为以上EF代码太多太复杂的想法可以休矣。我写这个程序时,花费了很多的笔墨,用于提高程序可操作性,其中包括:自带FORM,记忆上次提交的操作数和运算符,显示计算结果。如果仅仅只是显示计算结果的话,代码其实可以大大地简化:

引入fastcgi;

公开类启动类
{
公开静态启动()
{
FCGIfcgi
=newFCGI;
while(fcgi.Accept()>=0)
{
文本op1
=fcgi.QUERY_STRING("op1");
文本op2
=fcgi.QUERY_STRING("op2");
文本op
=fcgi.QUERY_STRING("op");

fcgi.Output(
"Content-type:text/plain ");
if(op1!=""&&op2!=""&&op!="")
fcgi.Output(op1
+""+op+""+op2+"="+doCalc(op,op1,op2));
else
fcgi.Output(
"[parameterserror]");
}
}

静态文本doCalc(文本op,文本op1,文本op2)
{
假如(op)
{
"+":返回(op1.到小数()+op2.到小数()).到文本();
"-":返回(op1.到小数()-op2.到小数()).到文本();
"*":返回(op1.到小数()*op2.到小数()).到文本();
"/":返回(op1.到小数()/op2.到小数()).到文本();
为其他:返回
"[error]";
}
}
}

上面这个代码就简单多了,当然可操作性就弱了很多,只能显示计算结果而已。使用此程序时需提供URL参数或通过FORM提交参数。这个简化后的“简单计算器”(在线演示)的执行结果见下图:

试用EF开发WEB应用程序(7): Query String应用,简单计算器

下文预告:CGI环境变量