using System;
using System.Collections.Generic;
using System.Text;
namespace Task
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(">>>>>>>>>>>>>>> Hello My World! <<<<<<<<<<<<<<<<<<<");
Medicine medicine1 = new Medicine("Fosetrin", 30, 12);
Medicine medicine2 = new Medicine("Kmietrin", 21, 30);
Medicine medicine3 = new Medicine("Pririnos-4", 21, 12);
Medicine medicine4 = new Medicine("NemRoot", 36, 12);
Medicine medicine5 = new Medicine("BomZi", 40, 10);
Pharmacy pharmacy = new Pharmacy();
pharmacy.AddMedicine(medicine1);
pharmacy.AddMedicine(medicine2);
pharmacy.AddMedicine(medicine3);
pharmacy.AddMedicine(medicine4);
pharmacy.AddMedicine(medicine5);
List<string> operation = new List<string>();
operation.Add("Create Medicine => cm");
operation.Add("Remove Medicine => rm");
operation.Add("Update Medicine => um");
operation.Add("Show Medicine List=> swm");//
operation.Add("Sell Medicine => slm");
operation.Add("Find Medicine => fm");
operation.Add("Show Common Totalincome => sctm");
string operaton;
bool is_conitue;
do
{
My.NoteHead("Opertions");
foreach (var item in operation)
{
My.NoteOutput(item);
}
My.NoteHead("Choose your operation?");
operaton = My.ConsInputString();
switch (operaton)
{
case "cm":
CreateMedicine(pharmacy);
break;
case "rm":
RemoveMedicine(pharmacy);
break;
case "um":
UpdateMedicine(pharmacy);
break;
case "swm":
pharmacy.ShowInfoList();
break;
case "slm":
Sell(pharmacy);
break;
case "fm":
Find(pharmacy);
break;
case "sctm":
My.NoteHead("Common Totalincome Medicine");
My.NoteOutput(pharmacy.TotalCome.ToString());
break;
default:
My.NoteOutput("Don't have this operation!");
break;
}
My.NoteHead("Want to do another operation?");
is_conitue = !My.IsContinueLoop();
} while (is_conitue);
}
public static void CommonTotalincome(Pharmacy pharmacy)
{
My.NoteHead("Common Totalincome Medicine");
}
public static void RemoveMedicine(Pharmacy pharmacy)
{
string name;
bool is_continue_last;
bool is_continue_2;
do
{
do
{
My.NoteHead("Medicine Remove");
My.NoteInput("Input Update Medicine Name");
name = My.ConsInputString();
try
{
pharmacy.RemoveMedicine(name);
is_continue_2 = false;
}
catch (Exception ex)
{
Console.WriteLine(ex);
My.NoteOutput("Can't remove medicine! Plase input agen.");
is_continue_2 = true;
}
} while (is_continue_2);
My.NoteOutput("You remove updated!");
My.NoteOutput("Do you remove update medicine ?");
is_continue_last = !My.IsContinueLoop();
} while (is_continue_last);
IsShowList(pharmacy);
}
public static void UpdateMedicine(Pharmacy pharmacy)
{
int price;
int count;
string name;
string newname;
bool is_continue_last;
bool is_continue_2;
do
{
do
{
My.NoteHead("Medicine Update");
My.NoteInput("Input Update Medicine Name");
name = My.ConsInputString();
My.NoteInput("Input New Medicine Name");
newname = My.ConsInputString();
My.NoteInput("Input New Medicine Name");
price = My.ConsInputInt();
My.NoteInput("Input New Medicine Count");
count = My.ConsInputInt();
try
{
pharmacy.UpdateMedicine(name, newname, price, count);
is_continue_2 = false;
}
catch (Exception ex)
{
Console.WriteLine(ex);
My.NoteOutput("Can't update medicine! Plase input agen.");
is_continue_2 = true;
}
} while (is_continue_2);
My.NoteOutput("You medicine updated!");
My.NoteOutput("Do you continue update medicine ?");
is_continue_last = !My.IsContinueLoop();
pharmacy.ShowInfoList();
} while (is_continue_last);
IsShowList(pharmacy);
}
public static void CreateMedicine(Pharmacy pharmacy)
{
int price;
int count;
string name;
bool is_continue_last;
bool is_continue_2;
do
{
for (int i = 0; i < 1; i++)
{
do
{
My.NoteHead("Medicine Create");
My.NoteInput("Input Medicine Name");
name = My.ConsInputString();
My.NoteInput("Input Medicine Price");
price = My.ConsInputInt();
My.NoteInput("Input Medicine Count");
count = My.ConsInputInt();
try
{
Medicine medicine = new Medicine(name, price, count);
pharmacy.AddMedicine(medicine);
is_continue_2 = false;
}
catch (Exception ex)
{
Console.WriteLine(ex);
My.NoteOutput("Can't create medicine! Plase input agen.");
is_continue_2 = true;
}
} while (is_continue_2);
My.NoteOutput("You medicine created!");
}
My.NoteOutput("Do you continue create medicine ?");
is_continue_last = !My.IsContinueLoop();
} while (is_continue_last);
IsShowList(pharmacy);
}
public static void IsShowList(Pharmacy pharmacy)
{
bool is_continue;
My.NoteOutput("Do you show list ?");
is_continue = !My.IsContinueLoop();
if (is_continue)
{
pharmacy.ShowInfoList();
}
}
public static void Sell(Pharmacy pharmacy)
{
string name;
int count;
bool is_continue_last;
bool is_continue_2;
do
{
do
{
My.NoteHead("Sell Medicine");
My.NoteInput("Input Medicine Name");
name = My.ConsInputString();
My.NoteInput("Input Medicine Count");
count = My.ConsInputInt();
try
{
pharmacy.Sell(name, count);
is_continue_2 = false;
}
catch (Exception ex)
{
Console.WriteLine(ex);
My.NoteOutput("Can't sell medicine! Plase input agen.");
is_continue_2 = true;
}
} while (is_continue_2);
My.NoteOutput("You selled the medicine!");
pharmacy.FindMedicineByName(name).ShowInfo();
My.NoteOutput("Do you sell medicine ?");
is_continue_last = !My.IsContinueLoop();
} while (is_continue_last);
}
public static void Find(Pharmacy pharmacy)
{
string name;
bool is_continue_last;
bool is_continue_2;
do
{
do
{
My.NoteHead("Medicine Find");
My.NoteInput("Input Update Medicine Name");
name = My.ConsInputString();
try
{
pharmacy.FindMedicineByName(name);
is_continue_2 = false;
}
catch (Exception ex)
{
Console.WriteLine(ex);
My.NoteOutput("Can't find medicine! Plase input agen.");
is_continue_2 = true;
}
} while (is_continue_2);
pharmacy.FindMedicineByName(name).ShowInfo();
My.NoteOutput("Do you find medicine ?");
is_continue_last = !My.IsContinueLoop();
} while (is_continue_last);
}
}
public class Medicine
{
private string _name;
public string Name { get { return _name; } }
private int _price;
public int Price { get { return _price; } }
private int _count;
public int Count { get { return _count; } }
private int _totalIncome;
public int TotalIncome { get { return _totalIncome; } }
public Medicine(string name,int price,int count)
{
this.Update(name, price, count);
}
public void ShowInfo()
{
My.NoteHead("Medicine Info");
Console.WriteLine($" >> Name : {this.Name} / Price : {this.Price} / Count : {this.Count} / TotalIncome : {this.TotalIncome}");
}
public void Update(string name,int price,int count)
{
if (string.IsNullOrEmpty(name))
{
throw new UnCatchNameException("Name is Null or Empty");
}
else
{
this._name = name;
}
if (0 >= price)
{
throw new IsNotZeroPriceException("You Use UnCorrect Price ");
}
else
{
this._price = price;
}
if (0 >= count)
{
throw new IsNotZeroCountException("You Use UnCorrect Count");
}
else
{
this._count = count;
}
}
public void Sell(int count)
{
if (count == 0)
{
throw new IsNotZeroCountException("You Use UnCorrect Count");
}
else if (count > this.Count)
{
throw new IsNotZeroCountException("Not Found This Count");
}
else
{
this._totalIncome = this.TotalIncome + this._price * count;
this._count = this.Count - count;
}
}
}
class Pharmacy:IPharmacy
{
private readonly List<Medicine> _medicines;
public List<Medicine> Medicines { get { return _medicines; } }
private int _totalcome;
public int TotalCome { get { return _totalcome; } }
public Pharmacy()
{
this._medicines = new List<Medicine>();
}
public void Sell(string name,int count)
{
Medicine sellmedicine = this.FindMedicineByName(name);
sellmedicine.Sell(count);
this._totalcome = this.TotalCome + sellmedicine.Price * count;
}
public Medicine FindMedicineByName(string name)
{
if (string.IsNullOrEmpty(name))
{
throw new UnCatchNameException("This is Empty");
}
string lowercase = name.Trim().ToLower();
Medicine findmedicine = this._medicines.Find(f => f.Name.Trim().ToLower().Equals(name.ToLower().Trim()));
if (findmedicine == null)
{
throw new UnCatchNameException("Not Found This Medicine");
}
return findmedicine;
}
public void UpdateMedicine(string name, string newneme, int newprice, int newcount)
{
if (string.IsNullOrEmpty(name))
{
throw new UnCatchNameException("This is Empty");
}
Medicine updatemedicines = this.Medicines.Find(f => f.Name.Trim().ToLower().Equals(name.ToLower().Trim()));
if (updatemedicines == null)
{
throw new UnCatchNameException("Not Found This Medicine");
}
else
{
if (string.IsNullOrEmpty(newneme))
{
newneme = updatemedicines.Name;
}
if (newprice == 0)
{
newprice = updatemedicines.Price;
}
if (newcount == 0)
{
newcount = updatemedicines.Count;
}
updatemedicines.Update(newneme, newprice, newcount);
}
}
public void RemoveMedicine(string name)
{
if (string.IsNullOrEmpty(name))
{
throw new UnCatchNameException("This is Empty");
}
string lowercase = name.Trim().ToLower();
Medicine removemedicine = this._medicines.Find(f => f.Name.Trim().ToLower() == lowercase);
if (removemedicine != null)
{
this._medicines.Remove(removemedicine);
}
else
{
throw new UnCatchNameException(" Not Found This Medicine");
}
}
public void AddMedicine(Medicine medicine)
{
Medicine newmedicine = this._medicines.Find(f => f.Name.Trim().ToLower().Equals(medicine.Name.ToLower().Trim()));
if (newmedicine == null)
{
this._medicines.Add(medicine);
}
else
{
throw new IsAlreadyAddedException("This Medicine Already Added");
}
}
public void ShowInfoList()
{
int listnumber = 0;
My.NoteHead("Medicines List");
foreach (var item in this.Medicines)
{
listnumber += 1;
Console.WriteLine($" >>> {listnumber}. Name : {item.Name} / Price : {item.Price} / Count : {item.Count} / TotalIncome : {item.TotalIncome} ");
}
}
}
interface IPharmacy
{
List<Medicine> Medicines { get; }
void UpdateMedicine(string name,string newneme,int newprice,int newcount);
void RemoveMedicine(string name);
void AddMedicine(Medicine medicine);
void ShowInfoList();
}
class IsAlreadyAddedException: Exception
{
private readonly string _message;
public IsAlreadyAddedException(string message)
{
this._message = message;
}
public override string Message => this._message;
}
class IsNotZeroPriceException:Exception
{
private readonly string _message;
public IsNotZeroPriceException(string message)
{
this._message = message;
}
public override string Message => this._message;
}
class UnCatchNameException:Exception
{
private readonly string _message;
public UnCatchNameException(string message)
{
this._message = message;
}
public override string Message => this._message;
}
class IsNotZeroCountException:Exception
{
private readonly string _message;
public IsNotZeroCountException(string message)
{
this._message = message;
}
public override string Message => this._message;
}
public static class My
{
public static int ConsInputInt()
{
int number =0;
bool break_loop;
do
{
try
{
Console.Write("Input a number : <<<<<< : ");
number = Convert.ToInt32(Console.ReadLine());
break_loop = false;
}
catch (Exception)
{
Console.WriteLine("You don't use full number and don't use number !");
break_loop = true;
}
} while (break_loop);
return number;
}
public static string ConsInputString()
{
Console.Write("Input text : <<<<<< : ");
string str = Console.ReadLine();
return str;
}
public static bool IsContinueLoop()
{
bool is_continue;
Console.Write("<<<<<< Are you continue or exit => (Any case / n ) <<< : ");
string str = Console.ReadLine();
if (str == "n")
{
is_continue = true;
}
else
{
is_continue = false;
}
return is_continue;
}
public static void NoteHead(string str)
{
Console.WriteLine($"\n---------- >>>>>>>>>> {str} <<<<<<<<<<< ----------");
}
public static void NoteInput(string str)
{
Console.WriteLine($"<<<<<<<<<<<<< : {str}");
}
public static void NoteOutput(string str)
{
Console.WriteLine($">>>>>>> : {str}");
}
}
}