TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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 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:

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

ketqua baitap1LinkedList PNG

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top