GithubHelp home page GithubHelp logo

aiueo's Introduction

日语五十音学习软件 -- 设计文档

by 林绍钦 卡片记忆单词法的简易程序模拟。 核心**:随机产生五十音进行辨识

需求分析

功能需求

在大二下的日语选修课中修读了基础日语,需要在短时间内尽可能的熟练日语假名。虽然我之前接触过假名,但没有高效、完整的记忆过,存在许多漏洞:例如对不常用的假名更陌生对片假名更加陌生根据发音默写假名不如读出假名熟练。

这几个问题在语言学习上是共通的,根据以往的学习经验,我想起了卡片记忆法,原理就是通过将固定的词库记在一叠卡片上,随机的翻阅、记忆。这一方法用程序模拟能实现更灵活的功能,于是有了这一款简易的程序。

设计与实现限制:

  • 运行环境限制: 在Windows、Mac等桌面操作系统中运行,数据保存在程序数据库中直接调用,在本地运行,不需要联网。

  • 设计工具限制 使用Python进行编写,通过PyInstaller进行打包。数据仅仅涉及字符,可以直接使用Python自带数据结构保存在程序源代码中。外包库涉及简易PythonGUI编写库tkinter

软件与硬件或其它外部系统接口:

  • 人机接口:
    • 文本框:显示发音、假名
    • 按钮:使用若干按钮切换不同的显示模式

性能需求

鉴于小程序功能相当简易,程序应尽可能实现迅速地开启与关闭,占用小,随开随用。

设计路线

结构设计:定义软件系统各主要部件之间的关系。

软件主体较少(百行左右),因此可以整合到同一个py文件。下面是源代码文件的模块结构,以及互相调用的关系。 程序首先利用tkinter扩展库生成了python-GUI对象;然后基于此对象的方法生成文本框、按钮等控件;接着编写逻辑函数,读取对应数据,处理为显示的数据,并且和控件绑定;最后在程序中循环运行窗口监听按钮操作,调用函数,修改文本显示内容。

aiueo.py
├──{} tkinter     ---library manager
├──[] variable    ---data initialize
│   ├── romaji
│   └── ...
├──{} botton      ---fuction defination
│   ├── botton1
│   └── ...
└──() mainloop    ---program entry
#library manager 库文件导入
import tkinter

#data initialize 全局变量定义
romaji = ...

#fuction defination 函数定义,程序逻辑编写
def botton1():
    ...

#program entry 程序入口,程序窗口启动
#调用函数,调用库文件
if __name__ == "__main__":
    ...
    windows.mainloop() 

数据设计:将模型转换成数据结构的定义。

程序涉及到的数据量较小,下图基本包含了五十音学习的所有信息,包含平假名、片假名以及对应的发音。现有Unicode编码平假名、片假名储存。发音则以英文字符储存(日语习惯称为罗马字)。

将图片信息存入字符串与数组,数据结构如下:

#平假名字符串
hiragana = """あいうえお
           かきくけこ
           さしすせそ
           たちつてと
           なにぬねの
           はひふへほ
           まみむめも
           やゆよ
           らりるれろ
           わをん"""
#片假名字符串
katakana = """アイウエオ
            カキクケコ
            サシスセソ
            タチツテト
            ナニヌネノ
            ハヒフヘホ
            マミムメモ
            ヤユヨ
            ラリルレロ
            ワヲン"""
#发音数组
romaji = ['a','i','u','e','o',
          'ka','ki','ku','ke','ko',
          'sa','si','su','se','so',
          'ta','chi','tsu','te','to',
          'na','ni','nu','ne','no',
          'ha','hi','hu','he','ho',
          'ma','mi','mu','me','mo',
          'ya','yu','yo',
          'ra','ri','ru','re','ro',
          'wa','wo','n']

接口设计:

软件图形界面根据常用的使用场景进行分析,最终界面中确定了两个文本框和四个按键。

  • 控件设计:控件以图形界面展示的控件对应从上往下分别是
    • 文本框一:显示发音
    • 文本框二:显示假名
    • 按键一(生成!):生成一个假名的罗马字表示
    • 按键二(答案?):显示答案
    • 按键三(学习中...):切换学习状态
      1. 学习中)状态下会始终显示罗马音和假名
      2. 显示发音)状态下只显示罗马音,按下(答案?)显示答案
      3. 显示假名)状态下只显示假名,按下(答案?)显示答案
    • 按键四(あ+ア...):切换假名显示
      1. (あ+ア)显示平假名和片假名
      2. ()显示片假名
      3. ()显示平假名 @import "image2.png"
  • 控件代码定义 控件定义使用tkinter规范,首先定义GUI窗口对象windows,然后使用label定义函数tkinter.Label定义两个文本框,使用button定义函数tkinter.Button定义四个按钮,按钮还要绑定四个逻辑函数botton1 botton2 botton3 botton4
#窗口初始化
windows = tkinter.Tk()
#文本框一初始化
l = tkinter.Label(textvariable = var,...)
l2 = tkinter.Label(textvariable = var2,...)
#文本框一初始化
b = tkinter.Button(text = '生成!', command=botton1,...)
b2 = tkinter.Button(text = "答案?", command=botton2,...)
b3 = tkinter.Button(textvariable = var3, command=botton3, ...)
b4 = tkinter.Button(textvariable = var4, command=botton4, ...)

过程设计:

学习过程可以抽象成不断循环随机生成假名-发音对的过程,通过按键一调用函数botton1(),生成指定范围内的随机数,可以根据随机数打印假名和发音。同时,学习和测试的需求不同,通过按键二调用函数botton2(),可以强制显示假名-发音对的所有内容,实现显示答案的效果。最后,根据需求需要定制显示的状态,通过按钮三调用botton3()切换(学习中)(显示发音)(显示假名)三个状态,通过按键四调用botton4()切换(あ+ア)显示平假名和片假名、()显示片假名、()显示平假名三个状态。

#botton1 按键一:生成一个假名的罗马字表示
def botton1():
    pass
    #生成随机数,根据随机数获取假名和发音数据
    #根据显示状态刷新文本框显示

#botton2 按键二:显示答案
def botton2():
    pass
    #强制文本框显示所有内容

#botton3 按键三:切换学习状态
def botton3():
    pass
    #修改学习状态变量的值
    #根据状态刷新文本框显示

#botton4 按键四:切换假名显示
def botton4():
    pass
    #修改显示状态变量的值
    #根据状态刷新文本框显示

使用流程实例

  1. 首先不断点击(生成!)按键,可以随机浏览发音与对应的平假名、片假名。
  2. 初步记忆后开始自测,点击(学习中)按钮,这时会切换到(显示发音),此时是对假名的测试,点击(生成!)生成新的发音,自行回忆发音对应的假名,如果对答案把握可以继续点击(生成!),没有把握便可以点击(答案?)显示答案。
  3. 根据发音记忆假名记忆完毕后,可以根据假名记忆发音,点击切换到(显示假名)状态,重复上面的记忆流程。
  4. 同样,如果只需要记忆片假名,可以点击(あ+ア)切换假名显示,继续重复上面的记忆流程。
  5. 不断重复直到基本熟练所有的假名及对应发音。

源代码

@import ".\code\aiueo_win.py"

aiueo's People

Contributors

steven147 avatar

Stargazers

JHM avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.