-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdelete.py
More file actions
105 lines (89 loc) · 4.19 KB
/
delete.py
File metadata and controls
105 lines (89 loc) · 4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from Database import siswaDict, bin
from Utilities import digitCheck, checkSystemOS, backToMenu, loopValidator
from read import cariDataSiswa, showSiswaInDetails
def displayBin(): # Fungsi untuk menampilkan Recycle Bin
if not bin:
checkSystemOS()
print('\nRecycle Bin kosong.')
return False # Tidak menampilkan apa-apa
checkSystemOS()
print('\nRecycle Bin (Recently Deleted):\n')
for i, siswa in enumerate(bin): # Tampilkan data yang ada di Recycle Bin
print(f"{i + 1}. NIS: {siswa['nis']}, Nama: {siswa['nama']}, Kelas: {siswa['kelas']}")
return True
def restoreStudent(): # Fungsi untuk mengembalikan siswa dari bin ke siswaDict
siswaIndex = digitCheck('\nMasukkan nomor data yang ingin di-restore: ') - 1
if siswaIndex >= 0 and siswaIndex < len(bin): # Validasi Index yang dipilih
restoreDelSiswa = bin.pop(siswaIndex) # Hapus data dari Recycle Bin
siswaDict.append(restoreDelSiswa) # Masukkan kembali data ke siswaDict
checkSystemOS()
print(f"\nData siswa {restoreDelSiswa['nama']} berhasil di-restore.")
showSiswaInDetails()
backToMenu('\nTekan ENTER untuk kembali ke Menu Utama\n')
return True
else:
print('\nInput nomor tidak valid. Silahkan coba lagi.')
return False
def askDelete():
showSiswaInDetails()
while True:
hasilCariSiswa = cariDataSiswa('\nMasukkan NIS untuk menghapus data: ') # Return values -> Tuple
if hasilCariSiswa is None:
return # Kembali ke Menu Utama (Kuota 3x Pencarian Gagal)
cariSiswa = hasilCariSiswa[0]
dataSiswaFound = False
for idx, siswa in enumerate(siswaDict): # Cari data berdasarkan input NIS
if siswa['nis'] == cariSiswa:
dataSiswaFound = True
break
if dataSiswaFound:
# Validasi hapus data
isDel = input(f'\nYakin hapus data siswa {hasilCariSiswa[1]['nama']} [Ya/Tidak]: ')
if isDel.lower() == 'ya':
checkSystemOS()
print(f'\nData siswa {hasilCariSiswa[1]['nama']} (NIS: {cariSiswa}) berhasil dihapus.')
bin.append(siswa) # Data pindah ke bin (soft delete)
del siswaDict[idx] # Hapus data dari siswaDict
showSiswaInDetails() # Tampilkan setelah soft delete selesai
return
elif isDel.lower() == 'tidak':
print(f'\nPenghapusan data siswa {hasilCariSiswa[1]['nama']} telah dibatalkan.')
return ''
else:
print('\nInput tidak dikenali, silahkan coba lagi.')
else:
print(f'\nSiswa dengan NIS {cariSiswa} tidak ditemukan, silahkan coba lagi.')
def permanentlyDeleteStudent(): # Fungsi untuk menghapus siswa secara permanen dari bin
siswaIndex = digitCheck('\nMasukkan nomor data yang ingin dihapus permanen: ') - 1
if siswaIndex >= 0 and siswaIndex < len(bin):
deletePermanent = bin.pop(siswaIndex) # Hapus data secara permanen
print(f"\nData siswa {deletePermanent['nama']} berhasil dihapus secara permanen.")
backToMenu('\nTekan ENTER untuk kembali ke Menu Utama\n')
return True
else:
print('\nInput nomor tidak valid. Silahkan coba lagi.')
return False
def binConsole():
if not displayBin(): # Jika Recycle Bin kosong, keluar dari function
backToMenu('\nTekan ENTER untuk kembali ke Menu Utama\n')
return
while True:
try:
pilihan = digitCheck('''
[1] Restore Data Siswa
[2] Hapus Permanen Data Siswa
[3] Kembali ke Menu Utama
Pilih Sub-Menu Recyle Bin: ''')
if pilihan == 1:
restoreStudent()
break
elif pilihan == 2:
permanentlyDeleteStudent()
break
elif pilihan == 3:
break
except ValueError:
print('\nInput tidak valid, mohon pilih Sub-Menu yang tersedia.')
def deleteConsole():
checkSystemOS()
loopValidator(askDelete, '\nLanjutkan menghapus Data Siswa? [Ya/Tidak]: ')