Mavzu: Ob'ektga yo'naltirilgan dasturlash. Reja: I. Kirish. II. Asosiyqism



Download 44,87 Kb.
bet5/6
Sana16.12.2022
Hajmi44,87 Kb.
#888320
1   2   3   4   5   6
Bog'liq
Mavzu Ob\'ektga yo\'naltirilgan dasturlash. Reja I. Kirish. II.

}
// id topilmadi
public T FindAccount(int id)
{
for (int i = 0; i < accounts.Length; i++)
{
if (accounts[i].Id == id)
return accounts[i];
}
return null;
}
// hisobni qaytadan qidirish
public T FindAccount(int id, out int index)
{
for (int i = 0; i < accounts.Length; i++)
{
if (accounts[i].Id == id)
{
index = i;
return accounts[i];
}
}
index = -1;
return null;
}
}
Bank sinfi umumiydir. Shu bilan birga, T parametri cheklovga ega: u, albatta, Hisob sinfini yoki uning avlodlarini ifodalashi kerak. Shuning uchun, har qanday T ob'ekti uchun biz Account sinfining usullari va xususiyatlaridan foydalanish imkoniyatiga ega bo'lamiz.Sinfdagi barcha hisoblar massivda saqlanadi accounts. Sinfni loyihalash vaqtida biz bank qaysi hisoblarni boshqarishini bilmasligimiz mumkin. Ehtimol, bu har qanday hisoblar yoki faqat depozit hisoblari, ya'ni DepositAccount ob'ektlari bo'lishi mumkin. Shuning uchun, generiklardan foydalanish sizga ko'proq moslashuvchanlikni qo'shish imkonini beradi.Usulda yangi hisob yaratishda , ushbu usulga Openbir qator parametrlar, xususan, sanab o'tilgan hisob turiga o'tkaziladi:
public enum AccountType
{
Ordinary,
Deposit
}
Bu raqam Bank sinfidan keyin aniqlanishi mumkin. Hisob turiga qarab, DemandAccount yoki DepositAccount ob'ekti yaratiladi va keyin hisoblar qatoriga qo'shiladi. Massivlar avtomatik ravishda kengaymagani uchun biz aslida bittaga ko'paytirilgan elementlar bilan yangi massiv yaratamiz va yangi massiv oxiriga yangi element qo'shamiz.Shu bilan birga, parametrlashtirish, ya'ni umumiy sinflarni yaratish cheklovga ega, chunki yaratilgan ob'ekt hali ham T turiga o'tkazilishi kerak:
newAccount = new DemandAccount(sum, 1) as T;
Bunday quyma xatolardan qochishimizga imkon beradi, masalan, agar biz Bank sinfini Hisob bilan emas, balki DepozitAccount turi bilan yozsak, konvertatsiya newAccount = new DemandAccount(sum, 1) as Tbizga null bo'ladi. Keyinchalik, qabul qilingan qiymatni null uchun tekshirishimiz mumkin:
if (newAccount == null)
Shuningdek, ishlov beruvchilar Account ob'ekti yaratilgandan keyin o'rnatiladigan Account sinfining barcha hodisalari uchun Open usuliga o'tkaziladi.Oxirida, usul yangi bo'yicha chaqiriladi Hisob qaydnomasi ob'ekti OnOpened(), Hisob qaydnomasi.Ochilgan hodisani yaratadi, buning yordamida siz tashqi tomondan hodisa haqida xabar olishingiz mumkin.Hisobni massivda id bo'yicha qidirish uchun usul aniqlanadi FindAccount(). Uning haddan tashqari yuklangan versiyasi, shuningdek, indeks chiqish parametri orqali topilgan elementning indeksini olish imkonini beradi:

public T FindAccount(int id, out int index)
Qo'yish, yechib olish va yopish usullari pul FindAccount()qo'shish yoki yechib olish, shuningdek, yopish uchun hisobni olish usulidan foydalanadi. Hisobni yopishda bitta Close()elementsiz usulda yangi massiv yaratiladi - o'chiriladigan hisob. Shunday qilib, hisob o'chiriladi.Usulda CalculatePercentage()biz hisoblar qatorining barcha elementlarini ko'rib chiqamiz, har bir hisob uchun kunlar hisoblagichini oshiramiz va foizlarni hisoblaymiz.Umuman olganda, Bank klassi o'ram bo'lib, u orqali biz asosiy loyihadagi Hisob ob'ektlari bilan o'zaro aloqada bo'lamiz.Umuman olganda, BankLibrary loyihasi quyidagicha ko'rinishi kerak:Va endi loyihani quraylik. Buning uchun Solution Explorer oynasida loyiha nomini sichqonchaning o‘ng tugmasi bilan bosing va paydo bo‘lgan kontekst menyusidan Build ni tanlang . Shundan so'ng, bin/Debug papkasida loyihada dll kengaytmali sinf kutubxonasi fayli yaratiladi .
3.Bosh loyihani yaratish.
Birinchidan, oldingi mavzuda tuzilgan sinf kutubxonasini bog'laymiz. Buni amalga oshirish uchun BankApplication-ning asosiy loyihasida " Dependences " bandini o'ng tugmasini bosing va paydo bo'lgan menyuda " Ma'lumotnoma qo'shish... " bandini tanlang :
Endi asosiy loyihadagi Program.cs faylini quyidagicha o'zgartiramiz:
using System;
using BankLibrary;
namespace BankApplication
{
class Program
{
static void Main(string[] args)
{
Bank bank = new Bank("yunit bank");
bool alive = true;
while (alive)
{
ConsoleColor color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.DarkGreen; //
Console.WriteLine("1. Hisobni ochish \t 2 \t 3. Hisob yaratish");
Console.WriteLine("4hisobni yopish \t 5. kun\t 6. Dasturdan chiqish");
Console.WriteLine("nomerni kiriting:");
Console.ForegroundColor = color;
try
{
int command = Convert.ToInt32(Console.ReadLine());
switch (command)
{
case 1:
OpenAccount(bank);
break;
case 2:
Withdraw(bank);
break;
case 3:
Put(bank);
break;
case 4:
CloseAccount(bank);
break;
case 5:
break;
case 6:
alive = false;
continue;
}
bank.CalculatePercentage();
}
catch (Exception ex)
{
color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message);
Console.ForegroundColor = color;
}
}
}
private static void OpenAccount(Bank bank)
{
Console.WriteLine("yaratilgan hisobni narxini ko’rsating:");
decimal sum = Convert.ToDecimal(Console.ReadLine());
Console.WriteLine("narx turini kiriting: 1. So’rovdan boshlab 2. depozit");
AccountType accountType;
int type = Convert.ToInt32(Console.ReadLine());
if (type == 2)
accountType = AccountType.Deposit;
else
accountType = AccountType.Ordinary;
bank.Open(accountType,
sum,
AddSumHandler, // hisobga pul mablag’larini qo’shish uchun ishlov berish
WithdrawSumHandler, //yig’ish ishlov berish
(o, e) => Console.WriteLine(e.Message), ishlov beruvchining lambada ko’rinishidagi foiz
CloseAccountHandler, // hisobni yopish uchun ishlov berish
OpenAccountHandler); // hisobni ochish uchun ishlov berish
}
private static void Withdraw(Bank bank)
{
Console.WriteLine("hisobdan yechib olinadigan summani kiriting:");
decimal sum = Convert.ToDecimal(Console.ReadLine());
Console.WriteLine("id ni kiriting:");
int id = Convert.ToInt32(Console.ReadLine());
bank.Withdraw(sum, id);
}
private static void Put(Bank bank)
{
Console.WriteLine("hisobga kiritiladigan summani kiriting:");
decimal sum = Convert.ToDecimal(Console.ReadLine());
Console.WriteLine("id summani kiriting:");
int id = Convert.ToInt32(Console.ReadLine());
bank.Put(sum, id);
}
private static void CloseAccount(Bank bank)
{
Console.WriteLine("yopiladigan hisob indifikatorini kiriting:");
int id = Convert.ToInt32(Console.ReadLine());
bank.Close(id);
}
private static void OpenAccountHandler(object sender, AccountEventArgs e)
{
Console.WriteLine(e.Message);
}
private static void AddSumHandler(object sender, AccountEventArgs e)
{
Console.WriteLine(e.Message);
}
private static void WithdrawSumHandler(object sender, AccountEventArgs e)
{
Console.WriteLine(e.Message);
if (e.Sum > 0)
Console.WriteLine("pullarni jo’nating");
}
private static void CloseAccountHandler(object sender, AccountEventArgs e)
{
Console.WriteLine(e.Message);
}
}
}
Kutubxona faylning boshida joylashgan:
using BankLibrary;
Main usulida Hisob klassi bo yicha terilgan Bank ob ekti yaratiladi va u orqali Hisob ob yektlari bilan o zaro aloqada bo ladik.Loop whilefoydalanuvchi tanlashi kerak bo'lgan buyruqlar ro'yxatini ko'rsatadi. Qurilishda ulardan birini tanlagandan so'ng switch, tegishli buyruq bajariladi. Har bir buyruq foydalanuvchidan ma'lumot olish, uni Convert klassi yordamida aylantirish va Bank ob'ektidagi usullarga argumentlarni o'tkazishni ifodalaydi.while siklining har bir iteratsiyasi bir kunga to'g'ri keladi,shuning uchun tsikl oxirida usul chaqiriladi bank.CalculatePercentage(), bu Hisob ob'ektlaridagi kunlar hisoblagichini oshiradi va foizlarni hisoblaydi.Natijada bank ishini va foydalanuvchi o'zaro ta'sirini taqlid qiluvchi quyidagi dastur paydo bo'ladi.



Download 44,87 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish