using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace lab_3
{
class Program
{
static void Main()
{
Remedy[] med = new Remedy[100];
string command = "";
int nmed = 0;
while (command != "stop")
{
Console.WriteLine("");
Console.Write("Enter a command: ");
command = Console.ReadLine();
Remedy r = new Remedy();
switch (command)
{
case "add":
r.set_name();
r.set_price();
r.set_type();
r.set_num();
//med[nmed] = r;
nmed++; break;
case "del":
nmed--;
break;
case "sort -price -asc": Array.Sort(med, 0, nmed, Remedy.sortPriceAscending()); break;
case "sort -price -desk": Array.Sort(med, 0, nmed, Remedy.sortPriceDeskcending()); break;
case "sort -name -asc": Array.Sort(med, 0, nmed); break;
case "sort -name- desc": Array.Sort(med, 0, nmed, Remedy.sortNameDescending()); break;
case "sort -num -asc": Array.Sort(med, 0, nmed, Remedy.sortNumAscending()); break;
case "sort -num -desc": Array.Sort(med, 0, nmed, Remedy.sortNumDeskcending()); break;
case "sort -type -asc": Array.Sort(med, 0, nmed, Remedy.sortTypeAscending()); break;
case "sort -type -desc": Array.Sort(med, 0, nmed, Remedy.sortTypeDescending()); break;
case "show":
if (nmed == 0)
{
Console.WriteLine("List is empty.");
}
else
{
Console.WriteLine("");
Console.WriteLine("List of medicine: ");
for (int i = 0; i < nmed; i++)
{
med[i].show();
}
} break;
case "save":
Console.Write("Enter a file name: ");
string fileName = Console.ReadLine();
Console.WriteLine("fileName: " + fileName);
break;
case "load":
Console.Write("Enter a file name: ");
fileName = Console.ReadLine();
Console.WriteLine("fileName: " + fileName);
break;
case "clear":
nmed = 0;
break;
case "help":
Console.WriteLine("add");
Console.WriteLine("show");
Console.WriteLine("del");
Console.WriteLine("clear");
Console.WriteLine("sort -price -asc");
Console.WriteLine("sort -price -desk");
Console.WriteLine("sort -name -asc");
Console.WriteLine("sort -name- desc");
Console.WriteLine("sort -num -asc");
Console.WriteLine("sort -num -desc");
Console.WriteLine("sort -type -asc");
Console.WriteLine("sort -type -desc");
break;
case "stop": break;
default: { Console.WriteLine("Error: incorrect command. Please, type: help"); break; }
}
}
Tincture x1 = new Tincture();
Tincture x2 = new Tincture();
Tincture x3 = new Tincture();
x2.set_name();
x2.set_price();
x1.set_name();
x1.set_price();
x1.set_type();
x1.set_num();
x1.show();
x2.show();
Remedy y = new Remedy();
Remedy y1 = new Remedy("valerianka", 120, "tabletki", 1);
y1.show();
y.set_name();
y.set_price();
y.show();
Medicine z = new Medicine();
Medicine z1 = new Medicine("valerianka", 100);
z1.show();
z.set_name();
z.set_price();
z.show();
Remedy xx = new Remedy();
Remedy yy = new Remedy();
Console.ReadKey();
}
}
class Medicine : IComparable
{
static int count;
protected string name;
protected int price;
public Medicine() { count++; }
public Medicine(string n, int p) { name = n; price = p; }
public void set_price()
{
try
{
Console.Write("Enter price: ");
price = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("error");
set_price();
}
}
public void set_name()
{
try
{
Console.Write("Enter name medicine: ");
name = Console.ReadLine();
}
catch
{
Console.WriteLine("error");
set_name();
}
}
public void show()
{
Console.Write("Price: " + price + " Name: " + name + " ");
}
int IComparable.CompareTo(object obj)
{
Medicine m = (Medicine)obj;
return String.Compare(this.name, m.name);
}
};
class Remedy : Medicine
{
static int count;
private string type;
private int num;
public Remedy() { count++; }
public Remedy(string n, int p, string t, int s) : base(n, p) { type = t; num = s; }
public void set_num()
{
try
{
Console.Write("Enter num: ");
num = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("error");
set_num();
}
}
public void set_type()
{
try
{
Console.Write("Enter type: ");
type = Console.ReadLine();
}
catch
{
Console.WriteLine("error");
set_type();
}
}
public void show()
{
base.show();
Console.WriteLine("Num: " + num + " Type: " + type);
}
private class sortNameDescendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
return String.Compare(r2.name, r1.name);
}
}
public static IComparer sortNameDescending()
{
return (IComparer)new sortNameDescendingHelper();
}
private class sortPriceAscendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
if (r1.price > r2.price)
return 1;
if (r1.price < r2.price)
return -1;
else
return 0;
}
}
public static IComparer sortPriceAscending()
{
return (IComparer)new sortPriceAscendingHelper();
}
private class sortPriceDeskcendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
if (r1.price < r2.price)
return 1;
if (r1.price > r2.price)
return -1;
else
return 0;
}
}
public static IComparer sortPriceDeskcending()
{
return (IComparer)new sortPriceDeskcendingHelper();
}
private class sortTypeAscendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
return String.Compare(r1.type, r2.type);
}
}
public static IComparer sortTypeAscending()
{
return (IComparer)new sortTypeAscendingHelper();
}
private class sortTypeDescendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
return String.Compare(r2.type, r1.type);
}
}
public static IComparer sortTypeDescending()
{
return (IComparer)new sortTypeDescendingHelper();
}
private class sortNumAscendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
if (r1.num > r2.num)
return 1;
if (r1.num < r2.num)
return -1;
else
return 0;
}
}
public static IComparer sortNumAscending()
{
return (IComparer)new sortNumAscendingHelper();
}
private class sortNumDeskcendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
Remedy r1 = (Remedy)a;
Remedy r2 = (Remedy)b;
if (r1.num < r2.num)
return 1;
if (r1.num > r2.num)
return -1;
else
return 0;
}
}
public static IComparer sortNumDeskcending()
{
return (IComparer)new sortNumDeskcendingHelper();
}
};
class Tincture : Remedy
{
private int date;
private string type2;
public void set_type2()
{
try
{
Console.Write("Enter type2: ");
type2 = Console.ReadLine();
}
catch
{
Console.WriteLine("error");
set_type2();
}
}
public void set_date()
{
try
{
Console.Write("Enter date: ");
date = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("error");
set_date();
}
}
};
}