Skip to content
No description, website, or topics provided.
C++
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
easy-cpp-study
.gitignore
README.md

README.md

Easy Sutdy C++

前言 (Introduction)

This is a c++ framework for simplify the chores such as cin/cout format, print out a varrible and clear menu without switch case case case ....,input value varify, CSV data IO, to make cpp learner to focus on other things which worth learning more!

这是一套用于减少 C++ 学习者在使用字符串界面和STL编程遇到的烦杂琐事的编程辅助框架。我在编写时采用了 C++11 标准和 STL、泛型编程。( Windows Only )

这套框架将能提供:

  1. 优美简介的 OOP、函数式的可变 CUI 菜单系统;
  2. 输入数据自动校验、转换类型;
  3. 帮助导出导入可用 Excel 编辑 CSV 数据;
  4. CRUD 标准返回结果;
  5. 密码哈希摘要;
  6. 对其他杂七杂八的操作方法进行封装;

使用案例

输入成绩

#include <iostream>
#include <cmath>
#include "easy-cpp-study\CommandUI.h"
using std::cout;
double mark;
CommandUI::InputResult result=CommandUI::input(&mark,"请输入成绩",
[](const double& value)->bool{
	if(value>100.0||value<0.0){
		CommandUI::puase("超出范围");
		return false;
	}
	else if(fmod(value,0.5)<=1e-6){
		CommandUI::puase("最小分值为0.5");
		return false;
	}
	else return true;
});
if(result==CommandUI::InputResult::success)
	cout<<"成绩已成功录入!";

返回布尔值

bool flag=CommandUI::confirm("你确定要这样做吗?");

男女字符串输入映射为枚举值

#include "easy-cpp-study\CommandUI.h"
enum class Gender{male,female} gender;
CommandUI::InputMatcher<Gender> matcher("请选择性别");
matcher	.addRule("",Gender::male)
		.addRule("男性",Gender::male)
		.addRule("",Gender::female)
		.addRule("女性",Gender::female);
matcher.active(&gender);

哈希摘要

#include "easy-cpp-study/Cryptography.h"
Hasher("盐值123") hasher;
cout<<hasher(" …… 关键信息 …… ");

智能菜单

CommmantUI::MenuContext main = CommmantUI::MenuContext()
	.setTitle("主菜单").setMainMenu()
	.addSubMenu("子菜单",
		CommmantUI::MenuContext("子菜单界面")
		.addOption("添加",add)
		.addOption("删除",remove)
		.addOption("更改",change)
		.addWillExitOption("退出界面确认",exitConfirm)
		.solidify()
	)
	.addSubView("子界面",
		[]()->{
			CommmantUI::pause("生活不仅仅眼前的苟且,\n还有诗和远方");
		}
	);

CommandUI::showMenu(Menus::main);

API 说明

智能输入

template <typename T>
InputResult input(T * value,crstring hint,std::function<bool(const T &)> validator = nullptr);
  • value 接受改变的变量
  • hint 输入提示
  • validator 校验函数,返回值 true 代表数值合法

返回值:

  • InputResult::success 成功获得输入
  • InputResult::illegal 非法输入
  • InputResult::invalid 经校验,为无效输入

重头戏 —— Csv 简易处理器

在 CsvFormatter 命名空间下:

  • 类 LineReader:

    • 构造函数 LineReader(const std::string & str)

      传入待解析的一行 CSV 文本

    • bool getNextCellValue(std::string & result)

      获取下一个单元格的字符串内容

  • string escape(const std::string & text)

    尝试转换字符串单元格中的逗号

  • extern void warning(size_t i,const std::string fieldName,const std::string exce=nullptr)

    发出读取异常的警告消息。

控制台语义化 API

  • void pause(); // 暂停
  • void pause(const string & text); // 显示提示文字,并暂停
  • void clear(); // 清除输出
  • void newline(); // 输出新行

将来的改进 (Todo List)

跨平台支持

You can’t perform that action at this time.