Kutubxona faoliyati haqida hisobotlar yaratish (kitoblarning mavjud ro'yxati va a'zolar ro'yxati).
Fayllar bilan ishlash (kitoblar va a'zolarni fayllarda saqlash va o'qish).
2 Kitob sinfi (Book Class)
Bu sinf har bir kitobni yaratish uchun ishlatiladi va kitoblarning xususiyatlarini belgilaydi. Bu yerda kitobni yaratish, uning miqdorini oshirish yoki kamaytirish va boshqa kitob haqida ma'lumot olish kabi funksiyalar mavjud.
import datetime # Vaqt va sana bilan ishlash uchun modulni import qilamiz.classKitob:def__init__(self,nomi,muallifi,isbn,miqdor):""" Konstruktor: Kitob obyektini yaratadi. Kitobning nomi, muallifi, ISBN raqami va miqdorini oladi. """ self.nomi = nomi # Kitob nomi. self.muallifi = muallifi # Kitob muallifi. self.isbn = isbn # Kitobning ISBN raqami. self.miqdor = miqdor # Kitobning mavjud nusxalari soni.defkitob_haqida(self):""" Kitobning barcha xususiyatlarini ekranga chiqarish. """print(f"Kitob nomi: {self.nomi}, Muallifi: {self.muallifi}, ISBN: {self.isbn}, Miqdori: {self.miqdor}")defmiqdor_oshir(self,miqdor):""" Kitob nusxalarini oshirish. """ self.miqdor += miqdorprint(f"{miqdor} ta kitob qo'shildi. Jami miqdor: {self.miqdor}")defmiqdor_kamaytir(self,miqdor):""" Kitob nusxalarini kamaytirish. """if self.miqdor >= miqdor: self.miqdor -= miqdorprint(f"{miqdor} ta kitob olingan. Jami qoldi: {self.miqdor}")else:print("Kitob yetarli emas!")defkitob_yangilash(self,yangi_nomi=None,yangi_muallifi=None,yangi_isbn=None):""" Kitob haqida ma'lumotlarni yangilash. """if yangi_nomi: self.nomi = yangi_nomiif yangi_muallifi: self.muallifi = yangi_muallifiif yangi_isbn: self.isbn = yangi_isbnprint(f"Kitob yangilandi: {self.nomi}, {self.muallifi}, {self.isbn}")
Tushuntirish:
__init__() konstruktor metodi kitobning nomi, muallifi, ISBN raqami va miqdorini belgilaydi.
kitob_haqida() metodi kitobning barcha xususiyatlarini ekranga chiqaradi.
miqdor_oshir() metodi kitob nusxalarini oshirish uchun ishlatiladi.
miqdor_kamaytir() metodi kitob nusxalarini kamaytirish uchun ishlatiladi.
kitob_yangilash() metodi kitob haqida ma'lumotlarni yangilaydi (nomi, muallifi, ISBN raqami).
3 A'zo sinfi (Member Class)
A'zolarni yaratish va boshqarish uchun sinf. A'zolar kutubxonadan kitob olishadi va ularning qaysi kitobni olganini ko'rish mumkin bo'ladi.
classAzo:def__init__(self,ism,id,email):""" Konstruktor: A'zo obyektini yaratadi. A'zoning ismi, ID raqami va email manzilini oladi. """ self.ism = ism # A'zo ismi. self.id =id# A'zo ID si. self.email = email # A'zo email manzili. self.olingan_kitoblar = [] # A'zoning olgan kitoblari.def a'zolik_haqida(self):""" A'zoning umumiy ma'lumotlarini ekranga chiqarish. """print(f"A'zo: {self.ism}, ID: {self.id}, Email: {self.email}")defkitob_ol(self,kitob):""" A'zoga kitob olish imkonini beradi va kitobni olingan kitoblar ro'yxatiga qo'shadi. """ self.olingan_kitoblar.append(kitob)print(f"{self.ism} kitob oldi: {kitob.nomi}")defolingan_kitoblar_royxati(self):""" A'zoning olgan kitoblari ro'yxatini ko'rsatish. """if self.olingan_kitoblar:print(f"{self.ism}ning olingan kitoblari:")for kitob in self.olingan_kitoblar: kitob.kitob_haqida()else:print(f"{self.ism} hali hech qanday kitob olmagan.")defkitob_qaytarish(self,kitob):""" A'zoning kitobni qaytarishi. """if kitob in self.olingan_kitoblar: self.olingan_kitoblar.remove(kitob)print(f"{self.ism}{kitob.nomi} kitobini qaytardi.")else:print(f"{self.ism} bu kitobni olmagan.")
Tushuntirish:
__init__() konstruktor metodi a'zo ma'lumotlarini (ism, ID, email) o'rnatadi.
a'zolik_haqida() metodi a'zoning umumiy ma'lumotlarini ekranga chiqaradi.
kitob_ol() metodi a'zoga kitob olish imkonini beradi va olingan kitobni a'zoning ro'yxatiga qo'shadi.
olingan_kitoblar_royxati() metodi a'zoning olgan kitoblari ro'yxatini ko'rsatadi.
kitob_qaytarish() metodi a'zoning kitobni qaytarishini boshqaradi.
4 Kutubxona sinfi (Library Class)
Bu sinf kutubxonani boshqaradi, ya'ni kitoblarni qo'shish, a'zolarni qo'shish va ularning o'zaro munosabatlarini tashkil qilish.
classKutubxona:def__init__(self):""" Konstruktor: Kutubxona obyektini yaratadi va kitoblar va a'zolar ro'yxatini hosil qiladi. """ self.kitoblar = [] # Kutubxonadagi kitoblar ro'yxati. self.azolar = [] # Kutubxonadagi a'zolar ro'yxati.defkitob_qosh(self,kitob):""" Kutubxonaga kitob qo'shish. """ self.kitoblar.append(kitob)print(f"Kitob qo'shildi: {kitob.nomi}")defazo_qosh(self,azo):""" Kutubxonaga a'zo qo'shish. """ self.azolar.append(azo)print(f"A'zo qo'shildi: {azo.ism}")defkitob_ber(self,azo_id,isbn):""" A'zoga kitob berish. """ azo =next((a for a in self.azolar if a.id == azo_id), None) kitob =next((k for k in self.kitoblar if k.isbn == isbn), None)if azo and kitob:if kitob.miqdor >0: azo.kitob_ol(kitob) kitob.miqdor_kamaytir(1)else:print("Kitob yetarli emas.")else:print("A'zo yoki kitob topilmadi.")defkitob_qaytarish(self,azo_id,isbn):""" A'zodan kitobni qaytarib olish. """ azo =next((a for a in self.azolar if a.id == azo_id), None) kitob =next((k for k in self.kitoblar if k.isbn == isbn), None)if azo and kitob: azo.kitob_qaytarish(kitob) kitob.miqdor_oshir(1)else:print("A'zo yoki kitob topilmadi.")defkitob_royxati(self):""" Kutubxonadagi kitoblar ro'yxatini ko'rsatish. """if self.kitoblar:print("Kutubxonadagi kitoblar:")for kitob in self.kitoblar: kitob.kitob_haqida()else:print("Hozircha kitoblar mavjud emas.")defazo_royxati(self):""" Kutubxonadagi a'zolar ro'yxatini ko'rsatish. """if self.azolar:print("Kutubxona a'zolari:")for azo in self.azolar: azo.azolik_haqida()else:print("Hozircha a'zolar mavjud emas.")defkitob_ochirish(self,isbn):""" Kutubxonadan kitobni o'chirish. """ kitob =next((k for k in self.kitoblar if k.isbn == isbn), None)if kitob: self.kitoblar.remove(kitob)print(f"Kitob o'chirildi: {kitob.nomi}")else:print("Kitob topilmadi.")defazo_ochirish(self,azo_id):""" Kutubxonadan a'zoni o'chirish. """ azo =next((a for a in self.azolar if a.id == azo_id), None)if azo: self.azolar.remove(azo)print(f"A'zo o'chirildi: {azo.ism}")else:print("A'zo topilmadi.")
Tushuntirish:
kitob_qosh() metodi kutubxonaga yangi kitob qo'shish uchun ishlatiladi.
azo_qosh() metodi yangi a'zoni kutubxonaga qo'shadi.
kitob_ber() metodi a'zoga kitob berish uchun ishlatiladi.
kitob_qaytarish() metodi a'zodan kitobni qaytarib olish uchun ishlatiladi.
kitob_royxati() metodi kutubxonadagi kitoblar ro'yxatini ko'rsatadi.
azo_royxati() metodi kutubxonadagi a'zolar ro'yxatini ko'rsatadi.
kitob_ochirish() metodi kutubxonadan kitobni o'chirish uchun ishlatiladi.
azo_ochirish() metodi a'zoni o'chirish uchun ishlatiladi.
5 Fayllar bilan ishlash
Dastur fayllar bilan ishlaydi. Fayllarda kitoblar va a'zolar haqidagi ma'lumotlar saqlanadi va keyinchalik o'qiladi.
Kitoblarni faylga saqlash
defkitoblarni_faylga_saqlash(kutubxona):withopen("kitoblar.txt", "w")as fayl:for kitob in kutubxona.kitoblar: fayl.write(f"{kitob.nomi},{kitob.muallifi},{kitob.isbn},{kitob.miqdor}\n")print("Kitoblar faylga saqlandi.")
Kitoblarni fayldan o'qish
defkitoblarni_fayldan_oqish(kutubxona):try:withopen("kitoblar.txt", "r")as fayl:for qator in fayl.readlines(): nomi, muallifi, isbn, miqdor = qator.strip().split(",") yangi_kitob =Kitob(nomi, muallifi, isbn, int(miqdor)) kutubxona.kitob_qosh(yangi_kitob)exceptFileNotFoundError:print("Fayl topilmadi. Kitoblar qo'shilmagan.")exceptExceptionas e:print(f"Xato yuz berdi: {e}")
A'zolarni faylga saqlash
defazolarni_faylga_saqlash(kutubxona):withopen("azolar.txt", "w")as fayl:for azo in kutubxona.azolar: fayl.write(f"{azo.ism},{azo.id},{azo.email}\n")print("A'zolar faylga saqlandi.")
A'zolarni fayldan o'qish
defazolarni_fayldan_oqish(kutubxona):try:withopen("azolar.txt", "r")as fayl:for qator in fayl.readlines(): ism,id, email = qator.strip().split(",") yangi_azo =Azo(ism, id, email) kutubxona.azo_qosh(yangi_azo)exceptFileNotFoundError:print("Fayl topilmadi. A'zolar qo'shilmagan.")exceptExceptionas e:print(f"Xato yuz berdi: {e}")
6 Foydalanuvchi Interfeysi (Menyu)
Foydalanuvchi uchun menyu yaratilgan bo'lib, u orqali kitob qo'shish, kitob olish, kitob qaytarish, a'zo qo'shish va boshqa funksiyalarni boshqarish mumkin.
defmenyu(): kutubxona =Kutubxona()kitoblarni_fayldan_oqish(kutubxona)azolarni_fayldan_oqish(kutubxona)whileTrue:print("\n----- Kutubxona Menejment Tizimi -----")print("1. Kitob qo'shish")print("2. A'zo qo'shish")print("3. Kitob olish")print("4. Kitob qaytarish")print("5. Kitoblar ro'yxati")print("6. A'zolar ro'yxati")print("7. Kitobni o'chirish")print("8. A'zoni o'chirish")print("9. Dasturni tugatish") tanlov =input("Tanlang: ")if tanlov =="1": nomi =input("Kitob nomi: ") muallifi =input("Muallifi: ") isbn =input("ISBN: ") miqdor =int(input("Miqdori: ")) kitob =Kitob(nomi, muallifi, isbn, miqdor) kutubxona.kitob_qosh(kitob)kitoblarni_faylga_saqlash(kutubxona)elif tanlov =="2": ism =input("A'zo ismi: ")id=input("A'zo ID si: ") email =input("Email: ") azo =Azo(ism, id, email) kutubxona.azo_qosh(azo)azolarni_faylga_saqlash(kutubxona)elif tanlov =="3": azo_id =input("A'zoning ID sini kiriting: ") isbn =input("Kitobning ISBN raqamini kiriting: ") kutubxona.kitob_ber(azo_id, isbn)elif tanlov =="4": azo_id =input("A'zoning ID sini kiriting: ") isbn =input("Kitobning ISBN raqamini kiriting: ") kutubxona.kitob_qaytarish(azo_id, isbn)elif tanlov =="5": kutubxona.kitob_royxati()elif tanlov =="6": kutubxona.azo_royxati()elif tanlov =="7": isbn =input("Kitobning ISBN raqamini kiriting: ") kutubxona.kitob_ochirish(isbn)kitoblarni_faylga_saqlash(kutubxona)elif tanlov =="8": azo_id =input("A'zoning ID sini kiriting: ") kutubxona.azo_ochirish(azo_id)azolarni_faylga_saqlash(kutubxona)elif tanlov =="9":print("Dastur tugatildi.")breakelse:print("Noto'g'ri tanlov.")
Bu loyiha Python dasturlash tilidagi ko'plab mavzularni qamrab olgan:
OOP (Obyektga yo'naltirilgan dasturlash): Sinflar, vorislik, konstruktorlar, metodlar va polimorfizm.
Fayllar bilan ishlash: Ma'lumotlarni fayllarga saqlash va o'qish.
Istisnolarni boshqarish: Fayl topilmaganida yoki ma'lumot noto'g'ri kiritilganda xatoliklarni boshqarish.
Foydalanuvchi interfeysi: Foydalanuvchi bilan o'zaro munosabatda bo'lish uchun menyu tizimi.
To'liq dastur kodi.
import datetime # Sana va vaqt bilan ishlash uchun import qilinadi.# Kitob sinficlassKitob:def__init__(self,nomi,muallifi,isbn,miqdor): self.nomi = nomi # Kitob nomi. self.muallifi = muallifi # Kitob muallifi. self.isbn = isbn # Kitobning ISBN raqami. self.miqdor = miqdor # Kitobning mavjud nusxalari soni.defkitob_haqida(self):"""Kitobning barcha xususiyatlarini ekranga chiqarish."""print(f"Kitob nomi: {self.nomi}, Muallifi: {self.muallifi}, ISBN: {self.isbn}, Miqdori: {self.miqdor}")defmiqdor_oshir(self,miqdor):"""Kitob nusxalarini oshirish.""" self.miqdor += miqdorprint(f"{miqdor} ta kitob qo'shildi. Jami miqdor: {self.miqdor}")defmiqdor_kamaytir(self,miqdor):"""Kitob nusxalarini kamaytirish."""if self.miqdor >= miqdor: self.miqdor -= miqdorprint(f"{miqdor} ta kitob olingan. Jami qoldi: {self.miqdor}")else:print("Kitob yetarli emas!")defkitob_yangilash(self,yangi_nomi=None,yangi_muallifi=None,yangi_isbn=None):"""Kitob haqida ma'lumotlarni yangilash."""if yangi_nomi: self.nomi = yangi_nomiif yangi_muallifi: self.muallifi = yangi_muallifiif yangi_isbn: self.isbn = yangi_isbnprint(f"Kitob yangilandi: {self.nomi}, {self.muallifi}, {self.isbn}")# A'zo sinficlassAzo:def__init__(self,ism,id,email): self.ism = ism # A'zo ismi. self.id =id# A'zo ID si. self.email = email # A'zo email manzili. self.olingan_kitoblar = [] # A'zoning olgan kitoblari.defazolik_haqida(self):"""A'zoning umumiy ma'lumotlarini ekranga chiqarish."""print(f"A'zo: {self.ism}, ID: {self.id}, Email: {self.email}")defkitob_ol(self,kitob):"""A'zoga kitob olish imkonini beradi va kitobni olingan kitoblar ro'yxatiga qo'shadi.""" self.olingan_kitoblar.append(kitob)print(f"{self.ism} kitob oldi: {kitob.nomi}")defolingan_kitoblar_royxati(self):"""A'zoning olgan kitoblari ro'yxatini ko'rsatish."""if self.olingan_kitoblar:print(f"{self.ism}ning olingan kitoblari:")for kitob in self.olingan_kitoblar: kitob.kitob_haqida()else:print(f"{self.ism} hali hech qanday kitob olmagan.")defkitob_qaytarish(self,kitob):"""A'zoning kitobni qaytarishi."""if kitob in self.olingan_kitoblar: self.olingan_kitoblar.remove(kitob)print(f"{self.ism}{kitob.nomi} kitobini qaytardi.")else:print(f"{self.ism} bu kitobni olmagan.")# Kutubxona sinficlassKutubxona:def__init__(self):"""Kutubxona obyektini yaratadi va kitoblar va a'zolar ro'yxatini hosil qiladi.""" self.kitoblar = [] # Kutubxonadagi kitoblar ro'yxati. self.azolar = [] # Kutubxonadagi a'zolar ro'yxati.defkitob_qosh(self,kitob):"""Kutubxonaga kitob qo'shish.""" self.kitoblar.append(kitob)print(f"Kitob qo'shildi: {kitob.nomi}")defazo_qosh(self,azo):"""Kutubxonaga a'zo qo'shish.""" self.azolar.append(azo)print(f"A'zo qo'shildi: {azo.ism}")defkitob_ber(self,azo_id,isbn):"""A'zoga kitob berish.""" azo =next((a for a in self.azolar if a.id == azo_id), None) kitob =next((k for k in self.kitoblar if k.isbn == isbn), None)if azo and kitob:if kitob.miqdor >0: azo.kitob_ol(kitob) kitob.miqdor_kamaytir(1)else:print("Kitob yetarli emas.")else:print("A'zo yoki kitob topilmadi.")defkitob_qaytarish(self,azo_id,isbn):"""A'zodan kitobni qaytarib olish.""" azo =next((a for a in self.azolar if a.id == azo_id), None) kitob =next((k for k in self.kitoblar if k.isbn == isbn), None)if azo and kitob: azo.kitob_qaytarish(kitob) kitob.miqdor_oshir(1)else:print("A'zo yoki kitob topilmadi.")defkitob_royxati(self):"""Kutubxonadagi kitoblar ro'yxatini ko'rsatish."""if self.kitoblar:print("Kutubxonadagi kitoblar:")for kitob in self.kitoblar: kitob.kitob_haqida()else:print("Hozircha kitoblar mavjud emas.")defazo_royxati(self):"""Kutubxonadagi a'zolar ro'yxatini ko'rsatish."""if self.azolar:print("Kutubxona a'zolari:")for azo in self.azolar: azo.azolik_haqida()else:print("Hozircha a'zolar mavjud emas.")defkitob_ochirish(self,isbn):"""Kutubxonadan kitobni o'chirish.""" kitob =next((k for k in self.kitoblar if k.isbn == isbn), None)if kitob: self.kitoblar.remove(kitob)print(f"Kitob o'chirildi: {kitob.nomi}")else:print("Kitob topilmadi.")defazo_ochirish(self,azo_id):"""Kutubxonadan a'zoni o'chirish.""" azo =next((a for a in self.azolar if a.id == azo_id), None)if azo: self.azolar.remove(azo)print(f"A'zo o'chirildi: {azo.ism}")else:print("A'zo topilmadi.")# Fayllar bilan ishlashdefkitoblarni_faylga_saqlash(kutubxona):"""Kitoblarni faylga saqlash."""withopen("kitoblar.txt", "w")as fayl:for kitob in kutubxona.kitoblar: fayl.write(f"{kitob.nomi},{kitob.muallifi},{kitob.isbn},{kitob.miqdor}\n")print("Kitoblar faylga saqlandi.")defkitoblarni_fayldan_oqish(kutubxona):"""Kitoblarni fayldan o'qish."""try:withopen("kitoblar.txt", "r")as fayl:for qator in fayl.readlines(): nomi, muallifi, isbn, miqdor = qator.strip().split(",") yangi_kitob =Kitob(nomi, muallifi, isbn, int(miqdor)) kutubxona.kitob_qosh(yangi_kitob)exceptFileNotFoundError:print("Fayl topilmadi. Kitoblar qo'shilmagan.")exceptExceptionas e:print(f"Xato yuz berdi: {e}")defazolarni_faylga_saqlash(kutubxona):"""A'zolarni faylga saqlash."""withopen("azolar.txt", "w")as fayl:for azo in kutubxona.azolar: fayl.write(f"{azo.ism},{azo.id},{azo.email}\n")print("A'zolar faylga saqlandi.")defazolarni_fayldan_oqish(kutubxona):"""A'zolarni fayldan o'qish."""try:withopen("azolar.txt", "r")as fayl:for qator in fayl.readlines(): ism,id, email = qator.strip().split(",") yangi_azo =Azo(ism, id, email) kutubxona.azo_qosh(yangi_azo)exceptFileNotFoundError:print("Fayl topilmadi. A'zolar qo'shilmagan.")exceptExceptionas e:print(f"Xato yuz berdi: {e}")# Foydalanuvchi interfeysi (Menyu)defmenyu():"""Foydalanuvchi uchun menyu.""" kutubxona =Kutubxona()kitoblarni_fayldan_oqish(kutubxona)azolarni_fayldan_oqish(kutubxona)whileTrue:print("\n----- Kutubxona Menejment Tizimi -----")print("1. Kitob qo'shish")print("2. A'zo qo'shish")print("3. Kitob olish")print("4. Kitob qaytarish")print("5. Kitoblar ro'yxati")print("6. A'zolar ro'yxati")print("7. Kitobni o'chirish")print("8. A'zoni o'chirish")print("9. Dasturni tugatish") tanlov =input("Tanlang: ")if tanlov =="1": nomi =input("Kitob nomi: ") muallifi =input("Muallifi: ") isbn =input("ISBN: ") miqdor =int(input("Miqdori: ")) kitob =Kitob(nomi, muallifi, isbn, miqdor) kutubxona.kitob_qosh(kitob)kitoblarni_faylga_saqlash(kutubxona)elif tanlov =="2": ism =input("A'zo ismi: ")id=input("A'zo ID si: ") email =input("Email: ") azo =Azo(ism, id, email) kutubxona.azo_qosh(azo)azolarni_faylga_saqlash(kutubxona)elif tanlov =="3": azo_id =input("A'zoning ID sini kiriting: ") isbn =input("Kitobning ISBN raqamini kiriting: ") kutubxona.kitob_ber(azo_id, isbn)elif tanlov =="4": azo_id =input("A'zoning ID sini kiriting: ") isbn =input("Kitobning ISBN raqamini kiriting: ") kutubxona.kitob_qaytarish(azo_id, isbn)elif tanlov =="5": kutubxona.kitob_royxati()elif tanlov =="6": kutubxona.azo_royxati()elif tanlov =="7": isbn =input("Kitobning ISBN raqamini kiriting: ") kutubxona.kitob_ochirish(isbn)kitoblarni_faylga_saqlash(kutubxona)elif tanlov =="8": azo_id =input("A'zoning ID sini kiriting: ") kutubxona.azo_ochirish(azo_id)azolarni_faylga_saqlash(kutubxona)elif tanlov =="9":print("Dastur tugatildi.")breakelse:print("Noto'g'ri tanlov.")if__name__=="__main__":menyu()
Dastur qanday ishlaydi:
Kitob sinfi: Kutubxonadagi kitoblar haqida ma'lumotlarni boshqaradi. Kitob qo'shish, nusxalar sonini oshirish, kitob haqida ma'lumot olish kabi funksiyalar mavjud.
Azo sinfi: Kutubxonadagi a'zolarni boshqaradi. A'zolar kitob olishi va qaytarishi mumkin.
Kutubxona sinfi: Barcha kutubxona amallarini boshqaradi. Kitob qo'shish, kitob berish, a'zo qo'shish va ro'yxatlarni boshqarish kabi funksiyalarni amalga oshiradi.
Fayllar bilan ishlash: Kitoblar va a'zolar haqidagi ma'lumotlar fayllarda saqlanadi va keyinchalik dastur qayta ishga tushganda o'qiladi.
Menyu interfeysi: Foydalanuvchi menyu orqali kutubxona operatsiyalarini bajaradi.
Dasturni ishlashi qanday buladi ?
Videoda to'liq ko'rsatilgan.
Xulosa:
Ushbu dastur Python dasturlash tilining asosiy tushunchalarini o'z ichiga olgan keng qamrovli loyiha hisoblanadi. U kutubxonadagi kitoblar va a'zolarni boshqarishga imkon beradi. Fayllar bilan ishlash, obyektga yo'naltirilgan dasturlash (OOP) va foydalanuvchi interfeysi kabi funksiyalar to'liq amalga oshirilgan.