0% menganggap dokumen ini bermanfaat (0 suara)
2K tayangan

Dokumen Final Project Python

python

Diunggah oleh

Ajey Bhakti
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
2K tayangan

Dokumen Final Project Python

python

Diunggah oleh

Ajey Bhakti
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 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

KATA PENGANTAR
Assalamualaikum 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

DAFTAR ISI
KATA PENGANTAR...2
DAFTAR ISI3
BAB I PENDAHULUAN..4
A. LATAR BELAKANG4
B. TUJUAN & MANFAAT.4
C. RUANG LINGKUP.5
D. METODE PENELITIAN5
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 DATA57
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("<Double-1>", 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',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()

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 barang
kosong.")

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 <jika ada>


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

Laporan Member

Bertujuan untuk mengecek berapa total member warnet tersebut.

Anda mungkin juga menyukai