职工信息管理(几年后看看自己的代码会不会笑出声)

来源:互联网 发布:飞龙大数据平台 编辑:程序博客网 时间:2024/05/01 03:24


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.IO;

namespace MyTest
{
    class Employee
    {
        //职员编号
        public string EmployeeNum;
        //姓名
        public string Name;
        //性别
        public string Sex;
        //工资
        public int Wages;
        //出生时间
        public int BornTime;
        //工作时间
        public int WorkTime;
        //年龄
        public int Age;
        //部门
        public string Sort;
        //定义一个动态数组存储职员信息
        public static ArrayList moreEmployee = new ArrayList();

        //默认构造函数
        public Employee()
        {

        }

        //自定义构造函数,初始化器
        public Employee(string employeeNum, string name, string sex, int wages, int bornTime, int workTime, string sort)
        {
            EmployeeNum = employeeNum;
            Name = name;
            Sex = sex;
            Wages = wages;
            BornTime = bornTime;
            WorkTime = workTime;
            Age = CountAge();
            Sort = sort;
        }

        //虚拟增加职员方法,在Work,Teacher中重写
        public virtual void AddEmployee()
        {

        }
        //计算职员年龄
        public int CountAge()
        {
            if (WorkTime <= BornTime)//判断工作时间与出生时间是否合理
            {
                Console.WriteLine("输入的工作时间和出生时间不合理:");
                return -1;
            }
            else
            {
                return WorkTime - BornTime;//合理则返回相减得到的年龄
            }
        }

        //显示数据的虚方法,输出职员姓名、年龄简表
        public virtual void DisPlay()
        {
            Console.WriteLine("职员信息简表如下:\n姓名,年龄");
            //用for循环数组,输出所有职员姓名、年龄
            for (int i = 0; i < moreEmployee.Count; i++)
            {
                Console.WriteLine("{0},{1}", (moreEmployee[i] as Employee).Name, (moreEmployee[i] as Employee).CountAge());
            }

        }

        //遍历数组并输出
        public void ShowEmployee(int i)
        {
            Console.WriteLine("{0} {1}   {2}   {3}   {4}    {5}    {6}    {7}", (moreEmployee[i] as Employee).EmployeeNum,
                (moreEmployee[i] as Employee).Name.PadRight(3), (moreEmployee[i] as Employee).Sex, (moreEmployee[i] as Employee).Wages,
                (moreEmployee[i] as Employee).BornTime, (moreEmployee[i] as Employee).WorkTime, (moreEmployee[i] as Employee).CountAge(),
                (moreEmployee[i] as Employee).Sort);
        }

        //处理键盘输入的职员信息,参数用于选择添加老师、工人以及可选择的系
        public void GetInput(string job, string dempartment)
        {
            Employee e = new Employee();
            string InputString = "";//存储输入的string
            string emploNum = "XX";//在编号前加上XX
            int InputInt = 0;//存储输入的int
            bool IsEmployeeNumRight = false;//判断输入的编号是否合法
            bool IsSexRight = false;//判断输入的性别是否合法
            bool IsWagesRight = false;//判断输入的工资是否合法
            bool IsBornTimeRight = false;//判断输入的出生时间是否合法
            bool IsWorkTimeRight = false;//判断输入的工作时间是否合法
            Console.WriteLine("请输入要添加的{0}各项信息,输完按回车", job);

            Console.WriteLine("请输入编号(1-999):");
            do
            {
                try
                {
                    InputInt = Convert.ToInt32(Console.ReadLine());
                    if (InputInt > 0 && InputInt < 1000)//判断编号
                    {
                        InputString = InputInt.ToString("000");//将int型转化为字符串
                        emploNum += InputString;//在编号前加上统一字符XX
                        for (int i = 0; i < moreEmployee.Count; i++)
                        {
                            if ((moreEmployee[i] as Employee).EmployeeNum == emploNum)
                            {
                                Console.WriteLine("已存在该编号,请重新输入");
                                emploNum = "XX";
                                break;
                            }
                            //当遍历到最后一个没有编号相同的则编号可以使用
                            else if (i == moreEmployee.Count - 1 && (moreEmployee[i] as Employee).EmployeeNum != emploNum)
                            {
                                e.EmployeeNum = emploNum;
                                IsEmployeeNumRight = true;
                            }
                        }
                    }
                }
                catch
                {
                    Console.WriteLine("输入有误,请输入数字");
                }

            }
            while (!IsEmployeeNumRight);
            //InputString = Convert.ToString(Console.ReadLine());
            //emploNum += InputString;
            //e.EmployeeNum = emploNum;

            Console.WriteLine("请输入名字:");
            e.Name = Convert.ToString(Console.ReadLine());//输入姓名

            Console.WriteLine("请输入性别(男、女):");
            //性别循环输入,直到合法
            do
            {
                InputString = Console.ReadLine();
                if (InputString == "女" || InputString == "男")//判断性别
                {
                    e.Sex = InputString;
                    IsSexRight = true;
                }
                else
                {
                    Console.WriteLine("输入的性别有误,请重新输入(男、女)");
                }
            }
            while (!IsSexRight);

            //工资循环输入,直到合法
            Console.WriteLine("请输入工资(不可为负):");
            do
            {
                try
                {
                    InputInt = Convert.ToInt32(Console.ReadLine());
                    if (InputInt >= 0)//判断工资
                    {
                        e.Wages = InputInt;
                        IsWagesRight = true;
                    }
                    else
                    {
                        Console.WriteLine("输入的工资有误,请重新输入(工资要大于0)");
                    }
                }
                catch
                {
                    Console.WriteLine("输入有误,请输入数字");
                }

            }
            while (!IsWagesRight);

            //工作时间循环输入,直到合法
            Console.WriteLine("请输入参加工作的年份(1980-2016):");
            do
            {
                try
                {
                    InputInt = Convert.ToInt32(Console.ReadLine());
                    if (InputInt < 2017 && InputInt > 1956)//判断工作时间
                    {
                        e.WorkTime = InputInt;
                        IsWorkTimeRight = true;
                    }
                    else
                    {
                        Console.WriteLine("输入的工作年份有误,请重新输入(1980-2016)");
                    }
                }
                catch
                {
                    Console.WriteLine("输入有误,请重新数字!");
                }
            }
            while (!IsWorkTimeRight);

            //出生时间循环输入,直到合法
            Console.WriteLine("请输入出生时间(不能比工作时间早(1956-{0})):", e.WorkTime);
            do
            {
                try
                {
                    InputInt = Convert.ToInt32(Console.ReadLine());
                    if (InputInt < e.WorkTime && InputInt > 1956)//判断出生时间
                    {
                        e.BornTime = InputInt;
                        IsBornTimeRight = true;
                    }
                    else
                    {
                        Console.WriteLine("输入的出生年份有误,请重新输入(1956-{0})", e.WorkTime);
                    }
                }
                catch
                {
                    Console.WriteLine("输入有误,请重新输入数字!");
                }
            }
            while (!IsBornTimeRight);

            Console.WriteLine("请输入所属系或部门,可选择({0}),可添加新系、部门:", dempartment);
            e.Sort = Convert.ToString(Console.ReadLine());//存储部门、系信息

            //当所有信息正确时,确认可以添加该职员
            if (IsBornTimeRight && IsWorkTimeRight && IsWagesRight && IsSexRight)
            {
                moreEmployee.Add(e);
            }
        }

        //删除职员的虚方法,在子类中重写
        public virtual void DeleteEmployee()
        {

        }

        //给出11个职员的全部信息,存储在动态数组中
        public void EmployeeDate()
        {
            moreEmployee.Add(new Employee(
                     EmployeeNum = "XX001",
                     Name = "张三",
                     Sex = "男",
                     Wages = 6000,
                     BornTime = 1986,
                     WorkTime = 2016,
                     Sort = "化学"
                 ));
            moreEmployee.Add(new Employee(
                    EmployeeNum = "XX002",
                    Name = "李四",
                    Sex = "男",
                    Wages = 8000,
                    BornTime = 1991,
                    WorkTime = 2016,
                    Sort = "数学"
                ));
            moreEmployee.Add(new Employee(
                   EmployeeNum = "XX003",
                   Name = "王老五",
                   Sex = "男",
                   Wages = 10000,
                   BornTime = 1981,
                   WorkTime = 2016,
                    Sort = "化学"
               ));
            moreEmployee.Add(new Employee(
                  EmployeeNum = "XX005",
                  Name = "王老吉",
                  Sex = "男",
                  Wages = 8300,
                  BornTime = 1996,
                  WorkTime = 2016,
                   Sort = "数学"
              ));
            moreEmployee.Add(new Employee(
                 EmployeeNum = "XX007",
                 Name = "加多宝",
                 Sex = "女",
                 Wages = 12000,
                 BornTime = 1996,
                 WorkTime = 2016,
                  Sort = "采购"
            ));
            moreEmployee.Add(new Employee(
                 EmployeeNum = "XX015",
                 Name = "王二小",
                 Sex = "男",
                 Wages = 7800,
                 BornTime = 1987,
                 WorkTime = 2015,
                  Sort = "英语"
             ));
            moreEmployee.Add(new Employee(
                EmployeeNum = "XX019",
                Name = "隔老王",
                Sex = "男",
                Wages = 4500,
                BornTime = 1979,
                WorkTime = 2016,
                 Sort = "数学"
            ));
            moreEmployee.Add(new Employee(
               EmployeeNum = "XX120",
               Name = "王大锤",
               Sex = "男",
               Wages = 12400,
               BornTime = 1994,
               WorkTime = 2016,
                Sort = "英语"
           ));
            moreEmployee.Add(new Employee(
               EmployeeNum = "XX220",
               Name = "末班车",
               Sex = "女",
               Wages = 18000,
               BornTime = 1998,
               WorkTime = 2016,
                Sort = "语文"
           ));
            moreEmployee.Add(new Employee(
                EmployeeNum = "XX319",
                Name = "老街",
                Sex = "男",
                Wages = 13000,
                BornTime = 1976,
                WorkTime = 2016,
                Sort = "售后"
            ));
            moreEmployee.Add(new Employee(
               EmployeeNum = "XX340",
               Name = "模特",
               Sex = "女",
               Wages = 23605,
               BornTime = 1999,
               WorkTime = 2016,
               Sort = "销售"
           ));
        }
    }

    //继承Employee类
    class Teacher : Employee
    {
        //重载Employee的DisPlay方法
        public override void DisPlay()
        {
            Console.WriteLine("所有职员信息如下:\n编号  姓名   性别 工资 工作时间 出生年份  年龄  部门");
            for (int i = 0; i < moreEmployee.Count; i++)
            {
                ShowEmployee(i);
            }
        }

        //重写基类的方法,用于增加一个老师信息
        public override void AddEmployee()
        {
            GetInput("教师", "化学,语文,数学");
            Console.WriteLine("输入的职员信息为:");
            Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份 年龄 部门");
            ShowEmployee(moreEmployee.Count - 1);
        }

        //重写基类的方法,用于删除一个教师信息
        public override void DeleteEmployee()
        {

            bool IsDelete = true; //判断是否删除了一个教师

            //遍历职员信息数组
            for (int i = 0; i < moreEmployee.Count; i++)
            {
                //判断是否是一个老师以及是否删除过
                if (((moreEmployee[i] as Employee).Sort == "化学" || (moreEmployee[i] as Employee).Sort == "数学" ||
                    (moreEmployee[i] as Employee).Sort == "英语") && IsDelete)
                {
                    Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份  年龄 部门");
                    ShowEmployee(i);//显示删除该教师的信息
                    Employee.moreEmployee.Remove(moreEmployee[i]);//删除找到的第一个教师
                    Console.WriteLine("已删除该教师");
                    IsDelete = false;
                }
            }
        }
    }

    //继承Employee类
    class Work : Employee
    {

        //重载Employee的DisPlay方法
        public override void DisPlay()
        {

        }

        //重写基类方法,用于增加一个工人
        public override void AddEmployee()
        {

            GetInput("工人", "采购,销售,售后");//获取键盘输入的信息
            Console.WriteLine("输入的职员信息为:");
            Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份 年龄 部门");
            ShowEmployee(moreEmployee.Count - 1);//显示增加的工人信息
        }

        //重写基类删除职员方法,用于删除一个工人
        public override void DeleteEmployee()
        {

            bool IsDelete = true;//判断是否删除过一个工人

            //遍历职员数组
            for (int i = 0; i < moreEmployee.Count; i++)
            {
                //找到第一个工人
                if (((moreEmployee[i] as Employee).Sort == "采购" || (moreEmployee[i] as Employee).Sort == "售后" || (moreEmployee[i] as Employee).Sort == "销售") && IsDelete)
                {
                    Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份  年龄  部门");
                    ShowEmployee(i);//显示删除该工人的信息
                    Employee.moreEmployee.Remove(moreEmployee[i]);//删除找到的第一工人
                    Console.WriteLine("已删除该工人");
                    IsDelete = false;

                }
            }
        }
    }

    //继承了Employee,并实现了Icomparer接口
    class ShowData : Employee, IComparer
    {

        //输出主界面操作说明
        public void ShowMianPage()
        {
            Console.WriteLine("************************************************************");
            Console.WriteLine("职工信息管理(按相应数字进行操作)");
            Console.WriteLine("************************************************************");
            Console.WriteLine("(0)重新显示此操作提示");
            Console.WriteLine("(1)增加一位教师记录");
            Console.WriteLine("(2)增加一位工人记录");
            Console.WriteLine("(3)显示全部职工记录");
            Console.WriteLine("(4)删除一个教师");
            Console.WriteLine("(5)删除一个工人");
            Console.WriteLine("(6)按系输出职员信息");
            Console.WriteLine("(7)按姓名检索所有信息");
            Console.WriteLine("(8)显示职工只含姓名,年龄的简表");
            Console.WriteLine("(9)退出");
        }

        //实例化一个静态的ICompare接口
        public static IComparer Default = new ShowData();

        //重写IComparer的Compare(obj,obj)方法
        public int Compare(object departmentA, object departmentB)
        {
            //判断相比较的是否为同一类型
            if (departmentA is Employee && departmentB is Employee)
            {
                return Comparer.Default.Compare(((Employee)departmentA).Sort, ((Employee)departmentB).Sort);
            }
            else
            {
                throw new ArgumentException("无法按系输出!");
            }
        }

        //按系输出教师信息
        public void ShowByDempartment()
        {

            moreEmployee.Sort(Default); //用动态数组的Sort()方法进行比较,参数为Default
            Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份  年龄  部门");
            //遍历职员数组
            for (int i = 0; i < moreEmployee.Count; i++)
            {
                //判断是否是一个教师
                //  if ((moreEmployee[i] as Employee).Sort == "化学" || (moreEmployee[i] as Employee).Sort == "数学" || (moreEmployee[i] as Employee).Sort == "英语")
                //  {
                ShowEmployee(i);
                //  }
            }
        }

        //输入名字查找该职员信息
        public void ShowByName()
        {

            bool IsChecked = false;//判断是否找到该职员
            Console.WriteLine("请输入您要查找职员的姓名");
            string Name = Convert.ToString(Console.ReadLine());//将输入的姓名存储在临时变量Name中

            //遍历职员数组
            for (int i = 0; i < moreEmployee.Count; i++)
            {
                //判断输入的名字在数组中是否存在
                if (Name == ((moreEmployee[i] as Employee).Name) && !IsChecked)
                {
                    ShowEmployee(i);
                    IsChecked = true;
                }
                //遍历到最后一个元素没有找到该人信息
                else if (i == moreEmployee.Count - 1 && !IsChecked)
                {
                    Console.WriteLine("没有找到该人信息,请核对姓名!");
                }
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var Number = 0;//定义一个推理变量,存储用户输入

            Employee employee = new Employee();//实例化一个Employee对象
            Teacher teacher = new Teacher();//实例化一个Teacher对象
            Work work = new Work();//实例化一个Work对象
            ShowData showData = new ShowData();//实例化一个ShowData对象

            showData.ShowMianPage();//显示主界面操作介绍
            employee.EmployeeDate();//存储11个职员信息到数组中

            do
            {
                bool IsLegal = true;//判断输入是否为数字

                //当输入不是数字(0-9)时产生异常
                try
                {
                    Number = Convert.ToInt32(Console.ReadLine());
                }
                //不是int类型则需重新输入,无法操作
                catch
                {
                    IsLegal = false;
                }
                //当输入合法时(是int类型)
                if (IsLegal)
                {
                    switch (Number)
                    {
                        case 0:
                            showData.ShowMianPage();//显示操作介绍
                            break;
                        case 1:
                            teacher.AddEmployee();//增加一个老师
                            break;
                        case 2:
                            work.AddEmployee();//增加一个工人
                            break;
                        case 3:
                            teacher.DisPlay();//实现所有职员信息
                            break;
                        case 4:
                            teacher.DeleteEmployee();//删除一个老师
                            break;
                        case 5:
                            work.DeleteEmployee();//删除一个工人
                            break;
                        case 6:
                            showData.ShowByDempartment();//将职员按系、部门输出信息
                            break;
                        case 7:
                            showData.ShowByName();//通过名字搜索职员信息
                            break;
                        case 8:
                            employee.DisPlay();//显示只有职员姓名和年龄的简表
                            break;
                        case 9://退出程序
                            break;
                        default://输入的数字不在0-9
                            Console.WriteLine("输入的数字错误,请重新输入(0-9)!");
                            break;
                    }
                }
                //输入的不是int
                else
                {
                    Console.WriteLine("输入的信息错误,请重新输入数字(0-9)!");
                }
            } while (Number != 9); //退出程序
        }
    }
}

0 0
原创粉丝点击