C#零基础通关第十六篇:综合实战!从零开发控制台权限管理系统,整合所有核心知识点
前面十五篇我们从零吃透了C#全套核心语法数据类型、面向对象、集合、LINQ、IO文件操作、异常处理、反射、特性与AOP编程知识点覆盖零基础到高阶架构基础。很多新手学完语法后最大的问题就是只会零散知识点不会整合做项目学完就忘无法落地。本篇我们正式开启全套知识点综合实战手把手从零开发一个控制台权限管理系统。本项目将100%落地前面所有核心知识点面向对象封装、集合存储、LINQ查询、文件持久化、异常捕获、反射、自定义特性、AOP切面拦截是零基础从学语法到做项目的关键蜕变教程。全程循序渐进、代码逐行讲解新手可直接复刻运行彻底掌握项目开发思维一、项目整体介绍与功能规划1. 项目定位基于控制台的轻量化用户权限管理系统实现用户、权限、功能接口的统一管理融入AOP权限拦截、本地数据持久化完全对标企业级项目架构思想。2. 核心功能清单用户管理新增用户、查询用户、数据本地保存权限管理自定义权限标识、用户绑定权限功能操作订单新增、订单删除、用户查询AOP权限拦截无权限自动拦截功能操作不侵入业务代码日志记录所有操作自动记录本地日志数据持久化程序重启数据不丢失3. 用到的核心知识点汇总面向对象类封装、实体建模、工具类封装集合LINQList存储数据、LINQ筛选查询匹配数据IO文件操作本地文本读写、数据持久化、日志写入异常处理所有风险操作try-catch容错保证程序稳定反射动态获取方法、执行方法、解析特性信息特性AOP自定义权限特性、切面统一拦截权限与日志二、项目架构设计企业级分层思想我们不写堆砌代码全程采用分层架构贴合真实项目开发规范代码解耦、各司其职。项目分层结构Entity实体层存储用户、权限实体模型Attribute特性层自定义权限特性Service业务层核心业务功能订单、用户操作Helper工具层日志工具、AOP切面工具、文件工具Program入口层程序启动、菜单交互、功能调用分层核心思想各司其职、互不干扰、便于维护拓展。三、逐模块编码实现可直接复刻运行我们从零逐行编写每个模块独立讲解写完即可运行测试。1. 引入必备命名空间usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Reflection;2. Entity实体层定义数据模型创建用户实体存储用户ID、用户名、用户权限信息/// summary/// 用户实体类/// /summarypublicclassUser{publicintId{get;set;}publicstringUserName{get;set;}// 用户拥有的权限集合publicListstringPermissions{get;set;}newListstring();}3. Attribute特性层自定义权限特性用于给业务方法打权限标签AOP切面通过反射读取标签/// summary/// 自定义权限校验特性/// /summary[AttributeUsage(AttributeTargets.Method,AllowMultiplefalse)]publicclassPermissionAttribute:Attribute{// 当前方法需要的权限publicstringRequirePermission{get;}publicPermissionAttribute(stringrequirePermission){RequirePermissionrequirePermission;}}4. Helper工具层封装通用工具类1日志工具类IO流异常处理/// summary/// 全局日志工具/// /summarypublicstaticclassLogHelper{privatestaticreadonlystring_logPathSystemLog;staticLogHelper(){// 初始化日志文件夹try{if(!Directory.Exists(_logPath)){Directory.CreateDirectory(_logPath);}}catch{Console.WriteLine(日志文件夹初始化失败);}}/// summary/// 写入操作日志/// /summarypublicstaticvoidWriteLog(stringlogMsg){try{stringfilePathPath.Combine(_logPath,DateTime.Now.ToString(yyyyMMdd).log);stringcontent$[{DateTime.Now:HH:mm:ss}] 操作记录{logMsg}\r\n;File.AppendAllText(filePath,content);}catch(Exceptionex){Console.WriteLine($日志写入失败{ex.Message});}}}2AOP切面工具类反射特性核心实战统一拦截所有业务方法实现权限校验自动日志完全解耦业务代码/// summary/// AOP切面工具类/// /summarypublicstaticclassAopHelper{/// summary/// 统一执行业务方法自带权限拦截、日志记录/// /summary/// param nameobj业务对象实例/param/// param namemethodName方法名/param/// param nameuserPermissions当前用户权限集合/parampublicstaticvoidExecuteBusinessMethod(objectobj,stringmethodName,ListstringuserPermissions){Typetypeobj.GetType();MethodInfomethodtype.GetMethod(methodName);if(methodnull){Console.WriteLine(方法不存在);return;}// 1. 前置拦截权限校验varpermissionAttrmethod.GetCustomAttributePermissionAttribute();if(permissionAttr!null){stringneedPermpermissionAttr.RequirePermission;if(!userPermissions.Contains(needPerm)){Console.WriteLine($【拦截失败】权限不足需要【{needPerm}】权限);LogHelper.WriteLog($执行{methodName}失败权限不足);return;}}// 2. 执行原生业务方法try{method.Invoke(obj,null);// 3. 后置记录日志LogHelper.WriteLog($成功执行业务方法{methodName});}catch(Exceptionex){Console.WriteLine($方法执行异常{ex.Message});LogHelper.WriteLog($执行{methodName}异常{ex.Message});}}}3数据持久化工具类IO文件读写/// summary/// 数据持久化工具/// /summarypublicstaticclassDataHelper{privatestaticreadonlystring_dataPathUserData.txt;// 保存用户数据publicstaticvoidSaveUserList(ListUseruserList){try{ListstringsaveLinesnewListstring();foreach(varuserinuserList){// 格式Id|用户名|权限1,权限2stringpermStrstring.Join(,,user.Permissions);saveLines.Add(${user.Id}|{user.UserName}|{permStr});}File.WriteAllLines(_dataPath,saveLines);}catch(Exceptionex){LogHelper.WriteLog($用户数据保存失败{ex.Message});}}// 读取用户数据publicstaticListUserLoadUserList(){ListUseruserListnewListUser();try{if(!File.Exists(_dataPath))returnuserList;string[]linesFile.ReadAllLines(_dataPath);foreach(varlineinlines){string[]partsline.Split(|);if(parts.Length3)continue;UserusernewUser(){Idint.Parse(parts[0]),UserNameparts[1],Permissionsparts[2].Split(,).ToList()};userList.Add(user);}}catch(Exceptionex){LogHelper.WriteLog($用户数据读取失败{ex.Message});}returnuserList;}}5. Service业务层核心业务功能所有业务方法通过特性标记权限无任何冗余判断代码干净纯粹/// summary/// 订单业务服务/// /summarypublicclassOrderService{[Permission(订单新增)]publicvoidCreateOrder(){Console.WriteLine(✅ 订单创建成功);}[Permission(订单删除)]publicvoidDeleteOrder(){Console.WriteLine(✅ 订单删除成功);}}/// summary/// 用户业务服务/// /summarypublicclassUserService{[Permission(用户查询)]publicvoidQueryUser(){Console.WriteLine(✅ 用户信息查询成功);}}6. 程序入口主菜单逻辑整合所有功能实现菜单交互、用户初始化、功能调用全程使用LINQ查询数据classProgram{// 全局用户集合privatestaticListUser_userListnewListUser();staticvoidMain(string[]args){Console.WriteLine( C#权限管理系统综合实战项目);// 加载本地持久化数据_userListDataHelper.LoadUserList();LogHelper.WriteLog(系统启动成功加载用户数据完成);// 初始化测试用户无数据时默认创建if(!_userList.Any()){_userList.Add(newUser(){Id1,UserName管理员,PermissionsnewListstring{订单新增,订单删除,用户查询}});DataHelper.SaveUserList(_userList);Console.WriteLine(初始化管理员账号成功);}// 模拟当前登录用户varloginUser_userList.FirstOrDefault(uu.Id1);Console.WriteLine($当前登录用户{loginUser.UserName}\n);// 业务功能调用测试OrderServiceorderServicenewOrderService();UserServiceuserServicenewUserService();// 执行各类业务方法AOP自动拦截权限AopHelper.ExecuteBusinessMethod(orderService,CreateOrder,loginUser.Permissions);AopHelper.ExecuteBusinessMethod(orderService,DeleteOrder,loginUser.Permissions);AopHelper.ExecuteBusinessMethod(userService,QueryUser,loginUser.Permissions);Console.WriteLine(\n 系统功能执行完毕 );}}四、项目运行效果与功能验证1. 正常运行输出 C#权限管理系统综合实战项目 当前登录用户管理员 ✅ 订单创建成功 ✅ 订单删除成功 ✅ 用户信息查询成功 系统功能执行完毕 2. 权限拦截测试我们可以新建一个普通用户只赋予【订单新增】权限再次运行即可看到拦截效果【拦截失败】权限不足需要【订单删除】权限 【拦截失败】权限不足需要【用户查询】权限3. 持久化与日志验证程序运行后自动生成UserData.txt数据文件保存用户信息自动生成SystemLog日志文件夹按日期记录所有操作重启程序数据不丢失完全实现持久化五、项目核心知识点复盘这个极简项目整合了我们所有核心知识点每一处代码都对应所学内容面向对象实体类、业务服务类、工具类封装高内聚低耦合集合LINQList存储数据Any、FirstOrDefault快速查询匹配数据异常处理所有IO、反射、文件操作全部try-catch容错IO文件操作文件读写、文件夹创建、数据持久化落地反射动态获取方法、动态调用业务功能特性AOP自定义权限标记切面统一拦截彻底分离业务与通用逻辑项目架构思想分层开发、职责分离、可拓展、可维护。六、项目拓展方向自主进阶新手可基于当前项目自主拓展功能进一步巩固知识点新增用户注册、登录、删除用户功能动态给用户分配权限增加参数校验、数据合法性判断优化AOP切面新增事务、缓存拦截功能完善菜单交互实现手动选择功能操作七、全文总结本篇是C#零基础系列的里程碑实战教程彻底告别单纯学语法的阶段真正实现了知识点落地、代码工程化、架构规范化。通过本项目你可以清晰理解企业项目为什么要分层、为什么要用AOP、为什么需要反射和特性、为什么要做数据持久化和日志记录。至此C#零基础核心语法高阶特性项目实战全部通关你已经具备初级.NET开发者的完整技术能力下期预告下一篇我们将开启**.NET进阶新征程**精讲委托与事件解锁C#异步编程、回调编程核心为后续Winform、WPF、异步开发打下坚实基础