#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()