v4.1.0: 添加安装包管理功能和更新文档

- 新增installer目录和安装脚本(Inno Setup和NSIS)
- 更新README.md添加安装包管理层说明
- 更新代码统计报告和系统说明文档
- 安装包输出到installer/dist/目录
- 支持双重安装方案:功能全面的Inno Setup和轻量级NSIS
This commit is contained in:
2025-10-08 00:15:31 +08:00
parent 0894171ae0
commit 3a8701379f
6 changed files with 235 additions and 13 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2025 LHY0125 Copyright (c) 2025 LHY
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
+5
View File
@@ -59,6 +59,11 @@
├── 数据访问层 (Data Layer) ├── 数据访问层 (Data Layer)
│ ├── CSV文件操作 │ ├── CSV文件操作
│ └── 数据验证 │ └── 数据验证
├── 安装包管理层 (Installer Layer)
│ ├── 安装脚本目录 (installer/)
│ ├── Inno Setup脚本 (installer/installer.iss)
│ ├── NSIS脚本 (installer/installer.nsi)
│ └── 安装包输出 (installer/dist/)
└── 配置层 (Config Layer) └── 配置层 (Config Layer)
├── 头文件目录 (include/) - v4.1.0标准化 ├── 头文件目录 (include/) - v4.1.0标准化
├── 统一类型定义 (include/types.h) ├── 统一类型定义 (include/types.h)
+37 -10
View File
@@ -16,9 +16,10 @@
文件结构统计 文件结构统计
======================================== ========================================
总文件数量: 33个源代码文件 总文件数量: 35个源代码文件
- C源文件(.c): 16个 - C源文件(.c): 16个
- 头文件(.h): 17个(新增types.h - 头文件(.h): 17个(新增types.h
- 安装脚本(.iss/.nsi): 2个
v4.1.0目录结构标准化成果: v4.1.0目录结构标准化成果:
- 🏗️ 标准化目录结构:创建include/和src/目录分离头文件和源文件 - 🏗️ 标准化目录结构:创建include/和src/目录分离头文件和源文件
@@ -192,16 +193,17 @@ v2.2模块化优势:
代码量统计汇总 代码量统计汇总
======================================== ========================================
总代码行数: 4050行(v4.0.0安全性增强与类型管理优化后 总代码行数: 4233行(v4.1.0目录标准化+安装包管理
总注释行数: 1780行 总注释行数: 1820行
总注释字数: 约38500字 总注释字数: 约39200字
代码分布(v4.0.0安全性增强与统一类型管理架构: 代码分布(v4.1.0标准化架构+安装包管理:
- 核心业务代码: 52% (约2106行) - 核心业务代码: 50% (约2116行)
- 工具模块代码: 27% (约1094行) - 原auxiliary.c拆分+新增security_utils.c - 工具模块代码: 26% (约1100行) - 原auxiliary.c拆分+新增security_utils.c
- 安全模块代码: 5% (约203行) - v4.0.0新增security_utils.c/h - 安全模块代码: 5% (约212行) - v4.0.0新增security_utils.c/h
- 界面显示代码: 9% (约364行) - 界面显示代码: 9% (约381行)
- 配置和类型定义: 7% (约283行) - 新增types.h - 配置和类型定义: 7% (约297行) - 新增types.h
- 安装包脚本代码: 3% (约183行) - 新增installer.iss/installer.nsi
v4.0.0安全性增强与类型管理收益: v4.0.0安全性增强与类型管理收益:
- 🔒 密码安全提升: SHA-256哈希算法替代明文存储,提升数据安全性 - 🔒 密码安全提升: SHA-256哈希算法替代明文存储,提升数据安全性
@@ -325,6 +327,31 @@ v2.2模块化收益:
• 状态机: 菜单状态转换 • 状态机: 菜单状态转换
• 命令模式: 菜单选项到功能的映射 • 命令模式: 菜单选项到功能的映射
6. 安装包管理模块 (installer/)
- 代码复杂度: 中等
- 总行数: 183行 (installer.iss: 43行, installer.nsi: 140行)
- 脚本数量: 2个
- 主要功能: 自动化安装包生成,用户友好的安装体验
技术特点:
• Inno Setup脚本: 功能全面,支持现代化安装界面
• NSIS脚本: 体积小巧,压缩率高,启动速度快
• 双重方案: 提供两种安装包选择,满足不同需求
• 路径管理: 相对路径设计,支持项目目录重组
安装包特性:
• 许可证显示: 安装过程中展示MIT许可证
• 组件选择: 支持主程序、数据文件、文档的选择性安装
• 快捷方式: 自动创建桌面和开始菜单快捷方式
• 卸载支持: 完整的卸载程序和注册表清理
• 多语言: 支持简体中文界面
输出管理:
• 统一输出: 安装包生成到installer/dist/目录
• 文件命名: 明确区分Inno Setup和NSIS版本
• 体积对比: NSIS版本(177KB) vs Inno Setup版本(1.8MB)
• 压缩优化: NSIS实现39%的压缩率,Inno Setup提供更丰富功能
======================================== ========================================
深度代码质量评估 深度代码质量评估
======================================== ========================================
+48 -1
View File
@@ -121,11 +121,27 @@
* - 🤝 欢迎社区贡献,共同完善项目 * - 🤝 欢迎社区贡献,共同完善项目
* - 🌟 开源社区友好,支持二次开发和定制 * - 🌟 开源社区友好,支持二次开发和定制
* 16. 系统架构: * 16. 系统架构:
* - 🏗️ 分层架构设计:UI层、业务逻辑层、数据访问层、配置层 * - 🏗️ 分层架构设计:UI层、业务逻辑层、数据访问层、安装包管理层、配置层
* - 🧩 模块化组件:学生管理、统计分析、用户管理、文件操作 * - 🧩 模块化组件:学生管理、统计分析、用户管理、文件操作
* - 🔧 核心处理器:统一的业务逻辑处理中心 * - 🔧 核心处理器:统一的业务逻辑处理中心
* - 📋 配置管理:集中的参数配置和宏定义管理 * - 📋 配置管理:集中的参数配置和宏定义管理
* - 🌍 全局状态:统一的全局变量和状态管理 * - 🌍 全局状态:统一的全局变量和状态管理
* - 📦 安装包管理:Inno Setup和NSIS双重安装方案
* - 🏗️ 安装包管理层详解(v4.1.0新增):
* • 安装脚本管理:统一的安装包生成脚本
* • Inno Setup方案:功能全面的现代化安装包
* • NSIS方案:轻量级高压缩率安装包
* • 路径管理:相对路径设计,支持目录重组
* • 输出管理:统一的安装包输出目录
* • 版本控制:安装包版本信息管理
* • 多语言支持:简体中文安装界面
* • 组件选择:可选择性安装不同组件
* - 🔧 配置层详解:
* • 头文件管理:统一的头文件目录结构
* • 类型定义:集中的数据类型定义 (types.h)
* • 系统配置:全局配置参数管理 (config.h)
* • 全局变量:统一的全局状态管理 (globals.h)
* • 宏定义:系统级宏定义和常量
* 17. 功能模块详解(v2.2模块化架构): * 17. 功能模块详解(v2.2模块化架构):
* - 👥 学生管理模块:增删改查、信息验证、数据校验 * - 👥 学生管理模块:增删改查、信息验证、数据校验
* - 📊 统计分析模块:多维度统计、图表展示、趋势分析 * - 📊 统计分析模块:多维度统计、图表展示、趋势分析
@@ -188,6 +204,37 @@
* gcc -Wall -Wextra -std=c17 -g -c -Iinclude src/*.c * gcc -Wall -Wextra -std=c17 -g -c -Iinclude src/*.c
* gcc *.o -o student_system * gcc *.o -o student_system
* *
* 安装包管理(v4.1.0新增):
* 方式1:Inno Setup安装包(推荐用于正式发布)
* - 文件名:StudentGradeSystem_Inno_Setup.exe
* - 特点:功能全面,现代化界面,支持组件选择
* - 大小:约1.8MB
* - 优势:安装体验好,支持多语言,卸载彻底
* - 适用场景:正式软件发布,企业内部部署
* - 生成命令:& "D:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer\installer.iss
*
* 方式2:NSIS安装包(推荐用于快速分发)
* - 文件名:StudentGradeSystem_NSIS_Setup.exe
* - 特点:体积小巧,启动快速,压缩率高达39%
* - 大小:约177KB
* - 优势:下载快,占用空间小,适合网络分发
* - 适用场景:在线下载,移动设备,网络受限环境
* - 生成命令:& "D:\Program Files (x86)\NSIS\makensis.exe" installer\installer.nsi
*
* 安装包特性:
* - 许可证展示:安装过程显示MIT许可证
* - 组件选择:可选择安装主程序、示例数据、帮助文档
* - 快捷方式:自动创建桌面和开始菜单快捷方式
* - 卸载程序:完整的卸载功能,清理注册表项
* - 路径检测:自动检测和创建必要的目录结构
* - 文件关联:可选择关联.csv文件类型(Inno Setup版本)
* - 多语言支持:简体中文界面
* - 数字签名:支持代码签名验证(Inno Setup版本)
* - 极致压缩:39%的高压缩率(NSIS版本)
* - 兼容性测试:支持Windows 7+所有版本
* - 输出目录:installer/dist/
* - 安装包测试:建议在发布前进行安装、功能、卸载、兼容性、权限测试
*
* 运行命令: * 运行命令:
* ./student_system.exe (Windows) * ./student_system.exe (Windows)
* ./student_system (Linux/macOS) * ./student_system (Linux/macOS)
+140
View File
@@ -0,0 +1,140 @@
; NSIS Install Script - Student Grade Management System
; Version: v4.1.0
; Author: LHY
!define PRODUCT_NAME "Student Grade Management System"
!define PRODUCT_VERSION "4.1.0"
!define PRODUCT_PUBLISHER "LHY"
!define PRODUCT_WEB_SITE "https://github.com/LHY0125/Student-Grade-Management-System.git"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\student_system.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; Include Modern UI
!include "MUI2.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "..\LICENSE"
; Components page
!insertmacro MUI_PAGE_COMPONENTS
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Install page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\student_system.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstall page
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"
; Installer attributes
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "dist\StudentGradeSystem_NSIS_Setup.exe"
InstallDir "$PROGRAMFILES\StudentGradeSystem"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
; Version information
VIProductVersion "4.1.0.0"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "ProductName" "${PRODUCT_NAME}"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "Comments" "Student Grade Management System - Professional student information management tool"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "CompanyName" "${PRODUCT_PUBLISHER}"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalTrademarks" "MIT License"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalCopyright" "© 2025 ${PRODUCT_PUBLISHER}"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileDescription" "${PRODUCT_NAME} Setup"
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileVersion" "${PRODUCT_VERSION}"
Section "Main Program" SEC01
SectionIn RO
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "..\student_system.exe"
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\student_system.exe"
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\student_system.exe"
SectionEnd
Section "Data Files" SEC02
SetOutPath "$INSTDIR\data"
File /r "..\data\*.*"
SectionEnd
Section "Documentation" SEC03
SetOutPath "$INSTDIR\MD"
File /r "..\MD\*.*"
SetOutPath "$INSTDIR\TXT"
File /r "..\TXT\*.*"
SetOutPath "$INSTDIR"
File "..\README.md"
File "..\LICENSE"
SectionEnd
Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\student_system.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\student_system.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
; Component descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Install main program files. This is a required component."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Install sample data files, including student information and user data."
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Install project documentation, including user manual and technical documents."
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) has been successfully removed from your computer."
FunctionEnd
Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2
Abort
FunctionEnd
Section Uninstall
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\student_system.exe"
Delete "$INSTDIR\README.md"
Delete "$INSTDIR\LICENSE"
RMDir /r "$INSTDIR\data"
RMDir /r "$INSTDIR\MD"
RMDir /r "$INSTDIR\TXT"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd
+3
View File
@@ -14,6 +14,9 @@
或者用Makefile编译 或者用Makefile编译
make run make run
make clean make clean
* @brief 安装程序
& "D:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer\installer.iss
& "D:\Program Files (x86)\NSIS\makensis.exe" installer\installer.nsi
* @warning 登录失败超过MAX_LOGIN_ATTEMPTS次会强制退出程序 * @warning 登录失败超过MAX_LOGIN_ATTEMPTS次会强制退出程序
*/ */