新手记录自己所写过的东西,嘻嘻
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中
}
}
}