全系列目录:

承接上文。

我们采用自顶而下的方式开发,因此,今天就解决程序的主要架构: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()

  

最新文章

  1. javascript冒泡排序一些新实现
  2. Mysql Condition /Handler(异常处理)
  3. leetcode 125
  4. HDU 3791
  5. Hibernate Session 获取connection
  6. N对括号的合法组合
  7. MFC程序实现给对话框加入�背景图片
  8. sql 判断表、列、视图等是否存在
  9. BZOJ2440(全然平方数)二分+莫比乌斯容斥
  10. Opencv 330 如何裁剪图片中大的目标?
  11. 页面布局 ——图片自动按比例显示&&图片随外部div的增大而按比例增大
  12. 在nodejs里面是用类似配置文件的方法
  13. NET npoi 保存文件
  14. Oracle 12C -- 扩展varchar2、nvarchar2、和raw数据类型的大小限制
  15. drupal drush 在windows下的安装和配置
  16. 【Eclipse】Ubuntu 下菜单栏失效了,怎么办?(已解决)
  17. Maven最佳实践 划分模块 配置多模块项目 pom modules
  18. C++ 基本的输入输出
  19. 用ab进行POST,GET压力测试,且定义header及json的内容
  20. iOS 多线程之 GCD 的基本使用

热门文章

  1. c#Enum的用法
  2. [Android学习笔记]View的draw过程学习
  3. robots.txt禁止搜索引擎收录
  4. MVVM Light须要注意的10个问题
  5. IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置
  6. RSA加密解密和读取公钥、私钥
  7. hdoj 1258 SUM IT UP
  8. XHTML学习笔记
  9. C#之异步编程
  10. 公司需求知识自学-Oracle的Package的作用及用法