题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.csdn.net/liigo/。在线留言。
试用EF开发WEB应用程序(7):Query String应用,简单计算器
前面的系列文章讲了很多Query String,现在给大家看一个Query String的实际应用,简单计算器。这个小小的网络程序功能很简单,就是对用户输入的两个数值进行加减乘除运算,输出计算结果。
下面请看“易语言.飞扬”源代码:
引入fastcgi;
公开类启动类
{
公开静态启动()
{
FCGIfcgi
=
new
FCGI;
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
=
10
maxlength
=
10
value
=
"
$(op1)
"
>
<
selectname
=
"
op
"
>
<
optionvalue
=
"
+
"
$(isSelected
+
)
>
+
</
option
>
<
optionvalue
=
"
-
"
$(isSelected
-
)
>
-
</
option
>
<
optionvalue
=
"
*
"
$(isSelected
*
)
>
*
</
option
>
<
optionvalue
=
"
/
"
$(isSelected
/
)
>
/
</
option
>
</
select
>
<
inputtype
=
"
text
"
name
=
"
op2
"
size
=
10
maxlength
=
10
value
=
"
$(op2)
"
>
=
$(result)
<
p
><
inputtype
=
"
submit
"
value
=
"
计算
"
></
input
></
p
>
</
form
>
<
hr
></
hr
>
<
p
>
byliigo,
<
ahref
=
"
http://blog.csdn.net/liigo/
"
>
http:
//
blog.csdn.net/liigo/</a></p>
</
body
>
</
html
>
"
];
}
有机会将提供在线演示地址(欢迎推荐支持FastCGI的优秀的虚拟空间),现在只能先看图片了,下面是运行结果:

认为以上EF代码太多太复杂的想法可以休矣。我写这个程序时,花费了很多的笔墨,用于提高程序可操作性,其中包括:自带FORM,记忆上次提交的操作数和运算符,显示计算结果。如果仅仅只是显示计算结果的话,代码其实可以大大地简化:
引入fastcgi;
公开类启动类
{
公开静态启动()
{
FCGIfcgi
=
new
FCGI;
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环境变量