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
KATA PENGANTAR Assalamu’alaikum warahmatullahi warahmatulla hi 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
KATA PENGANTAR Assalamu’alaikum warahmatullahi warahmatulla hi 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
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
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
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
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 programprogram 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
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
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 *
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 = parent parent.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 ::")
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')
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,
command=self.datamember
text='Member',
,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,
command=self.pembelianvocher,
text='Buy',
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
=
text='AddMember',command=self.addmember,
Button(btnFrame, bg='black',fg='white',
image=self.imgReqmem, compound='top', width=70) self.btnTambah.grid(row=0, column=2)
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
=
text='ReportTrs',command=lap_Transaksi
Button(btnFrame, ,
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')
self.btnTambah
=
text='ReportMem',command=lap_member,
Button(btnFrame, 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)
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)
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
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)
labeltitle
=
Label(labelFrame,
text='ONENET
e-
Sport',bg='orange') labeltitle.grid(row=1,column=0) labeltitle
=
Label(labelFrame,
text='Pembelian
Vocher
Billing',bg='orange') labeltitle.grid(row=2,column=0)
Label(notransFrame,
text='Tgl
Keluar
(dd-mm-yyyy)
',bg='orange').grid(row=1,\ column=0, sticky=W) self.entTglKeluar = Entry(notransFrame, width=20) self.entTglKeluar.grid(row=1, column=1, sticky=W) tgl = time.strftime("%Y%m%d") self.entTglKeluar.insert(0, tgl)
Label(notransFrame,
text='No
Transaksi',bg='orange').grid(row=2,\ column=0, sticky=W) self.entNoTrans = Entry(notransFrame, width=20) self.entNoTrans.grid(row=2, column=1, sticky=W)
Label(notransFrame,
text='Masukan
ID
:',bg='orange').grid(row=3, column=0, sticky=W) self.entCekID = Entry(notransFrame, width=25) self.entCekID.grid(row=3,column=1) self.btnCekID
=
Button(notransFrame,
ID',width=10,bg='blue', fg='white', command=self.onCari) self.btnCekID.grid(row=3,column=2)
text='Cek
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",
passwd="samarinda12",
user="warnet", 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)
=
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',
passwd='samarinda12', host='localhost',\ port=3306, autocommit=True) cur = con.cursor()
user='warnet',
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)
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",
passwd="samarinda12",
user="warnet", 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:
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)"
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
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 = parent self.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)
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",
passwd="samarinda12",
user="warnet", 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")
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
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 = 500 tinggi = 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
Sport',bg='orange').grid(row=0,column=1,sticky=N)
e-
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)
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",\
message="ID MEMBER tidak boleh kosong.") self.entMember.focus_set() else: sql = "SELECT No_Member FROM data_penyewa WHERE ID_Member = %s" cur.execute(sql,cKode) data = cur.fetchall() pjg = len(data) if pjg > 0: curkode = con.cursor() sqlkode = "SELECT max(ID_Member) FROM data_penyewa" curkode.execute(sqlkode) maxkode = curkode.fetchone()
tkinter.messagebox.showwarning(title="Peringatan",\ message="ID MEMBER sudah digunakan. Gunakan kode yang lain. "+\ "kode
terakhir
yang
telah
digunakan adalah "+\ str(maxkode[0])+".") self.entMember.focus_set() self.entNomer.get() else: tkinter.messagebox.showinfo(title="Amam", \ message="ID digunakan") self.entNomer.focus_set()
MEMBER
bisa
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() cMember = self.entMember.get() cNomer = self.entNomer.get() cPass = self.entPass.get() nTgl = int(self.entTgl.get()) sql
=
"INSERT
INTO
data_penyewa
(ID_Member,
No_Member, Password, Tgl_Pendaftaran)"+\ "VALUES(%s,%s,%s,%s)" cur.execute(sql,(cMember,cNomer,cPass,nTgl)) messagebox.showinfo(title="Informasi", \ message="Data sudah di tersimpan.")
cur.close() con.close()
#root = Tk() #EntryMember(root, ":: DAFTAR MEMBER ::") #root.mainloop()
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" 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)
%(lebar,
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)
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()
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 digunakan adalah "+\
terakhir
yang
telah
str(maxkode[0])+".") self.entOP.focus_set() self.entNomer.get() else: tkinter.messagebox.showinfo(title="Amam", \ message="ID
MEMBER
bisa
digunakan") self.entNomer.focus_set()
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() cOP = self.entOP.get() cNomer = self.entNomer.get() cPass = self.entPass.get() calamat = self.entalamat.get() cjaga = self.entjaga.get() sql
=
"INSERT
INTO
data_operator
(Nama_Operator,
No_Operator, Password, Alamat, Waktu_Jaga)"+\ "VALUES(%s,%s,%s,%s,%s)" cur.execute(sql,(cOP,cNomer,cPass,calamat,cjaga)) messagebox.showinfo(title="Informasi", \ message="Data sudah di tersimpan.")
cur.close()
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" tinggi,setTengahX, setTengahY)) self.parent.resizable(False,False)
%(lebar,
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, Harga",bg='orange').grid(row=3, column=0, sticky=W) self.entHarga = Entry(mainFrame, width=25) self.entHarga.grid(row=3, column=1)
text="Masukan
self.btnSave
=
Button(btnFrame,
text='Save',bg='blue',f text='Save',bg='blue',fg='white',\ g='white',\ command=self.onSave, width=10) self.btnSave.grid(row=0, column=1)
self.btnCancel
=
Button(btnFrame,
text='Clear',bg='red',fg text='Clear',bg='red',fg='white',\ ='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()
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
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()
telah
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
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)//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): 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)
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)
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',
passwd='samarinda12', host='localhost',\ port=3306, autocommit=True) cur = con.cursor() cKode = self.entMember.get() if len(cKode) == 0:
user='warnet',
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 kosong.")
barang
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()
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()
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
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)//2 self.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",
passwd="samarinda12",
user="warnet", host="localhost",
port=3306,autocommit=True) cur = con.cursor() cur.execute("SELECT Nama_Operator FROM data_operator")
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', port=3306,autocommit=True) cur = con.cursor()
host='127.0.0.1',
if nmUser=='' or passUser=='': tkinter.messagebox.showwarning('Warning',
'User
atau
Password
FROM
Password tidak boleh kosong', parent=self.parent) self.cbLogin.focus_set() else: sql
=
"SELECT
Nama_Operator,
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)
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")
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",\
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]
harga = i[4] operator = i[5] j+= 1 t+= harga ctgl=tgl.strftime("%d-%m-%Y") c.drawString(75,695-j*12,nota) c.drawString(145,695-j*12,ctgl) c.drawString(240,695-j*12,member) c.drawString(315,695-j*12,paket) c.drawString(395,695-j*12,operator) c.drawRightString(500,695-j*12,str(harga))
c.line(72,701-(j+1)*12,500,701-(j+1)*12) c.drawString(72,701-(j+2)*12,"Jumlah Pembelian = "+\ str(j)+"") c.drawRightString(500,701-(j+2)*12,"Total = Rp." + str(t)) c.line(72,707-(j+3)*12,500,707-(j+3)*12)
c.save() subprocess.Popen("Lap_Transaksi.pdf",shell=True)
BAB III HASIL PROGRAM
A. Menu Utama
Inilah Menu Utama dalam program yang saya buat, menu utama yang saya buat ini memakai image button.
B. Entry Data Form Pembelian
Form ini berguna untuk Transaksi dalam program warnet, yang akan masuk ke database pembelian_vocher seperti yang saya jelaskan sebelumnya. Dan saya menggunakan double click untuk pemilihan waktu penyewaan , apabila memilih di daftar tariff akan otomatis masuk ke entry Total Pembayaran dan Total Waktu.
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
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.
C. Proses D. Laporan
Laporan Transaksi
Laporan transaksi bertujuan untuk menghitung pendapan warnet tersebut , menyesuaikan pendapatan yang ada. Apakah sesuai atau tidak. laporan ini pun membuat para operator tidak bisa berbuat curang, karena semua data transaksi tertulis jelas di laporan transaksi. Laporan ini pun langsung terkoneksi ke database Pembelian_Vocher