簡體   English   中英

如何在不覆蓋的情況下將項目添加到列表中並在 C# 中顯示相同內容?

[英]How to add items to a list without over writing and to display the same in C#?

我已經為 Employee 類開發了代碼,其中包含員工編號、姓名、doj、職稱和薪水。 我想將員工的這些數據添加到列表中。 但是當我嘗試這樣做時,前一個員工的詳細信息被后者覆蓋,並且它會顯示兩次詳細信息。 而且我還想查看以特定字符開頭的所有員工詳細信息。 我怎樣才能做到這一點? 這是我的代碼。

我的代碼::

class Program
{
    static void Main(string[] args)
    {

        int option;

        List<Employee> employee = new List<Employee>();
        Employee emp = new Employee();
        do
        {
        Console.WriteLine("Main menu : 1.Add Employee 2.View All employees   3.View by Name");
        option = Convert.ToInt32(Console.ReadLine());
        switch (option)
         {
           case 1:
             {
             string dat;
             DateTime date;
             Console.WriteLine("enter the Employee number, name, doj, designation");
             emp.EmployeeNumber = Convert.ToInt32(Console.ReadLine());
             emp.Name = Console.ReadLine();
             dat = Console.ReadLine();

             if (DateTime.TryParse(dat, out date))
             {
              emp.DOJ = date;
             }
             else
             {
              Console.WriteLine("please provide the valid date format");
             }

             emp.Designation = Console.ReadLine();
             long Salary = emp.calculateSalary();
             Console.WriteLine("Salary : {0}", Salary);
             employee.Add(emp);
             break;
            }
           case 2:
           {
             foreach (var k in employee)
              {
               Console.WriteLine("Employee Id: {0}", k.EmployeeNumber);
               Console.WriteLine("Name: {0}", k.Name);
               Console.WriteLine("DOJ: {0}", k.DOJ);
               Console.WriteLine("designation: {0}", k.Designation);
               Console.WriteLine("salary: {0}", k.calculateSalary());
               }
              break;
             }
            case 3:
             {
              Console.WriteLine("enter the char");
              string str = Console.ReadLine();

              foreach (Employee i in employee)
              {
              if (i.Name.StartsWith(str))
              {
              Console.WriteLine(" Name: {0} \n Id:: {1} \n DOJ: {2} \n desig: {3} \n Salary: {4}", emp.Name, emp.EmployeeNumber, emp.DOJ, emp.Designation, emp.calculateSalary());
              }
              }
             break;
            }
          }
        } while (option != 4);
        Console.ReadLine();
    }
}

}

class Employee
{
    int employeenumber;
    string name;
    DateTime doj;
    string designation;
    DateTime tod;
    int Exp;
    long salary;


    public int EmployeeNumber
    {
        get { return employeenumber; }
        set { employeenumber = value; }
    }
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public DateTime DOJ
    {
        get { return doj; }
        set { doj = value; }
    }
    public string Designation
    {
        get { return designation; }
        set { designation = value; }
    }
    List<Employee> employee = new List<Employee>();
    public long calculateSalary()
    {
        tod = DateTime.Today;
        if (DOJ <= tod)
        {
            int y1 = DOJ.Year;
            int y2 = tod.Year;
            Exp = y2 - y1;
            Console.WriteLine("exp: {0}", Exp);
            salary = 200000;
            if ((Exp >= 0) && (Exp < 1))
            {
                salary = 200000;
            }
            for (int i = 1; i <= Exp; i++)
            {
                salary = salary + 50000;
            }

        }
        return salary;
    }

}

這應該對你有用。 首先,在選項一中,您應該每次都創建一個新員工,而不是在循環之外創建一次,第二個在選項 3 中,您不是從循環中引用員工,而是在之前創建的一個(相同)員工做while循環,每次都會給你同一個人。

   List<Employee> employee = new List<Employee>();
    do
    {
        Console.WriteLine("Main menu : 1.Add Employee 2.View All employees   3.View by Name");
        option = Convert.ToInt32(Console.ReadLine());


  switch (option)
    {
        case 1:
            {
                Employee emp = new Employee();
                String date;
                Console.WriteLine("enter the Employee number, name, doj, designation");
                emp.EmployeeNumber = Convert.ToInt32(Console.ReadLine());
                emp.Name = Console.ReadLine();
                date = Console.ReadLine();
                DateTime doj = new DateTime();
                if (DateTime.TryParse(date, out doj))
                {
                    emp.DOJ = doj;
                }
                else
                {
                    Console.WriteLine("please provide the valid date format");
                }

                emp.Designation = Console.ReadLine();
                //long Salary = emp.calculateSalary();
                //Console.WriteLine("Salary : {0}", Salary);
                employee.Add(emp);
                break;
            }
        case 2:
            {
                foreach (var k in employee)
                {
                    Console.WriteLine("Employee Id: {0}", k.EmployeeNumber);
                    Console.WriteLine("Name: {0}", k.Name);
                    Console.WriteLine("DOJ: {0}", k.DOJ);
                    Console.WriteLine("designation: {0}", k.Designation);
                    //Console.WriteLine("salary: {0}", k.calculateSalary());
                }
                break;
            }
        case 3:
            {
                Console.WriteLine("enter the char");
                string str = Console.ReadLine();

                foreach (Employee emp in employee)
                {
                    if (emp.Name.StartsWith(str))
                    {
                        Console.WriteLine(" Name: {0} \n Id:: {1} \n DOJ: {2} \n desig: {3}", emp.Name, emp.EmployeeNumber, emp.DOJ, emp.Designation);
                    }
                }
                break;
            }
    }
} while (option != 4);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM