Nội dung chính
- Bài tập quản lý sinh viên trong C#
- Lời giải
- Tạo class sinh viên
- Tạo class quản lý sinh viên
- 1. Hàm GenerateID()
- 2. Hàm trả về số lượng sinh viên SoLuongSinhVien()
- 3. Hàm nhập thông tin sinh viên
- 4. Hàm cập nhật thông tin sinh viên
- 5. Hàm xóa sinh viên theo ID
- 6. Hàm tìm kiếm sinh viên theo tên
- 7. Hàm tính điểm trung bình và xếp loại học lực
- 8. Hàm sắp xếp danh sách sinh viên theo điểm trung bình
- 9. Hàm sắp xếp danh sách sinh viên theo tên
- 10. Hàm hiện thị danh sách sinh viên ra màn hình
- 11. Class QuanLySinhVien.cs chứa toàn bộ các hàm trên
- Hàm main của chương trình quản lý sinh viên trong C#
- Run chương trình quản lý sinh viên trong C#
- Download chương trình quản lý sinh viên trong C#
Bài tập quản lý sinh viên trong C#
Đề bài: Viết chương trình quản lý sinh viên trong C#. Mỗi đối tượng sinh viên có các thuộc tính sau: id, tên, giới tính, tuổi, điểm toán, điểm lý, điểm hóa, điểm trung bình và học lực.
Id là mã sinh viên tự động tăng.
Điểm trung bình là giá trị trung bình của 3 môn toán, lý và hóa.
Học lực được tính như sau:
- Giỏi: nếu điểm trung bình lớn hơn hoặc bằng 8.
- Khá: nếu điểm trung bình nhỏ hơn 8 và lớn hơn hoặc bằng 6.5.
- Trung Bình: nếu điểm trung bình nhỏ hơn 6.5 và lớn hơn hoặc bằng 5.
- Yếu: nếu điểm trung bình nhỏ hơn 5.
Yêu cầu: tạo ra một menu với các chức năng sau:
- 1. Thêm sinh viên.
- 2. Cập nhật thông tin sinh viên bởi ID.
- 3. Xóa sinh viên bởi ID.
- 4. Tìm kiếm sinh viên theo tên.
- 5. Sắp xếp sinh viên theo điểm trung bình (GPA).
- 6. Sắp xếp sinh viên theo tên.
- 6. Sắp xếp sinh viên theo ID.
- 8. Hiển thị danh sách sinh vien.
Lời giải
Chúng ta sẽ tạo ra một class để định nghĩa sinh viên, và một class để quản lý danh sách sinh viên nhập từ bàn phím. Sau đây là các bước cụ thể để cài đặt chương trình quản lý sinh viên trong C# bằng lập trình hướng đối tượng.
Tạo class sinh viên
Chúng ta sẽ tạo một class sinh viên như sau, DiemTB sẽ được tính bằng trung bình của các môn toán, lý và hóa. HocLuc sẽ được tính toán dựa vào DiemTB như yêu cầu của bài toán.
Class SinhVien.cs
namespace BaiTapQLSV { class SinhVien { public int ID { get; set; } public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public double DiemToan {get; set; } public double DiemLy { get; set; } public double DiemHoa { get; set; } public double DiemTB { get; set; } public string HocLuc { get; set; } } }
Tạo class quản lý sinh viên
Dầu tiên, chúng ta nên tạo ra một biến để lưu trữ danh sách sinh viên, bạn có thể tham khảo một trong các Collections trong C#, ở đây chúng tôi sử dụng List.
private List<SinhVien> ListSinhVien = null;
Sau đây là danh sách các hàm mà chúng ta sẽ sử dụng trong chương trình quản lý sinh viên:
private int GenerateID() public int SoLuongSinhVien(); public void NhapSinhVien(); public void UpdateSinhVien(int ID) public void SortByID() public void SortByName() public void SortByDiemTB() public SinhVien FindByID(int ID) public List<SinhVien> FindByName(String keyword) public bool DeleteById(int ID) private void TinhDTB(SinhVien sv) private void XepLoaiHocLuc(SinhVien sv) public void ShowSinhVien(List<SinhVien> listSV) public List<SinhVien> getListSinhVien()
1. Hàm GenerateID()
Yêu cầu của bài toán là id của sinh viên tự động tăng.
Nên chúng ta sẽ tạo hàm này để lấy ra id lớn nhất của danh sách sinh viên.
Thân hàm GenerateID():
private int GenerateID() { int max = 1; if (ListSinhVien != null && ListSinhVien.Count > 0) { max = ListSinhVien[0].ID; foreach (SinhVien sv in ListSinhVien) { if (max < sv.ID) { max = sv.ID; } } max++; } return max; }
2. Hàm trả về số lượng sinh viên SoLuongSinhVien()
Hàm này trả về số lượng sinh viện hiện tại trong ListSinhVien:
public int SoLuongSinhVien() { int Count = 0; if (ListSinhVien != null) { Count = ListSinhVien.Count; } return Count; }
3. Hàm nhập thông tin sinh viên
Hàm này được sử dụng để thêm mới sinh viên vào danh sách sinh viên ListSinhVien:
Thân hàm NhapSinhVien():
public void NhapSinhVien() { // Khởi tạo một sinh viên mới SinhVien sv = new SinhVien(); sv.ID = GenerateID(); Console.Write("Nhap ten sinh vien: "); sv.Name = Convert.ToString(Console.ReadLine()); Console.Write("Nhap gioi tinh sinh vien: "); sv.Sex = Convert.ToString(Console.ReadLine()); Console.Write("Nhap tuoi sinh vien: "); sv.Age = Convert.ToInt32(Console.ReadLine()); Console.Write("Nhap diem toan: "); sv.DiemToan = Convert.ToDouble(Console.ReadLine()); Console.Write("Nhap diem ly: "); sv.DiemLy = Convert.ToDouble(Console.ReadLine()); Console.Write("Nhap diem hoa: "); sv.DiemHoa = Convert.ToDouble(Console.ReadLine()); TinhDTB(sv); XepLoaiHocLuc(sv); ListSinhVien.Add(sv); }
4. Hàm cập nhật thông tin sinh viên
Hàm này được sử dụng để cập nhật thông tin sinh viên theo ID:
Trong trường hợp bạn không nhập gì cho các thuộc tính của sinh viên thì thuộc tính đó không được thay đổi.
Thân hàm UpdateSinhVien():
public void UpdateSinhVien(int ID) { // Tìm kiếm sinh viên trong danh sách ListSinhVien SinhVien sv = FindByID(ID); // Nếu sinh viên tồn tại thì cập nhập thông tin sinh viên if (sv != null) { Console.Write("Nhap ten sinh vien: "); string name = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật tên if (name != null && name.Length > 0) { sv.Name = name; } Console.Write("Nhap gioi tinh sinh vien: "); // Nếu không nhập gì thì không cập nhật giới tính string sex = Convert.ToString(Console.ReadLine()); if (sex != null && sex.Length > 0) { sv.Sex = sex; } Console.Write("Nhap tuoi sinh vien: "); string ageStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật tuổi if (ageStr != null && ageStr.Length > 0) { sv.Age = Convert.ToInt32(ageStr); } Console.Write("Nhap diem toan: "); string diemToanStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật điểm toán if (diemToanStr != null && diemToanStr.Length > 0) { sv.DiemToan = Convert.ToDouble(diemToanStr); } Console.Write("Nhap diem ly: "); string diemLyStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật điểm lý if (diemLyStr != null && diemLyStr.Length > 0) { sv.DiemLy = Convert.ToDouble(diemLyStr); } Console.Write("Nhap diem hoa: "); string diemHoaStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật điểm hóa if (diemHoaStr != null && diemHoaStr.Length > 0) { sv.DiemHoa = Convert.ToDouble(diemHoaStr); } TinhDTB(sv); XepLoaiHocLuc(sv); } else { Console.WriteLine("Sinh vien co ID = {0} khong ton tai.", ID); } }
5. Hàm xóa sinh viên theo ID
Hàm này được sử dụng để xóa sinh viên khỏi danh sách theo ID. Tình sinh viên có ID đã cho trong danh sách, nếu tồn tại thì thực hiện xóa sinh viên.
Thân hàm DeleteById():
/** * Hàm xóa sinh viên theo ID */ public bool DeleteById(int ID) { bool IsDeleted = false; // tìm kiếm sinh viên theo ID SinhVien sv = FindByID(ID); if (sv != null) { IsDeleted = ListSinhVien.Remove(sv); } return IsDeleted; }
6. Hàm tìm kiếm sinh viên theo tên
Hàm này được sử dụng để tìm kiếm sinh viên trong danh sách theo tên. Không phân biệt chữ hoa, chữ thường.
Thân hàm FindByName():
/** * Hàm tìm kiếm sinh viên theo tên * Trả về một danh sách sinh viên */ public List<SinhVien> FindByName(String keyword) { List<SinhVien> searchResult = new List<SinhVien>(); if (ListSinhVien != null && ListSinhVien.Count > 0) { foreach (SinhVien sv in ListSinhVien) { if (sv.Name.ToUpper().Contains(keyword.ToUpper())) { searchResult.Add(sv); } } } return searchResult; }
7. Hàm tính điểm trung bình và xếp loại học lực
Thân hàm TinhDTB():
/** * Hàm tính điểm TB cho sinh viên */ private void TinhDTB(SinhVien sv) { double DiemTB = (sv.DiemToan + sv.DiemLy + sv.DiemHoa) / 3; sv.DiemTB = Math.Round(DiemTB, 2, MidpointRounding.AwayFromZero); }
Thân hàm XepLoaiHocLuc():
/** * Hàm xếp loại học lực cho nhân viên */ private void XepLoaiHocLuc(SinhVien sv) { if (sv.DiemTB >= 8) { sv.HocLuc = "Gioi"; } else if (sv.DiemTB >= 6.5) { sv.HocLuc = "Kha"; } else if (sv.DiemTB >= 5) { sv.HocLuc = "Trung Binh"; } else { sv.HocLuc = "Yeu"; } }
8. Hàm sắp xếp danh sách sinh viên theo điểm trung bình
Hàm này được sử dụng để sắp xếp sinh viên theo điểm trung bình theo thứ tự tăng dần.
Thân hàm SortByDiemTB():
/** * Hàm sắp xếp danh sach sinh vien theo điểm TB tăng dần */ public void SortByDiemTB() { ListSinhVien.Sort(delegate (SinhVien sv1, SinhVien sv2) { return sv1.DiemTB.CompareTo(sv2.DiemTB); }); }
9. Hàm sắp xếp danh sách sinh viên theo tên
Hàm này được sử dụng để sắp xếp sinh viên theo tên theo thứ tự tăng dần và không phân biệt chữ hoa, chữ thường.
Thân hàm SortByName():
/** * Hàm sắp xếp danh sach sinh vien theo tên tăng dần */ public void SortByName() { ListSinhVien.Sort(delegate (SinhVien sv1, SinhVien sv2) { return sv1.Name.CompareTo(sv2.Name); }); }
10. Hàm hiện thị danh sách sinh viên ra màn hình
Hàm này được sử dụng để hiện thị danh sách sinh viên ra màn hình.
Thân hàm ShowSinhVien():
/** * Hàm hiển thị danh sách sinh viên ra màn hình console */ public void ShowSinhVien(List<SinhVien> listSV) { // hien thi tieu de cot Console.WriteLine("{0, -5} {1, -20} {2, -5} {3, 5} {4, 5} {5, 5} {6, 5} {7, 10} {8, 10}", "ID", "Name", "Sex", "Age", "Toan", "Ly", "Hoa", "Diem TB", "Hoc Luc"); // hien thi danh sach sinh vien if (listSV != null && listSV.Count > 0) { foreach (SinhVien sv in listSV) { Console.WriteLine("{0, -5} {1, -20} {2, -5} {3, 5} {4, 5} {5, 5} {6, 5} {7, 10} {8, 10}", sv.ID, sv.Name, sv.Sex, sv.Age, sv.DiemToan, sv.DiemLy, sv.DiemHoa, sv.DiemTB, sv.HocLuc); } } Console.WriteLine(); }
11. Class QuanLySinhVien.cs chứa toàn bộ các hàm trên
Class QuanLySinhVien.cs:
using System; using System.Collections.Generic; namespace BaiTapQLSV { class QuanLySinhVien { private List<SinhVien> ListSinhVien = null; public QuanLySinhVien() { ListSinhVien = new List<SinhVien>(); } /** * Hàm tạo ID tăng dần cho nhân viên */ private int GenerateID() { int max = 1; if (ListSinhVien != null && ListSinhVien.Count > 0) { max = ListSinhVien[0].ID; foreach (SinhVien sv in ListSinhVien) { if (max < sv.ID) { max = sv.ID; } } max++; } return max; } public int SoLuongSinhVien() { int Count = 0; if (ListSinhVien != null) { Count = ListSinhVien.Count; } return Count; } public void NhapSinhVien() { // Khởi tạo một sinh viên mới SinhVien sv = new SinhVien(); sv.ID = GenerateID(); Console.Write("Nhap ten sinh vien: "); sv.Name = Convert.ToString(Console.ReadLine()); Console.Write("Nhap gioi tinh sinh vien: "); sv.Sex = Convert.ToString(Console.ReadLine()); Console.Write("Nhap tuoi sinh vien: "); sv.Age = Convert.ToInt32(Console.ReadLine()); Console.Write("Nhap diem toan: "); sv.DiemToan = Convert.ToDouble(Console.ReadLine()); Console.Write("Nhap diem ly: "); sv.DiemLy = Convert.ToDouble(Console.ReadLine()); Console.Write("Nhap diem hoa: "); sv.DiemHoa = Convert.ToDouble(Console.ReadLine()); TinhDTB(sv); XepLoaiHocLuc(sv); ListSinhVien.Add(sv); } public void UpdateSinhVien(int ID) { // Tìm kiếm sinh viên trong danh sách ListSinhVien SinhVien sv = FindByID(ID); // Nếu sinh viên tồn tại thì cập nhập thông tin sinh viên if (sv != null) { Console.Write("Nhap ten sinh vien: "); string name = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật tên if (name != null && name.Length > 0) { sv.Name = name; } Console.Write("Nhap gioi tinh sinh vien: "); // Nếu không nhập gì thì không cập nhật giới tính string sex = Convert.ToString(Console.ReadLine()); if (sex != null && sex.Length > 0) { sv.Sex = sex; } Console.Write("Nhap tuoi sinh vien: "); string ageStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật tuổi if (ageStr != null && ageStr.Length > 0) { sv.Age = Convert.ToInt32(ageStr); } Console.Write("Nhap diem toan: "); string diemToanStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật điểm toán if (diemToanStr != null && diemToanStr.Length > 0) { sv.DiemToan = Convert.ToDouble(diemToanStr); } Console.Write("Nhap diem ly: "); string diemLyStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật điểm lý if (diemLyStr != null && diemLyStr.Length > 0) { sv.DiemLy = Convert.ToDouble(diemLyStr); } Console.Write("Nhap diem hoa: "); string diemHoaStr = Convert.ToString(Console.ReadLine()); // Nếu không nhập gì thì không cập nhật điểm hóa if (diemHoaStr != null && diemHoaStr.Length > 0) { sv.DiemHoa = Convert.ToDouble(diemHoaStr); } TinhDTB(sv); XepLoaiHocLuc(sv); } else { Console.WriteLine("Sinh vien co ID = {0} khong ton tai.", ID); } } /** * Hàm sắp xếp danh sach sinh vien theo ID tăng dần */ public void SortByID() { ListSinhVien.Sort(delegate (SinhVien sv1, SinhVien sv2) { return sv1.ID.CompareTo(sv2.ID); }); } /** * Hàm sắp xếp danh sach sinh vien theo tên tăng dần */ public void SortByName() { ListSinhVien.Sort(delegate (SinhVien sv1, SinhVien sv2) { return sv1.Name.CompareTo(sv2.Name); }); } /** * Hàm sắp xếp danh sach sinh vien theo điểm TB tăng dần */ public void SortByDiemTB() { ListSinhVien.Sort(delegate (SinhVien sv1, SinhVien sv2) { return sv1.DiemTB.CompareTo(sv2.DiemTB); }); } /** * Hàm tìm kiếm sinh viên theo ID * Trả về một sinh viên */ public SinhVien FindByID(int ID) { SinhVien searchResult = null; if (ListSinhVien != null && ListSinhVien.Count > 0) { foreach (SinhVien sv in ListSinhVien) { if (sv.ID == ID) { searchResult = sv; } } } return searchResult; } /** * Hàm tìm kiếm sinh viên theo tên * Trả về một danh sách sinh viên */ public List<SinhVien> FindByName(String keyword) { List<SinhVien> searchResult = new List<SinhVien>(); if (ListSinhVien != null && ListSinhVien.Count > 0) { foreach (SinhVien sv in ListSinhVien) { if (sv.Name.ToUpper().Contains(keyword.ToUpper())) { searchResult.Add(sv); } } } return searchResult; } /** * Hàm xóa sinh viên theo ID */ public bool DeleteById(int ID) { bool IsDeleted = false; // tìm kiếm sinh viên theo ID SinhVien sv = FindByID(ID); if (sv != null) { IsDeleted = ListSinhVien.Remove(sv); } return IsDeleted; } /** * Hàm tính điểm TB cho sinh viên */ private void TinhDTB(SinhVien sv) { double DiemTB = (sv.DiemToan + sv.DiemLy + sv.DiemHoa) / 3; sv.DiemTB = Math.Round(DiemTB, 2, MidpointRounding.AwayFromZero); } /** * Hàm xếp loại học lực cho nhân viên */ private void XepLoaiHocLuc(SinhVien sv) { if (sv.DiemTB >= 8) { sv.HocLuc = "Gioi"; } else if (sv.DiemTB >= 6.5) { sv.HocLuc = "Kha"; } else if (sv.DiemTB >= 5) { sv.HocLuc = "Trung Binh"; } else { sv.HocLuc = "Yeu"; } } /** * Hàm hiển thị danh sách sinh viên ra màn hình console */ public void ShowSinhVien(List<SinhVien> listSV) { // hien thi tieu de cot Console.WriteLine("{0, -5} {1, -20} {2, -5} {3, 5} {4, 5} {5, 5} {6, 5} {7, 10} {8, 10}", "ID", "Name", "Sex", "Age", "Toan", "Ly", "Hoa", "Diem TB", "Hoc Luc"); // hien thi danh sach sinh vien if (listSV != null && listSV.Count > 0) { foreach (SinhVien sv in listSV) { Console.WriteLine("{0, -5} {1, -20} {2, -5} {3, 5} {4, 5} {5, 5} {6, 5} {7, 10} {8, 10}", sv.ID, sv.Name, sv.Sex, sv.Age, sv.DiemToan, sv.DiemLy, sv.DiemHoa, sv.DiemTB, sv.HocLuc); } } Console.WriteLine(); } /* * Hàm trả về danh sách sinh viên hiện tại */ public List<SinhVien> getListSinhVien() { return ListSinhVien; } } }
Hàm main của chương trình quản lý sinh viên trong C#
Hàm main của chúng ta được sử dụng để khởi tạo menu và điều khiển chương trình quản lý sinh viên. Nó được đặt trong class Program:
Class Program.cs:
using System; using System.Collections.Generic; namespace BaiTapQLSV { class Program { static void Main(string[] args) { QuanLySinhVien quanLySinhVien = new QuanLySinhVien(); while (true) { Console.WriteLine("\nCHUONG TRINH QUAN LY SINH VIEN C#"); Console.WriteLine("*************************MENU**************************"); Console.WriteLine("** 1. Them sinh vien. **"); Console.WriteLine("** 2. Cap nhat thong tin sinh vien boi ID. **"); Console.WriteLine("** 3. Xoa sinh vien boi ID. **"); Console.WriteLine("** 4. Tim kiem sinh vien theo ten. **"); Console.WriteLine("** 5. Sap xep sinh vien theo diem trung binh (GPA). **"); Console.WriteLine("** 6. Sap xep sinh vien theo ten. **"); Console.WriteLine("** 7. Sap xep sinh vien theo ID. **"); Console.WriteLine("** 8. Hien thi danh sach sinh vien. **"); Console.WriteLine("** 0. Thoat **"); Console.WriteLine("*******************************************************"); Console.Write("Nhap tuy chon: "); int key = Convert.ToInt32(Console.ReadLine()); switch (key) { case 1: Console.WriteLine("\n1. Them sinh vien."); quanLySinhVien.NhapSinhVien(); Console.WriteLine("\nThem sinh vien thanh cong!"); break; case 2: if (quanLySinhVien.SoLuongSinhVien() > 0) { int id; Console.WriteLine("\n2. Cap nhat thong tin sinh vien. "); Console.Write("\nNhap ID: "); id = Convert.ToInt32(Console.ReadLine()); quanLySinhVien.UpdateSinhVien(id); } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 3: if (quanLySinhVien.SoLuongSinhVien() > 0) { int id; Console.WriteLine("\n3. Xoa sinh vien."); Console.Write("\nNhap ID: "); id = Convert.ToInt32(Console.ReadLine()); if (quanLySinhVien.DeleteById(id)) { Console.WriteLine("\nSinh vien co id = {0} da bi xoa.", id); } } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 4: if (quanLySinhVien.SoLuongSinhVien() > 0) { Console.WriteLine("\n4. Tim kiem sinh vien theo ten."); Console.Write("\nNhap ten de tim kiem: "); string name = Convert.ToString(Console.ReadLine()); List<SinhVien> searchResult = quanLySinhVien.FindByName(name); quanLySinhVien.ShowSinhVien(searchResult); } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 5: if (quanLySinhVien.SoLuongSinhVien() > 0) { Console.WriteLine("\n5. Sap xep sinh vien theo diem trung binh (GPA)."); quanLySinhVien.SortByDiemTB(); quanLySinhVien.ShowSinhVien(quanLySinhVien.getListSinhVien()); } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 6: if (quanLySinhVien.SoLuongSinhVien() > 0) { Console.WriteLine("\n6. Sap xep sinh vien theo ten."); quanLySinhVien.SortByName(); quanLySinhVien.ShowSinhVien(quanLySinhVien.getListSinhVien()); } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 7: if (quanLySinhVien.SoLuongSinhVien() > 0) { Console.WriteLine("\n6. Sap xep sinh vien theo ID."); quanLySinhVien.SortByID(); quanLySinhVien.ShowSinhVien(quanLySinhVien.getListSinhVien()); } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 8: if (quanLySinhVien.SoLuongSinhVien() > 0) { Console.WriteLine("\n7. Hien thi danh sach sinh vien."); quanLySinhVien.ShowSinhVien(quanLySinhVien.getListSinhVien()); } else { Console.WriteLine("\nSanh sach sinh vien trong!"); } break; case 0: Console.WriteLine("\nBan da chon thoat chuong trinh!"); return; default: Console.WriteLine("\nKhong co chuc nang nay!"); Console.WriteLine("\nHay chon chuc nang trong hop menu."); break; } } } } }
Run chương trình quản lý sinh viên trong C#
Chạy chương trình C trên cho kết quả ban đầu như sau:
Nhập một vài sinh viên vào hệ thống:
Hiển thị danh sách sinh viên:
Tìm kiếm sinh viên theo tên:
Sắp xếp sinh viên theo điểm trung bình:
Sắp xếp sinh viên theo tên:
Sắp xếp sinh viên theo ID:
Xóa sinh viên theo ID: