Sabtu, 16 April 2022

Source Code Python Program Perpustakaan CRUD (LinkedList, Sorting, Fibbonaci Search, Queue)

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

2 komentar:

  1. Jika anda Ingin Mengcopy Program Saya, harap bisa meninggalkan komentar disini

    Agar ilmu saya berkah ke Anda

    BalasHapus
  2. izin copas bang buat referensi tugas

    BalasHapus

Source Code Python Program Perpustakaan CRUD (LinkedList, Sorting, Fibbonaci Search, Queue)

#Copyright Kalam Aulia Sistem Informasi 2020   import time from time import sleep from datetime import datetime from datetime import ...