using System; using System.Collections.Generic; class NGUOI { public string Hoten { get; set; } public string Diachi { get; set; } public int Tuoi { get; set; } public NGUOI() { Hoten = ""; Diachi = ""; Tuoi = 0; } public NGUOI(string hoten, string diachi, int tuoi) { Hoten = hoten; Diachi = diachi; Tuoi = tuoi; } public virtual void Input() { Console.Write("Nhap ho ten: "); Hoten = Console.ReadLine(); Console.Write("Nhap dia chi: "); Diachi = Console.ReadLine(); Console.Write("Nhap tuoi: "); Tuoi = int.Parse(Console.ReadLine()); } // Không cần xuống dòng ở đây để tránh lệch cột public virtual void Show() { Console.Write("{0,-20}{1,-10}{2,-30}", Hoten, Tuoi, Diachi); } } class SINHVIEN : NGUOI { public double DiemTB { get; set; } public SINHVIEN() : base() { DiemTB = 0; } public SINHVIEN(string hoten, string diachi, int tuoi, double diemtb) : base(hoten, diachi, tuoi) { DiemTB = diemtb; } public override void Input() { base.Input(); Console.Write("Nhap diem trung binh: "); DiemTB = double.Parse(Console.ReadLine()); } // Gộp toàn bộ việc in trên cùng 1 dòng public override void Show() { base.Show(); Console.WriteLine("{0,-10:F2}", DiemTB); } } class Program { static void Main() { Console.Write("Nhap so luong sinh vien: "); int n = int.Parse(Console.ReadLine()); List danhSach = new List(); for (int i = 0; i < n; i++) { Console.WriteLine($"\nNhap thong tin sinh vien thu {i + 1}:"); SINHVIEN sv = new SINHVIEN(); sv.Input(); danhSach.Add(sv); } Console.WriteLine("\n=== Danh sach sinh vien vua nhap ==="); Console.WriteLine("{0,-20}{1,-10}{2,-30}{3,-10}", "Ho ten", "Tuoi", "Dia chi", "Diem TB"); Console.WriteLine(new string('-', 70)); foreach (SINHVIEN sv in danhSach) { sv.Show(); } Console.ReadLine(); } }