[Java] Viết chương trình quản lý học viện với tính đa hình

Tính đa hình (polymorphism) là một khái niệm quan trọng trong lập trình hướng đối tượng. Trong bài viết này, chúng ta sẽ áp dụng tính đa hình trong chương trình quản lý học viện java với các đối tượng sinh viên, nhân viên và khách hàng, mỗi đối tượng mang những đặc tính và hành vi riêng biệt.

Xem thêm:

1. Bài toán

Bài 11: (Yêu cầu chung: xác định access modifier (private, protected, public) cho từng thuộc tính/ phương thức mỗi lớp, cài đặt getter/setter, cài đặt constructor không có tham số và constructor có thống số đầy đủ).

Giả sử cần xây dựng chương trình quản lý dùng cho một học viện nghiên cứu giảng dạy và ứng dụng. Đối tượng quản lý bao gồm các sinh viên đang theo học, các nhân viên đang làm việc tại học viên, các khách hàng đến giao dịch mua bán sản phẩm ứng dụng. Dựa vào một số đặc tính của từng đối tượng, người quản lý cần đưa ra cách thức đánh giá khác nhau.

– Lớp Person: bao gồm các thuộc tính họ tên, địa chỉ, phương thức toString.

– Các lớp Students, Employee, Customer (mô tả dưới đây) thừa kế lớp Person.

+ Lớp Students: bao gồm các thuộc tính điểm môn học 1, điểm môn học 2, và các phương thức: tính điểm trung bình, đánh giá, overriding phương thức toString trả về bảng điểm sinh viên (gồm thông tin thuộc tính và điểm TB).

+ Lớp Employee: bao gồm thuộc tính heSoLuong và các phương thức: tính lương, đánh giá, overriding phương thức toString trả về bảng lương cho nhân viên (gồm thông tin thuộc tính đối tượng và tiền lương).

+ Lớp Customer: bao gồm thuộc tính tên công ty, trị giá hoá đơn, đánh giá, và phương thức toString trả về thông tin hoá đơn cho khách hàng (gồm các thuộc tính của đối tượng).

– Lớp có 1 biến danh sách để lưu các sinh viên, nhân viên, khách hàng (dùng 1 biến array Person), biến lưu tổng số người có trong danh sách, constructor mặc định khởi tạo array với dung lượng cho trước, phương thức thêm một người vào danh sách (thống số Person), xoá 1 người khỏi danh sách (nhận thông số là họ tên người cần xoá), sắp xếp danh sách theo thứ tự họ tên, phương thức xuất danh sách. Khi danh sách đầy thì tự động tăng dung lượng dãy lên 50%.

– Viết lớp với phương thức main cho phần kiểm nghiệm. Giao tiếp với người dùng bằng menu(thể hiện tính đa hình – polymorphism bằng cách cho phép lựa chọn nhập thông tin là sinh viên, nhân viên hay khách hàng).

2. Code

2.1 Lớp Person

package bai11;

import java.util.Scanner;

public class Person {
    String hoten;
    String diachi;
    
    public Person(){
        
    }
    
    public Person(String hoten, String diachi){
        this.hoten= hoten;
        this.diachi=diachi;
    }

    public String getHoten() {
        return hoten;
    }

    public void setHoten(String hoten) {
        this.hoten = hoten;
    }

    public String getDiachi() {
        return diachi;
    }

    public void setDiachi(String diachi) {
        this.diachi = diachi;
    }
    
    public void nhap(){
        Scanner sc= new Scanner(System.in);
        System.out.println("Nhap ho va ten: ");
        hoten= sc.nextLine();
        System.out.println("Nhap dia chi: ");
        diachi= sc.nextLine();
    }
    
    public void xuat(){
        System.out.println("Ho ten: "+ getHoten());
        System.out.println("Dia chi: "+ getDiachi());
    }
}

2.2 Lớp Students

package bai11;

import java.util.Scanner;

public class Student extends Person{
    float diem1, diem2;
    
    public Student(){
        
    }
    
    public Student(float diem1, float diem2, String hoten, String diachi){
        super(hoten, diachi);
        this.diem1=diem1;
        this.diem2=diem2;
    }

    public float getDiem1() {
        return diem1;
    }

    public void setDiem1(float diem1) {
        this.diem1 = diem1;
    }

    public float getDiem2() {
        return diem2;
    }

    public void setDiem2(float diem2) {
        this.diem2 = diem2;
    }
    
    public void nhapStu(){
        Scanner sc= new Scanner(System.in);
        super.nhap();
        System.out.println("Nhap diem 1: ");
        diem1= sc.nextFloat();
        System.out.println("Nhap diem 2: ");
        diem2= sc.nextFloat();
    }
    
    float diemTB(){
        return (diem1+diem2)/2;
    }
    
    String danhGia(){
        if(diemTB()>=8&& getDiem1()>=6.5&& getDiem2()>=6.5){
            return "Gioi";
        }else if(diemTB()<8&& getDiem1()>=6.5&& getDiem2()>=6.5&& diemTB()>=6.5){
            return "Kha";
        }else if(diemTB()>=5 && diemTB()<6.5){
            return "Trung Binh";
        }else return "Yeu";
    }
    
    public void xuat(){
        System.out.println("===Student===");
        super.xuat();
        System.out.println("Diem 1: "+ getDiem1());
        System.out.println("Diem 2: "+ getDiem2());
        System.out.println("Diem trung binh"+ diemTB());
        System.out.println("Danh gia: "+ danhGia());
        System.out.println("======");
    }
}

2.3 Lớp Employee

package bai11;

import java.util.Scanner;

public class Employee extends Person{
    float hsl, lcb=1000;
    
    public Employee(){
        
    }
    
    public Employee(float hsl, String hoten, String diachi){
        super(hoten, diachi);
        this.hsl=hsl;
    }

    public float getHsl() {
        return hsl;
    }

    public void setHsl(float hsl) {
        this.hsl = hsl;
    }
    
    public void nhapEmp(){
        Scanner sc = new Scanner(System.in);
        super.nhap();
        System.out.println("Nhap he so luong: ");
        hsl=sc.nextFloat();
    }
    
    float tinhLuong(){
        return hsl*lcb;
    }
    
    String danhGiaEmp(){
        if(getHsl()==2){
            return "Trung Binh";
        }else if(getHsl()<2){
            return "Thap";
        }else return "Cao";
    }
    
    public void xuat(){
        System.out.println("===Employee===");
        super.xuat();
        System.out.println("He so luong: "+ getHsl());
        System.out.println("Luong: "+tinhLuong());
        System.out.println("Danh Gia: "+ danhGiaEmp());
        System.out.println("======");
    }
}

2.4 Lớp Customer

package bai11;

import java.util.Scanner;

public class Customer extends Person{
    String tenCT;
    float trigiaHD;
    
    public Customer(){
        
    }
    
    public Customer(String tenCT, float trigiaHD, String hoten, String diachi){
        super(hoten, diachi);
        this.tenCT=tenCT;
        this.trigiaHD=trigiaHD;
    }

    public String getTenCT() {
        return tenCT;
    }

    public void setTenCT(String tenCT) {
        this.tenCT = tenCT;
    }

    public float getTrigiaHD() {
        return trigiaHD;
    }

    public void setTrigiaHD(float trigiaHD) {
        this.trigiaHD = trigiaHD;
    }
    
    public void nhapCus(){
        Scanner sc = new Scanner(System.in);
        super.nhap();
        System.out.println("Nhap ten cong ty: ");
        tenCT= sc.nextLine();
        System.out.println("Nhap tri gia hoa don: ");
        trigiaHD= sc.nextFloat();
    }
    
    public void xuat(){
        System.out.println("===Customer===");
        super.xuat();
        System.out.println("Ten cong ty: "+getTenCT());
        System.out.println("Tri gia hoa don: "+ getTrigiaHD());
        System.out.println("======");
    }
}

2.5 Lớp DanhSach

package bai11;

import java.util.ArrayList;
import java.util.Scanner;

public class DanhSach {
    int chon,a,b,c;
    ArrayList<Person> list = new ArrayList<>();
    ArrayList<Student> listS = new ArrayList<>();
    ArrayList<Employee> listE = new ArrayList<>();
    ArrayList<Customer> listC = new ArrayList<>();
    Scanner sc= new Scanner(System.in);
    
    public void menu(){
        System.out.println("1. Nhap danh sach Hoc Sinh");
        System.out.println("2. Nhap danh sach Nhan vien");
        System.out.println("3. Nhap sanh sach Khach hang");
        System.out.println("4. Xuat danh sach");
        System.out.println("5. Xoa nguoi theo ten");
        System.out.println("0.Thoat");
    }
    
    public void nhapDSStu(){
        Scanner sc = new Scanner(System.in);
        System.out.println("Nhap so hoc sinh muon nhap: ");
        a= sc.nextInt();
        listS = new ArrayList(a);
        for(int i=0;i<a;i++){
            Student stu = new Student();
            stu.nhapStu();
            list.add(stu);
        }
    }
    
    public void nhapDSEmp(){
        System.out.println("Nhap so nhan vien muon nhap: ");
        b= sc.nextInt();
        listE = new ArrayList(b);
        for(int i=0;i<b;i++){
            Employee emp = new Employee();
            emp.nhapEmp();
            list.add(emp);
        }
    }
    
    public void nhapDSCus(){
        System.out.println("Nhap so khach hang muon nhap: ");
        c= sc.nextInt();
        listC = new ArrayList(c);
        for(int i=0;i<c;i++){
            Customer cus = new Customer();
            cus.nhapCus();
            list.add(cus);
        }
    }
    
    
    public void nhapDS(){
        do {            
            menu();
            System.out.println("Lua chon: ");
            chon= sc.nextInt();
            
            switch(chon){
                case 1: nhapDSStu();break;
                case 2: nhapDSEmp(); break;
                case 3: nhapDSCus(); break;
                case 4: xuatDS(); break;
                case 5: xoaNguoi(); break;
                case 0: System.exit(0);break;
            }
        } while (chon!=0);
    }
    
    public void xuatDS(){
        for(int i=0;i<list.size();i++){
            list.get(i).xuat();
        }
    }
    
    public void xoaNguoi(){
        Scanner sc = new Scanner(System.in);
        String ten;
        System.out.println("Nhap ten nguoi can xoa: ");
        ten= sc.nextLine();
        for(int i=0;i<list.size();i++){
            if(list.get(i).hoten.equals(ten)){
                list.remove(i);
            }
        }
        
    }
    
}

2.6 Lớp main

package bai11;

import java.util.Scanner;

public class Bai11 {
    
 
    public static void main(String[] args) {
        int chon;
        DanhSach a = new DanhSach();
        a.nhapDS();
    }
}

3. Kết quả

Qua bài viết trên, chúng ta đã thấy rõ cách tính đa hình giúp chúng ta tối ưu hóa mã nguồn, tăng tính linh hoạt và quản lý hiệu quả các đối tượng đa dạng như sinh viên, nhân viên và khách hàng. Cảm ơn các bạn đã tham khảo trên ttnguyen.net

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em