#Copyright Kalam Aulia Sistem Informasi 2020
import time
from time import sleep
from datetime import datetime
from datetime import date
from typing import Deque
import os
today = date.today()
day = today.strftime("%d-%m-%Y")
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
# data
adm = {"nama":"admin", "pin":"2021"}
mahasiswa = [
{
"nama":"pina",
"pin":"6036",
},
{
"nama":"farah",
"pin":"6007",
},
{
"nama":"kalam",
"pin":"6005",
},
{
"nama":"anisa",
"pin":"6008",
}
]
user = {"nama":"", "pin":""}
# functions
class Library:
def __init__(self):
self._judulBuku = ''
self._genre = ''
self._tahunTerbit = 0
def addbook(self):
try:
self._judulBuku = input('Masukkan Judul Buku: ')
self._genre = input('Masukkan Genre Buku: ')
self._tahunTerbit = int(input('Masukkan Tahun Terbit Buku: '))
queue.enqueue(self._judulBuku)
data1.append(self._judulBuku)
link.addLast(self._judulBuku)
histori.append(self._judulBuku)
histori1.append(self._genre)
histori2.append(self._tahunTerbit)
return True
except ValueError:
print('Buku Tidak Dapat Ditambahkan')
print('Mohon Memasukkan Tahun Buku Hanya Menggunakan Angka')
return False
def backbook(self):
try:
self._judulBuku = input('Masukkan Judul Buku: ')
self._genre = input('Masukkan Genre Buku: ')
self._tahunTerbit = int(input('Masukkan Tahun Terbit Buku: '))
if self._judulBuku in histori and self._genre in histori1 and self._tahunTerbit in histori2:
data1.append(self._judulBuku)
return True
else:
print("Nama Buku Tidak sesuai Dengan Yang Dipinjam")
except ValueError:
print('Mohon Memasukkan Tahun Buku Hanya Menggunakan Angka')
return False
def __str__(self):
return '\t'.join(str(x) for x in [self._judulBuku, self._genre, self._tahunTerbit])
class Lemari:
def __init__(self):
self.books = []
def addBook(self):
book = Library()
if book.addbook() == True:
self.books.append(book)
print ()
print('Buku Telah Ditambahkan')
def backBook(self):
book = Library()
if book.backbook() == True:
self.books.append(book)
print ()
print('Buku Telah Dikembalikan')
def viewLemari(self):
print('\t'.join(['No.','Judul', 'Genre','Tahun']))
for idx, book in enumerate(self.books) :
print(idx + 1, end='\t')
print(book)
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.count = 0
def addLast(self, data):
if self.head is None:
self.head = Node(data)
self.count += 1
else:
nodeAkhir = self.head
while nodeAkhir.next is not None:
nodeAkhir = nodeAkhir.next
nodeAkhir.next = Node(data)
self.count += 1
def deleteNode(self,position):
if self.head == None:
return
temp = self.head
if position == 0:
self.head = temp.next
temp = None
return
for i in range (position,-1):
temp = temp.next
if temp is None:
break
if temp is None :
return
if temp.next is None:
return
next = temp.next.next
temp.next = None
temp.next = next
def printList(self):
if self.head is None:
print('Linked List Kosong')
else:
nodeTampil = self.head
print("Buku Yang Pernah Masuk: ")
while nodeTampil is not None:
print('-> ', nodeTampil.data)
nodeTampil = nodeTampil.next
print()
def iterate_item(self):
# Iterate the list.
current_item = self.head
while current_item:
val = current_item.data
current_item = current_item.next
yield val
# sort with quickSort
def partition(arr, low, high):
i = (low-1)
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
def quickSort(arr, low, high):
if len(arr) == 1:
return arr
if low < high:
pi = partition(arr, low, high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
# search with fibonacci search
def searching(isi, x, n):
fibonaci2 = 0
fibonaci1 = 1
fibonaci = fibonaci2 + fibonaci1
while (fibonaci < n):
fibonaci2 = fibonaci1
fibonaci1 = fibonaci
fibonaci = fibonaci2 + fibonaci1
offset = -1
while (fibonaci > 1):
i = min(offset+fibonaci2, n-1)
if (isi[i] < x):
fibonaci = fibonaci1
fibonaci1 = fibonaci2
fibonaci2 = fibonaci - fibonaci1
offset = i
elif (isi[i] > x):
fibonaci = fibonaci2
fibonaci1 = fibonaci1 - fibonaci2
fibonaci2 = fibonaci - fibonaci1
else:
return i
if(fibonaci1 and isi[n-1] == x):
return n-1
return -1
def search():
n = len(data1)
x = input("Masukan Judul Buku Yang anda cari : ")
time.sleep(1.5)
isi = searching(data1, x, n)
if isi >= 0:
print("Ditemukan di Rak ke :",isi)
else:
print(x,"Tidak ada di Rak atau Telah Dipinjam")
# Queue
class Queue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0, item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
def peek(self):
return self.items[len(self.items)-1]
def semua(self):
return self.items
#database
###########################
lemari = Lemari() #
book = Library() #
queue = Queue() #
link = LinkedList() #
mhs1=[] #
data1 = ["0"] #
histori = [] #
histori1 = [] #
histori2 = [] #
###########################
# log in and menus
def log():
log1 = input("Masukkan Nama: ")
log2 = input("Masukkan PIN: ")
for each in mahasiswa:
if log1 in each["nama"] and log2 in each["pin"]:
print ("Selamat datang", each["nama"])
menu_member()
break
else:
print("Nama atau NIM Anda Salah")
log()
def baru():
user["nama"] = input("Masukkan Username Baru: ")
user["pin"] = input("Masukkan PIN Baru: ")
mhs1.append(user["nama"])
print("Selamat Akun Anda Berhasil dibuat")
print("Silahkan Login Menggunakan Menu Member Baru")
welcome()
def member():
log1 = input("Masukkan Nama: ")
log2 = input("Masukkan PIN: ")
if log1 == user["nama"] and log2 == user["pin"]:
print ("Selamat datang", user["nama"])
menu_member()
else:
print("Nama atau NIM Anda Salah")
member()
def admin():
nama = input("Masukkan Nama: ")
pin = input("Masukkan PIN: ")
if nama == adm['nama'] and pin == adm['pin']:
print("Selamat Datang Admin")
menu_admin()
else:
print("Nama atau PIN Anda Salah")
admin()
def regis1():
log2 = input("Masukkan PIN Lama: ")
for each in mahasiswa:
if log2 in each["pin"]:
each["pin"] = input("Masukkan PIN Baru: ")
print("PIN Anda Berhasil Diganti")
print("Login Kembali")
log()
break
else:
print("PIN Anda Salah")
regis1()
def regis2():
log2 = input("Masukkan Nama Lama: ")
for each in mahasiswa:
if log2 in each["nama"]:
each["nama"] = input("Masukkan Nama Baru: ")
print("Nama Anda Berhasil Diganti")
print("Login Kembali")
log()
break
else:
print("Nama Anda Salah")
regis2()
def regis():
print('Pilihan')
print('1. Edit Nama')
print('2. Edit PIN')
print('3. Menu')
while True:
try:
pilih = int(input('Masukkan Pilihan: '))
break
except:
print("Masukan Dengan Angka")
if pilih == 1:
regis2()
elif pilih == 2:
regis1()
elif pilih == 3:
welcome()
else:
print('Pilihan Tidak Ada')
regis()
def welcome():
print("Tanggal: ", day)
print("Logged in time: ", current_time)
print("=====================================")
print("Selamat datang di Perpustakaan Python")
print("Pilih menu dibawah sesuai dengan role anda")
print("1. Admin")
print("2. Member")
print("3. Member Baru")
print("4. Daftar Member Baru")
print("5. Keluar")
print("============================================")
while True:
try:
options = int(input("Enter your choice: "))
os.system('cls')
break
except:
print("Masukan Dengan Angka")
if options == 1:
os.system('cls')
time.sleep(1.5)
admin()
elif options == 2:
os.system('cls')
time.sleep(1.5)
log()
elif options == 3:
os.system('cls')
time.sleep(1.5)
member()
elif options == 4:
os.system('cls')
time.sleep(1.5)
baru()
elif options == 5:
print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
raise SystemExit
else:
print("Pilihan Tidak Ada")
os.system('cls')
welcome()
def menu_admin():
ulang = 'ya'
while ulang == 'ya':
print("=======================")
print("1. Tambah Buku")
print("2. Lihat Buku")
print("3. Hapus Buku")
print("4. Lihat Data Member")
print("5. Update Buku")
print("6. Data Buku")
print("7. Search Data Buku")
print("8. Kembali Ke Menu Login")
print("9. Keluar")
print("=======================")
while True:
try:
pilih = int(input("Masukkan Pilihan Anda: "))
break
except:
print("Masukan Dengan Angka")
if __name__ == '__main__':
if pilih == 1:
time.sleep(1.5)
lemari.addBook()
time.sleep(1.5)
elif pilih == 2:
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.viewLemari()
time.sleep(1.5)
elif pilih == 3:
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.viewLemari()
while True:
try:
item = int(input('Pilih Nomor Buku Yang Ingin Dihapus: '))
time.sleep(1.5)
break
except:
print("Masukan Dengan Angka")
if item - 1 > len(lemari.books):
print('Pilihan Nomor Tidak Ada')
time.sleep(1.5)
else:
lemari.books.remove(lemari.books[item - 1])
data1.pop(item)
print ()
print("Buku Yang Anda Pilih Telah Dihapus")
time.sleep(1.5)
elif pilih == 4:
time.sleep(1.5)
for y in mahasiswa:
y = y["nama"]
mhs1.append(y)
n = len(mhs1)
quickSort(mhs1, 0, n-1)
for x in mhs1:
print("->",x)
time.sleep(1.5)
elif pilih == 5:
time.sleep(1.5)
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.viewLemari()
while True:
try:
item = int(input('Pilih Nomor Buku Yang Ingin Diupdate: '))
time.sleep(1.5)
break
except:
print("Masukan Dengan Angka")
if item - 1 > len(lemari.books):
print('Pilihan Nomor Tidak Ada')
time.sleep(1.5)
else:
library = Library()
if library.addbook() == True :
lemari.books.remove(lemari.books[item - 1])
lemari.books.insert(item - 1, library)
print ()
print('Buku Yang Anda Pilih Telah Diupdate')
time.sleep(1.5)
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
elif pilih == 6:
time.sleep(1.5)
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Pernah Di Data atau Kosong')
time.sleep(1.5)
continue
print(link.printList())
#print("Buku Yang Pernah Masuk: ",link.printList())
print("Banyaknya Buku Yang Pernah Masuk: ", queue.size())
time.sleep(1.5)
elif pilih == 7:
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.viewLemari()
search()
elif pilih == 8:
os.system('cls')
welcome()
time.sleep(1.5)
elif pilih == 9:
print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
raise SystemExit
else:
print("Pilihan Hanya 1-10!")
print("Jika Ingin Kembali Ketik ya atau Jika Tidak Tekan Enter")
ulang = input('Ingin Kembali? ')
else:
print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
raise SystemExit
def menu_member():
ulang = 'ya'
while ulang == 'ya':
print("========================")
print("1. Lihat buku")
print("2. Peminjaman Buku")
print("3. Kembalikan Buku")
print("4. Edit Akun")
print("5. Kembali Ke Menu Login")
print("6. Keluar")
print("========================")
while True:
try:
pilih = int(input("Masukkan Pilihan Anda: "))
break
except:
print("Masukan Dengan Angka")
if __name__ == '__main__':
if pilih == 1:
time.sleep(1.5)
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.viewLemari()
time.sleep(1.5)
elif pilih == 2:
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.viewLemari()
while True:
try:
item = int(input('Pilih Nomor Buku Yang Ingin Dipinjam: '))
time.sleep(1.5)
break
except:
print("Masukan Dengan Angka")
if item - 1 > len(lemari.books):
print('Pilihan Nomor Tidak Ada')
else:
lemari.books.remove(lemari.books[item - 1])
data1.pop(item)
print ()
print("Sukses Meminjam Buku")
time.sleep(1.5)
elif pilih == 3:
time.sleep(1.5)
if len(lemari.books) < 1:
print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
time.sleep(1.5)
continue
lemari.backBook()
time.sleep(1.5)
elif pilih == 4:
time.sleep(1.5)
regis()
elif pilih == 5:
os.system('cls')
time.sleep(1.5)
welcome()
elif pilih == 6:
print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
raise SystemExit
else:
print("Pilihan Hanya 1-6!")
print("Jika Ingin Kembali Ketik ya atau Jika Tidak Tekan Enter")
ulang = input('Ingin Kembali? ')
else:
print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
raise SystemExit
welcome()
Jika anda Ingin Mengcopy Program Saya, harap bisa meninggalkan komentar disini
BalasHapusAgar ilmu saya berkah ke Anda
izin copas bang buat referensi tugas
BalasHapus