Tải bản đầy đủ (.docx) (21 trang)

Hệ thống quản lý sinh viên bằng ngon ngữ python

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.08 MB, 21 trang )


LỜI MỞ ĐẦU.…..………..………..………..………..………..…...….........2
MỤC LỤC……………………………………………………………………3
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT…………….……………....……….......4
1. Khái quát đồ án………………………………………………………..4
1.1. Đặt vấn đề…………………………………………………………...4
1.2. Hình thành ý tưởng………………………………………………….5
1.3. Tiêu chí đặt ra ………………………………………………………5
1.4. Mục tiêu……………………………………………………………..5
1.5. Nhiệm vụ…………………………………………………………….5
1.6 Ứng dụng vào thực tế……………………………………..…….……5
2. Cơ sở lý thuyết ……………..………………………………….…..….6
CHƯƠNG 2. THỰC HIỆN ĐỀ TÀI VÀ KẾT QUẢ...…..………….………10
1.1 Các bước thực hiện……………………...…………………………...10
1.2 Điều kiện làm việc…………………………………………………...10
1.3. Xây dựng thuật toán………………………………………………...11
1.4. Phân tích kỹ thuật…………………………………………………...13
1.5. Vận hành thử nghiệm…………………………………………….…14
KẾT LUẬN………………………………………………………………….15
TÀI LIỆU THAM KHẢO……………………………………………….…..16
PHỤ LỤC…………………………………………………………………....17

2


CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1 Đặt vấn đề
Ngày nay, tin học đã có những bước tiến nhanh chóng về ứng dụng của
nó trong mọi lĩnh vực của cuộc sống trên phạm vi tồn thế giới nói chung và
Việt Nam nói riêng.Tin học được người ta quan tâm và nhắc đến nhiều hơn
bao giờ hết vì nó là một phần khơng thể thiếu trong cuộc sống văn minh,góp


phần đẩy mạnh cơng cuộc cơng nghiệp hố hiện đại hố đất nước, tiến đến
nền kinh tế tri thức. Máy vi tính cùng với những phần mềm là công cụ đắc lực
giúp ta quản lý, tổ chức, sắp xếp và xử lý công việc một cách nhanh chóng và
chính xác. Ở Việt Nam hiện nay, máy tính điện tử đặc biệt là máy vi tính trong
nhiều năm qua đã được sử dụng rất rộng rãi. Sự phát triển của tin học, các
công nghệ phần mềm, phần cứng, các tài liệu tham khảo đã đưa chúng ta từng
bước tiếp cận với công nghệ thông tin trong mọi lĩnh vực nhằm đáp ứng nhu
cầu của con người.
Quản lý sinh viên là một đề tài không cịn mới mẻ với các bài tốn
quản lý. Việc đưa tin học vào ứng dụng để quản lý là rất hữu ích, vì chúng ta
phải bỏ ra rất ít thời gian mà lại thu được hiệu quả cao, rất chính xác và tiện
lợi nhanh chóng.Trong phạm vi bài báo cáo nhóm chúng em đã được đề cập
đến vấn đề “Quản lý sinh viên” ở trường ĐH Vinh bằng máy vi tính.Với
khoảng thời gian khơng nhiều, vừa phân tích thiết kế, nghiên cứu tìm hiểu
khai thác ngơn ngữ mới, vừa thực hiện chương trình quả là khó khăn đối với
chúng em. Bởi “Quản lý sinh viên” là một đề tài có nội dung rộng, mặt khác
khả năng am hiểu về hệ thống của nhóm em vẫn cịn nhiều hạn chế. Tuy nhiên
trong q trình làm vẫn cịn có nhiều sai xót nên chúng em rất mong nhận
được những ý kiến đóng góp của thầy cùng tồn thể các bạn trong lớp để đồ
án của em được hoàn thiện.

3


1.2 Hình thành ý tưởng
Hệ thống quản lí sinh viên được xây dựng khung trên tkinter và sử dụng
database thông SQL.
1.3 Tiêu chí đặt ra
Viết code ngắn gọn, dễ hiểu
Sản phẩm có tính ứng dụng cao

Sản phẩm chạy được
Thời gian nghiên cứu trong vòng 1 tháng
1.4 Mục tiêu
Nhận biết được các phần code
Hiểu được nguyên lí hoạt động của sản phẩm
Làm quen và sử dụng hỗ trợ công cụ lập trình
Nâng cao kĩ năng mềm, tăng đam mê với ngành TĐH, cảm thấy yêu
thích thực sự ngành nghề kỹ thuật đã chọn để theo học, hình thành
động cơ học tập đúng đắn, xây dựng cho mình mục tiêu và những mơ
ước nghề nghiệp.
1.5. Nhiệm vụ
Phân tích hệ thống quản lí sinh viên
Thiết kế khung hệ thống quản lí sinh viên
Thuyết trình báo cáo
1.6. Ứng dụng của sản phẩm
Hệ thống quản lí sinh viên trong trường học, giúp người dùng quản lí
các thơng tin sinh viên
Có thể sửa đổi thành các ứng dụng như xây dựng thư viện từ điển, lưu
trữ thông tin cá nhân

4


2. Cơ sở lý thuyết
2.1 Sử dụng ngôn ngữ Python
Python là một ngơn ngữ thơng dịch. Trình thơng dịch thực thi code theo
từng dịng (và bạn khơng cần phải biên dịch ra file chạy), điều này giúp cho
quá trình debug trở nên dễ dàng hơn và đây cũng là yếu tố khá quan trọng
giúp Python cũng là một ngôn ngữ lập trình hướng đối tượng. Ngồi ra,
Python cịn hỗ trợ các phương thức lập trình theo hàm và theo cấu trúc.

Để giải quyết đề tài đưa ra, chúng ta sẽ cần sử dụng tới các hàm, các module
có sẵn hoặc trong Python. Vì vậy, chúng ta cần hiểu một hàm hoặc một
module như thế nào…?
2 .1.1 Hàm trong Python
Trong Python, hàm là một nhóm các lệnh có liên quan đến nhau được
dùng để thực hiện một tác vụ, nhiệm vụ cụ thể nào đó. Hàm giúp chia chương
trình Python thành những khối/phần/mơ-đun nhỏ hơn. Khi chương trình
Python q lớn, hoặc cần mở rộng, thì các hàm giúp chương trình có tổ chức
và dễ quản lý hơn.
Hàm cịn có một tác dụng vô cùng quan trọng nữa là tránh việc phải lặp
lại code để thực thi những tác vụ tương tự nhau, giúp code gọn hơn và có thể
tái sử dụng.
Cú pháp của hàm Python
def ten_ham(các tham số/đối số):
"""Chuỗi văn bản để mô tả cho hàm
(docstring)"""
Các câu lệnh

Về cơ bản, một định nghĩa hàm Python sẽ bao gồm các thành phần sau:
1. Từ khóa def: Đánh dáu sự bắt đầu của tiêu đề hàm.
2. ten_ham: Là định danh duy nhất dành cho hàm. Việc đặt tên hàm phải tuân
thủ theo quy tắc viết tên và định danh trong Python.
3. Các tham số/đối số: Chúng ta truyền giá trị cho hàm thông qua các tham số
này. Chúng là tùy chọn.
5


4. Dấu hai chấm (:): Đánh dấu sự kết thúc của tiêu đề hàm.
5. docstring: Chuỗi văn bản tùy chọn để mô tả chức năng của hàm.
6. Các câu lệnh: Một hoặc nhiều lệnh Python hợp lệ tạo thành khối lệnh. Các

lệnh này phải có cùng một mức thụt đầu dòng (thường là 4 khoảng trắng).
7. Lệnh return: Lệnh này là tùy chọn, dùng khi cần trả về giá trị từ hàm.
Ví dụ về hàm Python
Dưới dây là một định nghĩa hàm đơn giản, gồm tên hàm, tham số của hàm,
mô tả hàm và một câu lệnh:
def chao(ten):
"""Hàm này dùng đểchào một nguời được truyền vào như một tham số"""
print("Xin chào, " + ten + "!")

Gọi hàm trong Python
Khi một hàm đã được định nghĩa, bạn có thể gọi nó từ một hàm khác, chương
trình khác hoặc thậm chí tại dấu nhắc lệnh. Ðể gọi hàm chúng ta chỉ cần nhập
tên hàm với những tham số thích hợp là được. Ví dụ dể gọi hàm chao() vừa
dịnh nghia bên trên, ta gõ lệnh sau ngay tại dấu nhắc:
>>> chao (‘abc’)

2.1.2. Lập trình giao diện trong python
Khái niệm về chương trình có giao diện đồ họa - Chương trình có giao
diện đồ hoạ là một chương trình ln chạy cho tới khi người dùng thốt
chương trình (có chạy 1 vịng lặp vô hạn để luôn hiển thị giao diện, gọi là
main loop). Chương trình đồ họa hoạt động dựa trên những tương tác của
người dùng và phản ứng với các tương tác đó (bấm nút nào thì thực hiện cơng
việc tương ứng). Loại chương trình như vậy thuộc loại mơ hình "Event-driven
programming".

2.1.3. Lập trình GUI với Tkinter
Trong chương trình đồ họa, các thao tác của người dùng được gọi là các
event, các hành động tương ứng của chương trình (các function) được gọi là
6



các callback, được gắn vào các bộ phận giao diện (gắn callback vào nút bấm
thì khi ta bấm nút, callback sẽ được gọi). Các bộ phận giao diện như nút bấm,
chữ, ô nhập ký tự ... được gọi là các widget. Tkinter là một gói trong Python
có chứa module Tk hỗ trợ cho việc lập trình GUI. Tk ban đầu được viết cho
ngơn ngữ Tcl, sau đó Tkinter được viết ra để sử dụng Tk bằng trình thơng
dịch Tcl trên nền Python. Ngồi Tkinter ra cịn có một số cơng cụ khác giúp
tạo một ứng dụng GUI viết bằng Python như wxPython, PyQt, và PyGTK.
Để tạo ra một một khung cửa sổ đơn giản trong Tkinter chỉ cần làm như sau:
from tkinter import Tk, Frame, BOTH
window = Tk()
window.title("Danh Tính Cá Nhân ")
window.geometry('1080x720')
window.mainloop()
2.2 Sqlite trong Python
SQLite là một thư viện phần mềm mà triển khai một SQL Database
Engine, không cần máy chủ, khơng cần cấu hình, khép kín và nhỏ gọn. Nó là
một cơ sở dữ liệu, khơng cần cấu hình, có nghĩa là giống như các cơ sở dữ
liệu khác mà bạn khơng cần phải cấu hình nó trong hệ thống của mình.
SQLite engine khơng phải là một quy trình độc lập (standalone process) như
các cơ sở dữ liệu khác, bạn có thể liên kết nó một cách tĩnh hoặc động tùy
theo yêu cầu của bạn với ứng dụng của bạn. SQLite truy cập trực tiếp các file
lưu trữ (storage files) của nó.
Ví dụ: Dưới đây chúng ta xem phiên bản CSDL SQLite.
import sqlite3 as lite
import sys
import os
con = None
try:
7



path = os.path.dirname(__file__) + "\\test.db"
con = lite.connect(path)
cur = con.cursor()
cur.execute('SELECT SQLITE_VERSION()')
data = cur.fetchone()
print ("SQLite version: %s" % data)
except lite.Error as e:
print ("Error %s:" % e.args[0])
sys.exit(1)
finally:
if con:
con.close()Chúng ta kết nối với CSDL test.db và thực thi câu truy
vấn lấy thông tin về phiên bản SQLite đang sử dụng

CHƯƠNG 2. THỰC HIỆN ĐỀ TÀI VÀ KẾT QUẢ
1.1. Các bước thực hiện
Bước 1: Xác định yêu cầu của đồ án môn học.
8


Bước 2: Xác định đề tài sản phẩm.
Bước 3: Tìm hiểu ngun lí của đề tài.
Bước 4: Tạo mơ hình demo.
Bước 5: Hoàn tất và viết báo cáo.
1.2. Điều kiện làm việc
Nhóm thực hành gồm 1 người, nên khơng cần phân công nhiệm vụ cụ thể.
Các dụng cụ, phần mềm phục vụ ứng dụng quản lí sinh viên: Các phần mềm
hỗ trợ chạy chương trình dựa trên nền tảng Python như PyCharm, Visual

Studio,…Đều sử dụng các phiên bản mới nhất.
Một số khó khăn: Do lần đầu thử nghiệm lập trình một ứng dụng nên
chưa có khả năng làm ứng dụng nhanh, nhiều code phải tìm hiểu trong
khoảng thời gian dài, trong q trình làm việc có phát sinh lỗi…

Hình 1. Giao diện của phần mềm PyCharm
1.3 Xây dựng thuật toán

9


Hình 2.1 Thuật tốn

10


Hình 2.2 Thuật tốn
11


1.4 Phân tích kỹ thuật
1.4.1 Hoạt động của một cơ sở dữ liệu:

Hình 3. Hoạt động của một cơ sở dữ liệu
Hệ quản trị dữ liệu có các chức năng:
1. Cung cấp môi trường tạo lập cơ sở dữ liệu: Cung cấp cho con người dung
ngôn ngữ định nghĩa kiểu dữ liệu để người dùng khai báo kiểu và các cấu trúc
dữ liệu, đông thời tạo lập CSDL thong qua các giao diện đồ họa.
2. Cung cấp môi trường cập nhật và khai báo dữ liệu: Cung cấp cho người
dung ngôn ngữ thao tác dữ liệu để yêu cầu cập nhật hay khai thác thông tin.

3. Thao tác dữ liệu gồm: - Cập nhật (nhập, xóa, sửa, xóa dữ liệu)
- Khai thác ( sắp xếp, tìm kiếm, kết xuất, báo cáo…)
4. Cung cấp cơng cụ kiểm sốt, điều khiển truy cập vào cơ sở dữ liệu.
1.4.2 Ngôn ngữ Python
Ở trong chương trình “ Quản lý sinh viên” đã sử dụng một số hàm và
module hỗ trợ cho việc tạo ra sản phẩm như tkinter( tạo ra cử sổ giao diện, tạo
ra các label trong cửa sổ ), sqlite3( tạo ra cơ sở dữ liệu và các thao tác truy
xuất, cập nhật, khai thác cơ sở dữ liệu) và các module tự tạo,...
VD: from tkinter import *
12


import stdDatabase (# module tự tạo)
import sqlite3
class Student:
def iExit():
iExit= tkinter.messagebox.askyesno(" Hệ Thống Quản Lí
Sinh Viên","Are you sure you want to exit?")
if iExit >0:
root.destroy()
return
1.5 Vận hành thử nghiệm.

Hình 4. Ứng dụng được vận hành.
Như vậy, ứng dụng đã được vận hành thử nghiệm và đã tạo được cửa sổ
tkinter, các label, ….Giờ chúng ta chỉ việc thêm dữ diệu vào ứng dụng, để
xem nó có hoạt động được về phần sử dụng và trao đổi dữ liệu được hay
không ?. Nếu trao đổi dữ liệu thành cơng thì ứng dụng xem như đã thành công
tốt đẹp.


13


KẾT LUẬN
1. Kinh nghiệm và bài học
1. Ứng dụng “Quản lí sinh viên” khá đơn giản, các code cần thiết dễ làm và
dễ hiểu. Nguyên lí hoạt động rõ ràng, dễ hiểu,…Qua quá trình lập trình ứng
dụng cho ta thêm kinh nghiệm xây dựng code để tạo ra các ứng dụng thực tế.
2. Trong thế giới hiện đại ngày nay, công nghệ thông tin đã trở thành một
phần tất yếu trong cuộc sống. Với những hỗ trợ ngày càng nhiều của công
nghệ thông tin trong các lĩnh vực, con người đã tiết kiệm được khá nhiều thời
gian và công sức làm việc, nhờ đó hiệu quả cơng việc tăng lên gấp nhiều lần.
Một trong những đóng góp quan trọng của công nghệ thông tin cho con người
là việc tổ chức lưu trữ dữ liệu.
3. Với việc tổ chức lưu trữ thơng tin trên máy tính, con người thốt khỏi một
khối lượng lớn công việc phải ghi chép, giúp cho việc trao đổi và chia sẻ
thông tin trở nên linh hoạt hơn, cịn giúp đảm bảo an tồn dữ liệu và dễ dàng
thống kê… Các hình thức lưu trữ dữ liệu thường dùng ngày nay là: cơ sở dữ
liệu quan hệ, các dạng tài liệu văn bản, tài liệu … Nhờ cấu trúc đơn giản, dễ
truy xuất và đặc biệt không phụ thuộc vào một nền tảng nào, việc lưu trữ bằng
database ngày càng trở nên phổ biến, được ứng dụng rộng rãi trong nhiều lĩnh
vực… database đã trở thành chuẩn tiện lợi cho việc trao đổi thông tin trên
Web.
2. Hướng phát triển đề tài
Ứng dụng quản lí sinh viên đã được hoạt động theo đúng yêu cầu, ta có
thể biến đổi thành các ứng dụng khác như quản lí bệnh viện, quản lí sách
trong một thư viện,…Hướng phát triển của đề tài là có thể thêm ảnh vào cùng
với các thông tin cá nhân và tạo ra một cơ sở dữ liệu đám mây cho phép
người dung lưu trữ thông tin online.


14


TÀI LIỆU THAM KHẢO


truy cập ngày cuối
05/06/2020



/>
truy

cập ngày cuối 01/06/2020


truy cập ngày
cuối 02/06/2020



truy cập ngày cuối 05/06/2020



truy cập ngày cuối
05/06/2020




truy cập ngày
cuối 07/06/2020

15


PHỤ LỤC
Phụ lục I. Mã code chính:
from tkinter import *
import tkinter.messagebox
import stdDatabase
class Student:
def __init__(selfs, root):
selfs.root = root
selfs.root.title("Hệ Thống Quản Lí Sinh Viên")
selfs.root.geometry("1350x7500+0+0")
selfs.root.config(bg="#D6EAF8")
StdID = StringVar()
Firstname = StringVar()
Surname = StringVar()
DoB = StringVar()
Age = StringVar()
Gender = StringVar()
Address = StringVar()
Mobile = StringVar()
#=========================Function========================
def iExit():
iExit= tkinter.messagebox.askyesno(" Hệ Thống Quản"
" Lí Sinh Viên","Are you sure"

" you want to exit?")
if iExit >0:
root.destroy()
return
def clearData():
selfs.txtStdID.delete(0,END)
selfs.txtfna.delete(0, END)
selfs.txtSna.delete(0, END)
selfs.txtDoB.delete(0, END)
selfs.txtAge.delete(0, END)
selfs.txtGender.delete(0, END)
selfs.txtAdr.delete(0, END)
selfs.txtMobile.delete(0, END)
def addData():
if(len(StdID.get())!=0):
stdDatabase.addStdRec(StdID.get(), Firstname.get(),
Surname.get(),DoB.get(), Age.get(),
Gender.get(), Address.get(), Mobile.get())
studentlist.delete(0, END)
studentlist.insert(END,(StdID.get(), Firstname.get(),
Surname.get(),DoB.get(), Age.get(),
Gender.get(), Address.get(), Mobile.get()))
def DisplayData():
studentlist.delete(0,END)
for row in stdDatabase.viewData():
studentlist.insert(END,row,str(""))

16



def StudentRec(event):
global sd
searchStd= studentlist.curselection()[0]
sd = studentlist.get(searchStd)
selfs.txtStdID.delete(0, END)
selfs.txtStdID.insert(END,sd[1])
selfs.txtfna.delete(0, END)
selfs.txtfna.insert(END, sd[2])
selfs.txtSna.delete(0, END)
selfs.txtSna.insert(END, sd[3])
selfs.txtDoB.delete(0, END)
selfs.txtDoB.insert(END, sd[4])
selfs.txtAge.delete(0, END)
selfs.txtAge.insert(END, sd[5])
selfs.txtGender.delete(0, END)
selfs.txtGender.insert(END, sd[6])
selfs.txtAdr.delete(0, END)
selfs.txtAdr.insert(END, sd[7])
selfs.txtMobile.delete(0, END)
selfs.txtMobile.insert(END, sd[8])
def DeleteData():
if (len(StdID.get())!= 0):
stdDatabase.deleteRec(sd[0])
clearData()
DisplayData()
def searchDatabase():
studentlist.delete(0,END)
for row in stdDatabase.searchData(
StdID.get(),Firstname.get(),
Surname.get(),DoB.get(), Age.get(),

Gender.get(), Address.get(), Mobile.get()):
studentlist.insert(END,row)
def update():
if (len(StdID.get())!=0):
stdDatabase.deleteRec(sd[0])
if (len(StdID.get())!= 0):
stdDatabase.addStdRec(
StdID.get(), Firstname.get(),
Surname.get(),DoB.get(), Age.get(),
Gender.get(), Address.get(), Mobile.get())
studentlist.delete(0,END)
studentlist.insert(END,(
StdID.get(), Firstname.get(),
Surname.get(),DoB.get(), Age.get(),
Gender.get(), Address.get(), Mobile.get()))
#=========================Frames============================
MainFrame = Frame(selfs.root, bg='#ECF0F1')
MainFrame.grid()
TitFrame = Frame(MainFrame, bd=2, padx=54,
pady=8, bg='Ghost White',
relief=RIDGE)

17


TitFrame.pack(side=TOP)
selfs.lblTit = Label(TitFrame, font=('arial', 47, 'bold'),
text="Hệ Thống Quản Lí Sinh Viên",
bg='Ghost White')
selfs.lblTit.grid()

ButtonFrame = Frame(MainFrame, bd=2, width=1350,
height=70, padx=18, pady=10,
bg='Ghost White', relief=RIDGE)
ButtonFrame.pack(side=BOTTOM)
DataFrame = Frame(MainFrame, bd=1, width=1300, height=400,
padx=20, pady=20, relief=RIDGE,
bg='cadet blue')
DataFrame.pack(side=BOTTOM)
DataFrameLEFT = LabelFrame(DataFrame, bd=1, width=1000,
height=600, padx=20, pady=20, relief=RIDGE,
bg='Ghost White', font=('arial', 20, 'bold'),
text='Thông tin\n')
DataFrameLEFT.pack(side=LEFT)
DataFrameRIGHT = LabelFrame(DataFrame, bd=1, width=450,
height=300, padx=31, pady=3, relief=RIDGE,
bg='Ghost White', font=('arial', 20, 'bold'),
text='Chi tiết\n')
DataFrameRIGHT.pack(side=RIGHT)
# ============== Label and Entry Widget======================
selfs.lblStdID = Label(DataFrameLEFT,
font=('arial', 20, 'bold'),
text='MSSV:', padx=2, pady=2,
bg="Ghost White")
selfs.lblStdID.grid(row=0, column=0, sticky=W)
selfs.txtStdID = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=StdID, width=39)
selfs.txtStdID.grid(row=0, column=1)
selfs.lblfna = Label(DataFrameLEFT,
font=('arial', 20, 'bold'),

text='Họ:', padx=2, pady=2,
bg="Ghost White")
selfs.lblfna.grid(row=1, column=0, sticky=W)
selfs.txtfna = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=Firstname, width=39)
selfs.txtfna.grid(row=1, column=1)
selfs.lblSna = Label(DataFrameLEFT,
font=('arial', 20, 'bold'),
text='Tên:', padx=2, pady=2,
bg="Ghost White")
selfs.lblSna.grid(row=2, column=0, sticky=W)
selfs.txtSna = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=Surname, width=39)
selfs.txtSna.grid(row=2, column=1)
selfs.lblDoB = Label(DataFrameLEFT,
font=('arial', 20, 'bold'),

18


text='Ngày sinh:', padx=2, pady=2,
bg="Ghost White")
selfs.lblDoB.grid(row=3, column=0, sticky=W)
selfs.txtDoB = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=DoB, width=39)
selfs.txtDoB.grid(row=3, column=1)
selfs.lblAge = Label(DataFrameLEFT,

font=('arial', 20, 'bold'),
text='Tuổi', padx=2, pady=2,
bg="Ghost White")
selfs.lblAge.grid(row=4, column=0, sticky=W)
selfs.txtAge = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=Age, width=39)
selfs.txtAge.grid(row=4, column=1)
selfs.lblGender= Label(DataFrameLEFT,
font=('arial', 20, 'bold'),
text='Giới tính:', padx=2, pady=2,
bg="Ghost White")
selfs.lblGender.grid(row=5, column=0, sticky=W)
selfs.txtGender = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=Gender, width=39)
selfs.txtGender.grid(row=5, column=1)
selfs.lblAdr = Label(DataFrameLEFT,
font=('arial', 20, 'bold'),
text='Địa chỉ:', padx=2, pady=2,
bg="Ghost White")
selfs.lblAdr.grid(row=6, column=0, sticky=W)
selfs.txtAdr = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=Address, width=39)
selfs.txtAdr.grid(row=6, column=1)
selfs.lblMobile = Label(DataFrameLEFT,
font=('arial', 20, 'bold'),
text='SĐT', padx=2, pady=2,
bg="Ghost White")

selfs.lblMobile.grid(row=7, column=0, sticky=W)
selfs.txtMobile = Entry(DataFrameLEFT,
font=('arial', 20, 'bold'),
textvariable=Mobile, width=39)
selfs.txtMobile.grid(row=7, column=1)
# ============== ListBox & ScrollBarWidget======================
scrollbar = Scrollbar(DataFrameRIGHT)
scrollbar.grid(row=0, column=1, sticky='ns')
studentlist = Listbox(DataFrameRIGHT, width=40,
height=16, font=('arial', 12, ' bold'),
yscrollcommand=scrollbar.set)
studentlist.bind('<<ListboxSelect>>',StudentRec)
studentlist.grid(row=0, column=0, padx=8)
scrollbar.config(command=studentlist.yview)

19


# ============== Button Widget======================
selfs.btnAddDate = Button(ButtonFrame, text=" Thêm mới ",
font=('arial', 20, 'bold'), height=1,
width=10, bd=4, command=addData)
selfs.btnAddDate.grid(row=0, column=0)
selfs.btnDisplayData = Button(ButtonFrame, text=" Toàn bộ ",
font=('arial',20, 'bold'), height=1,
width=10, bd=4, command=DisplayData)
selfs.btnDisplayData.grid(row=0, column=1)
selfs.btnClearData = Button(ButtonFrame, text=" Dọn dẹp ",
font=('arial', 20, 'bold'), height=1,
width=10,bd=4, command=clearData)

selfs.btnClearData.grid(row=0, column=2)
selfs.btnDeleteData = Button(ButtonFrame, text=" Xóa ",
font=('arial', 20, 'bold'), height=1,
width=10, bd=4, command=DeleteData)
selfs.btnDeleteData.grid(row=0, column=3)
selfs.btnSearchData = Button(ButtonFrame, text=" Tìm kiếm ",
font=('arial', 20, 'bold'), height=1,
width=10,bd=4,command=searchDatabase)
selfs.btnSearchData.grid(row=0, column=4)
selfs.btnUpdateData = Button(ButtonFrame, text=" Cập nhật ",
font=('arial', 20, 'bold'), height=1,
width=10, bd=4, command=update)
selfs.btnUpdateData.grid(row=0, column=5)
selfs.btnExit= Button(ButtonFrame, text=" Thoát ",
font=('arial', 20, 'bold'), height=1,
width=10, bd=4, command=iExit)
selfs.btnExit.grid(row=0, column=6)
if __name__ == '__main__':
root = Tk()
application = Student(root)
root.mainloop()

Phụ lục II. Module tự tạo:
import sqlite3
def studentdata():
con = sqlite3.connect("student.db")
cur = con.cursor()
con.commit()
con.close()
def addStdRec(StdID, Firstname,

Surname, DoB, Age, Gender, Address, Mobile):
con = sqlite3.connect("student.db")
cur = con.cursor()
cur.execute("INSERT INTO student VALUES (NULL,?,?,?,?,?,?,?,?)",

20


(StdID, Firstname, Surname,DoB,Age,Gender,Address,Mobile))
con.commit()
con.close()
def viewData():
con = sqlite3.connect('student.db')
cur = con.cursor()
cur.execute(" SELECT * FROM student ")
rows = cur.fetchall()
con.close()
return rows
def deleteRec(id):
con = sqlite3.connect('student.db')
cur = con.cursor()
cur.execute("DELETE FROM student WHERE id=?",(id,))
con.commit()
con.close()
def searchData(StdID="", Firstname="", Surname="",DoB="",
Age="", Gender="", Address="" , Mobile=""):
con = sqlite3.connect('Student.db')
cur = con.cursor()
cur.execute("SELECT * FROM student WHERE StdID=?"
" OR Firstname=? OR Surname=? OR DoB=?"

" OR Age=? OR Gender=? OR Address=? OR Mobile=? ",
(StdID,Firstname,Surname,DoB,Age,Gender,Address,Mobile))
rows = cur.fetchall()
con.close()
return rows
def dataUpdate(id,StdID="" , Firstname="", Surname="",
DoB="", Age="", Gender="", Address="" , Mobile=""):
con = sqlite3.connect('Student.db')
cur = con.cursor()
cur.execute(" UPDATE student SET StdID=?, Firstname=? ,"
" Surname=? , DoB=?, Age=?, Gender=? , Address=? , Mobile=? ",
(StdID, Firstname, Surname, DoB, Age, Gender, Address,
Mobile,id))
con.commit()
con.close()
studentdata()

21



×