C#新手求助:如何实现员工信息管理程序的持续循环功能
重构后的员工信息管理程序(C#)
嘿,作为C#新手你已经迈出了不错的第一步!不过你提供的代码片段有点不完整,而且从现有结构来看,存在几个影响功能的小问题——比如局部定义的列表会导致数据无法持久保存,还有缺少核心的菜单循环逻辑。我帮你重构了一份规范且功能完整的代码,完全满足你的需求:
using System; using System.Collections.Generic; namespace ConsoleApp1 { // 封装员工信息的实体类,比分散的列表更清晰易维护 public class Employee { public string Name { get; set; } public decimal HourlyRate { get; set; } public double WorkHours { get; set; } } class Program { // 类级静态列表,确保程序运行期间数据不会丢失 private static List<Employee> _employees = new List<Employee>(); static void Main(string[] args) { bool isRunning = true; // 主循环,直到用户选择退出 while (isRunning) { ShowMenu(); var choice = Console.ReadLine(); switch (choice) { case "1": AddEmployee(); break; case "2": EditEmployee(); break; case "3": isRunning = false; Console.WriteLine("程序已退出,再见!"); break; default: Console.WriteLine("无效选项,请重新输入!"); break; } Console.WriteLine("\n按任意键继续..."); Console.ReadKey(); Console.Clear(); } } // 显示操作菜单 private static void ShowMenu() { Console.WriteLine("=== 员工信息管理程序 ==="); Console.WriteLine("1. 添加新员工"); Console.WriteLine("2. 编辑员工信息"); Console.WriteLine("3. 退出程序"); Console.Write("请输入你的选择:"); } // 添加员工功能 private static void AddEmployee() { Console.WriteLine("\n=== 添加新员工 ==="); Console.Write("请输入员工姓名:"); var name = Console.ReadLine(); // 时薪输入验证 decimal hourlyRate = 0; while (true) { Console.Write("请输入员工时薪:"); if (decimal.TryParse(Console.ReadLine(), out hourlyRate) && hourlyRate > 0) { break; } Console.WriteLine("无效的时薪,请输入大于0的数字!"); } // 工作时长输入验证 double workHours = 0; while (true) { Console.Write("请输入员工工作时长:"); if (double.TryParse(Console.ReadLine(), out workHours) && workHours >= 0) { break; } Console.WriteLine("无效的工作时长,请输入大于等于0的数字!"); } // 添加到列表 _employees.Add(new Employee { Name = name, HourlyRate = hourlyRate, WorkHours = workHours }); Console.WriteLine("员工信息添加成功!"); } // 编辑员工功能 private static void EditEmployee() { if (_employees.Count == 0) { Console.WriteLine("暂无员工信息,请先添加员工!"); return; } Console.WriteLine("\n=== 编辑员工信息 ==="); // 列出所有员工 for (int i = 0; i < _employees.Count; i++) { var emp = _employees[i]; Console.WriteLine($"{i+1}. 姓名:{emp.Name} | 时薪:{emp.HourlyRate:C} | 工作时长:{emp.WorkHours}小时"); } // 选择要编辑的员工 int selectedIndex = -1; while (true) { Console.Write("请输入要编辑的员工序号:"); if (int.TryParse(Console.ReadLine(), out selectedIndex) && selectedIndex >=1 && selectedIndex <= _employees.Count) { selectedIndex--; // 转换为列表索引 break; } Console.WriteLine("无效的序号,请重新输入!"); } var employeeToEdit = _employees[selectedIndex]; // 编辑姓名(可选跳过) Console.Write($"当前姓名:{employeeToEdit.Name},输入新姓名(直接回车保留原姓名):"); var newName = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(newName)) { employeeToEdit.Name = newName; } // 编辑时薪(可选跳过) Console.Write($"当前时薪:{employeeToEdit.HourlyRate:C},输入新时薪(直接回车保留原时薪):"); var hourlyRateInput = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(hourlyRateInput) && decimal.TryParse(hourlyRateInput, out decimal newHourlyRate) && newHourlyRate >0) { employeeToEdit.HourlyRate = newHourlyRate; } // 编辑工作时长(可选跳过) Console.Write($"当前工作时长:{employeeToEdit.WorkHours}小时,输入新工作时长(直接回车保留原时长):"); var workHoursInput = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(workHoursInput) && double.TryParse(workHoursInput, out double newWorkHours) && newWorkHours >=0) { employeeToEdit.WorkHours = newWorkHours; } Console.WriteLine("员工信息编辑成功!"); } } }
关键改进说明
- 封装员工实体:定义了
Employee类,把姓名、时薪、工作时长整合在一起,比用多个独立列表管理数据更安全,避免数据不同步的问题。 - 持久化数据存储:把员工列表
_employees设为类级静态变量,这样无论调用多少次添加/编辑方法,数据都会一直保存在内存中,不会每次调用都重置。 - 菜单循环逻辑:用
while循环实现程序持续运行,直到用户选择退出,完美符合你的循环需求。 - 模块化功能拆分:把添加、编辑、显示菜单拆分成独立方法,代码结构更清晰,后期维护和扩展也更方便。
- 输入验证:添加了时薪、工作时长、员工序号的有效性验证,避免用户输入错误导致程序崩溃,提升了程序的健壮性。
- 友好的交互体验:添加了操作提示、回车保留原信息的功能,还有清屏和按键继续的逻辑,让用户操作更顺畅。
你可以直接运行这份代码,测试所有功能。如果有其他需求或者想进一步优化某个部分,随时调整就好!
内容的提问来源于stack exchange,提问作者MrPryan
相关产品推荐
相关产品推荐

