[英]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.