using System.IO;
namespace ConsoleApplication1
{
class Man { // 1
const int l_name = 30;
string name;
int birth_year;
double pay;
public Man() // конструктор
{
name = "Anonymous";
birth_year = 0;
pay = 0;
}
public Man(string s) // 2
{
name = s.Substring(0, l_name);
birth_year = Convert.ToInt32(s.Substring(l_name, 4));
pay = Convert.ToDouble(s.Substring(l_name + 4));
if (birth_year < 0) throw new FormatException();
if (pay < 0) throw new FormatException();
}
public override string ToString() // 3
{
return string.Format( "Name: {0,30} birth: {1} pay: {2:F2}",
name, birth_year, pay);
}
public int Compare(string name) // фамилияларни таққослаш
{
return (string.Compare(this.name, 0,
name + " ", 0, name.Length + 1,
StringComparison.OrdinalIgnoreCase));
}
// -------------------- класс ҳусусиятлари --------------------------
public string Name
{
get { return name; }
set { name = value; }
}
public int Birth_year
{
get { return birth_year; }
set { if (value > 0) birth_year = value;
else throw new FormatException(); }
}
public double Pay
{
get { return pay; }
set { if (value > 0) pay = value;
else throw new FormatException(); }
}
// ------------------ класс амаллари ------------------------------
public static double operator +(Man man1, double a)
{
man1.pay += a;
return man1.pay;
}
public static double operator +(double a, Man man1)
{
man1.pay += a;
return man1.pay;
}
public static double operator -(Man man1, double a)
{
man1.pay -= a;
if ( man1.pay < 0 ) throw new FormatException();
return man1.pay;
}
};
class Class1
{
static void Main()
{
Man[] dbase = new Man[100];
int n = 0;
try
{
StreamReader f = new StreamReader("dbase.txt"); // 4
string s;
int i = 0;
while ((s = f.ReadLine()) != null) // 5
{
dbase[i] = new Man(s);
Console.WriteLine(dbase[i]);
++i;
}
n = i - 1;
f.Close();
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.Message);
Console.WriteLine("Файл номининг тўғрилигини текширинг!");
return;
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("Файл жуда ҳам катта!");
return;
}
catch (FormatException)
{
Console.WriteLine("Туғилган сана ёки иш ҳақи нотўғри киритилди ");
return;
}
catch (Exception e)
{
Console.WriteLine("Ошибка: " + e.Message);
return;
}
int n_man = 0;
double mean_pay = 0;
Console.WriteLine("Ходим фамилиясини киритинг ");
string name;
while ((name = Console.ReadLine()) != "") // 6
{
bool not_found = true;
for ( int k = 0; k <= n; ++k )
{
Man man = dbase[k];
if (man.Compare(name) == 0)
{
Console.WriteLine(man);
++n_man; mean_pay += man.Pay;
not_found = false;
}
}
if (not_found) Console.WriteLine("бундай ходим йўқ");
Console.WriteLine(
" Ходим фамилиясини киритинг ёки тугатиш учун - Enter ");
}
if (n_man > 0)
Console.WriteLine("Ўртача иш ҳақи:{0:F2}", mean_pay / n_man);
}
}
}
19.3-листинг. Класс массивидан излаш
1-операторда битта ходим ҳақидаги маълумотларни сақлаш учун Man класси эълон қилинган. Маълумот майдонларидан ташқари, унда майдонларни тўлдириш учун конструктор ҳам аниқланган (2-оператор), сатрга алмаштириш методи қайта аниқланган (3-оператор 3) ва у объект экземплярини Console классининг WriteLine ёрдамида экранга чиқаришга имкон беради, шунингдек, хидим фамилиясини берилган фамилия билан таққослашга ёрдам берувчи Compare методи аниқланган. Таққослашда регистрлар эътиборга олинмайди.
Ҳусусият ва класс амаллари туғилган сана ва иш ҳақининг тўғри киритилганини назорат қилади.
Қирувчи файлни дастур ишга тушмасдан аввал ташкил қилинади. Уни тайёрлашда иҳтиёрий матн муҳарриридан фойдаланиш мумкин. Агар файл мавжуд бўлмаса бу ҳақда хабар берилади.
4-операторда белгили оқимнинг стандарт класси экземпляри тавсифланган. 5-цикл файлдан маълумотларни сатрма-сатр ўқийди ва Dbase массивини навбатдаги элементини тўлдиради. 6-операторда массви кўриб чиқилади.
Do'stlaringiz bilan baham: |