Chúng ta sẽ tiếp tục ứng dụng Quản lý sinh viên dùng Python
Phần này chúng ta sẽ thảo luận về hàm tìm kiếm theo tên và hàm cập nhật thông tin sinh viên.
Hàm tìm kiếm sinh viên theo tên.
Nhu cầu: Trong thực tế có những lúc chúng ta cần tìm tất cả các sinh viên tên Tuấn, hay tất cả các sinh viên tên Hùng... khi đó ta cần một hàm tìm kiếm theo tên. Hàm này sẽ trả về một danh sách các sinh viên có cùng tên.
Về lý thuyết thì hàm này không quá phức tạp. Cái phức tạp ở đây là trong cả Họ và Tên thì chúng ta sẽ chỉ lấy ra Tên để tìm kiếm, ví dụ: Nguyen Van Anh, Tran Hung Anh, Le Quang Anh...sẽ đều có trong kết quả khi tìm kiếm với "Anh".
Trong Python có hàm split(), tách chuỗi tại dấu phân cách đã chỉ định và trả về một danh sách (List).
Chúng ta sẽ thử với IDE Online.
Giả sử ta có một chuỗi là Họ Tên của một sinh viên: "Tran Van Anh"
Nhiệm vụ của chúng ta là "lấy ra" tên "Anh".
Sử dụng hàm split() chúng ta sẽ có List tenList[] như sau:
['Tran', 'Van', 'Anh']
Sau đó chúng ta chỉ cần lấy phần tử thứ 3 ("Anh")ra mà thôi.
Đây là code
ho_ten = "Tran Van Anh"
tenList = ho_ten.split(" ")
print(tenList)
size = (len(tenList))
ten = str(tenList[size - 1])
print(ten)
Đây là kết quả trên IDE Online
Chúng ta sẽ áp dụng để viết hàm tìm kiếm sinh viên theo tên.
Thuật toán của hàm tìm kiếm sinh viên theo tên:
Ta sẽ cần một mảng gọi là listSV[] để "chứa" tất cả những ai cùng tên. Nếu số lượng sinh viên lớn hơn 0 thì dùng vòng lặp FOR để duyệt listSinhVien[]. Nếu tìm thấy một cái tên trong listSinhVien[] trùng với tên người sử dụng nhập vào thì thêm phần tử đó vào mảng listSV[].
Chúng ta đặt findByName() vào class QuanLySinhVien()
def findByName(self, keyword):
listSV = []
if (self.soLuongSinhVien() > 0):
for sv in self.listSinhVien:
ho_ten = sv.ten
tenList = ho_ten.split(" ")
size = (len(tenList))
ten = str(tenList[size - 1])
if (keyword.upper() == ten.upper()):
listSV.append(sv)
return listSV
Để thực thi hàm findByName() chúng ta đặt hàm vào Main.py
from QuanLySinhVien import QuanLySinhVienQuay lại PyCharm, bấm Run để chạy Main.py
# khởi tạo một đối tượng QuanLySinhVien để quản lý sinh viên
qlsv = QuanLySinhVien()
while (1 == 1):
print("*************************MENU********")
print("** 1. Them sinh vien. **")
print("** 2. Cap nhat thong tin sinh vien bang ID **")
print("** 3. Xoa sinh vien theo ID. **")
print("** 4. Tim kiem sinh vien theo ten. **")
print("** 5. Hien thi danh sach sinh vien. **")
print("** 6. Tim kiem sinh vien theo ID. **")
print("** 0. Thoat **")
print("*************************************")
key = int(input("Nhap tuy chon de bat dau chương trinh: "))
if (key == 1):
qlsv.nhapSinhVien()
tong_so = str(qlsv.soLuongSinhVien())
print("\nThem sinh vien thanh cong!")
print("Tong so sinh vien: "+ tong_so)
elif (key == 2):
print("\nCap nhat sinh vien thanh cong!")
elif (key == 3):
print("\nNhap ID cua sinh vien can Xoa: ")
ID = str(input())
qlsv.deleteById(ID)
print("\nXoa sinh vien thanh cong!")
elif (key == 4):
print("\nNhap Ten cua sinh vien: ")
Ten = str(input())
searchResult = qlsv.findByName(Ten)
qlsv.showSinhVien(searchResult)
print("\nKet qua tim kiem!")
elif (key == 5):
qlsv.showSinhVien(qlsv.getListSinhVien())
print("\nDanh sach sinh vien!")
elif (key == 6):
idSV = input("Nhap ID sinh vien: ")
tenSV = (qlsv.findByID(idSV)).ten
print("\nTim kiem sinh vien theo ID!"+tenSV)
elif (key == 0):
print("\nDa thoat khoi chương trinh thanh cong!")
break
else:
print("\nKhong co chuc nang nay!")
Hàm cập nhật thông tin
Chúng ta sẽ đơn giản hàm này, lý do class SinhVien() rất đơn giản, chỉ gồm ID và Tên. Chúng ta sẽ tạm giả sử khi nhập Tên, có một sai sót nào đó cần sửa chữa. Chúng ta sẽ gọi hàm cập nhật thông tin là updateSinhVien()
Thuật toán hàm updateSinhVien() rất đơn giản:
Trước hết sử dụng hàm findByID để tìm sinh viên. Nếu sinh viên tồn tại thì cập nhập thông tin sinh viên.
def updateSinhVien(self, ID):
sv:SinhVien = self.findByID(ID)
if (sv != None):
ten = input("Nhap ten sinh vien: ")
sv.ten = ten
Chúng ta đặt updateSinhVien() vào class QuanLySinhVien()
from SinhVien import SinhVien
class QuanLySinhVien:
listSinhVien = []
def nhapSinhVien(self):
tiep_tuc = "Y"
while tiep_tuc == "Y":
idSV = input("Nhap ID cua sinh vien: ")
tenSV = input("Nhap Ho Ten sinh vien: ")
sv = SinhVien(idSV, tenSV)
self.listSinhVien.append(sv)
tiep_tuc = input("Tiep tuc ? Y/N ")
def showSinhVien(self, listSV):
if (listSV.__len__() > 0):
for sv in listSV:
print(sv.id, sv.ten)
def getListSinhVien(self):
return self.listSinhVien
def soLuongSinhVien(self):
return self.listSinhVien.__len__()
def findByID(self, ID):
searchResult = None
if (self.soLuongSinhVien() > 0):
for sv in self.listSinhVien:
if (sv.id == ID):
searchResult = sv
return searchResult
def deleteById(self, ID):
isDeleted = False
# tìm kiếm sinh viên theo ID
sv = self.findByID(ID)
if (sv != None):
self.listSinhVien.remove(sv)
isDeleted = True
return isDeleted
def findByName(self, keyword):
listSV = []
if (self.soLuongSinhVien() > 0):
for sv in self.listSinhVien:
ho_ten = sv.ten
tenList = ho_ten.split(" ")
size = (len(tenList))
ten = str(tenList[size - 1])
if (keyword.upper() == ten.upper()):
listSV.append(sv)
return listSV
def updateSinhVien(self, ID):
sv: SinhVien = self.findByID(ID)
if (sv != None):
ten = input("Nhap ten sinh vien: ")
sv.ten = ten
Để thực thi hàm updateSinhVien(), chúng ta đặt nó vào trang Main.py
from QuanLySinhVien import QuanLySinhVien
# khởi tạo một đối tượng QuanLySinhVien để quản lý sinh viên
qlsv = QuanLySinhVien()
while (1 == 1):
print("*************************MENU********")
print("** 1. Them sinh vien. **")
print("** 2. Cap nhat thong tin sinh vien bang ID **")
print("** 3. Xoa sinh vien theo ID. **")
print("** 4. Tim kiem sinh vien theo ten. **")
print("** 5. Hien thi danh sach sinh vien. **")
print("** 6. Tim kiem sinh vien theo ID. **")
print("** 0. Thoat **")
print("*************************************")
key = int(input("Nhap tuy chon de bat dau chương trinh: "))
if (key == 1):
qlsv.nhapSinhVien()
tong_so = str(qlsv.soLuongSinhVien())
print("\nThem sinh vien thanh cong!")
print("Tong so sinh vien: "+ tong_so)
elif (key == 2):
idSV = input("Nhap ID sinh vien: ")
qlsv.updateSinhVien(idSV)
print("\nCap nhat sinh vien thanh cong!")
elif (key == 3):
print("\nNhap ID cua sinh vien can Xoa: ")
ID = str(input())
qlsv.deleteById(ID)
print("\nXoa sinh vien thanh cong!")
elif (key == 4):
print("\nNhap Ten cua sinh vien: ")
Ten = str(input())
searchResult = qlsv.findByName(Ten)
qlsv.showSinhVien(searchResult)
print("\nKet qua tim kiem!")
elif (key == 5):
qlsv.showSinhVien(qlsv.getListSinhVien())
print("\nDanh sach sinh vien!")
elif (key == 6):
idSV = input("Nhap ID sinh vien: ")
tenSV = (qlsv.findByID(idSV)).ten
print("\nTim kiem sinh vien theo ID!"+tenSV)
elif (key == 0):
print("\nDa thoat khoi chương trinh thanh cong!")
break
else:
print("\nKhong co chuc nang nay!")
Bấm Run để chạy Main.py
Chúng ta đã hoàn tất chương trình Quản lý sinh viên bằng Python. Mọi thứ rất đơn sơ, nhưng nó giúp cho các bạn hình dung dễ hơn về Lớp, Đối tượng trong lập trình hướng đối tượng. Chương trình này không có tính thực tế vì khi chúng ta Exit PyCharm thì nó không lưu lại bất cứ thông tin gì.
Trong các phần sau, chúng ta sẽ sử dụng MySQL để có thể lưu thông tin
Không có nhận xét nào:
Đăng nhận xét