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
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2025 LHY0125
Copyright (c) 2025 LHY
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+5
View File
@@ -59,6 +59,11 @@
├── 数据访问层 (Data Layer)
│ ├── CSV文件操作
│ └── 数据验证
├── 安装包管理层 (Installer Layer)
│ ├── 安装脚本目录 (installer/)
│ ├── Inno Setup脚本 (installer/installer.iss)
│ ├── NSIS脚本 (installer/installer.nsi)
│ └── 安装包输出 (installer/dist/)
└── 配置层 (Config Layer)
├── 头文件目录 (include/) - v4.1.0标准化
├── 统一类型定义 (include/types.h)
+37 -10
View File
@@ -16,9 +16,10 @@
文件结构统计
========================================
总文件数量: 33个源代码文件
总文件数量: 35个源代码文件
- C源文件(.c): 16个
- 头文件(.h): 17个(新增types.h
- 安装脚本(.iss/.nsi): 2个
v4.1.0目录结构标准化成果:
- 🏗️ 标准化目录结构:创建include/和src/目录分离头文件和源文件
@@ -192,16 +193,17 @@ v2.2模块化优势:
代码量统计汇总
========================================
总代码行数: 4050行(v4.0.0安全性增强与类型管理优化后
总注释行数: 1780行
总注释字数: 约38500字
总代码行数: 4233行(v4.1.0目录标准化+安装包管理
总注释行数: 1820行
总注释字数: 约39200字
代码分布(v4.0.0安全性增强与统一类型管理架构:
- 核心业务代码: 52% (约2106行)
- 工具模块代码: 27% (约1094行) - 原auxiliary.c拆分+新增security_utils.c
- 安全模块代码: 5% (约203行) - v4.0.0新增security_utils.c/h
- 界面显示代码: 9% (约364行)
- 配置和类型定义: 7% (约283行) - 新增types.h
代码分布(v4.1.0标准化架构+安装包管理:
- 核心业务代码: 50% (约2116行)
- 工具模块代码: 26% (约1100行) - 原auxiliary.c拆分+新增security_utils.c
- 安全模块代码: 5% (约212行) - v4.0.0新增security_utils.c/h
- 界面显示代码: 9% (约381行)
- 配置和类型定义: 7% (约297行) - 新增types.h
- 安装包脚本代码: 3% (约183行) - 新增installer.iss/installer.nsi
v4.0.0安全性增强与类型管理收益:
- 🔒 密码安全提升: 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. 系统架构:
* - 🏗️ 分层架构设计:UI层、业务逻辑层、数据访问层、配置层
* - 🏗️ 分层架构设计:UI层、业务逻辑层、数据访问层、安装包管理层、配置层
* - 🧩 模块化组件:学生管理、统计分析、用户管理、文件操作
* - 🔧 核心处理器:统一的业务逻辑处理中心
* - 📋 配置管理:集中的参数配置和宏定义管理
* - 🌍 全局状态:统一的全局变量和状态管理
* - 📦 安装包管理:Inno Setup和NSIS双重安装方案
* - 🏗️ 安装包管理层详解(v4.1.0新增):
* • 安装脚本管理:统一的安装包生成脚本
* • Inno Setup方案:功能全面的现代化安装包
* • NSIS方案:轻量级高压缩率安装包
* • 路径管理:相对路径设计,支持目录重组
* • 输出管理:统一的安装包输出目录
* • 版本控制:安装包版本信息管理
* • 多语言支持:简体中文安装界面
* • 组件选择:可选择性安装不同组件
* - 🔧 配置层详解:
* • 头文件管理:统一的头文件目录结构
* • 类型定义:集中的数据类型定义 (types.h)
* • 系统配置:全局配置参数管理 (config.h)
* • 全局变量:统一的全局状态管理 (globals.h)
* • 宏定义:系统级宏定义和常量
* 17. 功能模块详解(v2.2模块化架构):
* - 👥 学生管理模块:增删改查、信息验证、数据校验
* - 📊 统计分析模块:多维度统计、图表展示、趋势分析
@@ -188,6 +204,37 @@
* gcc -Wall -Wextra -std=c17 -g -c -Iinclude src/*.c
* 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 (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编译
make run
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次会强制退出程序
*/