Bài Tập Tự Luận Java Nâng Cao Có Lời Giải
Có thể bạn quan tâm
- Trang chủ
- Hướng dẫn
- Ôn thi
- Tin học
Với những kiến thức lý thuyết đã được học, hãy thử sức với một project thực tế về quản lý sinh viên dưới đây.
Mục lục nội dung
1. Cấu trúc của project
2. Tạo lớp Student.java
3. Tạo lớp StudentDao.java
4. Tạo lớp SortStudentByGPA.java
5. Tạo lớp SortStudentByName.java
6. Tạo lớp StudentManager.java
7. Tạo lớp Main.java
8. Run bài tập quản lý sinh viên trong java
Đề bài: Viết chương trình quản lý sinh viên. Mỗi đối tượng sinh viên có các thuộc tính sau: id, name, age, address và gpa (điểm trung bình).
Yêu cầu: tạo ra một menu với các chức năng sau:
/****************************************/ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. Exit. /****************************************/
Lời giải
Các bạn lưu ý: trước khi xem lời giải các bạn hãy tự làm trước nhé. Hãy coi lời giải này như một bài tham khảo.
1. Cấu trúc của project
Cấu trúc của project được tạo trên eclipse:

Trong đó:
- Lớp Student để lưu thông tin cho mỗi sinh viên.
- Lớp StudentDao để đọc và ghi sinh viên vào file.
- Lớp SortStudentByGPA được implements Comparator để sắp xếp sinh viên tăng dần theo điểm trung bình.
- Lớp SortStudentByName được implements Comparator để sắp xếp sinh viên tăng dần theo tên.
- Lớp StudentManager cung cấp các phương thức để quản lý sinh viên như thêm, sửa, xóa, sắp xếp và hiển thị sinh viên.
- Lớp Main chứa phương thức public static void main() để chạy ứng dụng và menu như yêu cầu của bài toán.
2. Tạo lớp Student.java
Lớp này để lưu thông tin cho mỗi sinh viên.
File: Student.java
package vn.eLib; import java.io.Serializable; /** * Student class * * @author eLib.vn */ public class Student implements Serializable { private int id; private String name; private byte age; private String address; /* điểm trung bình của sinh viên */ private float gpa; public Student() {} public Student(int id, String name, byte age, String address, float gpa) { super(); this.id = id; this.name = name; this.age = age; this.address = address; this.gpa = gpa; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public byte getAge() { return age; } public void setAge(byte age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public float getGpa() { return gpa; } public void setGpa(float gpa) { this.gpa = gpa; } }3. Tạo lớp StudentDao.java
Tạo file "student.txt" tại thư mục gốc của dự án để lưu danh sách sinh viên.
Trong trường hợp này chúng ta sử dụng file để lưu trữ và truy xuất các đối tượng sinh vien. Nên lớp Student phải được implements Serializable.
Lớp StudentDao.java chứa phương thức read() để đọc thông tin danh sách sinh viên từ file "student.txt" và phương thức write() để ghi thông tin danh sách sinh viên vào file.
Phương thức read() sử dụng đối tượng ObjectInputStream trong java để đọc danh sách sinh viên từ file.
Phương thức write() sử dụng đối tượng ObjectOutputStream trong java để ghi danh sách sinh viên vào file.
File: StudentDao.java
package vn.eLib; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; /** * StudentDao class * * @author eLib.vn */ public class StudentDao { private static final String STUDENT_FILE_NAME = "student.txt"; /** * save list student to file * * @param studentList: list student to save */ public void write(List < Student > studentList) { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(new File(STUDENT_FILE_NAME)); oos = new ObjectOutputStream(fos); oos.writeObject(studentList); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } finally { closeStream(fos); closeStream(oos); } } /** * read list student from file * * @return list student */ public List < Student > read() { List < Student > studentList = new ArrayList < >(); FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream(new File(STUDENT_FILE_NAME)); ois = new ObjectInputStream(fis); studentList = (List < Student > ) ois.readObject(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } catch(ClassNotFoundException e) { e.printStackTrace(); } finally { closeStream(fis); closeStream(ois); } return studentList; } /** * close input stream * * @param is: input stream */ private void closeStream(InputStream is) { if (is != null) { try { is.close(); } catch(IOException e) { e.printStackTrace(); } } } /** * close output stream * * @param os: output stream */ private void closeStream(OutputStream os) { if (os != null) { try { os.close(); } catch(IOException e) { e.printStackTrace(); } } } }4. Tạo lớp SortStudentByGPA.java
Lớp SortStudentByGPA implements Comparator được sử dụng để sắp xếp sinh viên tăng dần theo điểm trung bình. Tìm hiểu thêm về cách sử dụng Comparator trong java.
File: SortStudentByGPA.java
package vn.eLib; import java.util.Comparator; /** * SortStudentByGPA class * * @author eLib.vn */ public class SortStudentByGPA implements Comparator < Student > {@Override public int compare(Student student1, Student student2) { if (student1.getGpa() > student2.getGpa()) { return 1; } return - 1; } }5. Tạo lớp SortStudentByName.java
Lớp SortStudentByName implements Comparator được sử dụng để sắp xếp sinh viên tăng dần theo tên.
File: SortStudentByName.java
package vn.eLib; import java.util.Comparator; /** * SortStudentByName class * * @author eLib.vn */ public class SortStudentByName implements Comparator < Student > {@Override public int compare(Student student1, Student student2) { return student1.getName().compareTo(student2.getName()); } }6. Tạo lớp StudentManager.java
Lớp này cung cấp các phương thức để thêm, sửa, xóa, sắp xếp và hiển thị sinh viên.
package vn.eLib; import java.util.Collections; import java.util.List; import java.util.Scanner; /** * StudentManager class * * @author eLib.vn */ public class StudentManager { public static Scanner scanner = new Scanner(System. in ); private List < Student > studentList; private StudentDao studentDao; /** * init StudentDao object and * read list student when init StudentManager object */ public StudentManager() { studentDao = new StudentDao(); studentList = studentDao.read(); } /** * add student to studentList * * @param student */ public void add() { int id = (studentList.size() > 0) ? (studentList.size() + 1) : 1; System.out.println("student id = " + id); String name = inputName(); byte age = inputAge(); String address = inputAddress(); float gpa = inputGpa(); Student student = new Student(id, name, age, address, gpa); studentList.add(student); studentDao.write(studentList); } /** * edit student by id * * @param id */ public void edit(int id) { boolean isExisted = false; int size = studentList.size(); for (int i = 0; i < size; i++) { if (studentList.get(i).getId() == id) { isExisted = true; studentList.get(i).setName(inputName()); studentList.get(i).setAge(inputAge()); studentList.get(i).setAddress(inputAddress()); studentList.get(i).setGpa(inputGpa()); break; } } if (!isExisted) { System.out.printf("id = %d not existed.\n", id); } else { studentDao.write(studentList); } } /** * delete student by id * * @param id: student id */ public void delete(int id) { Student student = null; int size = studentList.size(); for (int i = 0; i < size; i++) { if (studentList.get(i).getId() == id) { student = studentList.get(i); break; } } if (student != null) { studentList.remove(student); studentDao.write(studentList); } else { System.out.printf("id = %d not existed.\n", id); } } /** * sort student by name */ public void sortStudentByName() { Collections.sort(studentList, new SortStudentByName()); } /** * sort student by id */ public void sortStudentByGPA() { Collections.sort(studentList, new SortStudentByGPA()); } /** * show list student to screen */ public void show() { for (Student student: studentList) { System.out.format("%5d | ", student.getId()); System.out.format("%20s | ", student.getName()); System.out.format("%5d | ", student.getAge()); System.out.format("%20s | ", student.getAddress()); System.out.format("%10.1f%n", student.getGpa()); } } /** * input student id * * @return student id */ public int inputId() { System.out.print("Input student id: "); while (true) { try { int id = Integer.parseInt((scanner.nextLine())); return id; } catch(NumberFormatException ex) { System.out.print("invalid! Input student id again: "); } } } /** * input student name * * @return student name */ private String inputName() { System.out.print("Input student name: "); return scanner.nextLine(); } /** * input student address * * @return student address */ private String inputAddress() { System.out.print("Input student address: "); return scanner.nextLine(); } /** * input student age * * @return student age */ private byte inputAge() { System.out.print("Input student age: "); while (true) { try { byte age = Byte.parseByte((scanner.nextLine())); if (age < 0 && age > 100) { throw new NumberFormatException(); } return age; } catch(NumberFormatException ex) { System.out.print("invalid! Input student id again: "); } } } /** * input student gpa * * @return gpa */ private float inputGpa() { System.out.print("Input student gpa: "); while (true) { try { float gpa = Float.parseFloat((scanner.nextLine())); if (gpa < 0.0 && gpa > 10.0) { throw new NumberFormatException(); } return gpa; } catch(NumberFormatException ex) { System.out.print("invalid! Input student age again: "); } } } // getter && setter public List < Student > getStudentList() { return studentList; } public void setStudentList(List < Student > studentList) { this.studentList = studentList; } }7. Tạo lớp Main.java
Lớp này chứa phương thức main(), định nghĩa menu.
package vn.eLib; import java.util.Scanner; /** * Main class * * @author eLib.vn */ public class Main { public static Scanner scanner = new Scanner(System. in ); public static void main(String[] args) { String choose = null; boolean exit = false; StudentManager studentManager = new StudentManager(); int studentId; // show menu showMenu(); while (true) { choose = scanner.nextLine(); switch (choose) { case "1": studentManager.add(); break; case "2": studentId = studentManager.inputId(); studentManager.edit(studentId); break; case "3": studentId = studentManager.inputId(); studentManager.delete(studentId); break; case "4": studentManager.sortStudentByGPA(); break; case "5": studentManager.sortStudentByName(); break; case "6": studentManager.show(); break; case "0": System.out.println("exited!"); exit = true; break; default: System.out.println("invalid! please choose action in below menu:"); break; } if (exit) { break; } // show menu showMenu(); } } /** * create menu */ public static void showMenu() { System.out.println("-----------menu------------"); System.out.println("1. Add student."); System.out.println("2. Edit student by id."); System.out.println("3. Delete student by id."); System.out.println("4. Sort student by gpa."); System.out.println("5. Sort student by name."); System.out.println("6. Show student."); System.out.println("0. exit."); System.out.println("---------------------------"); System.out.print("Please choose: "); } }8. Run bài tập quản lý sinh viên trong java
Kết quả:
-----------menu------------ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. exit. --------------------------- Please choose: 1 student id = 1 Input student name: Vu Van Vinh Input student age: 22 Input student address: Ha Noi Input student gpa: 8 -----------menu------------ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. exit. --------------------------- Please choose: 1 student id = 2 Input student name: Pham Ba Hao Input student age: 21 Input student address: Vinh Phuc Input student gpa: 9 -----------menu------------ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. exit. --------------------------- Please choose: 6 1 | Vu Van Vinh | 22 | Ha Noi | 8.0 2 | Pham Ba Hao | 21 | Vinh Phuc | 9.0 -----------menu------------ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. exit. --------------------------- Please choose: 5 -----------menu------------ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. exit. --------------------------- Please choose: 6 2 | Pham Ba Hao | 21 | Vinh Phuc | 9.0 1 | Vu Van Vinh | 22 | Ha Noi | 8.0 -----------menu------------ 1. Add student. 2. Edit student by id. 3. Delete student by id. 4. Sort student by gpa. 5. Sort student by name. 6. Show student. 0. exit. --------------------------- Please choose: 0 exited!Trên đây là bài tập Java quản lý sinh viên trong Java. Nếu bạn quan tâm bạn có thể mở rộng bài này bằng cách: dựng giao diện cho bài này bằng Swing, JavaFX hoặc JSP, Sử dụng cơ sở dữ liệu để lưu sinh viên, thêm chức năng tìm kiếm sinh viên. Chúc các bạn thành công!
Như vậy là chúng ta đã hoàn thành nội dung kiến thức trong phần "Bài tập Java". Để củng cố và nắm vững nội dung đã học, mời bạn cùng thử sức với "Bộ Câu hỏi Trắc Nghiệm Online Ôn Tập Lập trình Java có đáp án chi tiết"
Trắc Nghiệm
Tham khảo thêm
- doc Bài tập tự luận java cơ bản có lời giải
- docx Câu hỏi trắc nghiệm ôn tập Java cơ bản
- docx Ngân hàng câu hỏi trắc nghiệm Java có đáp án
- doc Bài tập String trong Java có lời giải
- doc Bài tập Array trong Java có lời giải
- doc Bài tập về các thuật toán sắp xếp trong Java có lời giải
CÓ THỂ BẠN QUAN TÂM
- Bài 2: Đối tượng, mục đích và yêu cầu về phương pháp học tập, nghiên cứu những nguyên lý cơ bản của chủ nghĩa Mác - Lênin
- Từ vựng tiếng Anh chủ đề các loài động vật
- Từ vựng tiếng Anh chủ đề các loài cây
- Từ vựng tiếng Anh chủ đề các loại trái cây
- Từ vựng tiếng Anh chủ đề các loại rau củ
- Từ vựng tiếng Anh chủ đề phong cảnh
- Từ vựng tiếng Anh chủ đề thời tiết
- Từ vựng tiếng Anh chủ đề môi trường
- Bài 1: Đối tượng nghiên cứu
- Từ vựng tiếng Anh chủ đề màu sắc
Giới thiệu về Lập trình Java
- 1 Lịch sử và tổng quan về ngôn ngữ Java
- 2 Chương trình Java đầu tiên Hello World
- 3 Cài đặt môi trường và thiết lập Path trong Java
- 4 Cú pháp Java cơ bản
- 5 Giới thiệu JDK, JRE và JVM trong Java
- 6 Các kiểu biến trong Java
- 7 Kiểu dữ liệu trong Java
- 8 Toán tử trong Java
- 9 Các loại vòng lặp trong Java
- 10 Lệnh IF/ELSE, Lệnh SWITCH/CASE trong Java
- 11 Đối tượng Number trong Java
- 12 Đối tượng Character trong Java
Khái niệm Hướng đối tượng
- 1 Đối tượng và lớp (class) trong Java
- 2 Phương thức trong Java
- 3 Nạp chồng phương thức trong Java
- 4 Constructor trong Java
- 5 Từ khóa static trong Java
- 6 Từ khóa this trong Java
- 7 Tính kế thừa trong Java trong Java
- 8 Ghi đè phương thức trong Java
- 9 Kiểu trả về covariant trong Java
- 10 Từ khóa super trong Java
- 11 Từ khóa final trong Java
- 12 Tính đa hình trong Java
- 13 Gắn kết tĩnh và Gắn kết động trong Java
- 14 Toán tử instanceof trong Java
- 15 Tính trừu tượng trong Java
- 16 Abstract Class trong Java
- 17 Interface trong Java
- 18 Phân biệt lớp abstract và Interface trong Java
- 19 Package trong Java
- 20 Các kiểu Modifie trong Java
- 21 Access Modifier trong Java
- 22 Non Access Modifier trong Java
- 23 Tính đóng gói trong Java
- 24 Lớp Object trong Java
- 25 Nhân bản đối tượng trong Java
- 26 Mảng (Array) trong Java
- 27 Lớp Wrapper trong Java
- 28 Truyền giá trị và tham chiếu trong Java
- 29 Từ khóa strictfp trong Java
- 30 Regular Expression trong Java
File và I/O trong Java
- 1 File và I/O trong Java
- 2 ByteArrayInputStream trong Java
- 3 DataInputStream trong Java
- 4 ByteArrayOutputStream trong Java
- 5 DataOutputStream trong Java
- 6 Lớp File trong Java
- 7 Lớp FileReader trong Java
- 8 Lớp FileWriter trong Java
String trong Java
- 1 String trong Java
- 2 Immutable String trong Java
- 3 So sánh chuỗi trong Java
- 4 Nối chuỗi trong Java
- 5 Chuỗi con trong Java
- 6 Phương thức của lớp String trong Java
- 7 Lớp StringBuffer trong Java
- 8 StringBuilder trong Java
- 9 So sánh lớp String và StringBuffer trong Java
- 10 So sánh lớp StringBuffer và StringBuilder trong Java
- 11 String toString() trong Java
- 12 Lớp StringTokenizer trong Java
Xử lý ngoại lệ (Exception Handling)
- 1 Exception trong Java
- 2 Khối try-catch trong Java
- 3 Khối finally trong Java
- 4 Từ khóa throw trong Java
- 5 Từ khóa throws trong Java
- 6 ExceptionHandling và Ghi đè phương thức trong Java
- 7 Custom Exception trong Java
Cấu trúc dữ liệu trong Java
- 1 Cấu trúc dữ liệu trong Java
- 2 Enum trong Java
- 3 Lớp BitSet trong Java
- 4 Lớp Vector trong Java
- 5 Lớp Stack trong Java
- 6 Lớp Dictionary trong Java
- 7 Lớp Hashtable trong Java
- 8 Lớp Properties trong Java
Collection trong Java
- 1 Collection trong Java
- 2 Collection Interface trong Java
- 3 List Interface trong Java
- 4 Set Interface trong Java
- 5 SortedSet Interface trong Java
- 6 Map Interface trong Java
- 7 Map.Entry Interface trong Java
- 8 SortedMap Interface trong Java
- 9 Lớp LinkedList trong Java
- 10 Lớp ArrayList trong Java
- 11 Lớp HashSet trong Java
- 12 Lớp LinkedHashSet trong Java
- 13 Lớp TreeSet trong Java
- 14 Lớp HashMap trong Java
- 15 Lớp TreeMap trong Java
- 16 Thuật toán Collection trong Java
- 17 Sử dụng Iterator trong Java
- 18 Sử dụng Comparator trong Java
Java Nâng cao
- 1 Generic trong Java
- 2 Serialization trong Java
- 3 Lập trình mạng Socket trong Java
- 4 Gửi Email trong Java
- 5 Thread trong Java
- 6 Applet trong Java
- 7 Tạo Javadoc
Bài tập Java
- 1 Bài tập tự luận java cơ bản có lời giải
- 2 Câu hỏi trắc nghiệm Java cơ bản
- 3 Ngân hàng câu hỏi trắc nghiệm Java có đáp án
- 4 Bài tập String trong Java
- 5 Bài tập Array trong Java
- 6 Bài tập về các thuật toán sắp xếp trong Java
- 7 Bài tập tự luận Java nâng cao
Tài liệu tham khảo Java
- 1 Tài liệu tham khảo về Java
Thông báo
Bạn vui lòng đăng nhập trước khi sử dụng chức năng này Bỏ qua Đăng nhập ATNETWORK ATNETWORK
Từ khóa » Bài Tập Oop Java Nâng Cao
-
Bài Tập Java Có Lời Giải Cơ Bản đến Nâng Cao - Freetuts
-
Bài Tập Java OOP: Chương Trình Quản Lý Album CD - Code24h
-
Bài Tập Java Nâng Cao Có Lời Giải?
-
Bài Tập Java Cơ Bản đến Nâng Cao Cho Người Mới - CodeGym
-
Tổng Hợp Bài Tập Lập Trình Hướng đối Tượng Trong Java - Deft Blog
-
[Top Bình Chọn] - Bài Tập Java Hướng đối Tượng - Trần Gia Hưng
-
[PDF] Lập Trình Java Nâng Cao - Soict
-
Bài Tập Java Có Lời Giải - Học Lập Trình Java - Viettuts
-
Bài Tập Tổng Hợp 20 Bài Tập OOP Với Ngôn Ngữ Java Có Giải Chi ...
-
Bài Tập Lập Trình Hướng đối Tượng Java Cơ Bản | Mê-mê.vn
-
Khoá Học Lập Trình Java Core Nâng Cao - GokiSoft
-
Bài Tập Java OOP: Quản Lý Tài Khoản Ngân Hàng Hướng đối Tượng
-
(PDF) Bài Tập Java Có Lời Giải
