C# 使用Structs查找雇员而不使用这么多条件语句
我已经为我的学校项目计划写了这段代码(它仍然不完整),但它在大部分情况下完成了这项工作。问题是,我们必须使用structs来创建一个预定义员工的程序,然后我们必须创建它,这样我们就可以使用任何属性(姓名、员工ID、血型、年龄等)来搜索所有员工 我发现了一种使用条件语句的方法(目前,它适用于name和employee ID)。我已经意识到代码太长了,可能有另一种方法可以搜索整个程序。当我们使用性别作为搜索属性时,我还想让它显示所有男性/女性员工 这是我的密码:C# 使用Structs查找雇员而不使用这么多条件语句,c#,C#,我已经为我的学校项目计划写了这段代码(它仍然不完整),但它在大部分情况下完成了这项工作。问题是,我们必须使用structs来创建一个预定义员工的程序,然后我们必须创建它,这样我们就可以使用任何属性(姓名、员工ID、血型、年龄等)来搜索所有员工 我发现了一种使用条件语句的方法(目前,它适用于name和employee ID)。我已经意识到代码太长了,可能有另一种方法可以搜索整个程序。当我们使用性别作为搜索属性时,我还想让它显示所有男性/女性员工 这是我的密码: using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Terminals
{
class Program
{
struct Employee
{
public string Name;
public int EmployeeID;
public string BloodGroup;
public int Salary;
public int Age;
public string Gender;
}
static void Main(string[] args)
{
Employee employee1;
Employee employee2;
Employee employee3;
Employee employee4;
Employee employee5;
Employee employee6;
employee1.Name = "James";
employee1.EmployeeID = int.Parse("10");
employee1.BloodGroup = "B +ive";
employee1.Salary = int.Parse("500000");
employee1.Age = int.Parse("26");
employee1.Gender = "Male";
employee2.Name = "Ali Khan";
employee2.EmployeeID = int.Parse("20");
employee2.BloodGroup = "O +ive";
employee2.Salary = int.Parse("250000");
employee2.Age = int.Parse("22");
employee2.Gender = "Male";
employee3.Name = "Jessica Hills";
employee3.EmployeeID = int.Parse("30");
employee3.BloodGroup = "A -ive";
employee3.Salary = int.Parse("400000");
employee3.Age = int.Parse("25");
employee3.Gender = "Female";
employee4.Name = "William";
employee4.EmployeeID = int.Parse("40");
employee4.BloodGroup = "O -ive";
employee4.Salary = int.Parse("700000");
employee4.Age = int.Parse("29");
employee4.Gender = "Male";
employee5.Name = "Lizzy";
employee5.EmployeeID = int.Parse("50");
employee5.BloodGroup = "AB +ive";
employee5.Salary = int.Parse("70000");
employee5.Age = int.Parse("19");
employee5.Gender = "Female";
employee6.Name = "Kyle";
employee6.EmployeeID = int.Parse("60");
employee6.BloodGroup = "AB -ive";
employee6.Salary = int.Parse("600000");
employee6.Age = int.Parse("21");
employee6.Gender = "Male";
Console.WriteLine("Please enter the number of the term you would like to search with (1-6)?");
Console.WriteLine("1. Name");
Console.WriteLine("2. Employee ID");
Console.WriteLine("3. Blood Group");
Console.WriteLine("4. Salary");
Console.WriteLine("5. Age");
Console.WriteLine("6. Gender");
Console.WriteLine("Please enter the number (1-6): ");
int searchterm = int.Parse(Console.ReadLine());
if (searchterm == 1)
{
Console.WriteLine("Please enter the name of the employee: ");
string name = Console.ReadLine();
if (name == employee1.Name)
{
Console.Write("Name: " + employee1.Name);
Console.WriteLine("Employee ID: " + employee1.EmployeeID);
Console.WriteLine("Blood Group: " + employee1.BloodGroup);
Console.WriteLine("Salary: " + employee1.Salary);
Console.WriteLine("Age: " + employee1.Age);
Console.WriteLine("Gender: " + employee1.Gender);
Console.ReadKey();
}
else if (name == employee2.Name)
{
Console.Write("Name: " + employee2.Name);
Console.WriteLine("Employee ID: " + employee2.EmployeeID);
Console.WriteLine("Blood Group: " + employee2.BloodGroup);
Console.WriteLine("Salary: " + employee2.Salary);
Console.WriteLine("Age: " + employee2.Age);
Console.WriteLine("Gender: " + employee2.Gender);
Console.ReadKey();
}
else if (name == employee3.Name)
{
Console.Write("Name: " + employee3.Name);
Console.WriteLine("Employee ID: " + employee3.EmployeeID);
Console.WriteLine("Blood Group: " + employee3.BloodGroup);
Console.WriteLine("Salary: " + employee3.Salary);
Console.WriteLine("Age: " + employee3.Age);
Console.WriteLine("Gender: " + employee3.Gender);
Console.ReadKey();
}
else if (name == employee4.Name)
{
Console.Write("Name: " + employee4.Name);
Console.WriteLine("Employee ID: " + employee4.EmployeeID);
Console.WriteLine("Blood Group: " + employee4.BloodGroup);
Console.WriteLine("Salary: " + employee4.Salary);
Console.WriteLine("Age: " + employee4.Age);
Console.WriteLine("Gender: " + employee4.Gender);
Console.ReadKey();
}
else if (name == employee5.Name)
{
Console.Write("Name: " + employee5.Name);
Console.WriteLine("Employee ID: " + employee5.EmployeeID);
Console.WriteLine("Blood Group: " + employee5.BloodGroup);
Console.WriteLine("Salary: " + employee5.Salary);
Console.WriteLine("Age: " + employee5.Age);
Console.WriteLine("Gender: " + employee5.Gender);
Console.ReadKey();
}
else if (name == employee6.Name)
{
Console.Write("Name: " + employee1.Name);
Console.WriteLine("Employee ID: " + employee6.EmployeeID);
Console.WriteLine("Blood Group: " + employee6.BloodGroup);
Console.WriteLine("Salary: " + employee6.Salary);
Console.WriteLine("Age: " + employee6.Age);
Console.WriteLine("Gender: " + employee6.Gender);
Console.ReadKey();
}
else
{
Console.WriteLine("Please try again.");
return;
}
}
if (searchterm == 2)
{
Console.WriteLine("Please enter the employee ID of the employee");
int employeeid = int.Parse(Console.ReadLine());
if (employeeid == employee1.EmployeeID)
{
Console.Write("Name: " + employee1.Name);
Console.WriteLine("Employee ID: " + employee1.EmployeeID);
Console.WriteLine("Blood Group: " + employee1.BloodGroup);
Console.WriteLine("Salary: " + employee1.Salary);
Console.WriteLine("Age: " + employee1.Age);
Console.WriteLine("Gender: " + employee1.Gender);
Console.ReadKey();
}
else if (employeeid == employee2.EmployeeID)
{
Console.Write("Name: " + employee2.Name);
Console.WriteLine("Employee ID: " + employee2.EmployeeID);
Console.WriteLine("Blood Group: " + employee2.BloodGroup);
Console.WriteLine("Salary: " + employee2.Salary);
Console.WriteLine("Age: " + employee2.Age);
Console.WriteLine("Gender: " + employee2.Gender);
Console.ReadKey();
}
else if (employeeid == employee3.EmployeeID)
{
Console.Write("Name: " + employee3.Name);
Console.WriteLine("Employee ID: " + employee3.EmployeeID);
Console.WriteLine("Blood Group: " + employee3.BloodGroup);
Console.WriteLine("Salary: " + employee3.Salary);
Console.WriteLine("Age: " + employee3.Age);
Console.WriteLine("Gender: " + employee3.Gender);
Console.ReadKey();
}
else if (employeeid == employee4.EmployeeID)
{
Console.Write("Name: " + employee4.Name);
Console.WriteLine("Employee ID: " + employee4.EmployeeID);
Console.WriteLine("Blood Group: " + employee4.BloodGroup);
Console.WriteLine("Salary: " + employee4.Salary);
Console.WriteLine("Age: " + employee4.Age);
Console.WriteLine("Gender: " + employee4.Gender);
Console.ReadKey();
}
else if (employeeid == employee5.EmployeeID)
{
Console.Write("Name: " + employee5.Name);
Console.WriteLine("Employee ID: " + employee5.EmployeeID);
Console.WriteLine("Blood Group: " + employee5.BloodGroup);
Console.WriteLine("Salary: " + employee5.Salary);
Console.WriteLine("Age: " + employee5.Age);
Console.WriteLine("Gender: " + employee5.Gender);
Console.ReadKey();
}
else if (employeeid == employee6.EmployeeID)
{
Console.Write("Name: " + employee6.Name +" ");
Console.WriteLine("Employee ID: " + employee6.EmployeeID);
Console.WriteLine("Blood Group: " + employee6.BloodGroup);
Console.WriteLine("Salary: " + employee6.Salary);
Console.WriteLine("Age: " + employee6.Age);
Console.WriteLine("Gender: " + employee6.Gender);
Console.ReadKey();
}
else
{
Console.WriteLine("Please try again.");
Console.ReadKey();
return;
}
}
}
}
}
正如其他人所说,LINQ将是您在这里的朋友,使用一个集合,如
列表
也会有很大帮助。您可以消除else if
逻辑,并将代码大大缩短
对于Employee emp=employeeList.Find(Employee=>Employee.Name==Name)代码>行,您需要根据用户输入,通过正确的结构成员将谓词更改为Find
。如果无法从列表中找到员工
,则其他
逻辑将报告该情况(这也需要针对每个搜索条件)。我还添加了一个私有方法来为员工列表添加种子。一个包含所有控制台输出行的简单方法也将进一步缩短此时间-只需向其提供找到的Employee
唯一的问题是,如果两个或两个以上的员工对其中一个成员具有相同的价值。除了性别
,您的种子员工似乎没有任何共同点,在这种情况下,您需要筛选其他属性以将其缩小到一名员工,或者根据搜索条件输出所有找到的员工.Find
将返回与条件匹配的第一个员工,因此这将不起作用(或者至少,它将只输出第一个找到的员工!)您可以将此代码更改为使用.FindAll
,然后将新的列表
传递给私有方法,并循环遍历列表中的所有员工,输出他们的每个信息。重载ValidateEmployee
方法,我写了一个列表
,应该可以解决这个问题。您可以让所有条件执行.FindAll
并删除ValidateEmployee
方法,该方法接收单个员工
,具体取决于您
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Terminals
{
class Program
{
struct Employee
{
public string Name;
public int EmployeeID;
public string BloodGroup;
public int Salary;
public int Age;
public string Gender;
}
static void Main(string[] args)
{
List<Employee> employeeList = SeedEmployees();
Console.WriteLine("Please enter the number of the term you would like to search with (1-6):");
Console.WriteLine("1. Name");
Console.WriteLine("2. Employee ID");
Console.WriteLine("3. Blood Group");
Console.WriteLine("4. Salary");
Console.WriteLine("5. Age");
Console.WriteLine("6. Gender");
Console.WriteLine("Please enter the number (1-6): ");
int searchterm = int.Parse(Console.ReadLine());
if (searchterm == 1)
{
Console.WriteLine("Please enter the name of the employee: ");
string name = Console.ReadLine();
Employee emp = employeeList.Find(employee => employee.Name == name);
ValidateEmployee(emp);
}
else if (searchterm == 6)
{
Console.WriteLine("Please enter the gender of the employee: ");
string gender = Console.ReadLine();
List<Employee> emps = employeeList.FindAll(employee => employee.Gender == gender);
ValidateEmployee(emps);
}
//the rest of your "if" conditions for search terms...
else
{
Console.WriteLine("Please try again.");
Console.ReadKey();
return;
}
Console.WriteLine("Done. Press any key to exit...");
Console.ReadLine();
}
private static void ValidateEmployee(Employee emp)
{
if (emp.Equals(default(Employee)))
{
//employee not found
Console.WriteLine($"Employee not found by supplied input. Please try again.");
Console.ReadLine();
return;
}
else
{
//output the emplyee info
OutputEmployeeInfo(emp);
}
}
private static void ValidateEmployee(List<Employee> emps)
{
foreach (Employee emp in emps)
{
if (emp.Equals(default(Employee)))
{
//employee not found
Console.WriteLine($"Employee not found by supplied input.");
}
else
{
//output the emplyee info
OutputEmployeeInfo(emp);
}
}
}
private static void OutputEmployeeInfo(Employee employee)
{
Console.Write("Name: " + employee.Name);
Console.WriteLine("Employee ID: " + employee.EmployeeID);
Console.WriteLine("Blood Group: " + employee.BloodGroup);
Console.WriteLine("Salary: " + employee.Salary);
Console.WriteLine("Age: " + employee.Age);
Console.WriteLine("Gender: " + employee.Gender);
Console.ReadKey();
}
private static List<Employee> SeedEmployees()
{
Employee employee1;
Employee employee2;
Employee employee3;
Employee employee4;
Employee employee5;
Employee employee6;
employee1.Name = "James";
employee1.EmployeeID = int.Parse("10");
employee1.BloodGroup = "B +ive";
employee1.Salary = int.Parse("500000");
employee1.Age = int.Parse("26");
employee1.Gender = "Male";
employee2.Name = "Ali Khan";
employee2.EmployeeID = int.Parse("20");
employee2.BloodGroup = "O +ive";
employee2.Salary = int.Parse("250000");
employee2.Age = int.Parse("22");
employee2.Gender = "Male";
employee3.Name = "Jessica Hills";
employee3.EmployeeID = int.Parse("30");
employee3.BloodGroup = "A -ive";
employee3.Salary = int.Parse("400000");
employee3.Age = int.Parse("25");
employee3.Gender = "Female";
employee4.Name = "William";
employee4.EmployeeID = int.Parse("40");
employee4.BloodGroup = "O -ive";
employee4.Salary = int.Parse("700000");
employee4.Age = int.Parse("29");
employee4.Gender = "Male";
employee5.Name = "Lizzy";
employee5.EmployeeID = int.Parse("50");
employee5.BloodGroup = "AB +ive";
employee5.Salary = int.Parse("70000");
employee5.Age = int.Parse("19");
employee5.Gender = "Female";
employee6.Name = "Kyle";
employee6.EmployeeID = int.Parse("60");
employee6.BloodGroup = "AB -ive";
employee6.Salary = int.Parse("600000");
employee6.Age = int.Parse("21");
employee6.Gender = "Male";
return new List<Employee>
{
employee1,
employee2,
employee3,
employee4,
employee5,
employee6
};
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间终端
{
班级计划
{
结构雇员
{
公共字符串名称;
公共国际雇员ID;
公共团体;
公共收入;
公共信息;
社会性别;
}
静态void Main(字符串[]参数)
{
List employeeList=SeedEmployees();
Console.WriteLine(“请输入要搜索的术语的编号(1-6):”;
Console.WriteLine(“1.名称”);
Console.WriteLine(“2.员工ID”);
控制台。书写线(“3.血型”);
控制台。写线(“4.工资”);
控制台。写入线(“5.年龄”);
控制台。书写线(“6.性别”);
Console.WriteLine(“请输入数字(1-6):”;
int searchterm=int.Parse(Console.ReadLine());
if(searchterm==1)
{
Console.WriteLine(“请输入员工姓名:”);
字符串名称=Console.ReadLine();
emp=employeeList.Find(Employee=>Employee.Name==Name);
确认员工(emp);
}
else if(searchterm==6)
{
Console.WriteLine(“请输入员工的性别:”);
字符串性别=Console.ReadLine();
List emps=employeeList.FindAll(employee=>employee.Gender==Gender);
确认员工(EMP);
}
//搜索词的其他“如果”条件。。。
其他的
{
控制台。WriteLine(“请再试一次”);
Console.ReadKey();
返回;
}
Console.WriteLine(“完成。按任意键退出…”);
Console.ReadLine();
}
私有静态无效验证员工(员工emp)
{
如果(emp.等于(默认值(员工)))
{
//找不到员工
Console.WriteLine($“未通过提供的输入找到员工。请重试。”);
Console.ReadLine();
返回;
}
其他的
{
//输出员工信息
输出员工信息(emp);
}
}
私有静态void ValidateEmployee(列出EMP)
{
foreach(emp中的员工emp)
{
如果(emp.等于(默认值(员工)))
{
//找不到员工
Console.WriteLine($“未通过提供的输入找到员工。”);
}
其他的
{
//输出员工信息
输出员工信息(emp);
}
}
}
私有静态void OutputEmployeeInfo(员工)
{
Console.Write(“名称:“+employee.Name”);
Console.WriteLine(“员工ID:+Employee.EmployeeID”);
Console.WriteLine(“血型:+员工.血型”);
Console.WriteLine(“工资:+员工工资”);
控制台.WriteLine(“年龄:+employee.Age”);
Console.WriteLine(“性别:”