уникальный клиент может посетить несколько филиалов.
Уникальный филиал может посещать кратных клиентов.
Это определяет отношение «многие ко многим» .
В базе данных это приводит к такой структуре таблицы:
1020 * клиенты *
id | someDatas
---+----------
1 | ...
2 | ...
3 | ...
ветвь
id | someDatas
---+----------
1 | ...
2 | ...
3 | ...
customerbranch
idcustomer | idbranch
-----------+----------
1 | 1
1 | 2
2 | 3
3 | 1
3 | 2
3 | 3
Где idcustomer
и idbranch
- внешние ключи к таблицам customers
и branches
Поскольку вы не используете базы данных, отношения между классами Customer
и Branch
можно построить следующим образом:
class Customer
{
public Guid CustomerID { get; set; }
public string CustomerName { get; set; }
public string CustomerAddress { get; set; }
public string CustomerEmail { get; set; }
public string CustomerTelNo { get; set; }
public var Branches = new List<Branch>();
}
class Branch
{
public Guid BranchID { get; set; }
public string BranchName { get; set; }
public string BranchAddress { get; set; }
public string BranchTelNo { get; set; }
public var Customers = new List<Customer>();
}
Тогда в методе Main
я бы использовал 2 списка для клиентов и филиалов.
static void Main(string[] args)
{
var branches = new List<Branch>();
var customers = new List<Customer>();
/* You can still of course hardcode some branches ... */
branches.Add(new Branch
{
BranchID = Guid.NewGuid(),
BranchName = "lidel1",
BranchAddress = "ejbyvej 27",
BranchTelNo = "55223366"
});
branches.Add(new Branch
{
BranchID = Guid.NewGuid(),
BranchName = "lidel2",
BranchAddress = "kirkevej 45",
BranchTelNo = "77885544"
});
branches.Add(new Branch
{
BranchID = Guid.NewGuid(),
BranchName = "lidel3",
BranchAddress = "kirkevej 12",
BranchTelNo = "553366611"
});
/* ... and some customers */
customers.Add(new Branch
{
CustomerID = Guid.NewGuid(),
CustomerName = "John Smith",
CustomerAddress = "somewhere",
CustomerTelNo = "0123456789",
CustomerEmail = "john.smith@example.com"
});
customers.Add(new Branch
{
CustomerID = Guid.NewGuid(),
CustomerName = "Jane Doe",
CustomerAddress = "Elsewhere",
CustomerTelNo = "9876543210",
CustomerEmail = "jane.doe@example.com"
});
customers.Add(new Branch
{
CustomerID = Guid.NewGuid(),
CustomerName = "Foo Bar",
CustomerAddress = "anywhere",
CustomerTelNo = "4242424242",
CustomerEmail = "foo.bar@example.com"
});
}
Сейчас есть несколько филиалов и несколько клиентов, но между ними пока нет никакой связи.
Вы можете создать метод в классе Branche, чтобы добавить существующего клиента.
class Branch
{
//Some properties...
//The customer already exists and is used as parameter
public void AddCustomer(Customer customer)
{
this.Customers.Add(customer); //the reference to the customer is added to the list.
/*
* Now, since we're in a Mant-To-Many relation,
* we have to add the current branch to the newly added customer
*/
customer.Branches.Add(this);
}
}
И мы можем сделать то же самое для класса Customer, но это не нужно:
class Customer
{
//Some properties...
//The branch already exists and is used as parameter
public void AddBranch(Branch branch)
{
this.Branches.Add(branch); //the reference to the branch is added to the list.
/*
* Now, since we're in a Mant-To-Many relation,
* we have to add the current customer to the newly added branch
*/
branch.Customers.Add(this);
}
}
Конечно, когда вы добавили ветку в объекте customer и добавили текущего клиента в ветку, не делайте branch.AddCustomers(this);
, иначе будет бесконечный цикл, потому что метод вызовет другой.
Теперь давайте добавим Джейн Доу , второго клиента, в ветвь lidel3 , 3-й.
static void Main(string[] args)
{
// Some code already written ...
branches[2].AddCustomer(customers[1]);
}
Таким же образом мы можем добавить ветку lidel2 для клиента John Smith
static void Main(string[] args)
{
// Some code already written ...
customers[0].AddBranch(branches[1]);
}
Теперь ваша задача - написать левую часть кода, чтобы позволить пользователю добавлять новых клиентов, новые филиалы и создавать отношения между ними.
Дополнительно:
Чтобы избежать goto
, я бы использовал эту логику:
int choice = 1; //default arbitrary value to make sure the while condition is true
while (choice >= 1 && choice <= 4) //condition is true if user input is 1 2 3 or 4
{
Console.WriteLine("\n1: Add Customers:\n2: Search Customer:\n3: Delete Customer:\n4: Display total no of customers in All Lidel Branches:\n5: Press enter to exit:\n");
Console.Write("Your input is: ");
choice = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("***************************");
switch (choice)
{
case 1:
//some code to handle the case 1
break; //use break to leave the switch case instead of goto
case 2:
//some code to handle the case 2
break;
//And so on ...
}
} //When while condition is false, the loop is exited