中文随感003. 无心剑中文随感《程序人生》

程序人生

写文章讲究义理和词章,义理为骨,词章为肉,一篇文章有义理而缺乏文采,当然是不能打动人的,孔子好像说过:言而无文,行之不远,足见文采对于一篇文章的重要性。反之,一篇文章有文采而缺乏义理,则徒有其表,华而不实,又岂能震撼人的灵魂。据我的编程体会,编写程序也与写文章有相通之处,义理相当于程序的功能,是整个程序的最核心和关键的部分,也就是说你这个程序能够帮助用户解决哪方面的实际问题;词章相当于程序的用户界面,这是程序能否受用户欢迎和喜欢的很重要的一个因素,界面友好,操作简单之程序容易被用户接受。一个真正的编程爱好者会反复修改完善一个自己编写的应用系统,包括功能的增强和完善,希望自己的应用系统能够帮助用户更有效地处理实际工作中面临的问题,而且会从审美角度反复修改用户界面,力求操作方便,外形美观,就像写文章需要谋篇布局、遣词造句一样,这是一个精益求精追求完美的过程,永远都会发现不足之处,永远都在改进之中,好像没有完成时,永远都未完成,等待自己去不断地完善它,这几乎成了我的一种生存习惯,追求完美甚于对实际功利的追求,我编写程序只为自己从中体会到创造的快乐,至于能否帮助我挣到更多的实惠,我是不会考虑太多的。

程序清单上那一行行、一页页的代码,就像一串串欢快优美的音符,凝集着程序设计者无穷的智慧和征服自然的力量。每一个电脑爱好者无不为它的迷人色彩所吸引。程序设计吸引聪明人为之付出一生时光。

自从去年10月份调到机房工作后,除了完成机房的日常维护工作外,很幸运有机会与胡老师合作,为计财科开发学生收费管理系统,要知道这可是我第一次参加实际的应用系统的研制开发工作哦,因此我投入特别多的时间和热情,整个项目研制工作是这样分工的,胡老师负责总体结构设计,而我主要负责具体的程序设计,两人配合得很默契,工作进展地相当顺利。多少个日夜的辛勤工作终于结束了,所有的汗水和心血都凝聚在那近万行程序里面,虽然这个系统的功能并不复杂,但对于我的意义却很大,它标志着我在程序设计方面迈出了可喜的第一步,这次系统的开发成功极大地增强了我的信心,检验了我在数据库程序设计方面的能力水平,我在这个研制开发工作中得到了很大的锻炼和提高,我会继续努力,争取今后能编制出更好的应用系统。

很庆幸,该系统在今年四月份通过市科委的鉴定,获得科技进步三等奖,这对我的辛勤工作算是一个肯定,所以我感到那么多个日日夜夜的奋战得到了应有的回报。

写于2000年1月。


从去年年底到今年年初的几个月,沉迷于编写一个英语学习软件。最开始命名为《英语学习助手》,后来增加了一些娱乐功能,因此改名为《快乐学英语》。编写软件虽然很辛苦,但也苦中有乐。编完之后,英语系的宋老师觉得蛮好的,准备拿去用作辅助教学手段,我听了,也挺高兴,反正自己凭着兴趣做出的东西,得到别人的认可。

一、开发缘由

目前,英语学习软件很多,各有所长。但是每种软件都有局限性,根据笔者学习英语的需要,广泛吸取各类软件的优点,尽量避免其局限性,把词汇、句子和文章三个层次结合起来,注重知识性和趣味性的结合,编写出该软件。

二、主要功能

(一)词汇天地

1、单词精灵

(1)单词管理(增删改、导入导出)

(2)词库维护

(3)单词查找

(4)进度图例

(5)三种模式:迷你模式、椭圆模式、屏保模式

2、分类词汇

(1)词库管理(增删改、导入导出)

(2)词汇查找

(3)全屏模式

3、单词测验

(1)出错单词

(2)测验成绩

(3)测验结果

4、单项选择——题库管理(增删改)

(二)句子天地

1、英文句子

(1)选择句子库

(2)句子查找

(3)句库管理(增删改、导入导出)

(4)全屏模式

(5)屏保模式

2、句子测验

(1)出错句子

(3)测验结果

(三)文章天地

1、英语文章

(1)文章查找

(2)文章库管理(增删改、播放、导入导出)

2、阅读理解——题库管理(增删改)

(四)实用工具

1、资料管家

(1)资料查找

(2)资料库管理(增删改、导入导出)

2、英文朗读

3、岁月留影——影集库管理

(五)休闲娱乐

1、点歌系统

(1)选择歌曲库

(2)歌曲管理(增删改、播放)

2、MIDI演奏——句子库管理

3、填字游戏——游戏结果

(六)系统设置

1、系统配色

2、数据备份

3、数据恢复

4、设置口令

中文随感003. 无心剑中文随感《程序人生》_第1张图片
图片发自App


2004年11月25日修改程序情况

看到小温编写的《职称英语辅导软件》满有意思的,只是觉得其中单词那个功能模块不够完善,于是,我出于想增强其单词模块功能的动机,开始着手编写"单词精灵"软件,包含每个单词的单词,注释和例句。有一些简单的功能:添加生词、自动发音,自动浏览,隐藏注释,简洁模式,还能进行词库管理,即进行词条的增加、删除和修改操作。当时,编写的软件很粗糙,也没有参考同类型软件,只是按照自己的想法在编写软件,有点闭门造车的味道。

2004年11月28日修改程序情况

根据自己学习英语的需要,我觉得光有单词还不够,还得需要有英语文章才行,考研不是要考作文吗?于是,我很自然增加了一个模块"作文",有三个字段:标题,正文和注释。但是还不能进行增删改。此时,仅仅有这个模块,相当的粗糙,不过也是日后扩展其他功能的一个很好的起点。

2005年元月7日修改程序情况

今天修改程序,主要有四点:

1、不再使用TTS4.0的TextToSpeech控件来进行文字的朗读,采用另一种方式,引用TTS5.0的Microsoft Speech Object Library. 这样需要定义一个SPVoice对象eVoice,然后利用其属性和方法就可以很方便的朗读文字。而且还可以选择由Mary, Mike或者Sam来朗读,eVoice的Rate属性控制朗读速度,Volume属性控制朗读音量。

2、英文句子模块,英语文章,资料管家,点歌系统,其搜索功能得到增强,而且能高亮度显示"关键字"。另外,英文句子模块中,既可以朗读英文,也可以朗读中文。英文朗读器模块也得到改进。

3、英语文章,资料管家,点歌系统,"正文"或者"歌词"文本框可以随意设置其字体和颜色。并且设置的字体和颜色能保存,下次进入将按照上次的设置来显示文字。

4、单词精灵模块下的词汇总表和词库维护提供了"关键字"搜索功能。涉及"单词"、"英文注释"、"中文注释"、"例句"、"记忆方法"、"同义词"等文本框,并且要高亮度显示关键字。(后来我做了一些修改)

2005年元月10日修改程序情况

1、英语文章和点歌系统模块,不再显示MMC和RealPlayer控件,而代之以三个命令按钮:播放、暂停和停止。这样做,使得界面色彩保持一致。

2、程序中朗读者的选择,考虑到WinXP在"语音"设置的默认朗读者。

3、界面的色彩做了一些修改。

4、英语句子模块:可以选择朗读者:Mary, Mike或Sam。

5、把英语文章、资料管家、英文句子和点歌系统的修改模块和删除模块的小问题作了处理。主要是当某记录的类别或标题作了修改后,记录的位置要发生变化,程序始终要显示该条记录,无论这条记录跑到何处。

6、由于在用SQL语句添加和修改记录时,要把英文引号转化成中文引号才行,因此,我编写了两个转化函数:'编写一个函数,能把字符串里的半角单引号全部更改成全角单引号;'编写一个函数,能把字符串里的全角单引号全部更改成半角单引号。这样,无论增删改,还是查找操作,就要涉及到单引号的半角与全角之间的转化问题,增加了编程的复杂度。

2005年元月12日修改程序情况

1、能够自动调整网格的第一列宽度,刚好能显示"类别"字段。采用了一个小小的技巧才解决的。

2、允许不同类别里添加相同标题的文章、资料、歌曲、句子。例如,在"点歌系统"里,梅艳芳精选集里有了"亲密爱人"这首歌,并不妨碍高胜美精选集里也有"亲密爱人"这首歌。

3、音频文件名=类别名_歌名(标题).mp3(wma, avi, mpg, rm)。

2005年元月15日修改程序情况

1、"单词精灵"模块的界面作了较大的改动,代码也作了很大的改动,可以进行拼写测试,根据测试情况,来确定单词的学习层次:掌握、了解、生词。当然,还可以把层次分得更细:1级、2级、……

2、"英文句子"模块,添加了"编号"字段,代码作了一些改动,操作稍微方便些。所有的数据都因此更改,工作量比较大。

3、"英语文章"模块,添加了"编号"字段,代码作了一些改动,操作稍微方便些。所有的数据都因此更改,工作量比较大。涉及音频文件的问题,其中"单引号"的全角与半角之间的转化很麻烦。

2005年元月16日修改程序情况

1、修改了"词库维护"与"简洁模式"中的小问题,保证它们与"单词精灵"的单词同步。

2、单词测验,提供了两种方式

(1)拼写测验,根据单词的发音正确拼写出单词;这在单词精灵模块中实现了,而且可以按照"顺序"、"反序"、"随机"三种方向进行测验或者进行浏览,这样要比原先的仅仅浏览要有趣点,而且我也开始喜欢用这个功能。

(2)给出单词,选择其汉语意思;给出汉语意思,选择单词。

3、从去年11月底开始编写这个程序,整个人都陷入了一种迷乱的情绪中,我被编程的细节所淹没,尽管我知道设计比编码更重要,也更有价值,但我控制不住自己对编码的迷恋,或许,内心有一种追求完美的倾向,不能容忍程序出现错误,只要发现不正确的或不满意的,一定会花费功夫去改,直到自己心满意足,可是第二天又发现问题,永无止境的。我的心都被耗费的疲惫不堪。

2005年元月19日程序修改情况

1、界面修改,能够统一设置系统的背景色,前景色,以及按钮的背景色。用户可以选择自己喜欢的配色方案。

2、增强"单词测验"模块的功能,选择词库的基础上还可以按单词的级别筛选,然后在分组进行测试;根据测试情况来改变单词的级别,如果错误,级别降低1;如果正确,级别提高1。这和"单词精灵"模块中的拼写测验相结合,即考察用户对单词的拼写,也考察用户对单词意思的理解,可谓双管齐下,让用户收到更好的学习效果。

2005年元月21日程序修改情况

1、"单词精灵"模块,增加了如下功能:

(1)初始化学习进度

(2)学习进度图例

(3)词库维护功能:用户可以增删改词库

2、"英语文章"、"资料管家"的全屏功能得到增强。双击"正文"文本框,将会全屏显示,而且可以在全屏窗口中进行图文编排,保存到data\article或者data\DataKeeper目录下,格式是富文本格式,即rtf格式。

2005年元月25日程序修改情况

此次考研好像也没有妨碍程序的编写,那两天,没有复习,倒是在不断地修改程序。

测试了一些主要模块,修正了很多错误。增加了句子测验模块。

(1)单词精灵:可以动态显示当前词库每个学习层次单词的数量,当您进行拼写练习时,每个单词的学习层次都会根据您的拼写正确或错误发生改变,此时,系统会立即重新统计每个学习层次的单词数量,让用户随时了解自己的学习进度。

(2)单词测验:增加了一个新功能,用户能根据实际需要设置每组单词的数量,假定每组30个,如果当前测验词库的总单词数是6000,那么测验组数=6000/30=20;如果当前测验词库没有单词,那么测验组数=0;如果当前测验词库的总单词数不能被30整除,例如55,那么测验组数=int(55/30)+1=2。

下一步,准备考虑安全性问题。有两个层次的安全:数据安全和程序安全。

软件的编写凝聚了我很多的心血,希望我能进一步完善,发布后得到用户的肯定和喜欢。

2005年元月26日程序修改情况

昨晚,做了一个扩充工作,英文句子、英语文章、句子测验、资料管家、点歌系统,都各自能提供了9个不同的库:9个资料库,9个句子库,9个歌曲库和9个文章库。最开始,例如针对歌曲库,我准备用一个窗体来分别访问9个歌曲库,但这样存在一个问题,如果用户要同时访问几个歌曲库,就要出问题,因此,我改变了处理方法,9个歌曲库分别对应9个窗体,尽管这些窗体界面和功能完全相同,但我做了9个,这样,9个窗体可以不相互干扰地独立工作,即表明用户可以同时打开多个歌曲库进行查看。同理,我也处理另外几个模块的类似问题。

在主界面上,单击"英文句子"、"句子测验"、"英语文章"、"资料管家"、"点歌系统",都会先弹出一个选择"库"的对话框,用户可以根据需要打开某个"库"进行操作。

做了一个数据库的规范操作,给每个词库的单词字段增加一个索引,不允许重复。还有文章库、资料库、歌曲库,按类别和标题两个字段建立组合的主索引,也是预防添加重复记录,其实,我在程序里也通过编写代码防止了这个问题,现在是双重的控制,一方面是数据库自身的完整性控制,另一方面也在程序里通过代码保证数据的完整性。

2005年元月27日程序修改情况

1、在"单词管理"模块里,增加"导入单词"和"导出单词"两个很有用的小功能。今天准备把这两个功能的代码编写出来。

2、单词精灵和单词测验两个模块的数据访问有了改动。

原来:<具体词库> inner join<词汇总表>

现在:<具体词库> left join<词汇总表>

两者有很大的不同呢!听我说明,如果采用内部连接,那么最终能访问的单词必然是<具体词库>和<词汇总表>里都共有的单词;如果采用左连接,那么最终访问的单词是<具体词库>的全部单词,哪怕该单词在<词汇总表>里不存在。

3、现在该软件不是能同时访问9个不同的资料库吗?可是所有的资料库全部只能显示文本资料,如果资料里有图片,即我们通常说的那种图文资料,本软件原先的做法是另外给每条资料链接一个富文本格式的文件,而富文本文件里允许图文混排,当然这是一种解决问题的办法,但是我现在有另外一种考虑,我想把第9个资料库增加一个字段"图片",这样每条资料都允许插入一张图片,不是很好吗?今天准备把这个工作完成,不知道行不行。

一个关于数据库设计的问题

最开始,单词精灵和单词测验两个模块所用到的词库全部是各自独立的,即每个词库都是相同的多个字段:单词、音标、英文注释、中文注释、学习层次、记忆方法和相关词,这样必然会造成极大的数据冗余,后来,我设置了一个词汇总表,包含了除学习层次在外的全部字段,而每个词库只含有两个字段:单词和学习层次,这样每次打开一个词库,就通过数据库的连接操作,从词汇总表里去获得相应的音标、注释、例句、相关词及记忆方法,当然第二种方法可以节省很多存储空间,但是也存在一些不好的地方,按理说,每个词库,特别是专业词库,它的单词往往有特殊的专业含义,现在公用词汇总表的注释,就显得不是很适当。真的有点难办,现在我也不想再去修改了,否则程序也要跟着做很大的变动。

修改数据库的结构

考虑再三,还是决定每个词库拥有自己独立的注释(英汉注释)字段,而不共用词汇总表的,当然,另外几个字段,如音标、例句、相关词和记忆方法都是每个词库共用词汇总表的。这样处理之后,就更便于在"单词管理"模块中使用单词导入功能。建立单词列表文件是很简单的事情,一个文本文件,单行是单词,双行是注释,利用记事本建立,然后利用导入功能,一下就OK了!

现在,我的主要工作,不再是对程序作大的修改,而是创建词库,这个工作量非常大,但必须得做,否则那个单词精灵模块就是一个空架子,再累也要坚持!

便捷的单词导入与导出功能

经过努力,终于完成了单词的导入与导出功能。导入与导出是互逆的,可以将导出的单词列表文件导入另一个词库,这样可以极大地提高创建词库的工作效率。

1、导出:可以导出当前词库的全部单词,也可以利用"搜索"功能筛选符合条件的单词,然后再导出。

2、导入:提供了导入单词列表的预览效果,便于用户检查,看单词列表文件的格式是否符合要求,而且还提供了定位功能和编辑功能,可以很快发现问题并给予纠正,这个功能令我很满意。

凌晨的欣慰

从昨晚10点到今早凌晨2点,我终于完成了句子的导入和导出,这样,就可以极大地提高我创建句子库的速度。单词的导入和导出,我在其他英语学习类软件中看到过,而句子的导入和导出,不会是我首创吧,不管怎样,我为自己的这个工作感到欣慰,很困了,得去休息了。

2005年2月2日程序修改情况

1、修改了单词精灵中的一个小错误。进入全屏模式,如果发现学习方式是"自动浏览",就把它改成"手动浏览"才行,否则每个单词要重复发音。

2、英文句子、英语文章、资料管家等模块,都有改动。由于有9个类似窗体,先只改第一个窗体,等第一个定稿之后,再生成另外8个类似窗体,免得反复。

3、昨天,导入英语900句时,发现下载的资料中,缺少432句,然后我在另一个软件里找到432句,结果发现432句与384句相同,很奇怪,我那本书找不到了,要不然就可以确认两个句子究竟该如何。

4、我昨天完成本软件的系统功能结构图的绘制工作,以及数据库设计的所有表格。

5、目前,我已经建立了几个词库,和几个句子库,不过,以后的工作还很多很累。

6、本软件提供了单词、句子层次的测验,都是两种方式的测验:一个是拼写测验,一个是英汉互译的测验,但是目前还未提供文章层次的测验,未免觉得有些遗憾,因此,我决定增加一个阅读理解模块,里面包含两个方面的内容,一个是题库管理,另一个是阅读理解的训练,可能需要几天才能完成这个工作。

2005年2月6日程序修改情况

增加了资料管家和英语文章模块的导入与导出功能。

提供了两点规整功能:一个是编号规范功能,当某个类别的记录被删除时,会导致该类别的编号不连续,系统会自动规整;添加新记录时,系统会对正文进行规整,每个段落首行空两个汉字,而且段落之间有一个空白行。因此,添加新记录的正文无须在乎格式,只管把内容放进来,系统会规整其格式,减少用户在格式方面的工作量,这是本软件体贴用户需要的一个表现。

阅读理解题库模块采用不同的表操作

这次所有涉及数据表操作的模块,我全部采用嵌入式的SQL语句来完成,例如,删除用delete,更新用update,插入用insert into,这样增加了一个问题,要用半角单引号做每个字符型字段常量的定界符,于是,如果常量里本来有半角单引号,在使用update或insert into语句时就会出错,逼得我编写两个函数QuoteETC和QuoteCTE来专门负责把字符串中的半角单引号与全角单引号进行相互转化,引进这两个函数,的确能解决单引号问题,同时极大增加了编程工作量,难度也随着增加。

对于阅读理解模块,我准备直接用Data控件记录集Recordset提供的表操作方法AddNew,Edit,delete来进行,这样做,可以避免单引号的半角全角转换问题。

统统改用AddNew,Edit,delete方法

所有涉及表操作的模块中使用SQL语句的,我准备改用Data.Recordset的AddNew,Edit,delete方法,由于在使用Edit和delete方法之前,要先定位当前记录,因为Data1.RecordsetType=1或2(动态集或者快照集),只能用FindFirst方法,而不能用Seek方法,这样,单引号的全角和半角问题依然存在,我编写的那两个函数,可以用于"类别"和"标题"两个字段,而不必用于"正文"字段。

一个难题

编写个人影集模块,遇到一个很难克服的困难,用ADODB的记录集对象rs的find方法无法定位,怎么办呢?原来那个筛选条件不能是复合条件。

这个问题已经圆满解决。不用Find方法,而是直接设置ADODB的RecordSoursce属性,在select查询语句中可以使用复合条件。

最近的进展情况

这段时间,把程序的界面作了一些美化和调整。引入TreeView控件,英文句子、英语文章、资料管家和岁月留影等模块实现了大纲视图,美观多了。

增加了一个分类词汇模块、单项选择模块、阅读理解模块。

接近尾声

软件的编写,接近尾声,我要做的工作,有两条,一个是不断地补充资料,第二个是写编写软件的心得体会,总结一下这三个月中我在编写程序中的经验和教训,为今后编写更好的程序积累一些素材。

既然这个软件是帮助用户学习英语,效果如何,我得自己亲自试验,现在,我要利用自己编写的软件来帮助自己更好学习英语,从单词、句子和篇章三个层次来加强英语的学习。

写于2004年12月~2005年2月。

你可能感兴趣的:(中文随感003. 无心剑中文随感《程序人生》)