C#对雇员工资进行排序升级版

这里是要写一个对雇员的工资进行排序,但是为了以后能通过同一个方法就可以对不同的类型进行排序,就举了一个雇员类的方法,以供参考。

这里用了泛型,Func委托,冒泡排序

这里是对雇员类的定义
 class Employee
    {
        private string name;
        private int sole;//出售

        public string Name { get => name; set => name = value; }
        public int Sole { get => sole; set => sole = value; }

        public Employee(string name, int sole)
        {
            this.name = name;
            this.sole = sole;//出售
        }
        //因为是比较雇员的信息,所有就调用雇员的方法
        public static bool CompareMethod(Employee e1,Employee e2)
        {
            //如果e1大于e2的话,返回true,否则就返回false
            if (e1.sole > e2.sole) { return true; }
            //这里是比较雇员之间工资的高低
            return false;
        }
 //对类中定义的name和sole进行重写,否则会输出项目名
        public override string ToString()
        {
            return name+" "+sole;
        }
    }
这里是任意类型数据进行调用的方法,其中compareMethod是调用雇员类中的比较方法。因为排序就要对数据进行比较,又不好确定是什么类型的,就要用到Func委托,这里定义的func委托是: Func<T,T,bool>,其中bool是调用compareMethod中的 返回值,从而对数据进行比较。
   //对任意类型的数据,进行排序
        static void CommonSort<T>(T[] ArrySort,Func<T,T,bool> CompareMethod)//这里是调用了雇员比较方法
            //用func形进行委托,两个不知道类型的参数,返回bool值类型的一个方法
        {
            Boolean swapped = true;
            while (swapped)//为假时退出循环
            {
                swapped = false;//在程序for循环到最后一次时,swapped才会变为true
                for (int i = 0; i < ArrySort.Length - 1; i++)//总长度的最后一个就不用排了
                {

                    if (CompareMethod(ArrySort[i],ArrySort[i+1]))
                        //调用compareMethod中的比较方法
                        //这里也是func<T,T,bool>
                    {
                        T temp = ArrySort[i];
                        ArrySort[i] = ArrySort[i + 1];
                        ArrySort[i + 1] = temp;
                        swapped = true;
                    }
                }
            }
        }
而最后的main函数就是,对employee进行赋值
   //调用employee类,并给雇员赋值
            Employee[] employees = new Employee[]
            {
                new Employee("a",2000),
                new Employee("e",2300),
                new Employee("f",4300),
                new Employee("c",25300),
                new Employee("h",2330),
                new Employee("D",2400),
                new Employee("b",3300)

            };
            //在main中用委托类型func
            CommonSort<Employee>(employees, Employee.CompareMethod);
            //遍历
            //这个类型为employee
            foreach (Employee e in employees)
            {
                Console.WriteLine(e);
            }

最后输出为





某公司雇员(Employee)包括经理(Manager),技术人员(Technician)和销售员(Salesman)。开发部经理(DeveloperManger),既是经理也是技术人员。销售部经理(SalesManager),既是经理也是销售员。 以Employee类为虚基类派生出Manager,Technician和Salesman类;再进一步派生出Developermanager和Salesmanager类。 Employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得出实发基本工资。 Technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。 而DeveloperManager类,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。 SalesManager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。 编程实现工资管理。特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值