-
Notifications
You must be signed in to change notification settings - Fork 0
/
ApotekFP.py
182 lines (148 loc) · 4.91 KB
/
ApotekFP.py
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# kode program final projek Matematika Diskrit
# Sistem Data Apotek (sorting)
# Muhammad Naufal Arifin (5054231006)
# Muhammad Farhan Arya wicaksono (5054231011)
import os,time
data_obat = [
["Parasetamol", 2022, 1, 150, 5000],
["Amoksisilin", 2022, 5, 100, 7000],
["Omeprazol", 2023,7 , 80, 10000],
["Loratadin", 2022, 8, 120, 6000],
["Ibuprofen", 2023, 4, 90, 8000],
["Dexamethasone", 2023, 9, 110, 7500],
["Cetirizine", 2023, 12, 95, 5500],
["Asterol", 2023, 2, 20, 10000],
["Acyclovir", 2022, 6, 18, 40000]
]
sort_angka = ['1', '2', '3', '4', '5']
nama_bulan = [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
]
kriteria = ["Nama Obat", "Tahun Produksi", "Bulan Produksi" , "Stok", "Harga"]
orderby = ["ASCENDING", 'DESCENDING']
def welocme_program(): #2 Pembukaan program
print("Selamat datang sistem data Apotek Jaya")
print("ketik apa saja untuk melanjutkan :)")
print("=" * 38)
a = input("====> ")
menu()
def menu(): #3 diberikan pilihan dua pilihan
clear()
print('''
PILIH MENU
1) sort data
2) keluar program
'''
)
a = input("pilih menu: ") #menginput salah satu opsi
if a == '1': # jika memeilih 1 maka program lanjut ke tahap berikutnya yaitu sorting data
clear()
filter()
elif a == '2': # jika memeilih 2 maka program selesai
clear()
print("Sampai Jumpa :)")
exit()
else: # jika inputan tidak ada pada opsi maka akan memanggil ulang fungsi menu
salah_input()
menu()
def filter(): #4 diberikan opsi untuk mensorting berdasarkan kriteria tertentu
print(
'''
Sorting bedasarkan:
1) Nama obat
2) Tahun produksi
3) Bulan produksi
4) stok
5) harga
''')
sort = input("pilih sorting:")# menginput salah satu opsi yang ada
if sort not in sort_angka:
salah_input()
filter()
ob = order_by() # memanggil fungsi order_by yaitu memilih cara sorting degan ASC atau DESC
clear()
merge_sort(data_obat, ob, int(sort) - 1) # memanggil fungsi merge sort. fungsi akan mensorting bedasarkan kriteria yang dipilih
daftar(int(sort), ob) # menampilkan hasil sorting
opsi_kembali()
def opsi_kembali():
print("1) Kembali ke menu utama ")
print("2) kembali ke menu sebelumnya")
pil = input("=====>")
if pil=="1":
menu()
elif pil == "2":
clear()
filter()
else:
salah_input()
opsi_kembali()
def order_by(): # memelih cara pengurutan secara ASC atau DESC
clear()
print("Mengurutkan dengan:")
print("1) DESC (nilai tertinggi ke nilai terendah)")
print("2) ASC (nilai terendah ke nilai tertinggi)")
pilihan = input("=======>")
if pilihan == "1":
return 1
elif pilihan == "2":
return 0
else:
salah_input()
return order_by()
def daftar(sort, ob): # menampilkan semua data hasil sorting
clear()
print(f"<sorting berdasarkan {kriteria[sort-1]} secara {orderby[ob]}>")
print("+----------------+----------------+----------------+------+---------+")
print("| Nama Obat | Tahun Produksi | Bulan Produksi | Stok | Harga |")
print("+----------------+----------------+----------------+------+---------+")
for obat in data_obat:
nama, tahun, bulan, stok, harga = obat
print(f"| {nama:<14} | {tahun:^14} | {nama_bulan[bulan-1]:<14} | {stok:^4} |RP.{harga:^5} |")
print()
def merge_sort(arr, reverse, sort): # merge sort sebagai fungsi sorting
if len(arr) > 1:
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
# Rekursi merge_sort untuk kedua bagian array
merge_sort(left_half, reverse, sort)
merge_sort(right_half, reverse, sort)
i = j = k = 0
# Penggabungan dua bagian yang telah diurutkan kembali menjadi satu array
while i < len(left_half) and j < len(right_half):
if (not reverse and left_half[i][sort] < right_half[j][sort]) or (reverse and left_half[i][sort] > right_half[j][sort]):
# Pengurutan naik jika reverse=False
# Pengurutan turun jika reverse=True
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
def clear(): # untuk menclear terminal
time.sleep(1)
os.system('cls')
def salah_input(): # jika salah input
clear()
time.sleep(1)
print("Maaf Anda salah memasukan input !")
welocme_program() # 1st. memulai program