ผู้เขียนบทความ : นายนพรุจ ภูริธนาสวัสด์ COE#15
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566
1.ความเป็นมา
ในอดีตการจองรถต้องทำผ่านการโทรหาบริษัทรถเช่าหรือแม้กระทั่งที่สถานีรถไฟหรือสนามบิน นั่นทำให้กระบวนการจองรถมีความล่าช้าและซับซ้อนมากขึ้น การพัฒนาระบบการจองรถออนไลน์เกิดขึ้นจากความเจริญของเทคโนโลยีอินเทอร์เน็ต และพวกแพลตฟอร์มการเดินทางออนไลน์ เช่น เว็บไซต์ แอปพลิเคชันมือถือ หรือแพลตฟอร์มการจองรถออนไลน์อื่นๆ ที่ทำให้ผู้ใช้สามารถจองรถได้ทันที
ระบบการจองรถ (Car Booking System) เป็นระบบที่ถูกพัฒนาขึ้นเพื่อช่วยให้ผู้ใช้สามารถจองเช่ารถได้อย่างสะดวกและมีระบบที่เป็นระเบียบ ระบบนี้มีประโยชน์ในหลายสถานการณ์ เช่น การเดินทางท่องเที่ยว, การเดินทางธุรกิจ, หรือการใช้งานระยะสั้นๆ โดยไม่ต้องเป็นเจ้าของรถเอง
ระบบจองรถยนต์ใน Python ได้รับการพัฒนาในภาษาการเขียนโปรแกรม Python และเป็นแอปพลิเคชันเดสก์ท็อป ระบบนี้สร้างขึ้นโดยใช้ tkinter และส่วนต่อประสานกราฟิกกับผู้ใช้ ระบบจองรถยนต์มีฐานข้อมูล sqlite3 ซึ่งโครงการชิ้นนี้เป็นส่วนหนึ่งในรายวิชา การโปรแกรมคอมพิวเตอร์ขั้นสูง โดย อ.สันติ สถิตวรรธนะ เป็นผู้สอนและที่ปรึกษาโครงงานย่อยชิ้นนี้ ซึ่งจะช่วยพัฒนาความสามารถ พัฒนาความรู้ และเป็นนำความรู้ที่ได้ศึกษามาในรายวิชานี้มาประยุกต์เป็นโปรแกรมจองเช่ารถ ด้วยภาษา python
2.วัตถุประสงค์
- เพื่ออำนวยความสะดวกในการจองรถ
- เพื่อนำเอาความรู้ความเข้าใจในภาษา Python ไปประยุกต์ใช้
- เพื่อศึกษาในระบบฐานข้อมูล(Database)
3.ขอบเขต
- เป็นการพัฒนาโดยใช้โปรแกรมภาษา python โดยใช้โมดูล Tkinter สำหรับ GUI
- ระบบสามารถบันทึกข้อมูลได้ และสามารถยกเลิกจองรถหรือเปลี่ยนแปลงเวลาและสถานที่รับรถได้
- มีการเก็บข้อมูลการจองรถในรูปแบบ Data Base SQLlite3
4.ประโยชน์ที่สามารถได้รับ
- สามารถจองรถได้อย่างรวดเร็วและง่ายดาย ไม่จำเป็นต้องโทรหรือส่งอีเมลเพื่อจองรถ
- สามารถนำความรู้เรื่องภาษา Python มาประยุกต์ใช้
- ทำให้มีความรู้ในเรื่องฐานข้อมูล(Data Base)
5. ความรู้ที่เกี่ยวข้อง
การเขียนโปรแกรมภาษา python โดยใช้โมดูล Tkinter สำหรับ GUI และการนำระบบฐานข้อมูลมาใช้เป็นการเก็บข้อมูลของการจองรถ
- 5.1 ภาษาโปรแกรม Python
ภาษาโปรแกรม Python คือภาษาโปรแกรมคอมพิวเตอร์ระดับสูง โดยถูกออกแบบมาให้เป็นภาษาสคริปต์ที่อ่านง่าย โดยตัดความซับซ้อนของโครงสร้างและไวยกรณ์ของภาษาออกไป ในส่วนของการแปลงชุดคำสั่งที่เราเขียนให้เป็น
- 5.2 โมดูล Tkinter
Tkinter นั้นย่อมาจาก TK Interface เป็น library สำหรับการพัฒนา GUI ที่ติดมากับ python ตอนคุณลง(standard library) มีการเรียนรู้ที่ค่อนข้างง่ายสำหรับมือใหม่ การใช้งานไม่ซับซ้อนตรงตัว
ฟังก์ชันสำหรับการนำเข้า tkinter Tkinter เป็นไลบรารี GUI มาตรฐานสำหรับ Python Python เมื่อรวมกับ Tkinter ช่วยให้สร้างแอปพลิเคชัน GUI ได้อย่างรวดเร็วและง่ายดาย
from tkinter import *
ฟังก์ชันสำหรับการนำเข้า SQLite3 SQLite เป็นไลบรารี C ที่ให้ฐานข้อมูลบนดิสก์น้ำหนักเบาซึ่งไม่ต้องการกระบวนการเซิร์ฟเวอร์แยกต่างหาก และอนุญาตให้เข้าถึงฐานข้อมูลโดยใช้ภาษาคิวรี SQL ที่ไม่เป็นไปตามมาตรฐาน
import sqlite3
การนัดหมาย(appointment)
ฟังก์ชั่นการนัดหมาย ฟังก์ชันจะเรียกใช้เมื่อมีการคลิกปุ่ม Add Booking รับค่าอินพุตของผู้ใช้ ตรวจสอบว่าอินพุตของผู้ใช้ว่างเปล่าหรือไม่ และจะเห็นการแสดงบันทึกใน Booking logs ด้านขวา
# การนำเข้าโมดูล
from tkinter import *
import sqlite3
import tkinter.messagebox
# การเชื่อมต่อฐานข้อมูล
conn = sqlite3.connect('database.db')
c = conn.cursor()
ids = []
class Application:
def __init__(self, master):
self.master = master
# สร้างเฟรม
self.left = Frame(master, width=800, height=720, bg='grey')
self.left.pack(side=LEFT)
self.right = Frame(master, width=600, height=720, bg='grey')
self.right.pack(side=RIGHT)
# หัวข้อ
self.heading = Label(self.left, text="Car Booking", font=(
'georgia 40 bold'), fg='black', bg='grey')
self.heading.place(x=0, y=0)
# ชื่อ
self.name = Label(self.left, text="Owner's Name", font=(
'georgia 18 bold'), fg='black', bg='grey')
self.name.place(x=0, y=100)
# อายุ
self.age = Label(self.left, text="Age", font=(
'georgia 18 bold'), fg='black', bg='grey')
self.age.place(x=0, y=140)
# เพศ
self.gender = Label(self.left, text="Gender", font=(
'georgia 18 bold'), fg='black', bg='grey')
self.gender.place(x=0, y=180)
# สถานที่รับรถ
self.location = Label(self.left, text="Location", font=(
'georgia 18 bold'), fg='black', bg='grey')
self.location.place(x=0, y=220)
# เวลายืม-คืนรถ
self.time = Label(self.left, text="Entry Time", font=(
'georgia 18 bold'), fg='black', bg='grey')
self.time.place(x=0, y=260)
# เบอร์โทร
self.phone = Label(self.left, text="Phone Number", font=(
'georgia 18 bold'), fg='black', bg='grey')
self.phone.place(x=0, y=300)
# รายการทั้งหมด
self.name_ent = Entry(self.left, width=30)
self.name_ent.place(x=250, y=100)
self.age_ent = Entry(self.left, width=30)
self.age_ent.place(x=250, y=140)
self.gender_ent = Entry(self.left, width=30)
self.gender_ent.place(x=250, y=180)
self.location_ent = Entry(self.left, width=30)
self.location_ent.place(x=250, y=220)
self.time_ent = Entry(self.left, width=30)
self.time_ent.place(x=250, y=260)
self.phone_ent = Entry(self.left, width=30)
self.phone_ent.place(x=250, y=300)
# ปุ่ม Add Booking
self.submit = Button(self.left, text="Add Booking", width=20,
height=2, bg='white', command=self.add_appointment)
self.submit.place(x=300, y=340)
# จำนวนการนัดหมาย
sql2 = "SELECT ID FROM appointments "
self.result = c.execute(sql2)
for self.row in self.result:
self.id = self.row[0]
ids.append(self.id)
self.new = sorted(ids)
self.final_id = self.new[len(ids)-1]
# displaying the logs in our right frame
self.logs = Label(self.right, text="Booking logs", font=(
'georgia 28 bold'), fg='black', bg='grey')
self.logs.place(x=70, y=10)
self.box = Text(self.right, width=150, height=40)
self.box.place(x=20, y=60)
self.box.insert(END, "Total Bookings till now : " +
str(self.final_id) + " \n")
# ฟังก์ชั่นเมื่อทำการคลิกปุ่ม
def add_appointment(self):
# getting the user inputs
self.val1 = self.name_ent.get()
self.val2 = self.age_ent.get()
self.val3 = self.gender_ent.get()
self.val4 = self.location_ent.get()
self.val5 = self.time_ent.get()
self.val6 = self.phone_ent.get()
# เช็คอินพุตของผู้ใช้
if self.val1 == '' or self.val2 == '' or self.val3 == '' or self.val4 == '' or self.val5 == '':
tkinter.messagebox.showinfo("Warning", "Please Fill Up All Boxes")
else:
# เพิ่มไปในฐานข้อมูล
sql = "INSERT INTO 'appointments' (name, age, gender, location, scheduled_time, phone) VALUES(?, ?, ?, ?, ?, ?)"
c.execute(sql, (self.val1, self.val2, self.val3,
self.val4, self.val5, self.val6))
conn.commit()
tkinter.messagebox.showinfo(
"Success", "Booking for " + str(self.val1) + " has been created")
self.box.insert(END, 'Booking fixed for ' +
str(self.val1) + ' at ' + str(self.val5))
# สร้าง object
root = Tk()
b = Application(root)
# ขนาดหน้าจอ
root.geometry("1366x768")
# ป้องกันการขยายหน้าจอ
root.resizable(False, False)
# จบลูป
root.mainloop()
ข้อมูลการจอง(booking)
ฟังก์ชั่นการจองรถ สามารถดูชื่อ การป้อนข้อความ ปุ่มค้นหา ปุ่มลบ การสร้างแบบฟอร์มการอัพเดต การประกาศตัวแปรที่จะอัพเดต และฟังก์ชันการลบสำหรับการนัดหมาย
# อัพเดตการนัดหมาย
from tkinter import *
import tkinter.messagebox
import sqlite3
conn = sqlite3.connect('database.db')
c = conn.cursor()
class Application:
def __init__(self, master):
self.master = master
# หัวข้อ
self.heading = Label(master, text="Bookings ", fg='grey', font=('arial 40 bold'))
self.heading.place(x=150, y=20)
# ค้นหาชื่อ
self.name = Label(master, text="Enter Owner's Name", font=('arial 18 bold'))
self.name.place(x=0, y=100)
self.namenet = Entry(master, width=30)
self.namenet.place(x=280, y=92)
# ปุ่มค้นหา
self.search = Button(master, text="Search", width=12, height=1, bg='steelblue', command=self.search_db)
self.search.place(x=350, y=132)
# ฟังก์ชั่นหารค้นหา
def search_db(self):
self.input = self.namenet.get()
# การดำเนินการใน SQL
sql = "SELECT * FROM appointments WHERE name LIKE ?"
self.res = c.execute(sql, (self.input,))
for self.row in self.res:
self.name1 = self.row[1]
self.age = self.row[2]
self.gender = self.row[3]
self.location = self.row[4]
self.time = self.row[6]
self.phone = self.row[5]
# สร้างแบบฟอร์มการอัพเดต
self.uname = Label(self.master, text="Owner's Name", font=('arial 18 bold'))
self.uname.place(x=0, y=160)
self.uage = Label(self.master, text="Age", font=('arial 18 bold'))
self.uage.place(x=0, y=200)
self.ugender = Label(self.master, text="Gender", font=('arial 18 bold'))
self.ugender.place(x=0, y=240)
self.ulocation = Label(self.master, text="Location", font=('arial 18 bold'))
self.ulocation.place(x=0, y=280)
self.utime = Label(self.master, text="Entry Time", font=('arial 18 bold'))
self.utime.place(x=0, y=320)
self.uphone = Label(self.master, text="Phone Number", font=('arial 18 bold'))
self.uphone.place(x=0, y=360)
# รายการต่างๆ
# ผลการอัพเดต
self.ent1 = Entry(self.master, width=30)
self.ent1.place(x=300, y=170)
self.ent1.insert(END, str(self.name1))
self.ent2 = Entry(self.master, width=30)
self.ent2.place(x=300, y=210)
self.ent2.insert(END, str(self.age))
self.ent3 = Entry(self.master, width=30)
self.ent3.place(x=300, y=250)
self.ent3.insert(END, str(self.gender))
self.ent4 = Entry(self.master, width=30)
self.ent4.place(x=300, y=290)
self.ent4.insert(END, str(self.location))
self.ent5 = Entry(self.master, width=30)
self.ent5.place(x=300, y=330)
self.ent5.insert(END, str(self.time))
self.ent6 = Entry(self.master, width=30)
self.ent6.place(x=300, y=370)
self.ent6.insert(END, str(self.phone))
# ปุ่มอัพเดต
self.update = Button(self.master, text="Update?", width=20, height=2,fg='white', bg='black', command=self.update_db)
self.update.place(x=400, y=410)
# ปุ่มลบ
self.delete = Button(self.master, text="Delete?", width=20, height=2,fg='white', bg='black', command=self.delete_db)
self.delete.place(x=150, y=410)
def update_db(self):
# ประกาศตัวแปรอัพเดต
self.var1 = self.ent1.get() #updated name
self.var2 = self.ent2.get() #updated age
self.var3 = self.ent3.get() #updated gender
self.var4 = self.ent4.get() #updated location
self.var5 = self.ent5.get() #updated phone
self.var6 = self.ent6.get() #updated time
query = "UPDATE appointments SET name=?, age=?, gender=?, location=?, phone=?, scheduled_time=? WHERE name LIKE ?"
c.execute(query, (self.var1, self.var2, self.var3, self.var4, self.var5, self.var6, self.namenet.get(),))
conn.commit()
tkinter.messagebox.showinfo("Updated", "Successfully Updated.")
def delete_db(self):
# ลบข้อมูลการจอง
sql2 = "DELETE FROM appointments WHERE name LIKE ?"
c.execute(sql2, (self.namenet.get(),))
conn.commit()
tkinter.messagebox.showinfo("Success", "Deleted Successfully")
self.ent1.destroy()
self.ent2.destroy()
self.ent3.destroy()
self.ent4.destroy()
self.ent5.destroy()
self.ent6.destroy()
# สร้าง object
root = Tk()
b = Application(root)
root.geometry("1366x768+0+0")
root.resizable(False, False)
root.mainloop()
6. ผลการดำเนินงาน
ผังแสดงผลการทำงานของระบบในหน้า Appointment
ผังการทำงานของระบบในหน้า Booking
วิธีการใช้งานโปรแกรม
หน้า Appointment สำหรับลูกค้าหรือบุคคลที่ต้องการจองเช่ารถ ต้องใส่ข้อมูลชื่อ,อายุ,เพศ,สถานที่รับรถ,เวลาที่รับรถและคืนรถ,เบอร์โทร
เมื่อทำการกด Add Booking ก็จะไปแสดงการรับข้อมูลที่ Booking logs และจะมียอดข้อมูลการจองรถทั้งหมด
หน้า Booking สำหรับพนักงาน สามารถเช็คข้อมูลในระบบได้ว่าชื่อ,อายุ,เพศตรงหรือไม่ และส่งพนักงานไปส่งรถในสถานที่นัดหมายได้ หรือเมื่อลูกค้าต้องการเปลี่ยนสถานที่นัดหมาย เวลานัดหมายก็สามารถแก้ไขได้ หรือถ้าลูกค้าต้องการยกเลิกจองเช่ารถก็สามารถลบข้อมูลในระบบได้
7. สรุปผลและข้อเสนอแนะ
1.สรุปผล
โปรแกรมจองเช่ารถสามารถทำงานได้บันทึกข้อมูลถูกต้อง ซึ่งสามารถโชว์ข้อมูลได้ถูกต้องแม่นยำ หรือประสิทธิภาพที่โปรแกรมจะทำได้จะมีการบันทึกข้อมูลและมาแสดงผลข้อมูลได้ สามรถแก้ไขและบลข้อมูลในระบบได้
2.ข้อเสนอแนะ
2.1 นำไปลงในเซิฟเวอร์เพื่อพัฒนาในรูปแบบการจองรถแบบออนไลน์ได้
2.2 สามารถเพิ่มระบบการเลือกรถ ลงในระบบได้
2.3 พัฒนาเป็นระบบสมาชิก ข้อมูลสมาชิกได้
8. ข้อมูลอ้างอิง
8.1 รหัสต้นฉบับ
Car Booking System (สืบค้นเมื่อ 24 ตุลาคม 2566)
https://www.myhost.co.th/car-rantel-system
8.2 ระบบ Data Base SQLlite3 เชื่อมกับ Python3
https://python3.wannaphong.com/2014/12/sqlite-python-3.html
8.3 การใช้โมดูล Tkinter ใน Python
https://docs.python.org/3/library/tkinter.html