C++项目-信息分析管理系统
本文最后更新于 159 天前,如有失效或谬误请评论区留言。

设计任务

本次项目的目标是设计一个可用于实际工程数据的数据分析处理、信息管理系统,包括实现数据文件的读取、分析、管理,结果可视化,人机交互等。

使用的环境

本次项目基于C++语言,使用Clion作为集成开发环境,项目由CMake配置,可以在VS等IDE中部署编译

文件组成说明

本次项目由如下文件组成:

  1. main.cpp:程序入口,用于初始化窗口、构造第一个显示的界面和开启监听用户键盘和鼠标输入的线程。
  2. UserInputHandler.cpp:监听用户键盘和鼠标输入并触发按钮,输入框等控件的对应负责处理交互的函数。

GuiComponents文件夹,包括一系列GUI组件:

  1. GuiControllers.cpp:可以和用户交互的控件的抽象基类,声明了基本的成员变量和几个虚拟的函数。
  2. GuiLabel.cpp:不可以和用户交互的静态控件(标签)的抽象基类,声明了基本的成员变量和虚拟的函数。
  3. GuiScreen.cpp:所有界面类的基类,声明了一个界面的控件列表,定义了几个基本的函数。
  4. GuiButton.cpp:按钮类。
  5. GuiInputBox.cpp:输入框类。
  6. GuiHistogram.cpp:条形图类。
  7. GuiLineChart.cpp:折线图类。

Entities文件夹,包括几个实体类:

  1. FileEntity.cpp:用于数据读取和分析时存放文件的数据。
  2. SavedDataEntity.cpp:用于读取并保存datainfo.dat中存储的文件数据并在信息管理系统使用。

PolyFitUtils文件夹,包括多项式拟合相关的工具:

  1. polyfit.cpp:对数据进行多项式拟合,高斯消元等操作。
  2. polyop.cpp:用于多项式函数求值。

Screens文件夹,包括软件需要显示的所有界面:

  1. WelcomeScreen.cpp:进入程序首先显示的界面,包括登录、注册和退出程序按钮。
  2. LoginScreen.cpp:登录界面。
  3. RegisterScreen.cpp:注册界面。
  4. MainScreen.cpp:登录后进入的界面,包括数据处理系统和信息管理系统两个按钮。
  5. DataAnalyseScreen.cpp:数据处理系统,允许用户选择需要处理的数据文件,并跳转至处理结果界面。
  6. DataResScreen.cpp:对数据文件处理的结果,折线图、条形图等在这里显示,允许用户输入拟合阶数等。
  7. DataManageScreen.cpp:显示已处理的文件的个数,对已处理文件进行删、查。

Processors文件夹,包括软件的主要业务逻辑:

  1. DataAnalyseSystem.cpp:包括数据处理系统的主要逻辑。
  2. DataManageSystem.cpp:包括信息管理系统的主要逻辑。
  3. LifecycleProcessor.cpp:控制程序生命周期的源文件。
  4. UserAuthentication.cpp:包括用户认证系统的主要逻辑。

除这些源代码文件外,本项目还有:

  • data文件夹:存储需要处理和管理的数据文件,若该文件夹缺失,运行程序会自动创建,但数据文件®需要使用者手动加入。
  • datainfo.dat:存储信息管理系统存储的信息,若该文件缺失,程序会自动创建。
  • userinfo.dat:存储用户信息的文件,若该文件缺失,程序会自动创建。

数据描述

共定义九个类,其中有GUI组件类,业务实体类,在此展示其中的按钮GUI类。

#pragma once
#include "GuiControllers.cpp"
#include "graphics.h"
#include <thread>
class GuiButton : public GuiControllers{
public:
    int left; // 左上X坐标
    int top; // 左上Y坐标
    int right; // 右下X坐标
    int bottom;// 右下Y坐标
    int text_height; // 文字高度(大小)
    COLORREF originColor; //设置的按钮颜色
    COLORREF color; // 实际渲染按钮颜色
    COLORREF text_color;// 文字颜色
    TCHAR text[20]; // 文字内容
    // 按钮的构造函数
    GuiButton(int left, int top, int right, int bottom, COLORREF color, COLORREF text_color, int text_height,
              TCHAR text[20], void (&func)()) {
        此处省略赋值过程
    }
    // 绘制按钮的函数
    void drawController() override {
        此处省略绘制函数具体实现
    }
private:
    void (*ButtonProcessor)();// 按钮对应的函数指针
};

项目coding中遇到的问题

遇到的问题

在进行人机交互系统和图形用户界面系统的交互设计时,由于人机交互系统保持对鼠标和键盘信息的高速轮询,图形用户界面系统保持高速渲染程序画面,两个线程之间出现了对共用资源的读写冲突的问题。

解决方法

优化了数据的结构,减少了共用资源的使用量,使用互斥锁保证同一资源在同一时刻只有一个线程在读写。

代码仓库

https://github.com/Mareep-YANG/DataAnalyseAndManageSystem

以上仅代表个人观点,如有不当之处,欢迎与我进行讨论
版权声明:除特殊说明,博客文章均为Mareep原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇