Class ThanhVien Thuộc tính: protected String maSo; hoTen namSinh; diaChi; Phương thức: Constructor: Hàm tạo có đối số và hàm tạo không đối số Getter, Setter: Phương thức get, set cho
Xác định các lớp của bài toán
Class ThanhVien
Thuộc tính: protected String maSo; hoTen namSinh; diaChi;
Constructor: Hàm tạo có đối số và hàm tạo không đối số
Getter, Setter: Phương thức get, set cho các thuộc tính kiểu protected
nhap: nhập thông tin các thuộc tính
xuat: Hiện ra các thông tin
Class TruongHoc
Thuộc tính: private DanhSachGiaoVien objGiaoVien; objSinhVien; private float diemTBCaoNhat;
Constructor: Hàm tạo không đối số.
Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private.
nhap: Lựa chọn nhâ ̣p cho sinh viên hoă ̣c giáo viên.
xuatThongTinSinhVien: Hiển th椃⌀ thông tin của các sinh viên có trong danh sách.
xuatThongTinGiaoVien: Hiển th椃⌀ thông tin của các giáo viên có trong danh sách.
xuatThongTin: hiển th椃⌀ lựa chọn xuất thông tin của giáo viên hoă ̣c sinh viên.
taoDuLieu: Đọc dữ liệu từ file txt.
chinhSuaThongTinSinhVien: Chỉnh sửa thông tin sinh viên theo MSSV.
xoaSinhVienTheoMa: Xóa thông tin sinh viên theo MSSV.
sapXepTheoDiemTB: Sắp xếp ĐTB giảm dần.
sapXepTheoTen: Sắp xếp theo tên sinh viên.
tinhDiemTrungBinh: Trả về điểm trung bình.
timSinhVienTheoTen: Tìm sinh viên có tên nhâ ̣p từ bàn phím.
lamRongDanhSach: Làm rỗng danh sách sinh viên.
kiemTraDanhSach: Kiểm tra danh sách sinh viên có rỗng hay không.
timDTBCaoNhat: Tìm ra ĐTB cao nhất trong danh sách sinh viên.
dsHocSinhCoDTBCaoNhat: Tạo danh sách các sinh viên có ĐTB cao nhất.
xepLoai: Sếp loại học sinh dựa vào ĐTB.
tinhThamNien: Tính số năm giảng dạy.
timGvTheoYeuCau: Tìm giáo viên có thâm niên cao nhất.
Class SinhVien
Thuộc tính: private float diemToan; diemTin; diemNgoaiNgu; diemTB;
Constructor: Hàm tạo có đối số, full đối số và hàm tạo không đối số.
Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private
nhap: nhập thông tin các thuộc tính
xuat: Hiện ra các thông tin
tinhDiemTrungBinh: Trả về kết quả điểm trung bình
Class GiaoVien
Hằng số: final int NAM_HIEN_TAI = 2023;
Thuộc tính: private int namBatDau; private String chuyenMon; private int thamNien;
Constructor: Hàm tạo có đối số và hàm tạo không đối số.
Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private.
tinhThamNien: Trả về kết quả số năm.
Class DanhSachSinhVien
Thuộc tính: private ArrayList listSinhVien;
Constructor: Hàm tạo không đối số.
Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private
nhap: nhập thông tin các thuộc tính
xuat: Hiện ra các thông tin
Class DanhSachGiaoVien
Thuộc tính: private ArrayList listGiaoVien;
Constructor: Hàm tạo không đối số.
Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private
nhap: nhập thông tin các thuộc tính
xuat: Hiện ra các thông tin
Class NhapXuat
public interface nhapXuat { void nhap(Scanner scan); void xuat();
Class MyFile
Thuộc tính: private String fileName;
Constructor: Hàm tạo không đối số.
appendStr2FileSinhVien: Lấy thông tin sinh viên từ file txt
appendStr2FileGiaoVient: Lấy thông tin giáo viên từ file txt
Class XuLy
import java.security.DomainCombiner; import java.util.ArrayList; import java.util.Scanner; public class XuLy { public static void main(String[] args) {
Scanner scan = new Scanner(System.in); doMenu(scan);
System.out.println("[Moi Lua Chon Chuc Nang]>>");
System.out.println("1.Nhap thong tin");
System.out.println("2.Doc du lieu tu file");
System.out.println("3.Chinh sua thong tin theo ma");
System.out.println("4.Xoa Sinh Vien theo ma");
System.out.println("5.Sap xep Sinh Vien theo diem trung binh");
System.out.println("6.Sap xep Sinh Vien theo ten");
System.out.println("7.Tim Sinh Vien theo ten nhap tu ban phim");
System.out.println("8.Xuat thong tin");
System.out.println("9.Lam rong danh sach");
System.out.println("10.Kiem tra danh sach");
System.out.println("11.Tinh tham nien cua Giao Vien");
System.out.println("12.Xuat danh sach Giao Vien co tham nien cao nhat");
} public static void doMenu(Scanner scan) {
DanhSachSinhVien sinhVien = new DanhSachSinhVien(); boolean flag = true; do { inMenu();
System.out.println("[Moi chon]>>"); int chon = scan.nextInt(); switch (chon) { case 1: truong.nhap(scan); break; case 2: truong.docDulieuTuFileTXT(); break; case 3: truong.xuatThongTinSinhVien(); truong.chinhSuaThongTinSinhVien(scan); break; case 4: truong.xuatThongTinSinhVien(); truong.xoaSinhVienTheoMa(scan); break; case 5:
ArrayList lisths = truong.sapXepTheoDiemTb(); for (SinhVien hs : lisths) { hs.xuat();
} break; case 6: truong.sapXepTheoTen(); truong.xuatThongTinSinhVien(); break; case 7: truong.xuatThongTinSinhVien(); truong.timSinhVienTheoTen(scan); break; case 8: truong.xuatThongTin(); break; case 9: truong.lamRongDanhSach(); break; case 10: truong.kiemTraDanhSach(); break; case 11: truong.tinhThamNien(); truong.xuatThongTinGiaoVien(); break; case 12: truong.tinhThamNien();
ArrayList list = truong.timGvTheoYeuCau(); for (GiaoVien gv : list) { gv.xuat();
} break; case 0: flag = false; break; default:
System.out.println("[Vui long chon dung chuc nang]");
Mô tả thuật toán
Nhập thông tin cho Sinh Viên hoặc Giáo Viên
- Khi người dùng chọn chức năng “Nhập thông tin”
- Sẽ gọi đến phương thức “nhap” đã được thiết kế ở Class TruongHoc phương thức sử dụng vòng lặp “do – while” cho phép người dùng chọn một trong ba tùy chọn để nhập thông tin cho giáo viên, sinh viên hoặc thoát khỏi chương trình
- Biến flag được sử dụng để kiểm soát vòng lặp Nếu người dùng chọn tùy chọn "0" để thoát, biến flag sẽ được đặt thành giá tr椃⌀ false và vòng lặp sẽ kết thúc.
- Nếu người dùng chọn tùy chọn "1" hoặc "2", phương thức sẽ tạo một đối tượng mới của lớp GiaoVien hoặc SinhVien tuỳ thuộc vào lựa chọn của người dùng
- Sau đó, phương thức gọi phương thức “nhap” của đối tượng “tv” để nhập thông tin cho đối tượng Cuối cùng, đối tượng “tv” được thêm vào danh sách tương ứng của “objGiaoVien” hoặc “objSinhVien”.
- Nếu người dùng nhập một tùy chọn không hợp lệ, phương thức sẽ in ra thông báo yêu cầu người dùng chọn lại đúng tùy chọn.
Đọc dữ liệu từ file
- Cho người dùng nhập vào mã sinh viên cần chỉnh sửa - Sử dụng vòng lặp “ for “ để duyệt qua danh sách sinh viên và so sánh mã sinh viên cần chỉnh sửa với mã sinh viên đang duyệt.
- Nếu sinh viên được tìm thấy, phương thức sẽ cho phép người dùng chọn một trong các thuộc tính để chỉnh sửa
- Sau khi người dùng chọn một thuộc tính, phương thức sẽ yêu cầu người dùng nhập thông tin mới để cập nhật
- Sau đó, phương thức sẽ cập nhật thông tin của sinh viên và lưu trữ lại vào danh sách.
- Nếu người dùng nhập một tùy chọn không hợp lệ, phương thức sẽ yêu cầu người dùng chọn lại tùy chọn
4 Xoá thông tin theo mã
- Kiểm tra số phần của của danh sách sinh viên có > 0 nếu có - Yêu cầu người dung nhập mã sinh viên cần xóa
- Sử dụng vòng lặp “ for “ để duyệt qua tất cả sinh viên và so sánh mã sinh viên với mã được nhập
- Nếu tìm thấy mã số sinh viên trùng với mã được nhập thì sử dụng phép “.remove” trong ArrayList.
- Nếu không tìm thấy mã sinh viên trùng với mã được nhập thì in ra thông báo nhập thông tin
5 Sắp xếp theo điểm trung bình
- Sử dụng thuật toán sắp xếp “bubble sort” để thực hiện mục đích sắp xếp- Nếu danh sách không rỗng, phương thức sử dụng một vòng lặp duyệt qua tất cả các
Chỉnh sửa thông tin theo mã
- Cho người dùng nhập vào mã sinh viên cần chỉnh sửa - Sử dụng vòng lặp “ for “ để duyệt qua danh sách sinh viên và so sánh mã sinh viên cần chỉnh sửa với mã sinh viên đang duyệt.
- Nếu sinh viên được tìm thấy, phương thức sẽ cho phép người dùng chọn một trong các thuộc tính để chỉnh sửa
- Sau khi người dùng chọn một thuộc tính, phương thức sẽ yêu cầu người dùng nhập thông tin mới để cập nhật
- Sau đó, phương thức sẽ cập nhật thông tin của sinh viên và lưu trữ lại vào danh sách.
- Nếu người dùng nhập một tùy chọn không hợp lệ, phương thức sẽ yêu cầu người dùng chọn lại tùy chọn
Xoá thông tin theo mã
- Kiểm tra số phần của của danh sách sinh viên có > 0 nếu có - Yêu cầu người dung nhập mã sinh viên cần xóa
- Sử dụng vòng lặp “ for “ để duyệt qua tất cả sinh viên và so sánh mã sinh viên với mã được nhập
- Nếu tìm thấy mã số sinh viên trùng với mã được nhập thì sử dụng phép “.remove” trong ArrayList.
- Nếu không tìm thấy mã sinh viên trùng với mã được nhập thì in ra thông báo nhập thông tin
Sắp xếp theo điểm trung bình
- Sử dụng thuật toán sắp xếp “bubble sort” để thực hiện mục đích sắp xếp- Nếu danh sách không rỗng, phương thức sử dụng một vòng lặp duyệt qua tất cả các phần tử trong danh sách và so sánh chúng với nhau để sắp xếp theo thứ tự giảm dần của điểm trung bình.
- Nếu điểm trung bình của phần tử thứ j nhỏ hơn điểm trung bình của phần tử thứ j+1, phương thức sẽ hoán đổi v椃⌀ trí của hai phần tử đó trong danh sách Sau khi vòng lặp kết thúc, danh sách sẽ được sắp xếp theo thứ tự giảm dần của điểm trung bình.
- Cuối cùng, phương thức trả về danh sách đã được sắp xếp Nếu danh sách rỗng,phương thức sẽ trả về danh sách ban đầu mà không thực hiện bất kỳ thay đổi nào.
Sắp xếp theo tên
- Sử dụng thuật toán sắp xếp “bubble sort” để thực hiện việc sắp xếp.
- Đầu tiên lấy danh sách sinh viên từ đối tượng objSinhVien Nếu danh sách không rỗng, phương thức sử dụng một vòng lặp duyệt qua tất cả các phần tử trong danh sách và so sánh chúng với nhau để sắp xếp theo thứ tự tăng dần của họ tên.
- Nếu họ tên của phần tử thứ j lớn hơn họ tên của phần tử thứ j+1, phương thức sẽ hoán đổi v椃⌀ trí của hai phần tử đó trong danh sách Sau khi vòng lặp kết thúc, danh sách sẽ được sắp xếp theo thứ tự tăng dần của họ tên.
Tìm sinh viên theo tên
- Kiểm tra xem danh sách sinh viên có rỗng hay không Nếu danh sách không rỗng, thực hiện các bước tiếp theo.
- Yêu cầu người dùng nhập tên sinh viên cần tìm kiếm.
- Khởi tạo biến count để đếm số lượng sinh viên tìm thấy.
- Duyệt danh sách sinh viên, nếu tên của sinh viên trùng với tên được nhập vào (không phân biệt hoa thường), in thông tin sinh viên đó và tăng giá tr椃⌀ của biến count lên 1.
- Kiểm tra giá tr椃⌀ của biến count Nếu giá tr椃⌀ bằng “0”, thông báo cho người dùng biết rằng không tìm thấy sinh viên có tên được nhập vào.
Xuất thông tin
- Phương thức xuatThongTin sử dụng một vòng lặp “do-while” để hiển th椃⌀ menu và cho phép người dùng chọn chức năng.
- Sau khi người dùng chọn chức năng, sử dụng câu lệnh “switch-case” để xử lý lựa chọn của người dùng.
- Nếu người dùng chọn xuất thông tin giáo viên hoặc sinh viên, phương thức duyệt danh sách tương ứng và in ra thông tin của từng giáo viên hoặc sinh viên.
- Và kết thúc vòng lặp “do-while” khi người dùng chọn chức năng thoát khỏi chương trình.
Làm rỗng danh sách
- Phương thức sử dụng một vòng lặp “do-while” để hiển th椃⌀ menu và cho phép người dùng chọn chức năng.
- Sau khi người dùng chọn chức năng, sử dụng câu lệnh “switch-case” để xử lý lựa chọn của người dùng.
- Nếu người dùng chọn làm rỗng thông tin giáo viên hoặc sinh viên, phương thức duyệt danh sách tương ứng và làm rỗng thông tin của từng danh sách giáo viên hoặc sinh viên.
- Dùng câu lệnh điều kiện while với “.isEmpty()” để kiểm tra xem danh sách sinh viên có dữ liệu hay không
- Nếu có sử dụng “remove” trong ArrayList để xóa phần tử - Tiếp tục lặp lại cho đến khi danh sách không còn dữ liệu
Kiểm tra danh sách có rỗng hay không
- Sử dụng câu lệnh điều kiện “if ” với “ isEmpty() ” để kiểm tra xem danh sách có dữ liệu hay không
- Nếu có xuất ra màn hình thông báo “Co du lieu”
- Nếu không xuất ra màn hình thông báo “Danh sach rong ”
Tính số năm giảng dạy (thâm niên)
- ở Class TruongHoc viết phương thức tính thâm niên cho toàn bộ danh sách giáo viên:
+ Kiểm tra xem danh sách giáo viên có rỗng hay không Nếu danh sách không rỗng, thực hiện các bước tiếp theo.
+ Sử dụng vòng lặp for để duyệt toàn bộ danh sách giáo viên đồng thời ở mỗi giáo viên lại gọi đến phương thức tính thâm niên đã thiết kế ở Class GiaoVien
- ở Class GiaoVien phương thức tính thâm niên theo công thức: this.thamNien = NAM_HIEN_TAI – this.namBatDau;
Tìm giáo viên có thâm niên cao nhất
- Khởi tạo một đối tượng GiaoVien mới được gọi là "gvMax" với giá tr椃⌀ là giáo viên đầu tiên trong danh sách giáo viên.
- Sử dụng vòng lặp for để duyệt qua từng giáo viên trong danh sách giáo viên.
- Kiểm tra nếu thâm niên của giáo viên hiện tại lớn hơn thâm niên của "gvMax", thì gán giáo viên hiện tại vào "gvMax".
- Sau khi đã xác đ椃⌀nh giáo viên có thâm niên lớn nhất (tức là "gvMax"), sử dụng vòng lặp for để duyệt lại danh sách giáo viên.
- Nếu thâm niên của giáo viên hiện tại bằng với thâm niên của "gvMax", thì thêm giáo viên hiện tại vào danh sách "list".
- Trả về danh sách "list" chứa các giáo viên có thâm niên cao nhất.
Cài đặt bài toán
Class SinhVien
import java.util.InputMismatchException; import java.util.Scanner; public class SinhVien extends ThanhVien implements nhapXuat {
// 1.Attributes private float diemToan; private float diemTin; private float diemNgoaiNgu; private float diemTB; private String xepLoai;
// 2.Get set public float getDiemToan() { return diemToan;
} public void setDiemToan(float diemToan) { this.diemToan = diemToan;
} public float getDiemTin() { return diemTin;
} public void setDiemTin(float diemTin) { this.diemTin = diemTin;
} public float getDiemNgoaiNgu() { return diemNgoaiNgu;
} public void setDiemNgoaiNgu(float diemNgoaiNgu) { this.diemNgoaiNgu = diemNgoaiNgu;
} public float getDiemTB() { return this.diemTB;
} public String getXepLoai() { return xepLoai;
} public void setXepLoai(String xepLoai) { this.xepLoai = xepLoai;
// 3.Constructions public SinhVien() { } public SinhVien(String maSo, String hoTen, String namSinh, String diaChi, float toan, float van, float anh) { super(maSo, hoTen, namSinh, diaChi); this.diemToan = toan; this.diemTin = van; this.diemNgoaiNgu = anh;
} public SinhVien(float diemToan, float diemTin, float diemNgoaiNgu) { this.diemToan = diemToan; this.diemTin = diemTin; this.diemNgoaiNgu = diemNgoaiNgu;
@Override public void nhap(Scanner scan) { super.nhap(scan); this.diemToan = -1; this.diemTin = -1; this.diemNgoaiNgu = -1;
// Yêu cầu người dùng nhập điểm Toán while (true) { try { while (this.diemToan < 0 || this.diemToan > 10) {
System.out.print("Nhap diem Toan (tu 0 den 10): "); this.diemToan = scan.nextFloat(); if (this.diemToan < 0 || this.diemToan > 10) { System.out.println("Diem khong hop le Vui long nhap lai.");
} catch (InputMismatchException e) { System.out.println("Diem phai la so Vui long nhap lai."); scan.nextLine();
} } // Yêu cầu người dùng nhập điểm Tin while (true) { try { while (this.diemTin < 0 || this.diemTin > 10) {
System.out.print("Nhap diem Tin (tu 0 den 10): "); this.diemTin = scan.nextFloat(); if (this.diemTin < 0 || this.diemTin > 10) {
System.out.println("Diem khong hop le Vui long nhap lai.");
} catch (InputMismatchException e) { System.out.println("Diem phai la so Vui long nhap lai."); scan.nextLine();
} } // Yêu cầu người dùng nhập điểm Ngoại ngữ while (true) { try { while (this.diemNgoaiNgu < 0 || this.diemNgoaiNgu > 10) {
System.out.print("Nhap diem Ngoai Ngu (tu 0 den 10): "); this.diemNgoaiNgu = scan.nextFloat(); if (this.diemNgoaiNgu < 0 || this.diemNgoaiNgu > 10) {
System.out.println("Diem khong hop le Vui long nhap lai.");
} catch (InputMismatchException e) { System.out.println("Diem phai la so Vui long nhap lai."); scan.nextLine();
} } MyFile mFile1 = new MyFile("ds_SinhVien.txt");
String str = String.format("Ma: %-5s Ten: %-10s Ngay sinh: %-5s Dia chi: %-10s Toan: %.1f Tin: %.1f Tieng anh: %.1f GPA: %.1f", this.maSo, this.hoTen, this.ngaySinh, this.diaChi, this.diemToan, this.diemTin, this.diemNgoaiNgu, this.diemTB = (this.diemToan + this.diemTin + this.diemNgoaiNgu * 2) / 4); mFile1.appendStr2FileSinhVien(str);
@Override public void xuat() { super.xuat();
System.out.println(String.format(
"Toan: %.1f Tin: %.1f Tieng anh: %.1f GPA: %.1f", this.diemToan, this.diemTin, this.diemNgoaiNgu, this.diemTB));
// 5.Business // Tính điểm trung bình public void tinhDiemTrungBinh() { this.diemTB = (this.diemToan + this.diemTin + this.diemNgoaiNgu * 2) / 4;
Class GiaoVien
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.util.InputMismatchException; import java.util.Scanner; public class GiaoVien extends ThanhVien implements nhapXuat {
//Constant final int NAM_HIEN_TAI = 2023;
//1.Attributes private int namBatDau; private String chuyenMon; private int thamNien;
//2.Get set public int getNamBatDau() { return namBatDau;
} public void setNamBatDau(int namBatDau) { this.namBatDau = namBatDau;
} public int getThamNien() { return thamNien;
} public String getChuyenMon() { return chuyenMon;
} public void setChuyenMon(String chuyenMon) { this.chuyenMon = chuyenMon;
} public GiaoVien(String maSo, String hoTen, String namSinh, String diaChi, String chuyenMon, int namBatDau) { super(maSo, hoTen, namSinh, diaChi); this.chuyenMon = chuyenMon; this.namBatDau = namBatDau;
@Override public void nhap(Scanner scan) { super.nhap(scan);
System.out.println("Nhap chuyen mon (Tu nhien - Xa hoi): "); this.chuyenMon = scan.nextLine(); while (true) { try { System.out.println("Nhap nam bat dau day hoc: "); this.namBatDau = scan.nextInt(); break;
} catch (InputMismatchException e) { System.out.println("Nam phai la so Vui long nhap lai."); scan.nextLine();
}} MyFile mFile2 = new MyFile("ds_GiaoVien.txt");
String strr = String.format("Ma: %-5s Ten: %-10s Ngay sinh: %-5s Dia chi: %-10s Nam bat dau: %d Chuyen mon: %-10s Tham nien: %d", this.maSo, this.hoTen, this.ngaySinh, this.diaChi, this.namBatDau, this.chuyenMon, this.thamNien); mFile2.appendStr2FileGiaoVien(strr);
@Override public void xuat() { super.xuat();
System.out.println(String.format("Nam bat dau: %d Chuyen mon: %-10s Tham nien: %d", this.namBatDau, this.chuyenMon, this.thamNien));
//5.Business public void tinhThamNien() { this.thamNien = NAM_HIEN_TAI - this.namBatDau;
Class DanhSachSinhVien
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Scanner; public class DanhSachSinhVien implements nhapXuat {
// 1.Attributes private ArrayList listSinhVien;
// 2.Get set public ArrayList getListSinhVien() { return listSinhVien;
} public void setListHocSinh(ArrayList listSinhVien) { this.listSinhVien = listSinhVien;
}// 3.Constructions public DanhSachSinhVien() { this.listSinhVien = new ArrayList();
@Override public void nhap(Scanner scan) { for (SinhVien sv : this.listSinhVien) { sv.nhap(scan);
@Override public void xuat() { for (SinhVien sv : this.listSinhVien) { sv.xuat();
Class DanhSachGiaoVien
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Scanner; public class GiaoVien extends ThanhVien implements nhapXuat {
//Constant final int NAM_HIEN_TAI = 2023;
//1.Attributes private int namBatDau; private String chuyenMon; private int thamNien;
//2.Get set public int getNamBatDau() { return namBatDau;
} public void setNamBatDau(int namBatDau) { this.namBatDau = namBatDau;
} public int getThamNien() { return thamNien;
} public String getChuyenMon() { return chuyenMon;
} public void setChuyenMon(String chuyenMon) { this.chuyenMon = chuyenMon;
// 3.Constructions public DanhSachGiaoVien() { this.listGiaoVien = new ArrayList();
@Override public void nhap(Scanner scan) { this.listGiaoVien = new ArrayList(); for (GiaoVien gv : this.listGiaoVien) { gv.nhap(scan);
@Override public void xuat() { for (GiaoVien gv : this.listGiaoVien) { gv.xuat();
Class TruongHoc
import java.io.BufferedReader; import java.io.File; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.InputMismatchException; import java.util.Scanner; public class TruongHoc {
// 1.Attributes private DanhSachGiaoVien objGiaoVien; private DanhSachSinhVien objSinhVien; private float diemTBCaoNhat;
// 2.Get set public DanhSachGiaoVien getObjGiaoVien() { return objGiaoVien;
} public void setObjGiaoVien(DanhSachGiaoVien objGiaoVien) { this.objGiaoVien = objGiaoVien;
} public DanhSachSinhVien getObjSinhVien() { return objSinhVien;
} public void setObjSinhVien(DanhSachSinhVien objSinhVien) { this.objSinhVien = objSinhVien;
} public float getDiemTBCaoNhat() { return diemTBCaoNhat;
}// 3.Constructions public TruongHoc() { this.objGiaoVien = new DanhSachGiaoVien(); this.objSinhVien = new DanhSachSinhVien();
} // 4.Out in public void nhap(Scanner scan) { boolean flag = true;
System.out.println("1.Nhap thong tin cho Giao Vien");
System.out.println("2.Nhap thong tin cho Sinh Vien");
System.out.println("[Moi Chon]>>"); int chon = scan.nextInt(); switch (chon) { case 1: tv = new GiaoVien(); tv.nhap(scan); this.objGiaoVien.getListGiaoVien().add((GiaoVien) tv); break; case 2: tv = new SinhVien(); tv.nhap(scan); this.objSinhVien.getListSinhVien().add((SinhVien) tv); break; case 0: flag = false; break; default:
System.out.println("[Vui long chon dung chuc nang]");
} public void xuatThongTinSinhVien() { for (SinhVien sv : this.objSinhVien.getListSinhVien()) { sv.xuat();
} } public void xuatThongTinGiaoVien() { for (GiaoVien gv : this.objGiaoVien.getListGiaoVien()) { gv.xuat();
Scanner scan = new Scanner(System.in); boolean flag = true; do {
System.out.println("1.Xuat thong tin Giao Vien");
System.out.println("2.Xuat thong tin Sinh Vien");
System.out.println("[Moi Chon]>>"); int chon = Integer.parseInt(scan.nextLine()); switch (chon) { case 1: for (GiaoVien gv : this.objGiaoVien.getListGiaoVien()) { gv.xuat();
} break; case 2: for (SinhVien sv : this.objSinhVien.getListSinhVien()) { sv.xuat();
} break; case 0: flag = false; break; default:
System.out.println("[Vui long chon dung chuc nang]");
} // 5.Business // Chỉnh sửa sinh viên theo mã public void chinhSuaThongTinSinhVien(Scanner scan) { if(this.objSinhVien.getListSinhVien().size() > 0) {
System.out.println("[Nhap ma sinh vien can chinh sua]>>"); scan.nextLine();
String maSv = scan.nextLine(); for (SinhVien sv : this.objSinhVien.getListSinhVien()) { if (sv.getMaSo().equals(maSv)) { sv.xuat(); boolean flag = true; do {
System.out.println("[Moi chon thong tin can chinh sua]");
System.out.println("1.Ho ten");
System.out.println("2.Nam sinh");
System.out.println("3.Dia chi");
System.out.println("4.Diem toan");
System.out.println("5.Diem tin");
System.out.println("6.Diem Ngoai ngu");
System.out.println("[Moi chon]>>");
System.out.println("**************************************"); int chon = Integer.parseInt(scan.nextLine()); switch (chon) { case 1:
System.out.println("[Moi nhap thong tin moi]");
String hoTen = scan.nextLine(); sv.setHoTen(hoTen); break; case 2:
System.out.println("[Moi nhap thong tin moi]");
String namSinh = scan.nextLine(); sv.setNgaySinh(namSinh); break; case 3:
System.out.println("[Moi nhap thong tin moi]");
String diaChi = scan.nextLine(); sv.setDiaChi(diaChi); break; case 4:
System.out.println("[Moi nhap thong tin moi]"); while (true) { try { float diemToan = Float.parseFloat(scan.nextLine()); sv.setDiemToan(diemToan); break;
} catch (InputMismatchException e) { System.out.println("Diem phai la so Vui long nhap lai."); scan.nextLine();
System.out.println("[Moi nhap thong tin moi]"); while (true) { try { float diemTin = Float.parseFloat(scan.nextLine()); sv.setDiemTin(diemTin); break;
} catch (InputMismatchException e) { System.out.println("Diem phai la so Vui long nhap lai."); scan.nextLine();
System.out.println("[Moi nhap thong tin moi]"); while (true) { try { float diemNgoaiNgu = Float.parseFloat(scan.nextLine()); sv.setDiemNgoaiNgu(diemNgoaiNgu); break;
} catch (InputMismatchException e) { System.out.println("Diem phai la so Vui long nhap lai."); scan.nextLine();
} } break; case 0: flag = false; break; default:
System.out.println("[Vui long chon dung chuc nang]"); break;
System.out.println("[Chua co du lieu]");
// Xoa sinh vien theo ma public void xoaSinhVienTheoMa(Scanner scan) { boolean flag = true; if (this.objSinhVien.getListSinhVien().size() > 0) {
System.out.println("[Nhap ma sinh vien can xoa]>>");
String maSv = scan.nextLine(); for (SinhVien sv : this.objSinhVien.getListSinhVien()) { if (sv.getMaSo().equals(maSv)) { this.objSinhVien.getListSinhVien().remove(sv); flag = false; break;
System.out.println("[Ma khong hop le]");
System.out.println("[Chua co du lieu");
// sắp xếp Sinh Vien theo ĐTB giảm dần public ArrayList sapXepTheoDiemTb() {
ArrayList list = this.objSinhVien.getListSinhVien(); if (this.objSinhVien.getListSinhVien().size() > 0) { int n = list.size(); int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n - i - 1; j++) { if (list.get(j).getDiemTB() < list.get(j + 1).getDiemTB()) {
SinhVien temp; temp = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, temp);
System.out.println("[Chua co du lieu]");
} // sắp xếp theo tên sinh vien public void sapXepTheoTen() {
ArrayList list = this.objSinhVien.getListSinhVien(); if (this.objSinhVien.getListSinhVien().size() > 0) { int n = list.size(); int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n - i - 1; j++) { if (list.get(j).getHoTen().compareTo(list.get(j + 1).getHoTen()) > 0) {
SinhVien temp; temp = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, temp);
}// Tim sinh vien co ten nhap tu ban phim public void timSinhVienTheoTen(Scanner scan) { if (this.objSinhVien.getListSinhVien().size() > 0) {
System.out.println("[Nhap ten sinh vien can tim:]"); scan.nextLine();
String ten = scan.nextLine(); int count = 0; for (SinhVien sv : this.objSinhVien.getListSinhVien()) { if (sv.getHoTen().equalsIgnoreCase(ten)) { sv.xuat(); count++;
} } if (count == 0) { System.out.println("[Khong tim thay sinh vien co ten la: ]" + ten);
} }else { System.out.println("[Chua co du lieu]");
// Lam rong danh sach public void lamRongDanhSach() {
Scanner scan = new Scanner(System.in); boolean flag = true; do {
System.out.println("1.Lam rong danh sach Giao Vien");
System.out.println("2.Lam rong danh sach Sinh Vien");
System.out.println("[Moi Chon]>>"); int chon = Integer.parseInt(scan.nextLine()); switch (chon) { case 1: while (!this.objGiaoVien.getListGiaoVien().isEmpty()) { this.objGiaoVien.getListGiaoVien().remove(0);
} System.out.println("[Successful]"); break; case 2: while (!this.objSinhVien.getListSinhVien().isEmpty()) { this.objSinhVien.getListSinhVien().remove(0);
} System.out.println("[Successful]"); break; case 0: flag = false; break; default:
System.out.println("[Vui long chon đung chuc nang]");
} // Kiem tra danh sach sinh vien co rong hay khong public void kiemTraDanhSach() { if (!this.objSinhVien.getListSinhVien().isEmpty()) {
System.out.println("[Co du lieu]");
System.out.println("[Danh sach rong]");
// Tìm sinh viên có điểm trung bình cao nhất public ArrayList dsSinhVienCoDTBCaoNhat() {
ArrayList list = new ArrayList(); if (this.objSinhVien.getListSinhVien().size() > 0) { for (SinhVien sv : this.objSinhVien.getListSinhVien()) { if (sv.getDiemTB() == this.diemTBCaoNhat) { list.add(sv);
} // Tính số năm giảng dạy(Thâm niên) public void tinhThamNien() { if (this.objGiaoVien.getListGiaoVien().size() > 0) { for (GiaoVien gv : this.objGiaoVien.getListGiaoVien()) { gv.tinhThamNien();
System.out.println("[Chua co du lieu]");
// Tìm Giáo Viên có thâm niên cao nhất public ArrayList timGvTheoYeuCau() {
ArrayList list = new ArrayList();
GiaoVien gvMax = this.objGiaoVien.getListGiaoVien().get(0); for (GiaoVien gv : this.objGiaoVien.getListGiaoVien()) { if (gv.getThamNien() > gvMax.getThamNien()) { gvMax = gv;
} } for (GiaoVien gv : this.objGiaoVien.getListGiaoVien()) { if (gv.getThamNien() == gvMax.getThamNien()) { list.add(gv);
Scanner scan = new Scanner(System.in); boolean flag = true; do {
System.out.println("1.Doc file danh sach Giao Vien");
System.out.println("2.Doc file danh sach Sinh Vien");
System.out.println("[Moi Chon]>>"); int chon = Integer.parseInt(scan.nextLine()); switch (chon) { case 1:
File f = new File("D:\\Workspace\\Java\\DuAn_QuanLy\\ds_GiaoVien.txt"); try {BufferedReader br = Files.newBufferedReader(f.toPath(), StandardCharsets.UTF_8);
String line = null; while(true) { line = br.readLine(); if(line == null) { break;
File fi = new File("D:\\Workspace\\Java\\DuAn_QuanLy\\ds_SinhVien.txt"); try {
BufferedReader br = Files.newBufferedReader(fi.toPath(), StandardCharsets.UTF_8);
String line = null; while(true) { line = br.readLine(); if(line == null) { break;
} break; case 0: flag = false; break; default:
System.out.println("[Vui long chon đung chuc nang]");
Class nhapXuat
public interface nhapXuat { void nhap(Scanner scan); void xuat();
8 Class MyFile import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class MyFile { private String fileName; public MyFile(){} public MyFile(String fileName){ this.fileName = fileName;
} public boolean appendStr2FileSinhVien( String str){ try{
File file =new File("ds_SinhVien.txt"); if(!file.exists()){ file.createNewFile();
FileWriter fw = new FileWriter(file,true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
// append str to the file in new lines. pw.println(str); pw.close(); return true;
}catch(Exception e) { System.out.println(e); return false;
} } public boolean appendStr2FileGiaoVien( String str){ try{
File file =new File("ds_GiaoVien.txt"); if(!file.exists()){ file.createNewFile();
FileWriter fw = new FileWriter(file,true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
// append str to the file in new lines. pw.println(str); pw.close(); return true;
}catch(Exception e) { System.out.println(e); return false;
9 Class XuLy import java.security.DomainCombiner; import java.util.ArrayList; import java.util.Scanner; public class XuLy { public static void main(String[] args) {
Scanner scan = new Scanner(System.in); doMenu(scan);
} public static void inMenu() { System.out.println("=========================***======================");
System.out.println("[Moi Lua Chon Chuc Nang]>>");
System.out.println("1.Nhap thong tin");
System.out.println("2.Doc du lieu tu file");
System.out.println("3.Chinh sua thong tin theo ma");
System.out.println("4.Xoa Sinh Vien theo ma");
System.out.println("5.Sap xep Sinh Vien theo diem trung binh");
System.out.println("6.Sap xep Sinh Vien theo ten");
System.out.println("7.Tim Sinh Vien theo ten nhap tu ban phim");
System.out.println("8.Xuat thong tin");
System.out.println("9.Lam rong danh sach");
System.out.println("10.Kiem tra danh sach");
System.out.println("11.Tinh tham nien cua Giao Vien");
System.out.println("12.Xuat danh sach Giao Vien co tham nien cao nhat");
} public static void doMenu(Scanner scan) {
DanhSachSinhVien sinhVien = new DanhSachSinhVien(); boolean flag = true; do { inMenu();
System.out.println("[Moi chon]>>"); int chon = scan.nextInt(); switch (chon) { case 1: truong.nhap(scan); break; case 2: truong.docDulieuTuFileTXT(); break; case 3: truong.xuatThongTinSinhVien(); truong.chinhSuaThongTinSinhVien(scan); break; case 4: truong.xuatThongTinSinhVien(); truong.xoaSinhVienTheoMa(scan); break; case 5:
ArrayList lisths = truong.sapXepTheoDiemTb(); for (SinhVien hs : lisths) { hs.xuat();
} break; case 6: truong.sapXepTheoTen(); truong.xuatThongTinSinhVien(); break; case 7: truong.xuatThongTinSinhVien(); truong.timSinhVienTheoTen(scan); break; case 8: truong.xuatThongTin(); break; case 9: truong.lamRongDanhSach(); break; case 10: truong.kiemTraDanhSach(); break; case 11: truong.tinhThamNien(); truong.xuatThongTinGiaoVien(); break; case 12: truong.tinhThamNien();
ArrayList list = truong.timGvTheoYeuCau(); for (GiaoVien gv : list) { gv.xuat();
} break; case 0: flag = false; break; default:
System.out.println("[Vui long chon dung chuc nang]");