日志总目录:
面向对象课程设计日志(一)——题目分析+编程前的准备
面向对象课程设计日志(二)——相关类的设计+单词库建立
面向对象课程设计日志(三)——主界面设计
面向对象课程设计日志(四)——登录界面+注册界面
面向对象课程设计日志(五)——计划设定窗口
面向对象课程设计日志(六)——学习新单词+复习测试+生词表
面向对象课程设计日志(七)——查看历史记录
面向对象课程设计日志(八)——总结+感谢
目录:
-
课程题目:
-
我爱记单词系统
我爱记单词是一款帮助大家记忆英文单词的软件,软件功能如下:
- 单词库导入
- 单词信息包括:单词编号、单词英文、单词中文解释等基本信息。
- 提供文件方式存储的单词列表,从文件读入单词,建立单词库。
- 学习计划设置
- 设置每天需要记忆的单词数,根据总的单词数,计算出计划完成的天数。
- 设置单词学习的顺序,按照词表顺序或者随机产生每天需学习的单词。
- 单词学习
- 学习新单词
-
学习时,每个单词给出中英文对照(或者只给出英文,中文先隐藏起来,给出选择是否给出中文对照),一个一个的浏览,直到当天计划完成。在浏览单词的过程中,如果发现单词没有办法一次记住,添加到生词表中。
- 其中涉及到已记忆单词表,未记忆单词表和生词表。将每天已经学习过的单词添加到已记忆单词表中,并从整个单词表中删除,形成未记忆单词表。记忆过程中个人需要重点记忆的单词添加到生词表中。
- 复习生词表
- 按照天或者整个浏览生词表。
- 扩展功能:
- 支持单词库的选择。
- 支持系统退出时,将已记忆单词表,未记忆单词表和生词表记录到文件中。
- 显示打卡记录。
- 图示:
-
-
设计思路:
- 尝试使用图形用户界面完成程序,将单词库储存在MySQL数据库中便于操作、整理;
- 数据库设计:
- “userinfo”库储存已注册的用户信息,包括用户名、密码、当前单词计划名、每日记忆单词数、历史记录;user的名字使用unique约束,保证不重名;
- 每个用户有三张表格,以用户名命名的表格存放用户的打卡日期,以用户名+“finish”(如abcfinish)命名的表格存放用户已记忆的单词,以用户名+“newword”(如abcnewword)命名的表格存放用户生词表;
- “wordlist”数据库存放用户从文件中导入的单词表信息;
- 图形用户界面框架:
- “Opening”为用户登陆界面,“SignIn”为用户注册界面,“MainForm”为显示个人信息和进行主要操作的界面(程序的主入口Main函数在这里);
- “SetPlan”为用户设置当前计划并导入的界面,“Study”为用户学习新单词的界面,“Review”为用户学习新单词后检测的界面,“RorL”为用户选择学习模式(顺序学习或随机学习,汉译英检测或英译汉检测),“Study1”为用户学习生词表的界面,“History”为用户查询历史记录的界面。
-
程序设计前的准备:
- 编程环境的准备:使用VS2019+.netFramework环境
-
使用MySQL 8.21
-
构建Windows form架构
- 选择CLR空项目
- 使用.netFramework框架
- 项目属性-->连接器-->子系统-->选窗口
- 连接器-->高级-->入口-->Main-->确定保存设置(即Main方法作为程序入口)
- 右键项目名称-->添加新建项-->C++ UI Windows窗体
- 窗体cpp文件中添加方法Main如下:
-
#include"MyForm.h" using namespace Project2; [STAThread] void Main(array<String^>^ args) { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); MyForm form; Application::Run(% form); }
- 保存即可正常打开窗体文件了
- 双击窗口头文件打开窗体设计器进行设计
- 功能可以在对象浏览器中查找 System::Windows::Forms 的成员了解其用法进行使用(可以用CTRL+左键打开查询)
- 从左边工具栏中找窗体组件添加
-
Winform代码的基本构成
Winform.h
#pragma once
namespace WordMemory {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Winform 摘要
/// </summary>
public ref class MainForm : public System::Windows::Forms::Form
{
public:
MainForm(void)
{
InitializeComponent();
//
//构造函数,窗口初始化。
//
}
protected:
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
~MainForm()
{
if (components)
{
delete components;
}
}
//下面是窗口组件的声明。
……
private:
/// <summary>
/// 必需的设计器变量。
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
void InitializeComponent(void)
{
//窗口组件的初始属性。
}
#pragma endregion
//下面是窗口组件事件方法的汇总
};
}
Winform.cpp
/*一般窗口的各种方法在头文件中已经实现,所以对应源文件无需额外编写,下面展示程序入口Main函数*/
#include "MainForm.h"
using namespace std;
using namespace WordMemory;
[STAThread]
void Main(cli::array<String^>^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
MainForm form;
Application::Run(% form);
}
下集预告:相关类的设计和单词库构建。