You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:49:40