/Your-C-big-homework-A

你的C语言大作业A:webui框架已成,你的C语言大作业将不再痛苦地接触命令行UI了

Primary LanguageCOtherNOASSERTION

Your-C-big-homework-A

  • 加密文件柜(首都师范大学2022级大作业题目)

你的C语言大作业A:webui框架已成,你的C语言大作业将不再痛苦地接触命令行UI了

  • 这个项目难吗?从需要书写的代码上来说,不难,因为已经封装出API了,每个API相当于一道小题,只不过每到小题之间有所联系,但是项目入手会很困难,如果没接触过工程项目开发就来写这个接近真实项目的工程,上手会很吃力,而且由于是新项目,代码难以借鉴,很多需要自己想才可以,需要构思的比较多。

编译说明:

编译的文件相当于服务器后端程序,运行后默认占用18080端口搭建前后端通信,此时webui文件夹的网页(index.html)可以用任一浏览器打开就可以自由和本地的服务器数据通信,完成程序构建。如果你想打包程序,我们提供了(但是没在这个库中上传)一些打包工具(electron和python构建脚本)帮助你封装网页为独立程序。

VSCode环境配置帮助

解决中文乱码

如果VSCode打开c或者h文件总是中文乱码,可以设置一下编辑器对指定文件的编码规则。

  • 点击文件找到首选项点击设置,分别输入下方内容指定为GBK编码
@id:files.encoding @lang:cpp
@id:files.encoding @lang:c

编译配置

前提:使用的MinGW64!所以请安装好。安装路径和工程路径一定不能包含中文

  • .vscode/tasks.json

D:\\Program Files\\CodeBlocks\\MinGW\\bin\\gcc.exe更换你自己MinGW的gcc.exe路径

D:\\Program Files\\CodeBlocks\\MinGW\\bin更换你自己MinGW的bin路径(gcc.exe所在文件夹)

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe build active file",
            "command": "D:\\Program Files\\CodeBlocks\\MinGW\\bin\\gcc.exe",
            "args": [
                "-g",
                "${fileDirname}\\**.c",
                "-o",
                "${fileDirname}\\main.exe",
                // socket
                "-lws2_32",
            ],
            "options": {
                "cwd": "D:\\Program Files\\CodeBlocks\\MinGW\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}
  • .vscode/launch.json

D:\\Program Files\\CodeBlocks\\MinGW\\bin\\gdb.exe更换你自己MinGW的gdb.exe路径

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++ Runner: Debug Session",
      "type": "cppdbg",
      "request": "launch",
      "args": [],
      "stopAtEntry": false,
      "externalConsole": true,
      "cwd": "${workspaceFolder}",
      "program": "${fileDirname}\\main.exe",
      "MIMode": "gdb",
      "miDebuggerPath": "D:\\Program Files\\CodeBlocks\\MinGW\\bin\\gdb.exe",
      "preLaunchTask": "C/C++: gcc.exe build active file",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}
  • .vscode/settings.json
{
  "C_Cpp_Runner.cCompilerPath": "gcc",
  "C_Cpp_Runner.cppCompilerPath": "g++",
  "C_Cpp_Runner.debuggerPath": "gdb",
  "C_Cpp_Runner.cStandard": "",
  "C_Cpp_Runner.cppStandard": "",
  "C_Cpp_Runner.msvcBatchPath": "",
  "C_Cpp_Runner.useMsvc": false,
  "C_Cpp_Runner.warnings": [
    "-Wall",
    "-Wextra",
    "-Wpedantic"
  ],
  "C_Cpp_Runner.enableWarnings": true,
  "C_Cpp_Runner.warningsAsError": false,
  "C_Cpp_Runner.compilerArgs": [],
  "C_Cpp_Runner.linkerArgs": [],
  "C_Cpp_Runner.includePaths": [],
  "C_Cpp_Runner.includeSearch": [
    "*",
    "**/*",
    "**/**/*"
  ],
  "C_Cpp_Runner.excludeSearch": [
    "**/build",
    "**/build/**",
    "**/.*",
    "**/.*/**",
    "**/.vscode",
    "**/.vscode/**"
  ],
  "files.associations": {
    "*.h": "c",
    "*.hpp": "cpp",
    "*.hxx": "cpp",
    "*.hh": "cpp",
    "*.h++": "cpp",
  },
}
  • .vscode/c_cpp_properties.json

D:/Program Files/CodeBlocks/MinGW/bin/gcc.exe更换你自己MinGW的gdb.exe路径

{
    "configurations": [
        {
            "name": "windows-gcc-x86",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "compilerPath": "D:/Program Files/CodeBlocks/MinGW/bin/gcc.exe",
            "cStandard": "${default}",
            "cppStandard": "${default}",
            "intelliSenseMode": "windows-gcc-x86",
            "compilerArgs": [
                ""
            ],
            "configurationProvider": "ms-vscode.makefile-tools"
        }
    ],
    "version": 4
}

VSCode编译的exe没有暂停问题(运行完就退出)

在main函数最下方(return上方)加入:system("pause");即可(手动调用命令行中端暂停)

  • 这个工程不存在这个问题,因为Socket通信陷入在死循环等待中不会退出,这里只是给部分同学提供帮助。

文档:

工具类函数库 文档

socket实现库 文档

前后端统一交换的CSV库 文档

webui通信定义 文档

术语词典(白话说明)

  • Mock

    有些东西在我要测试时准备工作尚未完成,此时人为写死一些逻辑或者函数的返回值让程序先得以正确运行到需要测试的地方的手段
    
  • 前端

    相对于本工程,就是网页(webui)
    
  • 后端

    相对于本工程,就是C程序(这个工程编译的程序你可以理解为本地的服务器)
    
  • WebUI

    通过网页渲染实现的人机交互页面