试用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>
"];
}
公开类启动类
{
公开静态启动()
{
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代码太多太复杂的想法可以休矣。我写这个程序时,花费了很多的笔墨,用于提高程序可操作性,其中包括:自带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]";
}
}
}
公开类启动类
{
公开静态启动()
{
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提交参数。这个简化后的“简单计算器”(在线演示)的执行结果见下图:
下文预告:CGI环境变量