-
Notifications
You must be signed in to change notification settings - Fork 16
/
lab07_b_d.py
executable file
·138 lines (113 loc) · 4.29 KB
/
lab07_b_d.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
'''
BenJek Program
Mengelola pangkalan data akun driver BenJek.
'''
drivers = {}
BenJek_income = 0
class BenJekDriver(object):
'''
Kelas yang merupakan driver BenJek.
'''
def __init__(self, driver_name, service_type):
'''
Membuat sebuah instance dari BenJekDriver.
'''
self.name = driver_name
self.service = service_type
self.salary = 0
self.fare = 0
def go(self, distance):
'''
Melakukan perjalanan untuk seorang driver
dengan jarak sejauh <distance> dan
menambahkan pendapatan driver sesuai
jenis layanannya.
'''
if distance <= 0:
return "Jarak perjalanan tidak boleh <= 0"
if self.name not in drivers.keys():
return ("{} tidak ada di dalam sistem"
.format(self.name))
if self.service == 'NORMAL':
self.fare = distance*1000*(80/100)
if self.service == 'SPORT':
if distance < 10:
return ("{} tidak bisa melakukan perjalanan"
.format(self.name))
self.fare = distance*2500*(80/100)
if self.service == 'CRUISER':
if distance < 25:
return ("{} tidak bisa melakukan perjalanan"
.format(self.name))
self.fare = distance*7500*(80/100)
self.salary += self.fare
return ("{} melakukan perjalanan sejauh {:.2f} "
"dan mendapatkan pendapatan sebesar {:.2f}"
.format(self.name, distance, self.fare))
def check(self):
'''
Mengembalikan pendapatan dari seorang driver
sejauh ini.
'''
if self.name in drivers.keys():
return ("{} memiliki pendapatan sebesar Rp.{:.2f}"
.format(self.name, self.salary))
return ("{} tidak ada di dalam sistem"
.format(self.name))
def register(driver_name, service_type):
'''
Mendaftarkan driver baru pada dict drivers.
'''
service_type = service.upper()
if driver_name in drivers.keys():
return ("{} gagal mendaftar sebagai driver BenJek"
.format(driver_name))
if service_type not in ['NORMAL', 'SPORT', 'CRUISER']:
return ("Tipe driver {} tidak tersedia"
.format(service_type))
drivers[driver_name] = BenJekDriver(driver_name, service_type)
return ("{} berhasil mendaftar sebagai driver BenJek {}"
.format(driver_name, service_type))
def endmonth():
'''
Mengakhiri bulan dan mencetak pendapatan secara keseluruhan.
'''
if not drivers:
summary = "Belum ada driver yang terdaftar!"
return summary
summary = ("Sudah akhir bulan! "
"Pendapatan BenJek bulan ini adalah Rp.{:.2f}\n"
"Daftar pendapatan pengemudi:\n"
.format(BenJek_income))
for each_driver in drivers:
summary += ("{}: Rp.{:.2f}\n"
.format(each_driver, drivers[each_driver].salary))
return summary
print(("Selamat datang di program pengelola pangkalan data BenJek.\n"
"Berikut adalah perintah yang bisa Anda jalankan:\n"
"DAFTAR <nama_driver> <NORMAL/SPORT>\n"
"MULAI PERJALANAN <nama_driver> <jarak_ditempuh_km>\n"
"CEK PENDAPATAN <nama_driver>"
"AKHIR BULAN\n"
"Masukkan perintah yang ingin Anda jalankan:"))
while True:
command = input("\n")
coms = command.split()
try:
if coms[0].upper() == "DAFTAR":
name = coms[1]
service = coms[2].upper()
print(register(name, service))
if coms[0].upper() + ' ' + coms[1].upper() == "MULAI PERJALANAN":
name = coms[2]
print(drivers[name].go(float(coms[3])))
BenJek_income += drivers[name].fare / 4
if coms[0].upper() + ' ' + coms[1].upper() == "CEK PENDAPATAN":
name = coms[2]
print(drivers[name].check())
if coms[0].upper() + ' ' + coms[1].upper() == "AKHIR BULAN":
print(endmonth())
break
except IndexError:
print("Perintah salah.")
input("Tekan <enter> untuk keluar dari program...")