需求介绍
整个学校英语网上考试,下图中是学生答题的详细情况,包括题号、标准答案、答题学生学号,学生答题情况,每个题具体得分。该系统设计为学生每选择一题后,便在数据库中自动判出得分来(在数据库中的字段为Fraction)。图中的题型为选词填空,系统中CorrectAnswer是标准答案,每一空的答案用“#”来分割。
但是现在的情况是,系统中标准答案错了,导致所有学生判分都不是正确的。那么如何解决这个问题呢?
------------------------------------------------------------------------------------------------------
问题分析
给每个空判分,一下子全部判出分来不容易实现。可以先从第一题开始判分,然后逐个判分。由于问题相对比较复杂,我们从局部分割来看这个问题。如下图所示。
------------------------------------------------------------------------------------------------------
难点分析
1、如何得到“#”的位置?
2、得到“#”的位置后,如何获取第一个答案的值?
3、如何批量给所有学生判分?
------------------------------------------------------------------------------------------------------
项目实践
Step1:
先执行一个函数:/*
方法很多,这里简单写一个
返回@find在@str中第(@n)次出现的位置。没有第(@n)次返回0。
*/
create
function
fn_find(@find
varchar
(8000), @str
varchar
(8000), @n
smallint
)
returns
int
as
begin
if @n < 1
return
(0)
declare
@start
smallint
, @
count
smallint
, @
index
smallint
, @len
smallint
set
@
index
= charindex(@find, @str)
if @
index
= 0
return
(0)
else
select
@
count
= 1, @len = len(@find)
while @
index
> 0
and
@
count
< @n
begin
set
@start = @
index
+ @len
select
@
index
= charindex(@find, @str, @start), @
count
= @
count
+ 1
end
if @
count
< @n
set
@
index
= 0
return
(@
index
)
end
go
Step2:
Step3:
----------------------------------------------------------------------------------------------------------------------------------
思考总结
1、学会把复杂的问题分割成简单的问题,实现单点突破。
2、积极主动。不管是在公司还是学校,要多多承担一些。在生活的方方面面要学会先付出。
3、在管理上,遇事要冷静。善于调动起团队每个人的积极性,要让每个人在团队中能深刻感受到巨大的收获。