怀念VS2003--ASP.NET自己开发的曲线记忆法背单词软件

时光毁灭记忆、已成空白 提交于 2020-04-04 18:51:24

昨天微软发布了VS2010,回到天津后突然发现已经没有了当年VS2003发布时的那种激情。。。

VS2010发布之际,怀念一下VS2003,以下是使用VS2003开发的一个曲线背单词软件。

一、概述

    现在学习英语的朋友很多,而学习英语能否成功,所掌握的词汇量占很大的比重,虽然现在很多英语学校都在积极倡导“母语教学”,但是对于成年人来说,再以母语方式来掌握第二种语言,实在是太难了,所以无论从何种意义来讲,都应该有一定的词汇量。

    为了掌握更多的词汇量,有很多的办法,现在最流行的就是使用背单词软件,而目前这种背单词的软件也是琳琅满目,各式各样,在此不在一一列举。但是这些软件中的大部分都有一个共同的特点:越做越漂亮,词库越来越全,但是并没有根本意义上的改进,和看一本“大厚书”的感觉差不多,只是更费眼。

     中国人背单词与外国人有些不同的场景,他们记住后,随时生活在英语的环境中,随时可以用,基本就不会再忘掉,而我们中国人背完单词后,从早上睁开眼到晚上睡觉,一般都在讲中文,很少还会记得那些单词是什么意思,所以一个单词无论怎么背,总的来说都会成为狗熊掰棒子,再漂亮的软件,再大的词库,也无法从根本上解决这个问题,我相信很多朋友都会有同感。

    那么如何才算有效的记忆方式呢,最后我终于找到了一个叫做“艾宾浩斯记忆曲线记忆法”的宝典,何谓“艾宾浩斯记忆曲线记忆法”呢,简单的说,就是反复记忆,也就是说今天记完的单词,为了防止忘掉,明天需要再重复记忆一次,如此反复多次,直至记忆牢靠为止。这个方法不限于单词记忆,是一个通用的规则。但是面对大量的单词,我们如何去分类哪天应该记忆哪些呢,我试着找了一下类似的软件,但是没有发现,于是有了一个想法,就是自己写一个完全个性化的背单词软件来给自己使用!

二、设计

    和开发任何系统一样,在开始下手之前,我又面临着一个架构的选择,是用CS的还是用BS的结构呢?它们各有个的优势,如果用CS的,用着手感会好一些,但是推广不太方便,因为人们都需要安装一个程序,现在的垃圾软件太多了,我也不想去害人,最后决定使用BS方式,即浏览器的方式,这样以后如果谁想用,我只要发布一个网站,就可以完全共享了。

    为了更好的扩展性和考虑将来的容量,我的数据库采用了oracle10gExpress,这个数据库为Oracle公司免费提供,当然使用它有一定的限制,但是在以后需要的时候,可以随时地平滑切换到正式版。开发环境采用我所熟悉的asp.net。

    浏览器的方式,比较让人讨厌的一个问题就是刷屏,特别网速慢的时候,如果记忆一个单词就要刷一次屏,无论是速度还是手感,恐怕都难以让人接受,为此,设计的时候就考虑了AJAX这种方式,因为开发环境是VS2003,所以直接使用了XMLResponse的方式来处理。

三、实现

    下面我对程序的核心部分做一个说明,关于登录和注册等部分,就不再多讲了。

    为了进行单词的存放,还需要数据的存储,这个也比较简单,不在列出具体的字段。

    为了背单词,首先要有词库,这是我在给朋友推荐使用的时候,首先被问到的一个问题。对于词库的处理,我是这样做的:系统本身不提供任何词库,一个新用户注册后,他会发现他什么也不能背,要想开始学习,必须手工录入一部分单词,今天录入的,明天将会提示进行强制记忆,依此类推,很多人都觉得这种方式太麻烦了,为什么不直接提供词库呢,我认为,如果连输入几个单词都没有兴趣,干脆就不要背了,输入的同时,本身也就是进行了一次强化记忆,它的效果应该超过用眼看一次,而且这样积累下来的词库完全是个性化的,大家可以在实际的生活和学习中把自己遇到的需要掌握的单词记录下来供记忆,还可以分类别来记录,比如生活用品、交通工具、国家地理等。我设定的输入信息包括以下几项:

        l 单词

        l 词义

        l 例句

        l 标签

    有了标签,在后面的查询功能中还可以按它来查询,比较方便,也便于归类。

    根据自己的实际情况,每天可以录入20-50个单词,这样积累起来,自己的词汇量会不断的加大。

    单词录入后,就是每天的强化记忆,这里就会体现“曲线记忆法”,每个人的记忆曲线可能都会不尽相同,并且和每天进行记忆时的状态相关,我在用户注册的时候,会默认规定一个记忆曲线,1,2,3,4,6,8,12,16,32,64,96,128,180,240,分别表示每次记忆发生在第几天,每个人可以根据自己的实际需要进行调整。

    如上文所讲,为了在记忆的时候有一个比较好的效果,考虑IE方式本身的不足,所以采用了AJAX的思路,具体做法如下:

    在程序启动的初始化过程,把所有今天需要记忆的单词,全部一次性读入客户端,以javascript的形式存在,如下:

<SCRIPT LANGUAGE="JavaScript">

var xmlHttp;var wordCount = 100;

var counter = 0;

var percent = 0.0;

var ids = new Array(100);

var words = new Array(100);

var phonetics = new Array(100);

var descs = new Array(100);

var timess = new Array(100);

var labels = new Array(100);

ids[0] = 2039;

words[0] = 'mittens';

phonetics[0] = '';

descs[0] = '连指手套,露指手套';

labels[0] = '衣服';

timess[0] = '7';

ids[1] = 2040;

words[1] = 'scarf';

phonetics[1] = '';

descs[1] = '围巾';

labels[1] = '衣服';

timess[1] = '7';

ids[2] = 2041;

words[2] = 'slippers';

phonetics[2] = '';

descs[2] = '拖鞋';

labels[2] = '衣服';

timess[2] = '7';

……

    当然,这些script要由服务器端程序来自动生成。

    程序启动后,会自动调出第一个单词供记忆,如果觉得已经记住了,点击一个按钮,进入下一个单词。“进入下一个”这个功能是本系统一个实现地不错的地方,用了XmlResponse的技术,当点击它后,后台会自动调用相关的程序,首先把当前单词在系统中标记已经进行过记忆,然后调用javascript,把下一个需要记忆的单词取出来放在当前界面中,整个操作只需要与服务器交互100字节以下,速度非常快,并且因为使用了异步技术,所以不会出现刷屏的现象,使用效率非常好。这部分代码的核心部分如下:

function ViewNext(){

xmlHttp.open("GET","learned.aspx?id=" + ids[counter-1]);

xmlHttp.onreadystatechange = callback;

xmlHttp.send(null);

if (counter >= wordCount){

alert('您已经完成了今天的任务,恭喜');

document.getElementById("cmdOK").disabled='true'}

else{document.getElementById("txtWord").value = words[counter];

document.getElementById("txtExample").value = phonetics[counter];

document.getElementById("txtDesc").value = descs[counter];

document.getElementById("txtLabel").value = labels[counter];

document.getElementById("txtTimes").value = timess[counter];

counter++;

percent = Math.round(counter * 100 / wordCount,2) ;

document.getElementById("txtCurrent").value = percent;

}}

function callback()

{

if (xmlHttp.readyState == 4)

{

if (xmlHttp.status == 200)

{

var result = xmlHttp.responseText;

if (result.substr(0,2) == 'OK'){

}

else

{

alert('程序发生错误,请重新登录再试一次');

}

}

}

}

    以上基本上是XmlResponse标准写法,并且用了GET的方式来传输。目前仅考虑的是IE浏览器,没有做兼容性考虑。

    程序的第三产部分就是单词列表,这个是再简单不过了,我只用了一个GridView控件,简单的把数据显示出来就OK了。

四、总结

    以上只是对程序做了部分简要的说明,其实我想阐述的最重要的是一个思路,背单词的思路和程序实现思路,大家也可以参考这种方式开发更适合自己的系统。

这种记忆方式不在乎每天增加很多的新单词,而在于一定要坚持,希望我的努力对大家学习程序开发和学习英语有所帮助。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!