Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Structs查找雇员而不使用这么多条件语句_C# - Fatal编程技术网

C# 使用Structs查找雇员而不使用这么多条件语句

C# 使用Structs查找雇员而不使用这么多条件语句,c#,C#,我已经为我的学校项目计划写了这段代码(它仍然不完整),但它在大部分情况下完成了这项工作。问题是,我们必须使用structs来创建一个预定义员工的程序,然后我们必须创建它,这样我们就可以使用任何属性(姓名、员工ID、血型、年龄等)来搜索所有员工 我发现了一种使用条件语句的方法(目前,它适用于name和employee ID)。我已经意识到代码太长了,可能有另一种方法可以搜索整个程序。当我们使用性别作为搜索属性时,我还想让它显示所有男性/女性员工 这是我的密码: using System;

我已经为我的学校项目计划写了这段代码(它仍然不完整),但它在大部分情况下完成了这项工作。问题是,我们必须使用structs来创建一个预定义员工的程序,然后我们必须创建它,这样我们就可以使用任何属性(姓名、员工ID、血型、年龄等)来搜索所有员工

我发现了一种使用条件语句的方法(目前,它适用于name和employee ID)。我已经意识到代码太长了,可能有另一种方法可以搜索整个程序。当我们使用性别作为搜索属性时,我还想让它显示所有男性/女性员工

这是我的密码:

    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(“性别:”