Java - Viết chương trình quản lý danh sách thông tin sinh viên.
Viết chương trình thực hiện các yêu cầu sau:
- Khai báo một danh sách liên kết lưu trữ danh sách thông tin sinh viên. Thông tin của 1 sinh viên bao gồm tên và điểm của sinh viên đó.
- Thêm sinh viên vào trong danh sách vừa tạo. Việc nhập sinh viên sẽ dừng lại khi người dùng nhập họ tên sinh viên là một chuỗi rỗng.
- Đếm số sinh viên phải thi lại và hiển thị thông tin của những sinh viên đó ra. Sinh viên phải thi lại khi điểm của sinh viên đó <= 5.
- Hiển thị các sinh viên có điểm cao nhất. Nếu có nhiều sinh viên bằng điểm thì phải hiển thị tất cả những sinh viên đó ra.
- Tìm kiếm sinh viên theo tên và hiển thị thông tin sinh viên vừa tìm được.
Bài giải
-------------------- ######## --------------------
Trong bài tập này, tôi sẽ sử dụng phối hợp các kiến thức về ép kiểu dữ liệu, vòng lặp for, while, chuỗi, mảng và danh sách liên kết để giải. Bài tập này tuy hay nhưng khá phức tạp. Các bạn cố gắng đọc thật kỹ để hiểu được nhé!

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
Bài giải
public static void main(String[] args) {
String tenSinhVien, thongTin = null;
String arrThongTin[]; // mảng lưu trữ thông tin sinh viên
double diemSinhVien;
// lưu trữ danh sách sinh viên
LinkedList<String> danhSachSV = new LinkedList<>();
// lưu trữ danh sách sinh viên thi lại
LinkedList<String> svThiLai = new LinkedList<>();
// lưu trữ danh sách sinh viên có điểm cao nhất
LinkedList<String> svDiemCao = new LinkedList<>();
// lưu trữ danh sách sinh viên cần tìm
LinkedList<String> svCanTim = new LinkedList<>();
Scanner scanner = new Scanner(System.in);
// thêm danh sách sinh viên
// nếu tên sinh viên khác rỗng thì còn nhập
// ngược lại không nhập nữa
do {
System.out.println("Nhập vào tên sinh viên: ");
tenSinhVien = scanner.nextLine();
if (!tenSinhVien.isEmpty()) {
System.out.println("Nhập vào điểm sinh viên: ");
diemSinhVien = Double.parseDouble(scanner.nextLine());
thongTin = tenSinhVien + "\t" + diemSinhVien;
danhSachSV.add(thongTin);
}
} while (!tenSinhVien.isEmpty()); // khi tên còn khác rỗng thì còn nhập
// hiển thị số sinh viên
// và thông tin của các sinh viên có trong danh sách
System.out.println("Số sinh viên có trong danh sách = " + (danhSachSV.size()));
System.out.println("Thông tin của các sinh viên vừa nhập là: ");
System.out.println("Tên sinh viên\t Điểm");
Iterator<String> iterator = danhSachSV.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// đếm số sinh viên phải thi lại
// và lưu thông tin những sinh viên đó vào trong svThiLai
for (int i = 0; i < danhSachSV.size(); i++) {
// lấy sinh viên tại vị trí i trong danhSachSV
String sv = danhSachSV.get(i);
// chuyển đổi chuỗi sv thành mảng
// mảng arrThongTin sẽ chứa tên và điểm của sinh viên đó
arrThongTin = sv.split("\t");
// arrThongTin[1] sẽ tương ứng với điểm của sinh viên
// vì nó có kiểu là String nên phải ép kiểu về Double
// sau đó gán vào biến point
double point = Double.parseDouble(arrThongTin[1]);
// nếu point <= 5 thì sẽ thêm sinh viên đó
// vào trong svThiLai
if (point <= 5) {
svThiLai.add(sv);
}
}
if (svThiLai.isEmpty()) {
System.out.println("Không có sinh viên phải thi lại!");
} else {
System.out.println("Số sinh viên phải thi lại = " + (svThiLai.size()));
System.out.println("Thông tin của các sinh viên phải thi lại là: ");
System.out.println("Tên sinh viên\t Điểm");
iterator = svThiLai.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
double maxTemp = 0; // số điểm lớn nhất
int i = 0; // chỉ số của phần tử
// tìm điểm lớn nhất trong danh sách
while (i < danhSachSV.size()) {
arrThongTin = danhSachSV.get(i).split("\t");
// nếu điểm của sinh viên có chỉ số i trong danhSachSV
// lớn hơn hoặc bằng số điểm lớn nhất maxTemp
// thì sẽ gán maxTemp bằng điểm của sinh viên đó
// và tăng i lên 1 sau đó quay lại vòng lặp while
if (Double.parseDouble(arrThongTin[1]) >= maxTemp) {
maxTemp = Double.parseDouble(arrThongTin[1]);
}
i++;
}
// tìm sinh viên có điểm cao nhất
i = 0;
while (i < danhSachSV.size()) {
arrThongTin = danhSachSV.get(i).split("\t");
// duyệt trong danhSachSV
// nếu có sinh viên nào có số điểm bằng với maxTemp
// thì sẽ thêm sinh viên đó vào trong svDiemCao
if (Double.parseDouble(arrThongTin[1]) == maxTemp) {
svDiemCao.add(danhSachSV.get(i));
}
i++;
}
System.out.println("Thông tin của các sinh viên có điểm cao nhất là: ");
System.out.println("Tên sinh viên\t Điểm");
iterator = svDiemCao.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// Tìm kiếm theo tên sinh viên
System.out.println("Nhập tên sinh viên cần tìm: ");
String search = scanner.nextLine();
i = 0;
while (i < danhSachSV.size()) {
// tách thông tin của sinh viên thứ i trong danhSachSV
// thành 2 mảng lưu trữ tên và điểm số sinh viên đó
arrThongTin = danhSachSV.get(i).split("\t");
// lấy tên sinh viên trong mảng arrThongTin
// tên sẽ tương ứng với phần tử thứ 0 trong mảng
tenSinhVien = arrThongTin[0];
// so sánh tên sinh viên cần tìm với tenSinhVien
// nếu trùng nhau thì sẽ thêm sinh viên đó vào trong svCanTim
if (search.equalsIgnoreCase(tenSinhVien)) {
svCanTim.add(danhSachSV.get(i));
}
i++; // tăng i lên 1 và quay lại đầu vòng lặp
}
System.out.println("Thông tin của các sinh viên tên là " + search + ": ");
System.out.println("Tên sinh viên\t Điểm");
iterator = svCanTim.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
Kết quả sau khi biên dịch chương trình:
Câu hỏi thường gặp liên quan:
- Java - Viết chương trình quản lý danh sách thông tin sinh viên.
- Java - Viết chương trình tính trung bình cộng của các số chẵn có trong 1 danh sách liên kết.
- Java - Viết chương trình đảo ngược các phần tử số nguyên dương có trong 1 danh sách liên kết.
- Java - Viết chương trình tương tác với một danh sách liên kết chứa các số nguyên dương.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng