Bài tập lập trình hướng đối tượng python

Đề bài: Viết chương trình quản lý sinh viên trong Python. Mỗi đối tượng sinh viên có các thuộc tính sau: id, tên, giới tính, tuổi, điểm toán, điểm lý, điểm hóa, điểm trung bình và học lực.

Id là mã sinh viên tự động tăng.

Điểm trung bình là giá trị trung bình của 3 môn toán, lý và hóa.

Học lực được tính như sau:

  • Giỏi: nếu điểm trung bình lớn hơn hoặc bằng 8.
  • Khá: nếu điểm trung bình nhỏ hơn 8 và lớn hơn hoặc bằng 6.5.
  • Trung Bình: nếu điểm trung bình nhỏ hơn 6.5 và lớn hơn hoặc bằng 5.
  • Yếu: nếu điểm trung bình nhỏ hơn 5.

Yêu cầu: tạo ra một menu với các chức năng sau:

  • 1. Thêm sinh viên.
  • 2. Cập nhật thông tin sinh viên bởi ID.
  • 3. Xóa sinh viên bởi ID.
  • 4. Tìm kiếm sinh viên theo tên.
  • 5. Sắp xếp sinh viên theo điểm trung bình (GPA).
  • 6. Sắp xếp sinh viên theo tên.
  • 6. Sắp xếp sinh viên theo ID.
  • 8. Hiển thị danh sách sinh viên.

Lời giải

Chúng ta sẽ tạo ra một class để định nghĩa sinh viên, và một class để quản lý danh sách sinh viên nhập từ bàn phím. Sau đây là các bước cụ thể để cài đặt chương trình quản lý sinh viên trong Python bằng lập trình hướng đối tượng.


Các công nghệ sử dụng

Các công nghệ sử dụng để tạo bài tập quản lý sinh viên trong Python:

  • Eclipse: eclipse-jee-2021-03-R-win32-x86_64, tham khảo bài Cài đặt Python
  • Python: 3.8

Cấu trúc chương trình Python:

Bài tập lập trình hướng đối tượng python


Tạo class sinh viên

Chúng ta sẽ tạo một class sinh viên như sau, DiemTB sẽ được tính bằng trung bình của các môn toán, lý và hóa. HocLuc sẽ được tính toán dựa vào DiemTB như yêu cầu của bài toán.

Class SinhVien.py

class SinhVien:
def __init__(self, id, name, sex, age, diemToan, diemLy, diemHoa):  
    self._id = id  
    self._name = name  
    self._sex = sex  
    self._age = age  
    self._diemToan = diemToan  
    self._diemLy = diemLy  
    self._diemHoa = diemHoa  
    self._diemTB = 0  
    self._hocLuc = ""  

Tạo class quản lý sinh viên

Dầu tiên, chúng ta nên tạo ra một biến để lưu trữ danh sách sinh viên, bạn có thể tham khảo một trong các Collections trong Python, ở đây chúng tôi sử dụng List.

Sau đây là danh sách các hàm mà chúng ta sẽ sử dụng trong chương trình quản lý sinh viên:

def generateID(self) def soLuongSinhVien(self) def nhapSinhVien(self) def updateSinhVien(self, ID) def sortByID(self) def sortByName(self) def sortByDiemTB(self) def findByID(self, ID) def findByName(self, keyword) def deleteById(self, ID) def tinhDTB(self, sv:SinhVien) def showSinhVien(self, listSV) def getListSinhVien(self)


1. Hàm generateID()

Yêu cầu của bài toán là id của sinh viên tự động tăng.

Nên chúng ta sẽ tạo hàm này để lấy ra id lớn nhất của danh sách sinh viên.

Thân hàm generateID():

Hàm tạo ID tăng dần cho nhân viên

def generateID(self): maxId = 1 if (self.soLuongSinhVien() > 0):

maxId = self.listSinhVien[0]._id  
for sv in self.listSinhVien:  
  if (maxId < sv._id):  
    maxId = sv._id  
maxId = maxId + 1  
return maxId


2. Hàm trả về số lượng sinh viên soLuongSinhVien()

Hàm này trả về số lượng sinh viện hiện tại trong ListSinhVien:

def soLuongSinhVien(self): return self.listSinhVien.len()


3. Hàm nhập thông tin sinh viên

Hàm này được sử dụng để thêm mới sinh viên vào danh sách sinh viên ListSinhVien:

Thân hàm nhapSinhVien():

def nhapSinhVien(self):

Khởi tạo một sinh viên mới

svId = self.generateID() name = input("Nhap ten sinh vien: ") sex = input("Nhap gioi tinh sinh vien: ") age = int(input("Nhap tuoi sinh vien: ")) diemToan = float(input("Nhap diem toan: ")) diemLy = float(input("Nhap diem Ly: ")) diemHoa = float(input("Nhap diem Hoa: ")) sv = SinhVien(svId, name, sex, age, diemToan, diemLy, diemHoa) self.tinhDTB(sv) self.xepLoaiHocLuc(sv) self.listSinhVien.append(sv)


4. Hàm cập nhật thông tin sinh viên

Hàm này được sử dụng để cập nhật thông tin sinh viên theo ID:

Trong trường hợp bạn không nhập gì cho các thuộc tính của sinh viên thì thuộc tính đó không được thay đổi.

Thân hàm updateSinhVien():

def updateSinhVien(self, ID):

Tìm kiếm sinh viên trong danh sách listSinhVien

sv:SinhVien = self.findByID(ID)

Nếu sinh viên tồn tại thì cập nhập thông tin sinh viên

if (sv != None):
# nhập thông tin sinh viên  
name = input("Nhap ten sinh vien: ")  
sex = input("Nhap gioi tinh sinh vien: ")  
age = int(input("Nhap tuoi sinh vien: "))  
diemToan = float(input("Nhap diem toan: "))  
diemLy = float(input("Nhap diem Ly: "))  
diemHoa = float(input("Nhap diem Hoa: "))  
# cập nhật thông tin sinh viên  
sv._name = name  
sv._sex = sex  
sv._age = age  
sv._diemToan = diemToan  
sv._diemLy = diemLy  
sv._diemHoa = diemHoa  
self.tinhDTB(sv)  
self.xepLoaiHocLuc(sv)  
else:
print("Sinh vien co ID = {} khong ton tai.".format(ID))  

5. Hàm xóa sinh viên theo ID

Hàm này được sử dụng để xóa sinh viên khỏi danh sách theo ID. Tình sinh viên có ID đã cho trong danh sách, nếu tồn tại thì thực hiện xóa sinh viên.

Thân hàm deleteById():

Hàm xóa sinh viên theo ID

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


6. Hàm tìm kiếm sinh viên theo tên

Hàm này được sử dụng để tìm kiếm sinh viên trong danh sách theo tên. Không phân biệt chữ hoa, chữ thường.

Thân hàm findByName():

Hàm tìm kiếm sinh viên theo tên

Trả về một danh sách sinh viên

def findByName(self, keyword): listSV = [] if (self.soLuongSinhVien() > 0):

for sv in self.listSinhVien:  
  if (keyword.upper() in sv._name.upper()):  
    listSV.append(sv)  
return listSV


7. Hàm tính điểm trung bình và xếp loại học lực

Thân hàm tinhDTB():

Hàm tính điểm TB cho sinh viên

def tinhDTB(self, sv:SinhVien): diemTB = (sv._diemToan + sv._diemLy + sv._diemHoa) / 3

làm tròn điểm trung binh với 2 chữ số thập phân

sv._diemTB = math.ceil(diemTB * 100) / 100 Thân hàm xepLoaiHocLuc():

Hàm xếp loại học lực cho nhân viên

def xepLoaiHocLuc(self, sv:SinhVien): if (sv._diemTB >= 8):
sv._hocLuc = "Gioi"  
elif (sv._diemTB >= 6.5):
sv._hocLuc = "Kha"  
elif (sv._diemTB >= 5):
sv._hocLuc = "Trung Binh"  
else:
sv._hocLuc = "Yeu"  

8. Hàm sắp xếp danh sách sinh viên theo điểm trung bình

Hàm này được sử dụng để sắp xếp sinh viên theo điểm trung bình theo thứ tự tăng dần.

Thân hàm sortByDiemTB():

def generateID(self) def soLuongSinhVien(self) def nhapSinhVien(self) def updateSinhVien(self, ID) def sortByID(self) def sortByName(self) def sortByDiemTB(self) def findByID(self, ID) def findByName(self, keyword) def deleteById(self, ID) def tinhDTB(self, sv:SinhVien) def showSinhVien(self, listSV) def getListSinhVien(self) 0


9. Hàm sắp xếp danh sách sinh viên theo tên

Hàm này được sử dụng để sắp xếp sinh viên theo tên theo thứ tự tăng dần và không phân biệt chữ hoa, chữ thường.

Thân hàm sortByName():

def generateID(self) def soLuongSinhVien(self) def nhapSinhVien(self) def updateSinhVien(self, ID) def sortByID(self) def sortByName(self) def sortByDiemTB(self) def findByID(self, ID) def findByName(self, keyword) def deleteById(self, ID) def tinhDTB(self, sv:SinhVien) def showSinhVien(self, listSV) def getListSinhVien(self) 1


10. Hàm hiện thị danh sách sinh viên ra màn hình

Hàm này được sử dụng để hiện thị danh sách sinh viên ra màn hình.

Thân hàm showSinhVien():

def generateID(self) def soLuongSinhVien(self) def nhapSinhVien(self) def updateSinhVien(self, ID) def sortByID(self) def sortByName(self) def sortByDiemTB(self) def findByID(self, ID) def findByName(self, keyword) def deleteById(self, ID) def tinhDTB(self, sv:SinhVien) def showSinhVien(self, listSV) def getListSinhVien(self) 2


11. Class QuanLySinhVien.py chứa toàn bộ các hàm trên

Class QuanLySinhVien.py:

def generateID(self) def soLuongSinhVien(self) def nhapSinhVien(self) def updateSinhVien(self, ID) def sortByID(self) def sortByName(self) def sortByDiemTB(self) def findByID(self, ID) def findByName(self, keyword) def deleteById(self, ID) def tinhDTB(self, sv:SinhVien) def showSinhVien(self, listSV) def getListSinhVien(self) 3

Hàm main của chương trình quản lý sinh viên trong Python

Hàm main của chúng ta được sử dụng để khởi tạo menu và điều khiển chương trình quản lý sinh viên. Nó được đặt trong class Main: