Upload
ajey-bhakti
View
338
Download
10
Embed Size (px)
Citation preview
8/18/2019 Dokumen Final Project Python
1/61
FINAL PROJECT DOCUMENT
MATA KULIAH ALGORITMA DAN PEMROGRAMAN
Penjualan Warnet
OLEH:
Nazar Bhakti
2015.201.00099
Executive 1
PROGRAM STUDI ALGORITMA DAN PEMROGRAMAN
STMIK SENTRA PENDIDIKAN BISNIS 2015
8/18/2019 Dokumen Final Project Python
2/61
KATA PENGANTAR
Assalamu’alaikum warahmatullahi wabarakatuh.
Alhamdulillahirabbilalamin, banyak nikmat yang Allah berikan, tetapi
sedikit sekali yang kita ingat. Segala puji hanya layak untuk Allah atas segala
berkat, rahmat, taufik, serta hidayah-Nya yang tiada terkira besarnya,
sehingga saya dapat menyelesaikan tugas hasil laporan Final Project ini.
Dalam penyusunannya, saya mengucapkan terimakasih kepada Dosen
yang mengajar dan teman-teman seperjuangan saya di kelas yaitu Bapak
Yusuf Wibisono , Bapak Thami Rusdi Agus, Iwan Sutandi , Natanael , dan
seluruh Executive 1 yang telah memberikan dukungan, kasih, dan
kepercayaan yang begitu besar. Dari sanalah semua kesuksesan ini berawal,
semoga semua ini bisa memberikan sedikit kebahagiaan dan menuntun pada
langkah yang lebih baik lagi.
Meskipun saya berharap isi dari laporan program saya ini bebas dari
kekurangan dan kesalahan, namun selalu ada yang kurang. Oleh karena itu,
saya mengharapkan kritik dan saran yang membangun agar tugas makalah
praktikum kimia ini dapat lebih baik lagi.
Akhir kata saya mengucapkan terimakasih, semoga hasil laporan
praktikum saya ini bermanfaat.
Samarinda , 4 Januari 2016
8/18/2019 Dokumen Final Project Python
3/61
DAFTAR ISI
KATA PENGANTAR…………….……………….……………………………….…………………2
DAFTAR ISI……………………………………………………………………………………………3
BAB I PENDAHULUAN……………………………………………………………………………..4
A. LATAR BELAKANG…………………………………………………………………………4
B. TUJUAN & MANFAAT…………………………………………………………………….4
C. RUANG LINGKUP………………………………………………………………………….5
D. METODE PENELITIAN……………………………………………………………………5
E. PERANGKAT YANG DIGUNAKAN…………………………………………………….5
BAB II DOKUMENTASI TEKNIS………………………………………………………………..6
A. GAMBARAN PROSES……………………………………………………………………..6
B. DATABASE YANG DIGUNAKAN……………………………………………………….6
C. DOKUMENTASI PROGRAM…………………………………………………………….8
BAB III HASIL PROGRAM………………………………………………………………………..7
A. MENU UTAMA…………………………………………………………………………….56
B. ENTRY DATA………………………………………………………………………………57
C. PROSES…….……………………………………………………………………………….60
D. LAPORAN..…………………………………………………………………………………60
8/18/2019 Dokumen Final Project Python
4/61
BAB I
PENDAHULUAN
A. Latar Belakang
Komputer merupakan suatu alat hasil teknologi hasil
perkembangan manusia, di zaman globalisasi ini rasanya kurang lengkap
apabila dalam suatu instansi/perusahaan atau pun usaha pribadi tidak
dilengkapi dengan komputer. Salah satu media untuk mempercepat
pekerjaan dan hasilnya pun memuaskan.
Dalam Final Project yang saya ambil ini membuat sebuah aplikasi
yang membantu penjualan dalam bisnis rata-rata milik pribadi yaitu
warung internet (warnet). Dalam warung internet sebuah kios yang
memiliki banyak komputer untuk di sewakan bagi pengakses Internet.
Harus ada software untuk pembelian waktu disana, Karena itu saya
tertarik untuk membuat aplikasi simple untuk bisnis rata-rata yang dibuat
secara pribadi tersebut.
B. Tujuan & Manfaat
Aplikasi yang saya buat berguna pada usaha-usaha mata
pencaharian dalam bisnis Warung Internet (warnet). Dengan Aplikasi
yang saya buat ini usaha warnet dapat berjalan lancar karena kita dapat
menghitung dan mencatat tarif, waktu dan jenis penyewaan secara tepat.
Begitu banyak keuntungan apabila kita menggunakan Aplikasi ini dalam
usaha warnet. Diantaranya tadi seperti yang disebutkan sebelumnya,
tidak akan ada yang saling dirugikan antara pihak klien (user) dengan
pemilik (owner), selain itu pula untuk pihak pemilik (owner) tidak perlu
khawatir akan kecurangan pegawai (operator) dalam menjaga usaha
8/18/2019 Dokumen Final Project Python
5/61
pemilik warnet tersebut, karena semua kegiatan jual beli jasa warnet
akan tercatat pada Aplikasi ini.
C.
Ruang Lingkup
Aplikasi yang saya buat ini masih dalam tahap penjualan,
pendaftaran member , data operator , ganti password, laporan penjualan.
Sedangkan dalam program warnet kita harus membuat sedetail mungkin
dimana pc client dan server itu berbeda program, penghitungan waktu
pemain saat menyewa sebuah computer.
D.
Metode Penelitian
Metode yang saya gunakan untuk membuat program ini
memahami dari latihan-latihan yang diberikan oleh Pak Yusuf Wibisono ,
Pak Thami Rusdi. Dan saya sering minta saran kepada teman sekelas
saya Iwan Sutandi, Natanael. Ada pula mencari sedikit refrensi di google.
E.
Perangkat Yang Digunakan
Perangkat keras yang saya gunakan dalam membuat program
tugas akhir ialah:
Laptop dengan spesifikasi:
Acer Aspire 4738
Dan Perangkat lunak yang saya gunakan ialah:
Python 3.4
Xampp mysql
HeidiSQL
8/18/2019 Dokumen Final Project Python
6/61
BAB II
DOKUMENTASI TEKNIS
A. Gambaran Proses
Awal membuka aplikasi yakni Invsplash , setelah itu langsung
keluar login untuk ke menu program. Login wajib memakai user operator
dan yang bisa login di form tersebut adalah operator dan owner warnet,
karena data login terhubung langsung ke database pegawai. Setelah
berhasil login langsung di tampilkan dengan MenuWarnet sederhana
program saya. Disana terdapat image button untuk memproses program-
program yang saya buat yaitu:
1. Pembelian Vocher
2. Data Member
3. Pendaftaran Member
4. Ganti Password Member
5. Penambahan Tarif
6. Penambahan Operator
7. Laporan Transaksi
8. Laporan Data Member
B. Database Yang Digunakan
8/18/2019 Dokumen Final Project Python
7/61
Dalam program yang saya buat saya memberi nama database
tersebut yaitu ONENET, saya ingin sedikit menjelaskan tentang database
ini yabg berisi 4 table di dalam nya.
1. Data_operator
Data operator ini untuk data pegawai yang bekerja di warnet
tersebut, database ini juga kunci dari program saya dimana
orang yang terdata dalam yang database yang bisa membuka
program warnet, karena saya membuat form login langsung
terhubung dengan nama operator dan password.
2. Data_penyewa
Data penyewa database ini untuk menampung data penyewa ,
dalam form pembelian terhubung dengan id_member
8/18/2019 Dokumen Final Project Python
8/61
3. Pembelian_vocher
Pembelian vocher ini yang paling penting dalam program yang
saya buat, database ini menampung semua transaksi dalam
program warnet , dalam untuk laporan penjualan pun
mengambil dari database ini.
4. Tarif
Tarif database ini terhubung pada form pembelian dimana
untuk menentukan waktu penyewaan computer dan harga
yang akan di bayar.
C. Dokumentasi Program
1.
MenuWarnet
from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as mb
from FormPembelian import *
8/18/2019 Dokumen Final Project Python
9/61
from Daftar_Member import *
from addOP import *
from addtarif import *
from Data_Penyewa import *
from Ganti_Pass import *
from Laporan import *
class MenuUtama():
def __init__(self, parent, title):
self.parent = parentparent.title(title)
parent.geometry("+220+20")
parent.resizable(width=False, height=False)
parent.protocol('WM_DELETE_WINDOW', self.onPass)
self.aturKomponen()
def pembelianvocher(self):
root = Tk()
FormPembelian(root, "Pembelian Vocher")
root.mainloop()
def addmember(self):
root = Tk()
EntryMember(root, ":: DAFTAR MEMBER ::")
root.mainloop()
def addOP(self):
root = Tk()
EntryOperator(root, ":: TAMBAH OPERATOR ::")
8/18/2019 Dokumen Final Project Python
10/61
root.mainloop()
def addtarif(self):
root = Tk()
EntryMember(root, "Tambah Tarif")
root.mainloop()
def datamember(self):
root = Tk()
TampilStock(root, "Data Member ONENET e-spot")root.mainloop()
def gantipass(self):
root = Tk()
EditStock(root, "GANTI PASSWORD")
root.mainloop()
def onClose(self, event=None):
self.parent.destroy()
def onPass(self):
self.onClose()
pass
def aturKomponen(self):
# atur main frame
btnFrame = Frame(self.parent,bg='black')
8/18/2019 Dokumen Final Project Python
11/61
btnFrame.pack(fill=BOTH, expand=YES)
MainFrame = Frame(self.parent,bg='black')
MainFrame.pack(fill=BOTH, expand=YES)
Label(btnFrame, text=' ',bg='black').grid(row=0,column=0,
pady=20)
#button image
self.imgTambah = PhotoImage(file='./icon/member.gif')
self.btnTambah = Button(btnFrame, text='Member',
command=self.datamember ,bg='black',fg='white',image=self.imgTambah,
compound='top', width=70)
self.btnTambah.grid(row=0, column=0)
self.imgBuy = PhotoImage(file='./icon/buy.gif')
self.btnTambah = Button(btnFrame, text='Buy',
command=self.pembelianvocher, bg='black',fg='white',
image=self.imgBuy,
compound='top', width=70)
self.btnTambah.grid(row=0, column=1)
self.imgReqmem = PhotoImage(file='./icon/addmem.gif')
self.btnTambah = Button(btnFrame,
text='AddMember',command=self.addmember, bg='black',fg='white',
image=self.imgReqmem,
compound='top', width=70)
self.btnTambah.grid(row=0, column=2)
8/18/2019 Dokumen Final Project Python
12/61
self.imgReqOP = PhotoImage(file='./icon/addoperator.gif')
self.btnTambah = Button(btnFrame,
text='AddOP',command=self.addOP, bg='black',fg='white',
image=self.imgReqOP,
compound='top', width=70)
self.btnTambah.grid(row=0, column=3)
self.imgReqjam = PhotoImage(file='./icon/addjam.gif')
self.btnTambah = Button(btnFrame,
text='AddTarif',command=self.addtarif, bg='black',fg='white',image=self.imgReqjam,
compound='top', width=70)
self.btnTambah.grid(row=0, column=4)
self.imgPass = PhotoImage(file='./icon/Pass.gif')
self.btnTambah = Button(btnFrame,
text='Password',command=self.gantipass ,bg='black',fg='white',
image=self.imgPass,
compound='top', width=70)
self.btnTambah.grid(row=0, column=5)
self.imgTrs = PhotoImage(file='./icon/reportmember.gif')
self.btnTambah = Button(btnFrame,
text='ReportTrs',command=lap_Transaksi , bg='black',fg='white',
image=self.imgTrs,
compound='top', width=70)
self.btnTambah.grid(row=0, column=6)
self.imgRmember = PhotoImage(file='./icon/reportmem.gif')
8/18/2019 Dokumen Final Project Python
13/61
self.btnTambah = Button(btnFrame,
text='ReportMem',command=lap_member, bg='black',fg='white',
image=self.imgRmember,
compound='top', width=70)
self.btnTambah.grid(row=0, column=7)
# setting tampilan menu
self.mainMenu = Menu(self.parent)
self.parent.config(menu=self.mainMenu)
# sub menu :: File
self.input = Menu(self.mainMenu)
self.input.add_command(label='Data Member',
underline=5, command=self.datamember)
self.input.add_command(label='Pendaftaran Member',
underline=5, command=self.addmember)
self.input.add_command(label='Pendaftaran Operator',
underline=5,command=self.addOP)
self.input.add_command(label='Tambah Tarif',
underline=5,command=self.addtarif)
self.input.add_command(label='Ganti Password',
underline=5, command=self.gantipass)
self.mainMenu.add_cascade(label='File',
menu=self.input, underline=0)
# sub menu :: Transaksi
self.transaksi = Menu(self.mainMenu)
self.transaksi.add_command(label='Transaksi Penjualan',
underline=10, command=self.pembelianvocher)
8/18/2019 Dokumen Final Project Python
14/61
self.mainMenu.add_cascade(label='Transaksi',
menu=self.transaksi, underline=0)
# sub menu :: Laporan
self.laporan = Menu(self.mainMenu)
self.laporan.add_command(label='Penjualan Vocher',
underline=16, command=lap_Transaksi)
self.laporan.add_command(label='Data Member',
underline=16, command=lap_member)
self.mainMenu.add_cascade(label='Laporan',
menu=self.laporan, underline=0)
# sub menu :: Sistem
self.sistem = Menu(self.mainMenu)
self.sistem.add_command(label='Tentang Program',
underline=0)
self.mainMenu.add_cascade(label='Sistem',
menu=self.sistem, underline=0)
# setting background image via Canvas
self.bgImage = PhotoImage(file="./data/background.GIF")
bgCanvas = Canvas(MainFrame, width=901, height=600)
bgCanvas.pack(fill=BOTH, expand=YES)
bgCanvas.create_image(0, 0, image=self.bgImage,
anchor=NW)
self.statusBar = Label(MainFrame, text="", bd=1,
relief=SUNKEN, anchor=E)
self.statusBar.pack(side=BOTTOM, fill=X)
8/18/2019 Dokumen Final Project Python
15/61
if __name__ == '__main__':
root = Tk()
aplikasi = MenuUtama(root, "MENU ONENET e-Sport ")
root.mainloop()
2. FormPembelian
import tkinter
from tkinter import *
from tkinter import ttk
import datetime
import time
import pymysql
import random
judul_kolom = ("Menit","Harga")
class FormPembelian:
def __init__(self, parent, title):
self.parent = parent
8/18/2019 Dokumen Final Project Python
16/61
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",
self.onClose)
lebar = 600
tinggi = 600
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i"
%(lebar,tinggi,setTengahX,setTengahY))
self.parent.resizable(False, False)
self.parent['bg']='orange'self.aturKomponen()
def aturKomponen(self):
labelFrame = Frame(self.parent,bg='orange')
labelFrame.pack(side=TOP)
notransFrame = Frame(self.parent,bg='orange')
notransFrame.pack(side=TOP)
mainFrame = Frame(self.parent,bg='orange')
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent,bg='orange')
btnFrame.pack(side=BOTTOM)
Label(labelFrame, text=' ',bg='orange').grid(row=0,column=0)
Label(notransFrame, text='
',bg='orange').grid(row=1,column=0, pady=10)
Label(btnFrame, text=' ',bg='orange').grid(row=3,column=0)
8/18/2019 Dokumen Final Project Python
17/61
8/18/2019 Dokumen Final Project Python
18/61
Label(btnFrame, text='Total Pembayaran
',bg='orange').grid(row=0,\
column=0, sticky=W, pady=15)
self.entTtlPembayaran = Entry(btnFrame, width=23)
self.entTtlPembayaran.grid(row=0, column=1, sticky=E)
Label(btnFrame, text='Total Waktu
',bg='orange').grid(row=1,\
column=0, sticky=W)self.entTtlWaktu = Entry(btnFrame, width=23)
self.entTtlWaktu.grid(row=1, column=1, sticky=E)
Label(btnFrame,
text='Operator',bg='orange').grid(row=2,column=0, sticky=W, pady=15)
con = pymysql.connect(db="onenet", user="warnet",
passwd="samarinda12", host="localhost",
port=3306,autocommit=True)
cur = con.cursor()
cur.execute("SELECT Nama_Operator FROM
data_operator")
data_Operator = cur.fetchall()
self.cbOperator =
ttk.Combobox(btnFrame,values=data_Operator,
state='readonly',width=15)
self.cbOperator.grid(row=2,column=1,sticky=W,padx=10)
8/18/2019 Dokumen Final Project Python
19/61
self.btnBeli = Button(btnFrame,
text='Beli',bg="blue",fg="white",width=20,command=self.onSave)
self.btnBeli.grid(row=3, column=1)
self.btnReset = Button(btnFrame,
text='Reset',bg="red",fg="white",width=10,command=self.onReset)
self.btnReset.grid(row=3, column=2,padx=10)
self.fr_data = Frame(mainFrame, bd=10)
self.fr_data.pack(fill=BOTH, expand=YES)self.trvTabel = ttk.Treeview(self.fr_data,
columns=judul_kolom,show='headings')
self.trvTabel.bind("", self.OnDoubleClick)
sbVer = Scrollbar(self.fr_data,
orient='vertical',command=self.trvTabel.yview)
sbHor = Scrollbar(self.fr_data,
orient='horizontal',command=self.trvTabel.yview)
sbVer.pack(side=RIGHT, fill=Y)
sbHor.pack(side=BOTTOM, fill=X)
self.trvTabel.pack(side=TOP, fill=BOTH)
self.table()
def onCari(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12', host='localhost',\
port=3306, autocommit=True)
cur = con.cursor()
8/18/2019 Dokumen Final Project Python
20/61
cKode = self.entCekID.get()
if len(cKode) == 0:
messagebox.showwarning(title="Peringatan",message="Nama
Member jangan kosong dong.")
self.entCekID.focus_set()
return
sql1 = "SELECT Password "
sql2 = "FROM data_penyewa WHERE ID_Member = %s"
cur.execute(sql1+sql2,cKode)data = cur.fetchone()
if cur.rowcount> 0:
messagebox.showinfo(title="Informasi",\
message="Data Benar")
else:
messagebox.showinfo(title="Informasi",\
message="Data tidak ditemukan")
self.entKode.focus_set()
return
cur.close()
con.close()
def OnDoubleClick(self, event):
self.entTtlWaktu.delete(0, END)
8/18/2019 Dokumen Final Project Python
21/61
self.entTtlPembayaran.delete(0, END)
it = self.trvTabel.selection()[0]
ite = self.trvTabel.item(it)["values"]
self.entTtlWaktu.insert(END, ite[0])
self.entTtlPembayaran.insert(END, ite[1])
def table(self):
con = pymysql.connect(db="onenet", user="warnet",
passwd="samarinda12", host="localhost",
port=3306,autocommit=True)
cur = con.cursor()
cur.execute("SELECT * FROM tarif")
data_table = cur.fetchall()
for kolom in judul_kolom:
self.trvTabel.heading(kolom,text=kolom)
self.trvTabel.column("Menit", width=110,anchor="n")
self.trvTabel.column("Harga", width=240,anchor="n")
i=0
for dat in data_table:
8/18/2019 Dokumen Final Project Python
22/61
if(i%2):
baris="genap"
else:
baris="ganjil"
self.trvTabel.insert('','end', values=dat, tags=baris)
i+=1
self.trvTabel.tag_configure("ganjil", background="#FFFFFF")
self.trvTabel.tag_configure("genap",
background="whitesmoke")
cur.close()
con.close()
def onSave(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12',
host='127.0.0.1', port=3306,autocommit=True)
cur = con.cursor()
cTglKeluar = self.entTglKeluar.get()
cNoTrans = self.entNoTrans.get()
cCekID = self.entCekID.get()
cTtlWaktu = self.entTtlWaktu.get()
nTtlPembayaran = int(self.entTtlPembayaran.get())
cOperator = self.cbOperator.get()
sql = "INSERT INTO pembelian_vocher (No_Transaksi,
ID_Member, Tgl_Pembelian, Paket_Jam, Harga, Operator)"+\
"VALUES(%s,%s,%s,%s,%s,%s)"
8/18/2019 Dokumen Final Project Python
23/61
cur.execute(sql,(cNoTrans,cCekID,cTglKeluar,cTtlWaktu,nTtlPembaya
ran,cOperator))
messagebox.showinfo(title="Informasi", \
message="Data sudah di tersimpan.")
self.onReset()
cur.close()
con.close()
def onReset(self):
self.entCekID.delete(0, END)
self.entTtlWaktu.delete(0, END)
self.entTtlWaktu.delete(0, END)
self.entTtlPembayaran.delete(0, END)
self.cbOperator.delete(0, END)
self.entCekID.focus_set()
def onClose(self, event=None):
self.parent.destroy()
##root = Tk()
##FormPembelian(root, "Pembelian Vocher")
##root.mainloop()
3. Data_Penyewa
8/18/2019 Dokumen Final Project Python
24/61
import tkinter.ttk
from tkinter import *
import pymysql
judul_kolom = ("NO MEMBER","ID
MEMBER","PASSWORD","TANGGAL DAFTAR")
class TampilStock:
def __init__(self,parent,judul):
self.parent = parentself.parent.title(judul)
lebar = 570
tinggi = 400
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar, tinggi, setTengahX,
setTengahY))
self.parent.protocol("WM_DELETE_WINDOW", self.Tutup)
self.parent.resizable(False,False)
self.parent['bg']='orange'
self.aturKomponen()
self.isiTabel()
def aturKomponen(self):
kodeFrame = Frame(self.parent,bg='orange')
kodeFrame.pack(side=TOP)
mainFrame = Frame(self.parent)
mainFrame.pack(fill=BOTH, expand=YES)
fr_data = Frame(mainFrame, bd=10)
8/18/2019 Dokumen Final Project Python
25/61
fr_data.pack(fill=BOTH, expand=YES)
self.trvTabel = ttk.Treeview(fr_data,
columns=judul_kolom,show='headings')
sbVer = Scrollbar(fr_data,
orient='vertical',command=self.trvTabel.yview)
sbHor = Scrollbar(fr_data,
orient='horizontal',command=self.trvTabel.yview)
sbVer.pack(side=RIGHT, fill=Y)
sbHor.pack(side=BOTTOM, fill=X)
self.trvTabel.pack(side=LEFT, fill=BOTH)
Label(kodeFrame, text='ONENET e-
Sport',bg='orange').grid(row=0,column=1,sticky=N)
Label(kodeFrame, text=' Data Member
',bg='orange').grid(row=1,column=1,sticky=N)
def isiTabel(self):
con = pymysql.connect(db="onenet", user="warnet",
passwd="samarinda12", host="localhost",
port=3306,autocommit=True)
cur = con.cursor()
cur.execute("SELECT * FROM data_penyewa")
data_penyewa = cur.fetchall()
for kolom in judul_kolom:
self.trvTabel.heading(kolom,text=kolom)
self.trvTabel.column("NO MEMBER", width=80,anchor="center")
self.trvTabel.column("ID MEMBER", width=180,anchor="n")
self.trvTabel.column("PASSWORD",width=120,anchor="n")
8/18/2019 Dokumen Final Project Python
26/61
self.trvTabel.column("TANGGAL
DAFTAR",width=180,anchor="n")
i=0
for dat in data_penyewa:
if(i%2):
baris="genap"
else:
baris="ganjil"
self.trvTabel.insert('', 'end', values=dat, tags=baris)
i+=1
self.trvTabel.tag_configure("ganjil", background="#FFFFFF")
self.trvTabel.tag_configure("genap", background="whitesmoke")
cur.close()
con.close()
def Tutup(self, event=None):
self.parent.destroy()
#root = Tk()
#TampilStock(root, "Data Member ONENET e-spot")
#root.mainloop()
4.
Data_Member
import tkinter
from tkinter import *
import pymysql
8/18/2019 Dokumen Final Project Python
27/61
import datetime
import time
class EntryMember:
def __init__(self, parent, title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOWS",
self.onClose)
lebar = 500tinggi = 220
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,
tinggi,setTengahX, setTengahY))
self.parent.resizable(False,False)
self.parent['bg']='orange'
self.aturKomponen()
def aturKomponen(self):
mainFrame = Frame(self.parent,bg='orange')
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent,bg='orange')
btnFrame.pack(side=BOTTOM)
Label(mainFrame, text='ONENET e-
Sport',bg='orange').grid(row=0,column=1,sticky=N)
8/18/2019 Dokumen Final Project Python
28/61
Label(mainFrame, text='Pendaftaran
Member',bg='orange').grid(row=1,column=1,sticky=N,pady=5)
Label(mainFrame, text='ID
Member',bg='orange').grid(row=2, column=0, sticky=W)
self.entMember = Entry(mainFrame, width=25)
self.entMember.grid(row=2, column=1,pady=5)
self.btnCek = Button(mainFrame, text='Cek
Member',bg='blue', fg='white',\
command=self.onCekMember, width=10)self.btnCek.grid(row=2, column=2)
Label(mainFrame, text="NO
MEMBER",bg='orange').grid(row=3, column=0, sticky=W)
self.entNomer = Entry(mainFrame, width=25)
self.entNomer.grid(row=3, column=1,pady=5)
Label(mainFrame, text="Password",bg='orange').grid(row=4,
column=0, sticky=W)
self.entPass = Entry(mainFrame, width=25)
self.entPass.grid(row=4, column=1,pady=5)
Label(mainFrame, text="Tanggal
Pembuatan",bg='orange').grid(row=5, column=0, sticky=W)
self.entTgl = Entry(mainFrame, width=25,)
self.entTgl.grid(row=5, column=1)
tgl = time.strftime("%Y%m%d")
self.entTgl.insert(0, tgl)
8/18/2019 Dokumen Final Project Python
29/61
self.btnSave = Button(btnFrame,
text='Save',bg='blue',fg='white',\
command=self.onSave, width=10)
self.btnSave.grid(row=0, column=1, padx=5)
self.btnCancel = Button(btnFrame,
text='Clear',bg='red',fg='white',\
command=self.onCancel, width=10)
self.btnCancel.grid(row=0,column=2)
def onClose(self, event=None):
self.parent.destroy()
def onCancel(self):
self.entMember.delete(0, END)
self.entNomer.delete(0, END)
self.entPass.delete(0, END)
self.entMember.focus_set()
def onCekMember(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12',
host='127.0.0.1', port=3306, autocommit=True)
cur = con.cursor()
cKode = self.entMember.get()
if len(cKode) == 0:
tkinter.messagebox.showwarning(title="Peringatan",\
8/18/2019 Dokumen Final Project Python
30/61
8/18/2019 Dokumen Final Project Python
31/61
8/18/2019 Dokumen Final Project Python
32/61
5. Add Op
import tkinter
from tkinter import *
import pymysql
class EntryOperator:
def __init__(self, parent, title):
self.parent = parent
self.parent.title(title)self.parent.protocol("WM_DELETE_WINDOWS",
self.onClose)
lebar = 500
tinggi = 240
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,
tinggi,setTengahX, setTengahY))
self.parent.resizable(False,False)
self.parent['bg']='orange'
self.aturKomponen()
def aturKomponen(self):
mainFrame = Frame(self.parent,bg='orange')
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent,bg='orange',pady=10)
btnFrame.pack(side=BOTTOM)
8/18/2019 Dokumen Final Project Python
33/61
Label(mainFrame, text='ONENET e-
Sport',bg='orange').grid(row=0,column=1,sticky=N)
Label(mainFrame, text='Pendaftaran
Operator',bg='orange').grid(row=1,column=1,sticky=N,pady=5)
Label(mainFrame, text='Nama
Operator',bg='orange').grid(row=2, column=0, sticky=W)
self.entOP = Entry(mainFrame, width=25)
self.entOP.grid(row=2, column=1,pady=5)
self.btnCek = Button(mainFrame, text='Cek',bg='blue',fg='white',\
command=self.onCekMember, width=10)
self.btnCek.grid(row=2, column=2)
Label(mainFrame, text="No
Operator",bg='orange').grid(row=3, column=0, sticky=W)
self.entNomer = Entry(mainFrame, width=25)
self.entNomer.grid(row=3, column=1,pady=5)
Label(mainFrame, text="Password",bg='orange').grid(row=4,
column=0, sticky=W)
self.entPass = Entry(mainFrame, width=25)
self.entPass.grid(row=4, column=1,pady=5)
Label(mainFrame, text="Alamat",bg='orange').grid(row=5,
column=0, sticky=W)
self.entalamat = Entry(mainFrame, width=25,)
self.entalamat.grid(row=5, column=1,pady=5)
8/18/2019 Dokumen Final Project Python
34/61
Label(mainFrame, text="Waktu
Jaga",bg='orange').grid(row=6, column=0, sticky=W)
Label(mainFrame,
text="PAGI/MALAM",bg='orange').grid(row=6, column=2, sticky=W)
self.entjaga = Entry(mainFrame, width=25)
self.entjaga.grid(row=6, column=1,pady=5)
self.btnSave = Button(btnFrame,
text='Save',bg='blue',fg='white',\
command=self.onSave, width=10)
self.btnSave.grid(row=0, column=1, padx=5)
self.btnCancel = Button(btnFrame,
text='Clear',bg='red',fg='white',\
command=self.onCancel, width=10)
self.btnCancel.grid(row=0,column=2)
def onClose(self, event=None):
self.parent.destroy()
def onCancel(self):
self.entOP.delete(0, END)
self.entNomer.delete(0, END)
self.entPass.delete(0, END)
self.entalamat.delete(0, END)
self.entjaga.delete(0, END)
self.entOP.focus_set()
8/18/2019 Dokumen Final Project Python
35/61
def onCekMember(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12',
host='127.0.0.1', port=3306, autocommit=True)
cur = con.cursor()
cKode = self.entOP.get()
if len(cKode) == 0:
tkinter.messagebox.showwarning(title="Peringatan",\
message="Nama Operator tidak
boleh kosong.")self.entOP.focus_set()
else:
sql = "SELECT No_Operator FROM data_operator
WHERE Nama_Operator = %s"
cur.execute(sql,cKode)
data = cur.fetchall()
pjg = len(data)
if pjg > 0:
curkode = con.cursor()
sqlkode = "SELECT max(Nama_Operator) FROM
data_operator"
curkode.execute(sqlkode)
maxkode = curkode.fetchone()
tkinter.messagebox.showwarning(title="Peringatan",\
message="Nama Operator
sudah digunakan. Gunakan kode yang lain. "+\
"kode terakhir yang telah
digunakan adalah "+\
8/18/2019 Dokumen Final Project Python
36/61
8/18/2019 Dokumen Final Project Python
37/61
con.close()
#root = Tk()
#EntryOperator(root, ":: TAMBAH OPERATOR ::")
#root.mainloop()
6.
Add Tarif
import tkinter
from tkinter import *
import pymysql
class EntryMember:
def __init__(self, parent, title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOWS",
self.onClose)
lebar = 450
tinggi = 160
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar,
tinggi,setTengahX, setTengahY))
self.parent.resizable(False,False)
8/18/2019 Dokumen Final Project Python
38/61
self.parent['bg']='orange'
self.aturKomponen()
def aturKomponen(self):
mainFrame = Frame(self.parent,bg='orange')
mainFrame.pack(side=TOP)
btnFrame = Frame(self.parent,bg='orange')
btnFrame.pack(side=BOTTOM)
Label(mainFrame, text='ONENET e-Sport',bg='orange').grid(row=0,column=1,sticky=N)
Label(mainFrame, text='Penambahan
Tarif',bg='orange').grid(row=1,column=1,sticky=N)
Label(mainFrame, text='Waktu
(Menit)',bg='orange').grid(row=2, column=0, sticky=W,pady=15)
self.entWaktu = Entry(mainFrame, width=25)
self.entWaktu.grid(row=2, column=1)
self.btnCek = Button(mainFrame, text='Cek',bg='blue',
fg='white',\
command=self.onCekMember, width=10)
self.btnCek.grid(row=2, column=2,padx=5)
Label(mainFrame, text="Masukan
Harga",bg='orange').grid(row=3, column=0, sticky=W)
self.entHarga = Entry(mainFrame, width=25)
self.entHarga.grid(row=3, column=1)
8/18/2019 Dokumen Final Project Python
39/61
self.btnSave = Button(btnFrame,
text='Save',bg='blue',fg='white',\
command=self.onSave, width=10)
self.btnSave.grid(row=0, column=1)
self.btnCancel = Button(btnFrame,
text='Clear',bg='red',fg='white',\
command=self.onCancel, width=10)
self.btnCancel.grid(row=0,column=2)
def onClose(self, event=None):
self.parent.destroy()
def onCancel(self):
self.entWaktu.delete(0, END)
self.entHarga.delete(0, END)
self.entWaktu.focus_set()
def onCekMember(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12',
host='127.0.0.1', port=3306, autocommit=True)
cur = con.cursor()
cKode = self.entWaktu.get()
8/18/2019 Dokumen Final Project Python
40/61
if len(cKode) == 0:
tkinter.messagebox.showwarning(title="Peringatan",\
message="Wajib Masukan Waktu
yang ingin di tambah.")
self.entWaktu.focus_set()
else:
sql = "SELECT Harga FROM tarif WHERE Menit = %s"
cur.execute(sql,cKode)
data = cur.fetchall()
pjg = len(data)
if pjg > 0:curkode = con.cursor()
sqlkode = "SELECT max(Menit) FROM tarif"
curkode.execute(sqlkode)
maxkode = curkode.fetchone()
tkinter.messagebox.showwarning(title="Peringatan",\
message="Kode sudah
digunakan. Gunakan kode yang lain. "+\
"kode terakhir yang telah
digunakan adalah "+\
str(maxkode[0])+".")
self.entWaktu.focus_set()
self.entHarga.get()
else:
tkinter.messagebox.showinfo(title="Amam", \
message="Bisa digunakan")
self.entHarga.focus_set()
cur.close()
8/18/2019 Dokumen Final Project Python
41/61
con.close()
def onSave(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12',
host='127.0.0.1', port=3306,autocommit=True)
cur = con.cursor()
cWaktu = self.entWaktu.get()
nHarga = int(self.entHarga.get())
sql = "INSERT INTO tarif (Menit, Harga)"+\
"VALUES(%s,%s)"cur.execute(sql,(cWaktu,nHarga))
messagebox.showinfo(title="Informasi", \
message="Data sudah di tersimpan.")
self.onCancel()
cur.close()
con.close()
#root = Tk()
#EntryMember(root, "Tambah Tarif")
#root.mainloop()
7. Ganti_Pass
from tkinter import *
import pymysql
8/18/2019 Dokumen Final Project Python
42/61
class EditStock:
def __init__(self, parent, title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW",
self.onClose)
lebar = 500
tinggi = 185
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2self.parent.geometry("%ix%i+%i+%i"
%(lebar,tinggi,setTengahX,setTengahY))
self.parent.resizable(False, False)
self.parent['bg']='orange'
self.aturKomponen()
def aturKomponen(self):
kodeFrame = Frame(self.parent,bg='orange')
kodeFrame.pack(side=TOP)
btnFrame = Frame(self.parent,bg='orange')
btnFrame.pack(side=BOTTOM)
Label(kodeFrame, text='ONENET e-
Sport',bg='orange').grid(row=0,column=1,sticky=N)
Label(kodeFrame, text='Penggantian Password
Member',bg='orange').grid(row=1,column=1,sticky=N,pady=15)
8/18/2019 Dokumen Final Project Python
43/61
Label(kodeFrame, text='Nama
Member',bg='orange').grid(row=2,column=0,sticky=E)
self.entMember = Entry(kodeFrame,width=20)
self.entMember.grid(row=2, column=1,sticky=N)
self.btnCari = Button(kodeFrame, text='Cari',
command=self.onCari,width=8,bg="blue",fg="white")
self.btnCari.grid(row=2,column=3,sticky=E)
Label(kodeFrame, text='Masukan Password
Baru',bg='orange').grid(row=3,column=0, sticky=E, pady=5)
self.entPass = Entry(kodeFrame, width=20)
self.entPass.grid(row=3,column=1)
self.cek = IntVar()
self.btShowPass = Checkbutton(kodeFrame,
text='Sembunyikan Password',bg='orange',
variable=self.cek, command=self.LihatPassword)
self.btShowPass.grid(row=4, column=1, sticky=W)
self.btnSave = Button(btnFrame,
text='Save',bg="blue",fg="white", command=self.onSave, width=10)
self.btnSave.grid(row=0, column=1)
self.btnCancel = Button(btnFrame,
text='Clear',bg="red",fg="white",command=self.onClear, width=10)
self.btnCancel.grid(row=0, column=2)
8/18/2019 Dokumen Final Project Python
44/61
self.btnDelete = Button(btnFrame,
text='Delete',bg="red",fg="white", command=self.onDelete, width=10)
self.btnDelete.grid(row=0, column=3)
def onClose(self, event=None):
self.parent.destroy()
def onClear(self):
self.entPass.delete(0, END)
def LihatPassword(self, event=None):
nilaiCek = self.cek.get()
if nilaiCek== 1:
self.entPass['show'] = '*'
else:
self.entPass['show'] = ''
def onCari(self):
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12', host='localhost',\
port=3306, autocommit=True)
cur = con.cursor()
cKode = self.entMember.get()
if len(cKode) == 0:
8/18/2019 Dokumen Final Project Python
45/61
messagebox.showwarning(title="Peringatan",message="Nama
Member jangan kosong dong.")
self.entMember.focus_set()
return
sql1 = "SELECT Password "
sql2 = "FROM data_penyewa WHERE ID_Member = %s"
cur.execute(sql1+sql2,cKode)
data = cur.fetchone()
if cur.rowcount> 0:self.onClear()
self.entPass.insert(0, data[0])
else:
messagebox.showinfo(title="Informasi",\
message="Data tidak ditemukan")
self.onClear()
self.entMember.focus_set()
return
cur.close()
con.close()
def onSave(self):
cKode = self.entMember.get()
cNama = self.entPass.get()
if len(cKode) == 0:
messagebox.showwarning(title="Peringatan",message="Kode barang
kosong.")
8/18/2019 Dokumen Final Project Python
46/61
self.entMember.focus_set()
elif len(cNama) == 0 :
messagebox.showwarning(title="Peringatan",message="Kode barang
belum valid.")
self.btnCari.focus_set()
else:
con = pymysql.connect(db='onenet', user='warnet',passwd='samarinda12', host="localhost",\
port=3306, autocommit=True)
cur = con.cursor()
cKode = self.entMember.get()
cNama = self.entPass.get()
sql = "UPDATE data_penyewa SET Password=%s"+\
"WHERE ID_Member =%s"
cur.execute(sql,(cNama,cKode))
messagebox.showinfo(title="Informasi", \
message="Data sudah di tersimpan.")
self.onClear()
cur.close()
con.close()
8/18/2019 Dokumen Final Project Python
47/61
def onDelete(self):
con = pymysql.connect(db='onenet', user='warnet',\
passwd='samarinda12', host="localhost",
port=3306,autocommit=True)
cur = con.cursor()
cKode = self.entMember.get()
sql = "DELETE FROM data_penyewa WHERE ID_Member
=%s"
cur.execute(sql,cKode)
messagebox.showinfo(title="Informasi", \
message="Data sudah di hapus.")self.onClear()
cur.close()
con.close()
#root = Tk()
#EditStock(root, "GANTI PASSWORD")
#root.mainloop()
8. Invsplash
from invlogin import *
from tkinter import *
from PIL import Image, ImageTk
class DemoSplashScreen:
def __init__(self, parent):
self.parent = parent
self.aturSplash()
8/18/2019 Dokumen Final Project Python
48/61
self.aturWindow()
def aturSplash(self):
self.gambar = Image.open('welcome.jpg')
self.imgSplash = ImageTk.PhotoImage(self.gambar)
def aturWindow(self):
lebar, tinggi = self.gambar.size
setengahLebar = (self.parent.winfo_screenwidth()-lebar)//2
setengahTinggi = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar, tinggi,setengahLebar,setengahTinggi))
Label(self.parent, image=self.imgSplash).pack()
if __name__ == '__main__':
root = Tk()
root.overrideredirect(True)
app = DemoSplashScreen(root)
root.after(4000, root.destroy)
root.mainloop()
root = Tk()
root['bg']= "pink"
app = LoginInv(root, "Login Menu Warnet")
9.
Invlogin
import subprocess
from tkinter import *
from tkinter import ttk
8/18/2019 Dokumen Final Project Python
49/61
import pymysql
class LoginInv:
def __init__(self, parent, judul):
self.parent = parent
self.parent.title(judul)
self.parent.protocol("WM_DELETE_WINDOW", self.Tutup)
lebar = 310
tinggi = 160
setTengahX = (self.parent.winfo_screenwidth()-lebar)//2
setTengahY = (self.parent.winfo_screenheight()-tinggi)//2self.parent.geometry("%ix%i+%i+%i" %(lebar, tinggi, setTengahX,
setTengahY))
self.parent.resizable(False, False)
bg='orange'
self.aturKomponen()
self.cbLogin.focus_set()
def aturKomponen(self):
frameUtama = Frame(self.parent, bg='orange',bd=10)
frameUtama.pack(fill=BOTH, expand=YES)
frData = Frame(frameUtama, bg='orange', bd=5)
frData.pack(fill=BOTH, expand=YES)
Label(frData, text='Nama Pengguna', bg='orange').grid(row=0,
column=0, sticky=W)
con = pymysql.connect(db="onenet", user="warnet",
passwd="samarinda12", host="localhost",
port=3306,autocommit=True)
cur = con.cursor()
cur.execute("SELECT Nama_Operator FROM data_operator")
8/18/2019 Dokumen Final Project Python
50/61
data_Login = cur.fetchall()
self.cbLogin = ttk.Combobox(frData,values=data_Login,
state='readonly',width=18)
self.cbLogin.grid(row=0,column=1,sticky=W,pady=10)
Label(frData, text='Password', bg='orange',width=18).grid(row=1,
column=0, sticky=W)
self.entPass = Entry(frData, show='*')
self.entPass.grid(row=1, column=1)
self.cek = IntVar()
self.cbShowPass = Checkbutton(frData, text='Tampilkan
Password', bg='orange',variable=self.cek, command=self.lihatPassword)
self.cbShowPass.grid(row=2, column=1, sticky=E)
frTombol = Frame(frameUtama, bg='orange', bd=5)
frTombol.pack(fill=BOTH, expand=YES)
self.btnLogin = Button(frTombol, text='Login', bg='blue',
command=self.prosesLogin)
self.btnLogin.pack(side=LEFT, fill=BOTH, expand=YES)
self.btnBatal = Button(frTombol, text='Batal', bg='red',
command=self.Tutup)
self.btnBatal.pack(side=LEFT, fill=BOTH, expand=YES)
def prosesLogin(self, event=None):
nmUser = self.cbLogin.get()
passUser = self.entPass.get()
con = pymysql.connect(db='onenet', user='warnet',
passwd='samarinda12', host='127.0.0.1',
port=3306,autocommit=True)
cur = con.cursor()
8/18/2019 Dokumen Final Project Python
51/61
if nmUser=='' or passUser=='':
tkinter.messagebox.showwarning('Warning', 'User atau
Password tidak boleh kosong', parent=self.parent)
self.cbLogin.focus_set()
else:
sql = "SELECT Nama_Operator, Password FROM
data_operator WHERE Nama_Operator = %s AND Password = %s"
cur.execute(sql,(nmUser,passUser))
if cur.rowcount > 0:
self.Tutup()
subprocess.call("MenuWarnet.py",shell=True)else:
messagebox.showwarning('Warning', 'User atau Password
SALAH!!', parent=self.parent)
self.Hapus()
def lihatPassword(self, event=None):
nilaiCek = self.cek.get()
if nilaiCek== 1:
self.entPass['show'] = ''
else:
self.entPass['show'] = '*'
def Tutup(self, event=None):
self.parent.destroy()
def Hapus(self, event=None):
self.cbLogin.delete(0, END)
self.entPass.delete(0, END)
8/18/2019 Dokumen Final Project Python
52/61
self.cbLogin.focus_set()
10.Laporan
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib.colors import pink, black, red, blue, green, gray
import datetime
import pymysql
import subprocess
def lap_member():
con = pymysql.connect(db="onenet", user="warnet",
passwd="samarinda12", host="127.0.0.1",\
port=3306,autocommit=True)
cur = con.cursor()
cur.execute("SELECT * FROM data_penyewa")
data_member = cur.fetchall()
c = canvas.Canvas("Lap_Member.pdf", pagesize=letter)
c.setFont("Helvetica-Bold", 12)
c.setFillColor(blue)
c.drawString(72,750,"ONENET e-Sport")
c.drawString(72,735,"LAPORAN DATA MEMBER")
c.setFillColor(blue)
c.drawString(440,750,str(datetime.date.today()))
c.setFillColor(black)
c.line(72,715,515,715)
c.drawString(72,700,"NO MEMBER")
8/18/2019 Dokumen Final Project Python
53/61
c.drawString(190,700,"ID MEMBER")
c.drawString(300,700,"PASSWORD")
c.drawString(400,700,"TANGGAL DAFTAR")
c.line(72,695,515,695)
c.setFont("Helvetica", 10)
j= 0
t= 0
for i in data_member:
nomember = i[0]
namamember = i[1]
password = i[2]tgldaf = i[3]
j += 1
c.drawCentredString(100,695-j*12,nomember)
c.drawString(190,695-j*12,namamember)
c.drawString(300,695-j*12,password)
c.drawString(420,695-j*12,str(tgldaf))
c.line(72,701-(j+1)*12,515,701-(j+1)*12)
c.drawString(72,701-(j+2)*12,"Total Member = "+str(j)+"")
c.drawRightString(500,701-(j+2)*12,str(t))
c.save()
subprocess.Popen("Lap_Member.pdf",shell=True)
def lap_Transaksi():
con = pymysql.connect(db="onenet", user="warnet",
passwd="samarinda12", host="127.0.0.1",\
8/18/2019 Dokumen Final Project Python
54/61
port=3306,autocommit=True)
cur = con.cursor()
cur.execute("SELECT * FROM pembelian_vocher")
data_masuk = cur.fetchall()
c = canvas.Canvas("Lap_Transaksi.pdf", pagesize=letter)
c.setFont("Helvetica-Bold", 12)
c.setFillColor(blue)
c.drawString(72,750,"ONENET e-Spot")
c.drawString(72,735,"LAPORAN PENJUALAN")
c.setFillColor(blue)c.drawString(440,750,str(datetime.date.today()))
c.setFont("Helvetica-Bold", 10)
c.setFillColor(black)
c.line(72,712,500,712)
c.drawString(75,700,"NOTA")
c.drawString(145,700,"TANGGAL")
c.drawString(225,700,"ID MEMBER")
c.drawString(320,700,"PAKET")
c.drawString(383,700,"OPERATOR")
c.drawString(455,700,"HARGA")
c.line(72,695,500,695)
c.setFont("Helvetica-Bold", 10)
j=0
t=0
for i in data_masuk:
nota = i[0]
member = i[1]
tgl = i[2]
paket = i[3]
8/18/2019 Dokumen Final Project Python
55/61
8/18/2019 Dokumen Final Project Python
56/61
BAB III
HASIL PROGRAM
A. Menu Utama
Inilah Menu Utama dalam program yang saya buat, menu utama yang saya buat ini
memakai image button.
8/18/2019 Dokumen Final Project Python
57/61
8/18/2019 Dokumen Final Project Python
58/61
Daftar Member
Sesuai dengan namanya , form ini untuk memasukan data ke database
data_penyewa.
Add Operator
Add Operator untuk menambahkan Operator sewaktu waktu ada pegawai
baru, dan form ini pun mengentry langsung ke database data_operator
8/18/2019 Dokumen Final Project Python
59/61
Ganti Password
Form ini bertujuan untuk mengganti password member , yang sewaktu
waktu member lupa akan passwordnya, atau teman mengetahuinya dan
bisa memakai waktunya. Form ini langsung mengedit database
data_penyewa – Password.
Tambah Tarif
form ini untuk menambahkan waktu apabila owner warnet ingin
menambahkan paket waktu baru. Dan ini langsung terhubung dengan
database tariff.
8/18/2019 Dokumen Final Project Python
60/61
8/18/2019 Dokumen Final Project Python
61/61
Laporan Member
Bertujuan untuk mengecek berapa total member warnet tersebut.