m0_70756927 2022-05-28 01:17 采纳率: 100%
浏览 321
已结题

用C# 编写一个员工工资计算

请用C#编写一个工资计算Console App:需要读取一个.txt文件里的员工信息然后计算出相关实付工资(扣除个人所得税和养老金)。这是根据国外一个公司的需要,员工是年薪制,但是工资是按每两周发放一次。

  1. txt文件里的员工信息如下:

| 员工编号 | 员工姓 | 员工名 | 年薪 | 扣除养老金比例 |

3 , Zhang , San , 60000 , 4%

4 , Li , Si ,45000 , 0%

5 , Wang , Fei , 55000 , 3%

(个人所得税比例:年收入48000 以内:17.5%;年收入48000至70000: 30%;年收入70000以上:33%)

  1. 要求:读取.txt文字信息,然后在屏幕显示计算结果
    (1)计算出员工时薪 (公式:年薪 / 52周每年 / 40小时每周 ) :
    (2)实付工资(公式:工资 - 养老金 - 税):

3.要求:程序需要有的几个功能:
1.能根据员工 ID 显示所有员工实付工资
2.保存计算后的每两周实付工资信息为.txt格式文件
3.输入员工 ID 能查找员工个人信息和工资信息
4.运行程序时屏幕显示如下操作选项供用户选择:
(1)计算每两周工资
(2) 显示员工信息
(3)输入一个员工编号能查找员工信息
(4)保存信息到.txt文档
(5) 退出

5.要求每次用户选择以上一个功能时显示结果,并再次显示操作选项让客户选择,只有客户退出功能程序才会关闭。

  • 写回答

5条回答 默认 最新

  • 真的小白啊 2022-05-28 04:10
    关注

    如果对你有启发,可以点点采纳,谢谢
    保存文件如图:

    img

    namespace ConsoleApp1
    {
        internal class Program
        {
            static List<Staff> StaffList = new List<Staff>();
            static void Main(string[] args)
            {
                ImportStaffs();
                while (true)
                {
                    switch (MainMenu())
                    {
                        case 1:
                            CalculateSalary();
                            break;
                        case 2:
                            DisplayStaffInformation();
                            break;
                        case 3:
                            FindStaff();
                            break;
                        case 4:
                            SaveToFile();
                            break;
                        case 5:
                            {
                                Console.Clear();
                                Console.WriteLine("(5) 退出");
                                Console.ReadKey();
                                return;
                            }
                        default:
                            break;
                    }
                }
            }
    
            private static void FindStaff()
            {
                Console.Clear();
                Console.WriteLine("(3) 输入一个员工编号能查找员工信息");
                Console.Write("输入一个员工编号:");
                if (int.TryParse(Console.ReadLine(), out var staffID))
                {
                    Console.WriteLine(StaffList.Find(s => s.ID == staffID));
                }
                Console.ReadKey();
            }
    
            private static void DisplayStaffInformation()
            {
                Console.Clear();
                Console.WriteLine("(2) 显示员工信息");
    
                foreach (var staff in StaffList)
                {
                    Console.WriteLine(staff);
                }
                Console.ReadKey();
            }
    
            private static void SaveToFile()
            {
                Console.Clear();
                Console.WriteLine("(4) 保存信息到.txt文档");
                var staffInfoFileNew = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "StaffInfoNew.txt");
                if (File.Exists(staffInfoFileNew))
                {
                    File.Delete(staffInfoFileNew);
                }
                using var stream = new StreamWriter(staffInfoFileNew, true);
                foreach (var staff in StaffList)
                {
                    stream.Write(staff);
                    stream.Write(Environment.NewLine);
                }
                Console.WriteLine("保存成功");
                Console.ReadKey();
            }
    
            private static void ImportStaffs()
            {
                var staffInfoFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "StaffInfo.txt");
                if (File.Exists(staffInfoFile))
                {
                    foreach (var staffLine in File.ReadAllLines(staffInfoFile).Skip(1))
                    {
                        var staffInfo = staffLine.Split(',');
                        var id = int.Parse(staffInfo[0]);
                        var firstName = staffInfo[1];
                        var lastName = staffInfo[2];
                        var annualSalary = double.Parse(staffInfo[3].Trim('%'));
                        var pensionRatio = double.Parse(staffInfo[4].Trim('%')) / 100;
                        StaffList.Add(Staff.EnrollNew(id, firstName, lastName, annualSalary, pensionRatio));
                    }
                }
            }
    
            private static void CalculateSalary()
            {
                Console.Clear();
                Console.WriteLine("(1) 计算每两周工资");
                Console.WriteLine("每两周工资计算完成");
                Console.ReadKey();
            }
    
            private static int MainMenu()
            {
                Console.Title = "员工工资计算";
                while (true)
                {
                    Console.Clear();
                    Console.WriteLine("(1) 计算每两周工资");
                    Console.WriteLine("(2) 显示员工信息");
                    Console.WriteLine("(3) 输入一个员工编号能查找员工信息");
                    Console.WriteLine("(4) 保存信息到.txt文档");
                    Console.WriteLine("(5) 退出");
                    Console.WriteLine();
    
                    if (int.TryParse(Console.ReadLine(), out var functionID))
                    {
                        if (functionID >= 1 && functionID <= 5)
                        {
                            return functionID;
                        }
                    }
                }
            }
        }
    }
    
    namespace ConsoleApp1
    {
        internal class Staff
        {
            private double PersonalIncomeTax
            {
                get
                {
                    double personalIncomeTax = default;
    
                    if (AnnualSalary < 48000)
                    {
                        personalIncomeTax = TwoWeeksSalary * 17.5 / 100;
                    }
                    else if (AnnualSalary >= 48000 && AnnualSalary < 70000)
                    {
                        personalIncomeTax = TwoWeeksSalary * 30 / 100;
                    }
                    else if (AnnualSalary >= 70000)
                    {
                        personalIncomeTax = TwoWeeksSalary * 33 / 100;
                    }
    
                    return personalIncomeTax;
                }
            }
            private double Pension => TwoWeeksSalary * PensionRatio;
    
            public int ID { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public double AnnualSalary { get; set; }
            public double HourlySalary => AnnualSalary / 52 / 40;
            public double PaidSalary => TwoWeeksSalary - Pension - PersonalIncomeTax;
            public double PensionRatio { get; set; }
            public double TwoWeeksSalary => HourlySalary * 40 * 2;
    
            private Staff() { }
    
            public static Staff EnrollNew(int id, string firstName, string lastName, double annualSalary, double pensionRatio)
            {
                var newStaff = new Staff
                {
                    ID = id,
                    FirstName = firstName,
                    LastName = lastName,
                    AnnualSalary = annualSalary,
                    PensionRatio = pensionRatio
                };
    
                return newStaff;
            }
    
            public override string ToString()
            {
                return $"ID: {ID}{Environment.NewLine}" +
                    $"FirstName: {FirstName}{Environment.NewLine}" +
                    $"LastName: {LastName}{Environment.NewLine}" +
                    $"AnnualSalary: {AnnualSalary}{Environment.NewLine}" +
                    $"HourlySalary: {HourlySalary}{Environment.NewLine}" +
                    $"PaidSalary: {PaidSalary}{Environment.NewLine}" +
                    $"PensionRatio: {PensionRatio}{Environment.NewLine}" +
                    $"TwoWeeksSalary: {TwoWeeksSalary}{Environment.NewLine}" +
                    $"PersonalIncomeTax: {PersonalIncomeTax}{Environment.NewLine}" +
                    $"Pension: {Pension}{Environment.NewLine}";
            }
        }
    }
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月28日
  • 已采纳回答 5月28日
  • 修改了问题 5月28日
  • 修改了问题 5月28日
  • 展开全部

悬赏问题

  • ¥15 加热反应炉PLC控制系统设计(相关搜索:梯形图)
  • ¥15 python 用Dorc包报错,我的写法和网上教的是一样的但是它显示无效参数,是什么问题
  • ¥15 指定IP电脑的访问设置
  • ¥30 matlab ode45 未发现警告,但是运行出错
  • ¥15 vscode platformio
  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部