【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)

全系列目录:

承接上文。

我们采用自顶而下的方式开发,因此,今天就解决程序的主要架构:main.py的开发。

 

自顶而下的方式,意味着我们需要假设已经开发好了两个模块:一个是LocalDB,一个是WebDict。LocalDB存储已经在网上查过的单词,而WebDict则在新词出现时,从网上获取回相应的资料。

比如我要查process这个单词的意思,第一次是由WebDict模块返回的意思,但第二次查process就是由LocalDB完成了。

 

然后定义输入输出。鉴于模块和main架构之间已经解偶了,因此,就不着急进行gui的开发,第一个版本先采用CLI的方式。输入单词直接查询,输入-1退出,输入#号就显示所有难词。所谓难词,如上文所说,由LocalDB定义,目前是重复查过4次的单词。

 

在数据库中,有一个word table,列名分别是:word、explain、net_explain、sentence、times。分别是单词、释义、网络释义、例句和查询次数。

 

LocalDB开放的接口如下:

0、get_hard_word:返回所有难词的列表。

1、get_eng_word_from_db:返回在本地数据库中保存的单词

2、insert_word_to_db:将单词插入本地数据库中。

3、update_word_times:更新某个单词的查询次数

4、turn_off_db:关闭本地数据库

 

WebDict开放的接口如下:

0、get_dict_data:从网络获取相应单词的所需信息。(释义、网络释义、例句)

 

下面是全部代码:

# -*- coding:utf-8 -*-
__author__ = 'wmydx'

from LocalDB import LocalDIct
from WebDict import getResponse

def show_result(ans):
    names = ['word', 'explain', 'net_explain', 'sentence', 'times']
    for item in ans:
        for key in names:
            print key + ': \n' + str(item[key])
        if item['times'] > 1:
            print 'CAREFUL!! this is a hard word!!'

def show_hard_word(ans):
    for item in ans:
        print item['word'] + '\n'

def main():
    db = LocalDIct.LocalDict()
    response = getResponse.GetResponse()
    input_word = ''
    try:
        while True:
            input_word = raw_input("plz input words: ")
            if input_word == str(-1):
                break
            if input_word == '#':
                ans = db.get_hard_word()
                show_hard_word(ans)
            else:
                ans = db.get_eng_word_from_db(input_word)
                if not ans:
                    print 'here'
                    ans = response.get_dict_data(input_word)
                    for item in ans:
                        db.insert_word_to_db(item, 'words')
                else:
                    for item in ans:
                        item['times'] += 1
                        db.update_word_times(item)
                        if db.is_a_hard_word(item):
                            db.insert_word_to_db(item, 'hard')
                show_result(ans)
        db.turn_off_db()
        print 'END.'
    except:
        db.turn_off_db()

main()

  

posted on 2015-02-22 12:04  shadowmydx'sLab  阅读(419)  评论(0编辑  收藏  举报

导航