Tashrifchi turi, tashrifchi identifikatori, tashrifchi nomi , to'lov, klub identifikatori
bir klub va formatga tashrif buyuruvchilar uchun
Tashrifchi turi, tashrifchi identifikatori, tashrifchi nomi , to'lov, ballar
ko'plab klublarga tashrif buyuruvchilar uchun.
Misollar:
S, 1, Ivonne, 950,0, 2
M, 2, Sharon, 1200,0, 100
Birinchi qatorda "S", "1", "Yvonne", "950.0" va "2" qiymatlari ushbu tashrifchining turi, identifikatori, nomi, toÿlovi va klub identifikatorini bildiradi . "S" harfi bitta klubga tashrif buyuruvchining belgisidir.
Ikkinchi qatorda "M", "2", "Sharon", "1200.0" va "100" qiymatlari turi, identifikatori, nomi, to'lovini bildiradi.
234 12-bob
va ma'lum bir foydalanuvchi uchun ballar. "M" harfi bir nechta klublarga tashrif buyuruvchining belgisidir.
Matn fayli member.csv nomi bilan loyiha bilan bir xil papkada saqlanadi. Shu sababli, fayl nomi oddiygina "members.csv" sifatida ko'rsatilgan.
Keling, usulni dasturlashga o'tamiz. Birinchidan, biz to'rtta mahalliy o'zgaruvchini e'lon qilishimiz kerak:
LinkedList m = yangi LinkedList(); String lineRead;
String[]splitLine; a'zo mem;
O'zgaruvchilar e'lon qilingandan so'ng, BufferedReader ob'ektini yaratish uchun " resurslar bilan sinab ko'ring "
sintaksisidan foydalaniladi. Bu BufferedReader obyekti o'quvchi deb ataladi .
O'quvchi ob'ekti members.csv dan o'qish uchun
FileReader ob'ektini oladi . BufferedReader ob'ektni yaratish kodi quyidagi "resurslar bilan sinab ko'ring " sintaksisidan foydalaning . Agar siz ushbu sintaksis nima qilishini
unutsangiz, 10.1-bo'limga qarang:
harakat qilib ko'ring (BufferedReader o'quvchi = yangi BufferedReader(yangi FileReader("members.csv")))
{
//Kod sinash bloki ichida
} catch (IOException e)
{
//Kod sinash bloki ichida
}
Sinab ko'rish blokida CSV faylining birinchi qatorini
o'qish uchun reader.readLine () usuli qo'llaniladi. Keyin natija
12.6. FileHandler sinf 235
String tipidagi lineRead mahalliy o'zgaruvchisiga
tayinlangan . Ushbu buyruqni o'zingiz yozishga harakat qiling.
So'ngra while tsikli lineRead null bo'lmaguncha faylni satr bo'yicha qayta ishlaydi .
while (lineRead!= null)
{
}
while tsikli ichida split ( ) usuli lineRead ni "," bilan chegaralangan String ob'ektlar massiviga bo'lish uchun ishlatiladi (4.1.1-bo'limga qarang). Natija String ob'ektlari bilan mahalliy splitLine massiviga tayinlanadi. Buni o'zingiz qilishga harakat qiling.
Keyin teng() usuli splitLine massivining birinchi elementini boshqa qiymat bilan solishtirish uchun ishlatiladi . Agar teng() usulidan qanday foydalanishni unutgan bo'lsangiz,
4.1.1 -bo'limga qarang.
Agar splitLine[0] "S" ga teng bo'lsa , SingleClubMember misoli yaratiladi. Aks holda, MultiClubMember obyekti yaratiladi. if-else buyrug'i tanlash uchun ishlatiladi :
agar (splitLine[0].equals("S"))
{
// SingleClubMember-ni yaratish
}boshqa
{
// MultiClubMember-ni yaratish
}
if blokida SingleClubMember sinf konstruktori yangi ob'ektni yaratish uchun ishlatiladi .
236 12 -bob
SingleClubmember. Yaratilgan namuna mahalliy o'zgaruvchan memga tayinlangan. SingleClub Member klassi Member dan kelib chiqqanligi sababli , Single
ClubMember obyekti Member sinfining mem oÿzgaruvchisiga tayinlanishi mumkin. SingleClubMember ob'ektini yaratish
va tayinlash buyrug'i quyidagicha ko'rinadi:
mem = new SingleClubMember('S', Integer. parseInt(splitLine[1]), splitLine[2], Double.parseDouble(splitLine[3]), Butun son. parseInt(splitLine[4]));
SingleClubMember sinfining konstruktori ekanligini unutmang 5 ta parametrni oladi: char pMemberType, int pMemberID, String pName, double pFees va int pClub?
Parametrlarning ba'zilari int va double turiga ega bo'lganligi sababli, splitLine massividagi barcha qiymatlar String tipida bo'lsa, biz Integerdan foydalanishimiz kerak .
parseInt() va Double.parseDouble() string qiymatlarini tahlil qilish va ularni int va double qiymatlariga aylantirish uchun
yuqoridagi misolda bo'lgani kabi mas'uliyat bilan.
Yuqoridagi buyruqni if blokiga qo'shing. Bu bajarilgandan so'ng, siz else blokiga o'tishingiz mumkin .
else blokida MultiClubMember namunasi yaratiladi va mem ga tayinlanadi . Multi ClubMember sinf konstruktori
5 ta parametrni oladi: char pMemberType, int pMemberID, String pName, double pFees va int pMember shipPoints.
MultiClubMember obyektini yaratishga harakat qiling
va uni memga o'zingiz tayinlang.
Bu bajarilganda, if-else buyrug'i tugallanadi va memni LinkedList to'plamiga qo'shish mumkin
12.6. FileHandler sinf 237
nemis m. Quyidagi buyruq bu qanday amalga oshirilishini ko'rsatadi (9.5.1-kichik bo'limga qarang):
m.add(mem);
Keyin keyingi qatorni o'qish va lineRead o'zgaruvchisini yangilash uchun yana reader.readLine() usulini chaqiramiz.
Bu while tsiklining ishini yakunlaydi va siz undan chiqishingiz mumkin. Shuningdek, urinish blokidan chiqing . Sinab ko'rish blokidan chiqqandan so'ng , biz har qanday IOException xatolarini ushlash uchun catch blokida ishlaymiz. Ushbu blok oddiygina xato xabarini ko'rsatadi.
Catch blokini o'zingiz dasturlashga harakat qiling .
catch blokidan keyin LinkedList m ni qaytaring va usulni tugating.
ReadFile() usuli haqida aytish mumkin bo'lgan narsa shu . Ushbu usulni o'zingiz yozishga harakat qiling.
appendFile()
Keling, appendFile() usuliga o'tamiz. Bu usul har safar yangi mehmon qo'shilganda Member.csv fayliga yangi qator qo'shadi. U parametrni oladi
String mem deb nomlangan va hech qanday qiymat qaytarmaydi. Ushbu usulni o'zingiz e'lon qilishga harakat qiling.
Usul ichida "resurslar bilan sinab ko'ring " sintaksisi BufferedWriter ob'ektini yaratish uchun ishlatiladi, u yozuvchi deb ataladi . Ma'lumotlar faylga qo'shilishi kerakligi sababli (qayta yozish o'rniga) ,
238 12 -bob
BufferedWriter konstruktoriga quyidagi FileWriter obyekti uzatiladi:
new FileWriter("members.csv", rost)
Eslatib o'tamiz, ikkinchi argument (to'g'ri) ma'lumotlar faylga biriktirilishi kerakligini bildiradi.
BufferedWriter ob'ektini o'zingiz yaratib ko'ring . Maslahat uchun oldingi usulning tavsifiga qarang. BufferedWriter obyektini yaratish BufferedReader obyektini yaratish bilan deyarli bir xil .
BufferedWriter ob'ekti yaratilgandan so'ng , yozuvchi. try blokidagi write() string memni member.csv fayliga qo'shish uchun ishlatiladi . Ammo mem qo‘shilgandan
so‘ng kursorni keyingi qatorga o‘tkazmoqchi bo‘lganimiz sababli, bu qiymatni write() usuliga argument sifatida o‘tkazishdan oldin memga “ \n” qo‘shamiz . Boshqacha qilib aytganda, quyidagi buyruq ishlatiladi:
writer.write(mem + "\n");
Agar shunday qilmasangiz, rekord olasiz
S, 1, Ivonne, 950,0, 2M, 2, Sharon, 1200,0, 100
o'rniga
S, 1, Ivonne, 950,0, 2
M, 2, Sharon, 1200,0, 100
write() usulini chaqirganingizdan so'ng try blokini tugatishingiz mumkin . Keyin har qanday IOException xatolarini ushlash uchun catch bloki qo'shiladi . Ushbu blok oddiygina xato xabarini ko'rsatadi. Catch bloki
usulni tugatadi. Ushbu usulni o'zingiz yozishga harakat qiling.
12.6. FileHandler sinf 239
overwriteFile()
Endi biz overwriteFile() usuliga o'tishimiz mumkin . Bu usul m nomli LinkedList parametrini oladi va
hech narsa qaytarmaydi. Usulni e'lon qilishga harakat qiling
o'z-o'zidan.
Ushbu usul har safar a'zoni klubdan olib tashlamoqchi bo'lganingizda chaqiriladi. Agar tashrifchi o'chirilgan bo'lsa, CSV fayli yangilanishi kerak. Afsuski, Java -da fayldan chiziqni oddiygina olib tashlash usuli yo'q . Siz faylga ma'lumotlarni yozishingiz yoki qo'shishingiz mumkin, lekin uni o'chirish imkoniyati yo'q.
Shuning uchun siz vaqtinchalik fayl yaratishingiz kerak. Ish tugadi
dasturlashda keng tarqalgan amaliyot.
Har safar a'zoni klubdan olib tashlamoqchi bo'lsangiz , ular avval LinkedList dan o'chiriladi. Keyin ob'ekt
LinkedList qayta yozish File() usuliga argument sifatida uzatiladi.
OverwriteFile() usulida vaqtinchalik Members.temp fayli yaratiladi, unga LinkedListdagi barcha ma'lumotlar yoziladi. Ma'lumotlar to'g'ridan-to'g'ri member.csv fayliga yozilmaganligini unutmang . Bu fayl buzilishi tufayli yuzaga kelishi mumkin bo'lgan xatolarni oldini olish uchun amalga oshiriladi. Agar hamma narsa yaxshi bo'lsa, original member.csv fayli o'chiriladi va member.temp nomi Member.csv ga o'zgartiriladi .
Ushbu xatti-harakatni amalga oshirish uchun siz avval overwriteFile() usulida mahalliy o'zgaruvchini e'lon qilasiz:
String s;
240 12 -bob
Keyin "resurslar bilan sinab ko'ring" sintaksisi konstruktoriga quyidagi File obyekti uzatiladigan writer nomli BufferedWriter obyektini yaratish uchun ishlatiladi:
yozuvchi:
new FileWriter("members.temp", false)
Bu yerda biz BufferedWriter ob'ekti ikkinchi argument sifatida "false" ni o'tkazib , member.temp faylidagi har
qanday mavjud ma'lumotlarni qayta yozishi kerakligini belgilaymiz .
"Resurslar bilan sinab ko'ring" buyrug'ini o'zi yozib ko'ring
munosib.
BufferedWriter ob'ekti yaratilgandan so'ng , biz try blokini dasturlashga o'tishimiz mumkin . try bloki for tsikli bilan boshlanadi :
uchun (int i=0; i< m.size(); i++)
{
}
For tsikli o'tkazilgan LinkedList to'plamining elementlarini takrorlaydi. For tsiklida i indeksidagi elementni olish uchun avval get() usulidan foydalanamiz ( 9.5.1-bo'limga qarang ). Keyin toString() usuli s mahalliy o'zgaruvchiga tayinlangan elementning satr tasvirini olish uchun ishlatiladi . 6.2.3-bo'limda ikkita usulni bitta buyruqda chaqirish haqida aytganimizni eslaysizmi ? Bu erda get() va toString() usullarini bir xil buyruqda chaqirish uchun xuddi shunday qilamiz :
s = m.get(i).toString();
FileHandler sinf 241
Polimorfizm tufayli (8.2-bo'limga qarang), toString() to'g'ri usuli ish vaqtida element turiga qarab chaqiriladi. Misol uchun, agar LinkedList ning birinchi elementi Single ClubMember ob'ekti bo'lsa, SingleClubMember sinfidagi toString() usuli chaqiriladi.
Elementning satr tasvirini olgandan so'ng
jamoa
writer.write(s + "\n");
s qatorni member.temp fayliga yozadi .
Bu bajarilgandan so'ng, siz for buyrug'ini va try blokini bajarishingiz mumkin.
Keyin har qanday IOException xatolarini ushlash va xabarni chop etish uchun oddiy catch blokini yozamiz.
Shundan so'ng, usul deyarli tayyor. Asl Members.csv
faylini oÿchirish va Member.temp nomini oÿzgartirishgina qoladi
Members.csv da . Avvalgi " resurslar bilan sinab ko'ring" buyrug'idan keyin try-catch buyrug'ini qo'shing .
Try blokining ichida ikkita ob'ekt e'lon qilinadi - f va tf fayli:
Fayl f = yangi fayl("members.csv"); File tf = new File("members.temp");
Keyin f ni o'chirish uchun delete ( ) usuli , tf nomini o'zgartirish uchun renameTo () usuli qo'llaniladi. Agar buni qanday qilishni unutgan bo'lsangiz, 10.3 bo'limiga qarang.
Shundan so'ng, try bloki yopilishi mumkin. Undan keyingi catch bloki barcha umumiy istisnolarni ushlaydi.
242 12 -bob
va xato xabarini ko'rsatadi. Catch blokini o'zingiz dasturlashga harakat qiling .
Catch bloki overwriteFile() usulini yakunlaydi. Bu, shuningdek, FileHandler sinfining oxiriga aylanadi . Bular
Endi siz MembershipManagement sinfini dasturlashga o'tishingiz mumkin . File Handler sinfining qisqacha tavsifi quyida keltirilgan:
Usullari
umumiy LinkedList readFile() public void appendFile (String mem)
public void overwriteFile(LinkedList m)
SINF
A'ZOLIKNI BOSHQARISH
MembershipManagement klassi dasturimizning markaziy qismidir . Bu sinf tashrif buyuruvchilarni qo'shish va o'chirish operatsiyalarini amalga oshiradi . Shuningdek, u
tashrif buyuruvchi haqidagi ma'lumotlarni ko'rsatish usuliga ega.
nomli javaproject paketiga yangi sinf qo'shing
A'zolikni boshqarish.
Keyin quyidagi uchta paketni faylga import qiling:
import java.util.InputMismatchException; import java.util.LinkedList;
import java.util.Scanner;
Birinchidan, biz ob'ektni Scanner ob'ektlari sinfida e'lon qilamiz.
va undan foydalanuvchi ma'lumotlarini o'qish uchun foydalaning.
12.7. A'zolikni boshqarish klassi 243
Keling , ushbu ob'ektni o'quvchi deb nomlaymiz va uni final va private kalit so'zlari bilan e'lon qilamiz:
yakuniy shaxsiy Skaner o'quvchi = yangi Skaner(System.in);
O'quvchi ob'ekti yakuniy kalit so'z bilan e'lon qilinadi, chunki biz kodda keyinroq unga yangi havola tayinlamaymiz . Shuningdek, u shaxsiy deb e'lon
qilinadi , chunki u faqat MembershipManagement sinfida qo'llaniladi .
Keling, ikkita shaxsiy usulni yozaylik. Ular shaxsiy deb e'lon qilinadi , chunki bu usullar faqat MembershipManagement sinfida qo'llaniladi.
getIntInput()
Birinchi usul getIntInput() deb ataladi. Bu usul har safar MembershipManagement sinfidagi har qanday usul System.out ga qo'ng'iroqni ishlatganda chaqiriladi . println() foydalanuvchidan int qiymatini so'rash uchun. Usul kiritilgan int qiymatini o'qishga harakat qiladi.
Agar foydalanuvchi kiritgan qiymat int turiga to'g'ri
kelmasa , usul to'g'ri qiymatni olguncha foydalanuvchidan kiritishni so'rashda davom etadi.
Hech qanday parametr qabul qilmaydi va int qiymatini qaytaradi. Ushbu usulni o'zingiz e'lon qilishga harakat qiling
munosib.
Ushbu usul ichida biz birinchi navbatda tanlash nomli mahalliy int o'zgaruvchini e'lon qilamiz va uni nolga tenglashtiramiz. Keyin try-catch buyrug'idan foydalanib , foydalanuvchidan butun sonni olishga harakat qilamiz.
244 12 -bob
try - catch buyrug'i while siklining ichiga joylashtiriladi . while tsikli foydalanuvchini qayta-qayta kiritishni taklif qiladi to'g'ri qiymat kiritmaguncha butun son. while tsikli quyidagicha ko'rinadi :
esa (tanlov == 0)
{
harakat qilib ko'ring
{
}
// Dastur foydalanuvchidan butun sonni so'raydi
catch(InputMismatchException e)
{
// Foydalanuvchidan yangi qiymat kiritish so'raladi
}
}
Try bloki uchta operatsiyani bajaradi.
Birinchidan, reader.nextInt() usuli foydalanuvchidan butun sonni olishga harakat qilish va uni mahalliy tanlash o'zgaruvchisiga belgilash uchun ishlatiladi.
Agar foydalanuvchi 0 ni kiritsa, dastur InputMismatchException ni tashlashi kerak . Bu zarur , chunki agar foydalanuvchi 0 ga kirsa, while tsikli ishlashda davom etadi . Biz foydalanuvchidan yangi qiymat so'ralishi uchun bu holatda catch blokining bajarilishini xohlaymiz. Istisno quyidagi buyruq bilan chiqariladi:
agar (tanlov == 0)
yangi InputMismatchException();
Agar ushbu buyruq nima qilishini unutsangiz, 6.5.2-kichik bo'limga qarang.
12.7. A'zolikni boshqarish klassi 245
Istisnoni tashlaganingizdan so'ng, try blokiga reader.nextLine () buyrug'ini qo'shish qoladi . Bu nextInt() usuli bilan ishlatilmaydigan yangi qator belgisini o'qish uchun kerak ( batafsil ma'lumot uchun 5.4-bo'limga qarang).
Try blokidan keyin InputMismatchException ni ushlaydigan catch bloki keladi . U ikkitasini hal qiladi
vazifalar.
Birinchidan, reader.nextLine() ga qo'ng'iroq ilgari iste'mol qilinmagan barcha kirishlarni o'qiydi . Bu zarur, chunki sinash bloki bajarilmasa, foydalanuvchi tomonidan kiritilgan ma'lumotlar to'liq iste'mol qilinmaydi.
Keyin catch bloki foydalanuvchiga qayta urinib ko'rishni aytish uchun quyidagi xato xabarini chop etadi .
XATO: KIRISH NOVAL. Iltimos, yana bir bor urinib ko'ring:
Agar try blokidagi kodni bajarishda xatolik yuzaga kelsa , catch blokidagi
kod bajariladi. Bu shuni anglatadiki, mahalliy tanlov o'zgaruvchisining qiymati yangilanmaydi, chunki u catch blokida yangilanmagan. iz
eng muhimi, shart
tanlov == 0
rost bo'lib qoladi va while tsikli ishlashda davom etadi . while tsikli faqat agar bo'lsa chiqadi
foydalanuvchi to'g'ri butun sonni kiritganda
ma'nosi.
while tsiklidan chiqqandan so'ng , usul tanlovni qaytaradi va bajarishni tugatadi.
246 12 -bob
Bu getIntInput() usuli haqida aytish mumkin bo'lgan hamma narsa . Ushbu usulni o'zingiz amalga oshirishga harakat qiling.
printClubOptions()
PrintClubOptions () usuliga o'tamiz. Bu usul nisbatan ahamiyatsiz. U hech qanday parametrlarni olmaydi va hech qanday qiymat qaytarmaydi. Usul oddiygina quyidagi matnni
chop etish uchun System.out.println() ga bir qator qo'ng'iroqlardan foydalana
Merkuriy klubi
Neptun klubi
Yupiter klubi
Ko'p klublar
Ushbu usulni yozishga harakat qiling.
getChoice()
Keyinchalik, ushbu sinfning yana to'rtta usulini dasturlashingiz kerak . Barcha to'rt usul ochiq. Birinchisi, ommaviy getChoice() usuli. U hech qanday parametrlarni olmaydi va int qaytaradi .
getChoice () usuli nisbatan oddiy. U tanlov deb nomlangan mahalliy int o'zgaruvchini belgilaydi va bir qator System.out.println() va System.out buyruqlaridan foydalanadi. print() quyidagi matnni chop etish uchun:
OZONE FITNESS CENTERGA Xush kelibsiz
=================================
a'zo qo'shing
a'zoni olib tashlang
A'zo ma'lumotlarini ko'rsatish
Iltimos, variantni tanlang (yoki chiqish uchun -1 kiriting):
12.7. A'zolikni boshqarish klassi 247
Keyin olish uchun getIntInput() usulini chaqiradi
kirish foydalanuvchisidan kiritish va kirishni o'zgaruvchini tanlashga tayinlaydi.
Nihoyat, u tanlov qiymatini qaytaradi. Sinab ko'ring
bu usulni o'zingiz yozing.
addMembers()
Keyingi umumiy addMembers() usuliga o'tamiz. Usul a'zo ob'ektlarning LinkedList to'plamini oladi
va unga yangi tashrif buyuruvchining ma'lumotlarini qo'shadi. LinkedList ga ma'lumotlarni qo'shgandan so'ng , u qo'shilgan tashrif buyuruvchi haqidagi ma'lumotlarga ega qatorni qaytaradi .
Usul deklaratsiyasi quyidagicha ko'rinadi:
umumiy String addMembers(LinkedList m)
{
}
Usul 7 ta mahalliy o'zgaruvchini o'z ichiga oladi:
string name; intclub; String mem;
ikki baravar to'lov; int MemberID; a'zo mbr;
Kalkulyator kal;
E'tibor bering, oxirgi o'zgaruvchi avvalroq yozilgan Kalkulyator interfeysiga havola .
Mahalliy o'zgaruvchilarni e'lon qilgandan so'ng, biz yangi tashrif buyuruvchi haqida ma'lumot to'plashga o'tishimiz mumkin.
248 12 -bob
Mehmonning ismini olish
Birinchidan, foydalanuvchidan tashrif buyuruvchining ismini kiritishni taklif qiluvchi System.out.print() buyrug'i bajariladi. Keyin kiritilgan ma'lumotlarni o'qish uchun reader.nextLine() usuli qo'llaniladi va natija mahalliy o'zgaruvchi nomiga
tayinlanadi. Ushbu ikkita buyruqni o'zingiz yozishga harakat qiling.
Ma'lumotni qabul qilish haqida klublardan foydalanish imkoniyati
Birinchidan, printClubOptions() usuli chaqiriladi. Keyin foydalanuvchidan tashrif buyuruvchi uchun mavjud bo'lgan klub identifikatorini kiritish so'raladi . Nihoyat, getIntInput() usuli chaqiruvi foydalanuvchi kiritgan ma'lumotlarni o'qiydi va mahalliy o'zgaruvchilar klubi qiymatini o'rnatadi.
Klub uchun yaroqli qiymatlar 1 dan 4 gacha . To‘g‘ri qiymat kiritilgunga qadar foydalanuvchidan klub identifikatorini so‘raydigan while tsiklini yozib ko‘ring . Agar muammoga duch kelsangiz, quyidagi snippet maslahat beradi:
esa (klub < 1 || klub > 4)
{
// Foydalanuvchiga kiritilgan qiymat haqida xabar bering
// noto'g'ri va yangi qiymatni talab qiladi.
// Yangi qiymatni o'qing va klubni yangilash uchun // dan foydalaning
}
Tashrifchi identifikatorini hisoblash
Keling, yangi tashrif buyuruvchi uchun identifikatorni hisoblashga o'tamiz. Identifikator - avtomatik ravishda oshirish
12.7. A'zolikni boshqarish klassi 249
har bir yangisiga tayinlangan suzuvchi raqam
Mehmon.
Boshqacha qilib aytadigan bo'lsak, agar oldingi tashrifchining ID 10 bo'lsa, yangi tashrifchiga ID 11 beriladi.
Mehmon identifikatori if buyrug'i yordamida hisoblanadi :
agar (m.size() > 0)
memberID = m.getLast().getMemberID() + 1;
boshqa
a'zo identifikatori = 1;
Avval bog'langan ro'yxat bo'sh yoki yo'qligini tekshiramiz . Agar u bo'sh bo'lmasa, biz getLast() usulidan foydalanamiz LinkedListning oxirgi elementini olish uchun . Biz Ro'yxatdan sinfida dasturlagan getMemberID() usuli bu elementning memberID maydonini olish uchun chaqiriladi.
Nihoyat, qiymat 1 ga oshiriladi va yangi tashrifchining a'zo identifikatori maydoniga tayinlanadi.
Agar LinkedList to'plami bo'sh bo'lsa, memberID qiymati
1. Bu qo'shilayotgan tashrifchi LinkedListdagi birinchi tashrifchi ekanligini anglatadi.
Mehmon qo'shish
ichida Bog'langan ro'yxat
Shunday qilib, biz tashrif buyuruvchining ismi, klub identifikatori va tashrif buyuruvchining guvohnomasini oldik. LinkedList m ga tashrif buyuruvchilar ma'lumotlarini qo'shish uchun hamma narsa tayyor .
Buning uchun quyidagi buyruq ishlatiladi
agar-else:
250 12 -bob
agar (klub != 4)
{ // Bir klubga mehmon qo'shish
}
boshqa
{
// Bir nechta klublarga mehmon qo'shish
}
Mehmonni qo'shishda klub o'zgaruvchisining qiymati hisobga olinadi. Agar klubning qiymati 1, 2 yoki 3 bo'lsa, bu mehmon bitta klubga boradi. Agar qiymat 4 bo'lsa, bu mehmon bir nechta klubga boradi.
Bir klubga mehmon qo'shish
Birinchidan, keling, bitta klubga qanday qilib mehmon qo'shishni ko'rib chiqaylik . Quyidagi tavsifdagi kod yuqoridagi if-else buyrug'ining if blokiga qo'shilishi kerak.
Avval siz bitta klubga tashrif buyurganingiz uchun to'lovni hisoblashingiz kerak . Buning uchun lambda
ifodasidan calcFees () usulini amalga oshirish uchun foydalanamiz.
oldindan dasturlashtirilgan Kalkulyator interfeysida. Usul bitta parametrni oladi - clubID. Klub identifikatorlari va har bir klub uchun to'lovlar quyida keltirilgan:
Merkuriy klubi
ID = 1 to'lov = 900 Neptun klubi
ID = 2, to'lovlar = 950
Yupiter klubi
ID = 3 Toÿlovlar = 1000
12.7. A'zolikni boshqarish klassi 251
Quyida bir klubga tashrif buyuruvchi uchun accountFees() usulini amalga oshirish keltirilgan:
kal = (n)-> { kalit(n)
{
1-holat:
qaytish 900; 2-holat:
qaytish 950; 3-holat:
qaytish 1000; standart:
qaytish -1;
}
};
Bu erda switch iborasi usulni amalga oshirish uchun ishlatiladi. Agar klub identifikatori 1 bo'lsa, qaytarish qiymati 900 ga teng.
Usulni amalga oshirish switch buyrug'idan foydalanadi. Agar klub identifikatori 1 bo'lsa, 900 qiymati, 2 yoki 3 bo'lsa, mos
ravishda 950 va 1000 qiymatlari qaytariladi. Agar 1, 2 yoki 3 bo'lmasa, -1 qaytariladi. Agar siz lambda ifodalarini qanday ishlatishni unutgan bo'lsangiz, qo'shimcha ma'lumot olish uchun 11.2-bo'limga qarang.
Lambda ifodasini qurgandan so'ng, buyruq
to'lovlar = cal.calculateFees(klub);
bir klubga tashrif buyuruvchi uchun to'lovni hisoblash va
natijada olingan qiymatni o'zgaruvchiga belgilash uchun ishlatiladi
to'lovlar.
252 12 -bob
Keyin biz yangi SingleClubMember ob'ektini yaratamiz, "S" belgilar qiymatini SingleClubMember konstruktoriga , shuningdek , memberID , nom, to'lovlar va klub
o'zgaruvchilariga o'tkazamiz. Olingan ob'ekt Member tipidagi mbr mahalliy o'zgaruvchiga tayinlanadi :
mbr = yangi SingleClubMember('S', a'zo identifikatori, ism, to'lovlar,
klub);
Keyinchalik add() usuli yordamida mbr LinkedList m ga qo'shiladi . Buni o'zingiz qilishga harakat qiling. Agar siz LinkedList- ga elementlarni qanday qo'shishni unutgan
bo'lsangiz , FileHandler sinfidagi readFile () usuliga murojaat qiling.
Yangi mehmonni qo'shgandan so'ng, usul hosil qiladi yangi tashrif buyuruvchini ifodalovchi satr va uni mahalliy mem o'zgaruvchisiga tayinlaydi. Buning uchun biz
SingleClubMember sinfining toString() usulini chaqirish
uchun mbr dan foydalanamiz . Ushbu buyruqni yozishga harakat qiling
o'z-o'zidan.
Ushbu String o'zgaruvchisi CSV faylini keyinroq yangilash uchun ishlatiladi.
Nihoyat, quyidagi buyruq foydalanuvchiga tashrif buyuruvchini qo'shish muvaffaqiyatli bo'lganligini aytadi:
System.out.println("\nSTATUS: Yagona klub a'zosi qo'shildi\n");
Va bu erda if bloki tugaydi.
Bir nechta klublarga mehmon qo'shish
Keling, boshqa blokga o'tamiz , unda bir nechta klublarning tashrifchisi LinkedList ga qo'shilishi kerak . Birinchidan, sizga kerak
12.7. A'zolikni boshqarish klassi 253
Bir nechta klublarga tashrif buyurganlar uchun to'lovni hisoblaydigan lambda ifodasini yozish oson . Agar berilgan argument 4 bo'lsa, ifoda 1200 ni qaytarishi kerak. Aks holda, u -1 ni qaytarishi kerak.
Yozma lambda ifodasi bir nechta klublarga tashrif buyurganlar uchun to'lovni hisoblash uchun ishlatiladi, keyin esa o'zgaruvchan to'lovlarga tayinlanadi.
Keyinchalik, MultiClubMember ob'ektini yaratishingiz kerak . Eslatib o'tamiz , MultiClubMember konstruktori 5 ta parametrni oladi: char pMemberType, int pMemberID, String pName, double pFees va int pMembershipPoints. MultiClubMember obyektini yaratish uchun konstruktorga "M" ramziy qiymati , memberID, name va to'lovlar o'zgaruvchilari va 100 qiymati uzatiladi. Yaratilgan ob'ekt mbr o'zgaruvchisiga tayinlanadi , keyin u LinkedList m ga qo'shiladi.
Keyinchalik, usul yangi tashrif buyuruvchini ifodalash uchun satr yaratishi va uni memga tayinlashi kerak . Va nihoyat, ekranda bir nechta klublarning yangi a'zosi muvaffaqiyatli qo'shilganligi haqida xabar paydo bo'ladi.
Buni yozishga urinib koÿring, boshqa blokirovka qiling. Bu yuqoridagi if blokiga juda o'xshaydi, siz ma'lumot uchun murojaat qilishingiz mumkin.
Mem qiymati qaytarilmoqda
Boshqa ishni tugatganingizdan so'ng , else blokini yoping va mem qiymatini qaytaring .
Bu eng murakkab sinf usulini yakunlaydi. Tabriklaymiz!
254 12 -bob
a'zoni olib tashlash()
Uchinchi umumiy usulga o'tishingiz mumkin, removeMember(). Bu usul hech qanday qiymatni qaytarmaydi . U LinkedList Ro'yxatdan ob'ektlar to'plamini oladi va tashrif buyuruvchining ma'lumotlarini LinkedList dan olib tashlaydi. Keling , ushbu to'plamni LinkedList m deb ataymiz. E'lon qilishga harakat qiling
bu usulni o'zingiz.
Ushbu usul ichida biz avvalo memberID nomli mahalliy int o'zgaruvchini e'lon qilamiz.
Keyin foydalanuvchidan ma'lumotlarini o'chirmoqchi bo'lgan tashrifchining identifikatorini kiritish so'raladi. Keyin getIntInput() usuli kiritilgan qiymatni o'qiydi va uni memberID o'zgaruvchisiga tayinlaydi. Bu bajarilganda, keyingi for tsikli takrorlash uchun ishlatiladi
LinkedList elementlari :
uchun (int i = 0; i
{
}
for tsiklida quyidagi if iborasi MemberID ni solishtiradi
identifikatorli har bir element maydonga kiritiladi
qo'ng'iroq qiluvchi:
agar (m.get(i).getMemberID() == MemberID)
{
}
Agar tashrifchi identifikatori mos kelsa, if blokida
uchta vazifa hal qilinadi.
Birinchidan, LinkedList dan i indeksidagi elementni olib tashlash uchun m.remove(i) usuli qo'llaniladi .
A'zolikni boshqarish klassi 255
Keyin System.out.println() buyrug'i foydalanuvchiga tashrif buyuruvchi o'chirilganligini aytadi. Nihoyat, qaytish buyrug'i
boshqaruvni usuldan qaytaradi:
qaytish;
Yaroqli tashrifchi identifikatori topilganda usul tugatilishi kerak . Bu LinkedList -dagi qolgan elementlarni takrorlashda vaqtni behuda sarflamaslik uchun amalga oshiriladi .
7.2.2 -kichik bo'limda qiymatni qaytarmasdan usuldan chiqish uchun qaytish buyrug'idan qanday foydalanish ko'rsatilgan .
If buyrug'ini yozishni tugatgandan so'ng , if bloklarini yoping
va uchun.
Dastur for buyrug'idan chiqqanda , u LinkedList -ning butun tarkibi bo'ylab takrorlanganligini anglatadi.
va id uchun moslik topilmadi. Ushbu bosqichda siz
foydalanuvchiga System.out.println () buyrug'i yordamida tashrif buyuruvchi identifikatori topilmaganligi haqida xabar berasiz. Buni yozishga harakat qiling
o'zingiz uchun usul.
Bu removeMember () usulidagi ishni yakunlaydi . Endi biz oxirgi ommaviy usulni yozishimiz mumkin, printMemberInfo().
printMemberInfo()
Bu usul removeMember() usuliga juda o'xshaydi .
Shuningdek , u LinkedList Ro'yxatdan ob'ektlar to'plamini oladi
va hech qanday qiymatni qaytarmaydi. Urunib ko'r
usulni o'zingiz ochib bering.
256 12 -bob
Usul ichida hamma narsa removeMember() usuli bilan bir xil sodir bo'ladi, lekin tashrifchini remove() usuli bilan olib tashlash o'rniga, ma'lum bir tashrifchi haqida ma'lumot olish uchun toString ( ) usuli qo'llaniladi .
Tashrifchining String ko'rinishini hisobga olgan holda , biz satrni ", " bilan chegaralangan String massiviga bo'lish uchun split() usulidan foydalanishimiz mumkin . Olingan massiv memberInfo nomli mahalliy String massiviga tayinlanadi. Quyidagi buyruq qanday qilishni ko'rsatadi
bu bir bosqichda:
String[] memberInfo = m.get(i).toString().split(", ");
Olingan String massivi bir qator System.out.println() buyruqlari yordamida so'ralgan tashrifchi haqidagi ma'lumotlarni chop etish uchun ishlatiladi . Agar tashrif
buyuruvchi bitta klubga borsa, ko'rsatilgan ma'lumotlar bo'lishi kerak
shunga o'xshash narsaga qarang:
A'zo turi = S
A'zo identifikatori = 1
A'zo nomi = Yvonne
A'zolik to'lovlari = 950,0 Klub ID = 2
Bir nechta klublarga tashrif buyurganlar uchun ma'lumotlar ko'rsatiladi
niqob shunday ko'rinishi kerak:
A'zo turi = M
A'zo identifikatori = 2
A'zo nomi = Sharon A'zolik to'lovlari = 1200,0 A'zolik ballari = 100
Mehmonning bir yoki bir nechta klubga borishini aniqlash uchun bizga if bayonoti kerak. Agar Siz
JavaProject sinf 257
Agar buni qanday qilishni bilmasangiz , FileHandler sinfining readFile() usuli tavsifiga qarang .
Oldingi removeMember() usulini o'zgartirib ko'ring va printMember Info() usulini o'zingiz kodlang.
Bu MembershipManagement sinfidagi ishni yakunlaydi va biz oxirgi sinf ustida ishlashga o'tamiz.
java loyihasi.
Quyida aÿzolikni boshqarish sinfining qisqacha tavsifi keltirilgan.
dalalar
Yakuniy shaxsiy Skaner o'quvchi
Usullari
xususiy int getIntInput()
xususiy bekor printClubOptions() public int getChoice()
umumiy String addMembers(LinkedList m) public void removeMember(LinkedList m) public void printMemberInfo(LinkedList m)
12.8. JAVAPROJEKT SINI
Sinf ustida ishlashni boshlash uchun JavaProject.java fayliga o'ting . LinkedList sinfini import qilishingiz kerak . Sinfni o'zingiz import qilib ko'ring.
JavaProject sinfida bitta main() usuli mavjud.
258 12 -bob
main() usuli standart deklaratsiyadan foydalanadi:
umumiy statik void main(String[] args) {
}
main() usuli beshta o'zgaruvchini belgilaydi:
String mem;
MembershipManagement mm = new MembershipManagement();
FileHandler fh = new FileHandler();
LinkedList a'zolari = fh.readFile(); int tanlov = mm.getChoice();
Birinchidan, mem nomli String o'zgaruvchisi aniqlanadi.
Keyin MembershipManagement ob'ektlari aniqlanadi
va FileHandler mos ravishda mm va fh deb nomlanadi.
Shundan so'ng, a'zo ob'ektlarning LinkedList to'plami e'lon qilinadi. fh obyekti FileHandler sinfidagi read File() usulini chaqirish uchun ishlatiladi . Ushbu usul Members.csv faylidagi ma'lumotlarni o'qiydi va ma'lumotlarni LinkedList Ro'yxatdan ob'ektlar to'plamiga aylantiradi, shundan so'ng LinkedList
qo'ng'iroq qiluvchiga qaytdi. Keyin LinkedList
a'zolar mahalliy o'zgaruvchiga tayinlanadi .
Nihoyat, tanlov deb nomlangan int o'zgaruvchisi e'lon
qilinadi. mm ob'ekti getChoice () usulini chaqirish uchun ishlatiladi
MembershipManagement sinfida . Usul variantlar ro'yxatini chiqaradi va foydalanuvchi tanlagan variantni
qo'ng'iroq qiluvchiga qaytaradi. Quyidagi variantlar mavjud:
a'zo qo'shing
a'zoni olib tashlang
A'zo ma'lumotlarini ko'rsatish
12.8. JavaProject sinf 259
Bundan tashqari, foydalanuvchi tugatish uchun -1 kiritishi mumkin
dasturlari.
Foydalanuvchining tanlovini olgandan so'ng, siz foydalanuvchi tomonidan belgilangan amalni bajarishga o'tishingiz mumkin. Buning uchun switch buyrug'i while tsiklida ishlatiladi:
esa (tanlov!= -1)
{
almashtirish (tanlov)
{
}
tanlov = mm.getChoice();
}
while tsikli har bir operatsiya tugagandan so'ng foydalanuvchidan variantni tanlashni qayta-qayta taklif qiladi. Aytaylik , birinchi so'rov bo'yicha foydalanuvchi 1 ni kiritadi.
Mehmonni LinkedList ro'yxatiga muvaffaqiyatli kiritgandan so'ng
variantlar yana ko'rsatiladi va foydalanuvchidan boshqa variantni kiritish so'raladi (yoki bajarish uchun -1 ).
Foydalanuvchi -1 ga kirgunga qadar while sikli ishlashda davom etadi .
while tsikli 4 ta variantga ega switch buyrug'idan foydalanadi
tami.
Agar 1-variant tanlansa, LinkedList -ga tashrif buyuruvchilar ma'lumotlarini qo'shish uchun MembershipManagement
sinfining addMembers() usuli ishlatiladi . addMembers () usuli taklif qiladi
foydalanuvchi yangi tashrif buyuruvchining ma'lumotlarini kiritishi; bu dan
Ular o'tgan LinkedList to'plamini yangilash uchun ishlatiladi. Shuningdek, u qo'shilgan mehmonni ifodalovchi qatorni qaytaradi. Bu satr mahalliy mem o'zgaruvchisiga tayinlangan . Keyin appendFile() usuli
FileHandler sinfida qo'shish uchun ishlatiladi -
260 12 -bob
Members.csv fayliga tashrif buyuruvchi . Bu usul qaytmaydi
qiymati yo'q.
Agar 2-variant tanlansa, mehmonni olib tashlash uchun removeMember() usuli va overwriteFile() usuli ishlatiladi . CSV faylini yangilaydi.
Agar 3-variant tanlansa, printMemberInfo() usuli tashrif buyuruvchi haqidagi ma’lumotlarni chop etadi.
Nihoyat, standart holatda, biz shunchaki foydalanuvchiga noto'g'ri variantni tanlaganligi haqida xabar beramiz.
Switch buyrug'ini o'zingiz yozishga harakat qiling .
Bu bajarilganda, main() usuli deyarli tayyor. Switch buyrug'i shu erda tugaydi . Switch buyrug'idan chiqqandan so'ng , biz shunchaki buyruqni ishlatamiz
tanlov = mm.getChoice();
foydalanuvchini yangi variantni kiritishni taklif qilish.
Ushbu buyruqdan so'ng siz while tsiklidan chiqishingiz mumkin. Agar nazorat vaqtdan keyin nuqtaga o'tkazilsa , bu foydalanuvchi -1 ni kiritganligini bildiradi . Keyin dastur oddiygina yakuniy xabarni ko'rsatadi. Bunday dasturni o'zingiz yozishga harakat qiling .
Shunday qilib, biz main() usulining oxiriga va JavaProject sinfining oxiriga yetdik.
Agar siz asosiy() dasturini muvaffaqiyatli yozgan bo'lsangiz , tabriklaymiz! Siz hozirgina to'liq huquqli
Java dasturini muvaffaqiyatli yozdingiz. Yaxshi bajarilgan ish!
12.8. JavaProject sinf 261
Agar dasturni amalga oshirishda muammoga duch kelsangiz, taslim bo'lmang. Ma'lumot uchun A ilovasida tavsiya etilgan yechimga qarang .
Dasturni boshlash uchun hamma narsa tayyor. Ishingiz natijasini ko'rishni kutolmaysizmi? Keyin davom eting!
Dasturni ishga tushirish va so'ralgan qiymatlarni kiritish uchun Start tugmasini bosing .
Qasddan xato qilishga harakat qiling va raqamlar o'rniga harflarni kiriting. Dastur bilan tajriba o'tkazing va uning qanday ishlashini ko'ring. Member.csv fayli loyiha bilan bir xil papkada joylashgan . Agar loyiha papkasini topa olmasangiz , NetBeans'dagi Project Explorer oynasida loyiha nomini o'ng tugmasini bosing va " Xususiyatlar" ni tanlang. Ekranda loyihangizning joylashuvi haqidagi ma'lumotlar bilan dialog oynasi paydo bo'ladi .
Hammasi mo'ljallanganidek ishlayaptimi? Ha bo'lsa, ajoyib! Siz ajoyib ish qildingiz!
Agar kod ishlamasa, uni javob kodi bilan solishtiring va nima noto'g'ri bo'lganini aniqlashga harakat qiling. Xatolaringizni tahlil qilib ko'p narsalarni o'rganishingiz mumkin. Amaliy muammolarni hal qilish -
bu sizning harakatlaringiz eng katta daromad keltiradigan eng qiziqarli sohadir . Ishda xursand bo'ling va hech qachon taslim bo'lmang ! A ilovasida loyiha kodining namunasi ko'rsatilgan.
Machine Translated by Google
ILOVA
Dasturning manba kodini quyidagi manzildan yuklab olish mumkin: https://www.learncodingfast.com/java.
A'ZO SINIFI
java loyihasi paketi; umumiy sinf a'zosi {
char memberType; int MemberID; string name;
ikki baravar to'lov;
A'zo(char pMemberType, int pMemberID, String pName, double pFees){
MemberType = pMemberType; a'zo ID = pMemberID; ism = pName; to'lovlar = pFees;
}
public void setMemberType(char pMemberType) {
MemberType = pMemberType;
}
public char getMemberType() {
a'zo turini qaytarish;
}
Sinf SingleClubMember 263
public void setMemberID(int pMemberID) {
a'zo ID = pMemberID;
}
public int getMemberID() {
a'zo identifikatorini qaytarish;
}
public void setName(String pName) {
ism = pName;
}
umumiy string getName() {
qaytish nomi;
}
umumiy bekor qilingan toÿlovlar(ikki martalik toÿlovlar)
{
to'lovlar = pFees;
}
ommaviy double getFees() {
qaytarish to'lovlari;
}
@Override
public String toString(){ MemberType + ", " + ", " + to'lovlarini qaytarish;
+ a'zo ID + ","
+ ism
}
}
BIR KLUBA A'ZOLI SINFI
java loyihasi paketi; umumiy
sinf SingleClubMember a'zoni kengaytiradi{
264-ilova
xususiy int club;
SingleClubMember(char pMemberType, int pMemberID, String pName, double pFees, int pClub){
super(pMemberType, pMemberID, pName, pFees); club=pClub;
} public void setClub(int pClub){ club = pClub;
}
public int getClub(){ qaytish klubi;
}
@Override
public String toString(){ return super.toString() + ","
+klub;
}
}
SINFI KO'P KLAMBAR
java loyihasi paketi;
ommaviy sinf MultiClubMember a'zoni kengaytiradi {
xususiy int Membership Points;
MultiClubMember(char pMemberType, int pMemberID, String pName, double pFees, int pMembershipPoints)
{ super(pMemberType, pMemberID, pName, pFees); MembershipPoints = pMembershipPoints;
} public void setMembershipPoints(int pMembershipPoints)
{ MembershipPoints = pMembershipPoints;
}
public int getMembershipPoints() {
a'zolik ballarini qaytarish;
}
FileHandler sinf 265
@Override
public String toString(){ return
super.toString() + ", " +membershipPoints;
}
}
KALKULYATOR INTERFEYSI
java loyihasi paketi;
umumiy interfeys Kalkulyator { double accountFees(T clubID);
}
FILEHANDLER SINFI
java loyihasi paketi; import java.util.LinkedList; import java.io.*; umumiy sinf FileHandler {
umumiy LinkedList readFile(){ LinkedList m = yangi LinkedList(); String lineRead;
String[]splitLine; a'zo mem;
harakat qilib ko'ring (BufferedReader
o'quvchi = yangi BufferedReader(yangi FileReader("members.csv")))
{
lineRead = reader.readLine(); while (lineRead!= null) {
splitLine = lineRead.split(", ");
agar (splitLine[0].equals("S")) {
mem = yangi SingleClubMember('S', Integer.parseInt(splitLine[1]), splitLine[2], Double.parseDouble(splitLine[3]), Integer.parseInt(splitLine[4])); } boshqa
266-ilova
{
mem = yangi MultiClubMember('M',
Integer.parseInt(splitLine[1]), splitLine[2], Double.parseDouble(splitLine[3]), Integer.parseInt(splitLine[4]));
}
m.add(mem);
lineRead = reader.readLine();
}
} catch (IOException e) {
System.out.println(e.getMessage());
} qaytish m;
}
public void appendFile(String mem){
harakat qilib ko'ring (BufferedWriter
writer = new BufferedWriter(yangi FileWriter("members.csv", rost)))
{
writer.write(mem + "\n");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void overwriteFile(LinkedList m){ String s;
urinib ko'ring(BufferedWriter writer = new BufferedWriter(new FileWriter("members.temp", false))){ for (int i=0;
i< m.size(); i++) {
s = m.get(i).toString(); writer.write(s + "\n");
}
A'zolikni boshqarish klassi 267
}catch(IOException e)
{ System.out.println(e.getMessage());
}
try{ File f = new File("members.csv"); File tf = new File("members.temp");
f.delete();
tf.renameTo(f); } catch(Exception e)
{ System.out.println(e.getMessage());
}
}
}
A'ZOLIKNI BOSHQARISH SINFI
java loyihasi paketi;
import java.util.InputMismatchException; import java.util.LinkedList; import java.util.Scanner;
umumiy sinf a'zolik boshqaruvi {
yakuniy shaxsiy Skaner o'quvchi = yangi Skaner(System.in);
private int getIntInput(){ int choice
= 0; esa (tanlov == 0)
{
harakat qilib
ko'ring {
tanlov = reader.nextInt(); agar (tanlov == 0) yangi
InputMismatchException(); reader.nextLine();
} catch(InputMismatchException e) {
268-ilova
reader.nextLine();
System.out.print("\nXATO: KIRISH
NOVALID. Qayta urinib ko'ring: ");
}
} qaytish tanlovi;
}
private void printClubOptions()
{ System.out.println("\n1) Club Mercury"); System.out.println("2) Club Neptun"); System.out.println("3) Yupiter klubi"); System.out.println("4) Ko'p klublar");
}
public int getChoice(){ int Choice;
System.out.println("\nOZONE FITNESS CENTERGA Xush kelibsiz");
System.out.println("===================="); System.out.println("1) A'zo qo'shish"); System.out.println("2) A'zoni o'chirish"); System.out.println("3) A'zo ma'lumotlarini ko'rsatish"); System.out.print("\nIltimos, variantni tanlang (yoki chiqish uchun -1 kiriting): "); tanlov = getIntInput(); qaytish
tanlovi;
}
umumiy String addMembers(LinkedList m) {
string name; intclub; String mem; ikki baravar
to'lov; int MemberID; a'zo mbr; Kalkulyator kal;
A'zolikni boshqarish klassi 269
System.out.print("\nIltimos, a'zo nomini kiriting: "); ism =
reader.nextLine();
printClubOptions();
System.out.print("\nIltimos, a'zo klub identifikatorini kiriting: ");
club = getIntInput();
esa (klub < 1 || klub > 4) {
System.out.print("\nKlub identifikatori noto'g'ri. Qayta urinib
ko'ring: "); club = getIntInput();
}
agar (m.size() > 0)
memberID = m.getLast().getMemberID() + 1; boshqa a'zo ID = 1;
agar (klub != 4) {
kal = (n)->
{almashtirish
(n) {
1-holat:
qaytish 900; 2-
holat: qaytish 950; 3- holat:
qaytish 1000; sukut bo'yicha: qaytish
-1;
}
};
to'lovlar = cal.calculateFees(klub);
mbr = yangi SingleClubMember('S', a'zo identifikatori,
ism, to'lovlar, klub);
270-ilova
m.add(mbr);
mem = mbr.toString();
}
boshqa
{
System.out.println("\nSTATUS: Yagona klub a'zosi
qo'shildi\n");
kal = (n) -> {
to'lovlar = cal.calculateFees(klub);
mbr = yangi MultiClubMember('M', a'zo identifikatori, ism,
to'lovlar, 100);
m.add(mbr);
mem = mbr.toString();
System.out.println("\nSTATUS: Ko'p klub a'zosi qo'shildi\n");
}
memni qaytarish;
}
public void removeMember(LinkedList m){ int MemberID;
System.out.print("\nO'chirish uchun a'zo identifikatorini kiriting: ");
MemberID = getIntInput();
uchun (int i = 0; i
{
agar (m.get(i).getMemberID() == MemberID)
{
m.olib tashlash(i); System.out.print("\nA'zo o'chirildi\n"); qaytish;
}
A'zolikni boshqarish klassi 271
}
System.out.println("\nA'zo identifikatori topilmadi\n");
}
public void printMemberInfo(LinkedList m){
int MemberID;
System.out.print("\nKo'rsatish uchun a'zo identifikatorini kiriting
ma `lumot: "); MemberID = getIntInput();
uchun (int i = 0; i
{
agar (m.get(i).getMemberID() == MemberID)
{
String[] memberInfo =
m.get(i).toString().split(", "); System.out.println("\n\nA'zo turi = + MemberInfo[0]);
"
"
System.out.println("A'zo ID = MemberInfo[1]); +
"
System.out.println("A'zo nomi = MemberInfo[2]); +
System.out.println("A'zolik to'lovlari = + MemberInfo[3]); "
agar (memberInfo[0].equals("S"))
{ "
System.out.println("Klub ID = +
MemberInfo[4]);
}boshqa
{
System.out.println("A'zolik ballari = + MemberInfo[4" ]);
}
qaytish;
}
}
System.out.println("\nA'zo identifikatori topilmadi\n");
}
}
272-ilova
JAVAPROJEKT SINI
java loyihasi paketi; import java.util.LinkedList; umumiy sinf JavaProject { public static void
main(String[] args) {
String mem;
MembershipManagement mm = new MembershipManagement(); FileHandler fh = new FileHandler(); LinkedList a'zolari = fh.readFile(); int tanlov = mm.getChoice(); esa (tanlov != -1) {
almashtirish (tanlov)
{
1-holat:
mem = mm.addMembers(a'zolar); fh.appendFile(mem); sindirish; 2- holat:
mm.removeMember(a'zolar); fh.overwriteFile(a'zolar); sindirish; 3- holat:
mm.printMemberInfo(a'zolar); sindirish; standart: System.out.print("\nSiz
noto'g'ri variantni tanladingiz.\n\n"); sindirish;
} tanlov = mm.getChoice();
}
System.out.println("\nXayr");
}
}
Do'stlaringiz bilan baham: |