完善之前的职员信息管理系统(添加了固态存取职员信息,结构优化了些,命名规范了些。。)

新手记录自己所写过的东西,嘻嘻

Employee类

using System;
using System.Collections;

public class Employee
{
    //职员编号
    private string m_sEmployeeNum;
    //姓名
    private string m_sName;
    //性别
    private string m_sSex;
    //工资
    private int m_iWages;
    //出生时间
    private int m_iBornTime;
    //工作时间
    private int m_iWorkTime;
    //年龄
    private int m_iAge;
    //部门
    private string m_sSort;
    //定义一个数组存储职员信息

    public string EmployeeNum
    {
        get { return m_sEmployeeNum; }
        set { m_sEmployeeNum = value; }
    }
    public string Name
    {
        get { return m_sName; }
        set { m_sName = value; }
    }
    public string Sex
    {
        get { return m_sSex; }
        set { m_sSex = value; }
    }
    public string Sort
    {
        get { return m_sSort; }
        set { m_sSort = value; }
    }
    public int Wages
    {
        get { return m_iWages; }
        set { m_iWages = value; }
    }
    public int BornTime
    {
        get { return m_iBornTime; }
        set { m_iBornTime = value; }
    }
    public int WorkTime
    {
        get { return m_iWorkTime; }
        set { m_iWorkTime = value; }
    }
    public int Age
    {
        get { return CountAge(); }
        set {}
    }

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

    }

    //自定义构造函数,初始化器
    public Employee(string sEmployeeNum, string sName, string sSex, int iWages, int iBornTime, int iWorkTime, string sSort)
    {
        m_sEmployeeNum = sEmployeeNum;
        m_sName = sName;
        m_sSex = sSex;
        m_iWages = iWages;
        m_iBornTime = iBornTime;
        m_iWorkTime = iWorkTime;
        m_iAge = CountAge();
        m_sSort = sSort;
    }

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

    }

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

    }

    //显示数据的虚方法,输出职员姓名、年龄简表,在子类中重写
    public virtual void Display()
    {

    }

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


Teacher类

using System;
using MyTest;

public class Teacher:Employee
{
    ShowData showData = new ShowData();//实例化一个showData对象,用于调用显示数组方法

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

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

    //重写基类的方法,用于删除一个教师信息
    public override void DeleteEmployee()
    {
        bool IsDelete = true; //判断是否删除了一个教师

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


Work类

using System;
using MyTest;

public class Work:Employee
{
    ShowData showData = new ShowData();//实例化一个showData对象,用于调用显示数组方法

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

    }

    //重写基类方法,用于增加一个工人
    public override void AddEmployee()
    {
        InputClass inputClass = new InputClass();
        inputClass.GetInput("工人", "采购,销售,售后");//获取键盘输入的信息
        Console.WriteLine("输入的职员信息为:");
        Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份 年龄 部门");
        showData.ShowEmployee(WriteAndRead.moreEmployee.Count - 1);//显示增加的工人信息
    }

    //重写基类删除职员方法,用于删除一个工人
    public override void DeleteEmployee()
    {
        bool IsDelete = true;//判断是否删除过一个工人

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

ShowData类  //显示职员信息

using System;
using System.Collections;
using MyTest;

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

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

    //重写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 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)退出");
    }

    //按系输出教师信息
    public void ShowByDempartment()
    {
        WriteAndRead.moreEmployee.Sort(Default); //用动态数组的Sort()方法进行比较,参数为Default
        Console.WriteLine("编号  姓名   性别 工资 工作时间 出生年份  年龄  部门");
        //遍历职员数组
        for (int i = 0; i < WriteAndRead.moreEmployee.Count; i++)
        {
            ShowEmployee(i);
        }
    }

    //按名字查找职员信息
    public void ShowByName()
    {

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

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

    //输出所有职员信息
    public void ShowAllEmployee()
    {
        Console.WriteLine("所有职员信息如下:\n编号  姓名   性别 工资 工作时间 出生年份  年龄  部门");
        for (int i = 0; i < WriteAndRead.moreEmployee.Count; i++)
        {
            ShowEmployee(i);
        }
    }

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

InputClass类    //用户输入

using System;
using MyTest;
public class InputClass:Employee
{
    //处理键盘输入的职员信息,参数用于选择添加老师、工人以及可选择的系
    public void GetInput(string sSort, string sSortName)
    {
        Employee employee = 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}各项信息,输完按回车", sSort);

        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 < WriteAndRead.moreEmployee.Count; i++)
                    {
                        if ((WriteAndRead.moreEmployee[i] as Employee).EmployeeNum == emploNum)
                        {
                            Console.WriteLine("已存在该编号,请重新输入");
                            emploNum = "XX";
                            break;
                        }
                        //当遍历到最后一个没有编号相同的则编号可以使用
                        else if (i == WriteAndRead.moreEmployee.Count - 1 && (WriteAndRead.moreEmployee[i] as Employee).EmployeeNum != emploNum)
                        {
                            employee.EmployeeNum = emploNum;
                            IsEmployeeNumRight = true;
                        }
                    }
                }
            }
            catch
            {
                Console.WriteLine("输入有误,请输入数字");
            }

        }
        while (!IsEmployeeNumRight);

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

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

        //工资循环输入,直到合法
        Console.WriteLine("请输入工资(不可为负):");
        do
        {
            try
            {
                InputInt = Convert.ToInt32(Console.ReadLine());
                if (InputInt >= 0)//判断工资
                {
                    employee.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)//判断工作时间
                {
                    employee.WorkTime = InputInt;
                    IsWorkTimeRight = true;
                }
                else
                {
                    Console.WriteLine("输入的工作年份有误,请重新输入(1980-2016)");
                }
            }
            catch
            {
                Console.WriteLine("输入有误,请重新数字!");
            }
        }
        while (!IsWorkTimeRight);

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

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

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


WriteAndRead类   //读取,存储.txt文件中职员信息

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;

public class WriteAndRead
{
    //静态数组,运行时存储职员信息
    public static ArrayList moreEmployee = new ArrayList();

    //读取.txt信息
    public void ReadEmployee()
    {
        Employee employee = new Employee();//实例化Employee对象
        ArrayList arr = new ArrayList();//存储将一行信息分成某一职员详细信息

        List<string> listLines = new List<string>();//用于读取.txt文件
        using (StreamReader reader = new StreamReader(@".\EmployeeData.txt"))
        {
            string line = reader.ReadLine();
            //当不为空时一直读取
            while (line != "" && line != null)
            {
                listLines.Add(line);//信息存在list<>中
                line = reader.ReadLine();
            }
        }
        //循环将list<>信息转化成字符串
        for (int i = 0; i < listLines.Count; i++)
        {
            string[] sArray = listLines[i].Split(' ');//以空格截取
            foreach (string a in sArray)//遍历所有
            {
                arr.Add(a);//存储单个信息
            }
        }
        for (int i = 0; i < arr.Count; i++)
        {
            employee = new Employee();//以不同对象存储不同职员信息
            if (i % 8 == 0)
            {    
                employee.EmployeeNum = Convert.ToString(arr[i]);
                employee.Name = Convert.ToString(arr[i + 1]);
                employee.Sex = Convert.ToString(arr[i + 2]);
                employee.Age = Convert.ToInt32(arr[i + 3]);
                employee.Wages = Convert.ToInt32(arr[i + 4]);
                employee.BornTime = Convert.ToInt32(arr[i + 5]);
                employee.WorkTime = Convert.ToInt32(arr[i + 6]);
                employee.Sort = Convert.ToString(arr[i + 7]);
                moreEmployee.Add(employee);//将.txt中的职员信息存在动态数组中
            }
        }
    }

    //将信息写人到.txt中
    public void WriteEmployee()
    {
        FileStream fileStream = new FileStream(@".\EmployeeData.txt", FileMode.Create);//定义存储信息路径
        StreamWriter streanWriter = new StreamWriter(fileStream);
        for (int i = 0; i < moreEmployee.Count; i++)
        {
            //将一个职员信息以空格隔开保存成字符串
            string s = (moreEmployee[i] as Employee).EmployeeNum + " " + (moreEmployee[i] as Employee).Name + " "
                 + (moreEmployee[i] as Employee).Sex + " " + (moreEmployee[i] as Employee).Age + " " + (moreEmployee[i] as Employee).Wages + " " + (moreEmployee[i] as Employee).BornTime
                + " " + (moreEmployee[i] as Employee).WorkTime + " " + (moreEmployee[i] as Employee).Sort;
            streanWriter.Flush();
            streanWriter.WriteLine(s);//写入到.txt中
            streanWriter.Flush();
        }
        //清空缓冲区
        streanWriter.Close();
        fileStream.Close();
    }
}


//主程序运行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.IO;

namespace MyTest
{
    public class RunMyTest
    {
        static void Main(string[] args)
        {
            ShowData showData = new ShowData();//实例化一个ShowData对象
            WriteAndRead writeAndRead = new WriteAndRead();//实例化一个WriteAndRead对象
            Employee employee = new Employee();//实例化一个Employee对象
            Teacher teacher = new Teacher();//实例化一个Teacher对象
            Work work = new Work();//实例化一个Work对象

            writeAndRead.ReadEmployee();//读取.txt中的职员信息
            showData.ShowMianPage();//显示主界面操作介绍
            var Number = 0;//定义一个推理变量,存储用户输入

            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:
                            showData.ShowAllEmployee();//显示所有职员信息
                            break;
                        case 4:
                            teacher.DeleteEmployee();//删除一个老师
                            break;
                        case 5:
                            work.DeleteEmployee();//删除一个工人
                            break;
                        case 6:
                            showData.ShowByDempartment();//按系、部门显示所有职员信息
                            break;
                        case 7:
                            showData.ShowByName();//通过名字搜索并显示该职员信息
                            break;
                        case 8:
                            showData.Display();//显示只有职员姓名和年龄的简表
                            break;
                        case 9://退出程序
                            break;
                        default://输入的数字不在0-9
                            Console.WriteLine("输入的数字错误,请重新输入(0-9)!");
                            break;
                    }
                }
                //输入的不是int
                else
                {
                    Console.WriteLine("输入的信息错误,请重新输入数字(0-9)!");
                }
            } while (Number != 9); //退出程序

            writeAndRead.WriteEmployee();//操作完成,将数据存储在.txt中
        }
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值