3.1. Biên dịch và thực thi chương trình
Trong Visual Studio, quá trình này được tự động hóa cao:
Biên dịch (Build): Là quá trình dịch mã nguồn C# (dễ đọc,
.cs) sang mã Ngôn ngữ Trung gian (MSIL) và tạo ra tệp thực thi (.exehoặc.dll).Cách làm: Menu
Build->Build Solution(hoặc nhấnShift + Ctrl + B).
Thực thi (Run/Debug): Là quá trình chạy tệp
.exevừa biên dịch.Cách làm: Menu
Debug->Start Debugging(NhấnF5). Visual Studio sẽ tự động Build (nếu cần) rồi mới chạy, đồng thời kích hoạt trình gỡ lỗi (debugger).Menu
Debug->Start Without Debugging(NhấnCtrl + F5). Chương trình chạy nhanh hơn và tự động dừng (pause) khi kết thúc (đối với Console App).
3.2. Giải thích các không gian tên (Namespaces)
Khái niệm: Namespace là một cách để tổ chức và nhóm các lớp (class) có liên quan lại với nhau, tránh xung đột tên. Hãy coi nó như “họ” (ví dụ: Nguyễn Văn A, Trần Văn A).
Từ khóa
using: Dùng để “nhập khẩu” một namespace vào tệp mã nguồn, cho phép bạn sử dụng tên các lớp trong namespace đó mà không cần gõ tên đầy đủ.Ví dụ:
C#// Không dùng 'using', phải gõ tên đầy đủ System.Console.WriteLine("Hello"); //----------------------------------------------- // Dùng 'using' using System; // ... // Có thể gọi trực tiếp Console.WriteLine("Hello");Các namespace thường dùng:
System: Chứa các lớp cơ bản nhất (ví dụ:Console,String,Int32).System.Windows.Forms: Chứa các lớp cho ứng dụng Windows Forms (ví dụ:Form,Button,TextBox).System.Data: Chứa các lớp chung để truy cập dữ liệu.System.Data.SqlClient: Chứa các lớp chuyên dụng để làm việc với SQL Server.
3.3. Các dạng của phương thức Main
Phương thức Main là điểm khởi đầu của ứng dụng Console. Nó có thể có một số dạng:
Không tham số, không trả về:
static void Main()Có tham số, không trả về:
static void Main(string[] args)Không tham số, có trả về (int):
static int Main()Có tham số, có trả về (int):
static int Main(string[] args)
Tham số
string[] args: Là một mảng (array) các chuỗi, dùng để nhận các tham số (arguments) được truyền vào khi chạy chương trình từ dòng lệnh.Giá trị trả về
int: Dùng để trả về một mã trạng thái cho hệ điều hành (quy ước: 0 là chạy thành công, số khác 0 là có lỗi).Ví dụ (Dạng 2):
C#using System; namespace ConsoleArgs { class Program { static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Không có tham số nào được truyền vào."); } else { Console.WriteLine("Các tham số đã truyền vào:"); foreach (string s in args) { Console.WriteLine(s); } } } } } // Nếu chạy từ cmd: C:\> MyProgram.exe admin 123 // Kết quả 'args' sẽ là mảng ["admin", "123"]
3.4. Định dạng kết quả của cửa sổ màn hình
Trong ứng dụng Console, ta dùng lớp Console để tương tác:
Console.WriteLine(noidung): Innoidungra màn hình, sau đó tự động xuống dòng.Console.Write(noidung): Innoidungra màn hình, nhưng con trỏ vẫn ở cuối dòng.Định dạng chuỗi (String Formatting):
C#string ten = "An"; int tuoi = 20; // Cách 1: Nối chuỗi Console.WriteLine("Tên: " + ten + ", Tuổi: " + tuoi); // Cách 2: Định dạng (giống C) Console.WriteLine("Tên: {0}, Tuổi: {1}", ten, tuoi); // Cách 3: Nội suy chuỗi (String Interpolation - C# 6.0+, nên biết) // Console.WriteLine($"Tên: {ten}, Tuổi: {tuoi}");
3.5. Chú thích trong chương trình C#
Chú thích (Comment) là các dòng chữ bị trình biên dịch bỏ qua, dùng để giải thích mã nguồn.
Chú thích một dòng: Bắt đầu bằng
//C#// Đây là chú thích một dòng int x = 10; // Gán giá trị 10 cho xChú thích nhiều dòng: Bắt đầu bằng
/*và kết thúc bằng*/C#/* Đây là một khối chú thích Có thể viết trên nhiều dòng. */
3.6. Khai báo chỉ thị Region
Công dụng: Dùng để nhóm các đoạn mã lệnh lại với nhau và thu gọn (collapse) chúng trong Visual Studio, giúp mã nguồn trông gọn gàng hơn, dễ điều hướng hơn.
Cú pháp:
C#using System; namespace MyRegion { class MyClass { #region Các biến thành viên (Fields) // Khối này có thể thu gọn lại private int _id; private string _name; #endregion #region Các phương thức (Methods) public void Method1() { // ... } public void Method2() { // ... } #endregion } }
Bài tập 3.1: Viết chương trình Console TinhToan.
- Tạo dự án Console Application tên BaiTap3_TinhToan.
- Chương trình yêu cầu người dùng nhập vào 2 số nguyên (dùng ReadLine() và int.Parse()).
- Tính và in ra màn hình Tổng, Hiệu, Tích, Thương của 2 số đó.
- Sử dụng Write và Console.WriteLine để định dạng output cho đẹp.
- Sử dụng chú thích để giải thích các bước.
Hướng dẫn
Bước 1: Tạo dự án
Phần này tương tự Bài tập 1.2, nhưng với tên dự án mới.
Mở Visual Studio 2008.
Đi tới menu File -> New -> Project….
Trong cửa sổ “New Project”:
Bên trái, chọn Visual C#.
Bên phải (Templates), chọn Console Application.
Ở ô Name: (Tên) bên dưới, gõ chính xác
BaiTap3_TinhToan.Nhấn OK.
Visual Studio sẽ tạo dự án và mở tệp Program.cs cho bạn.
Bước 2: Viết mã nguồn
Bây giờ, bạn hãy thay thế toàn bộ mã nguồn trong tệp Program.cs bằng đoạn mã dưới đây. Đoạn mã này đã bao gồm tất cả các yêu cầu: nhập liệu, tính toán, in kết quả đẹp và có chú thích.
C#
using System;
namespace BaiTap3_TinhToan
{
class Program
{
static void Main(string[] args)
{
--- PHẦN 1: NHẬP LIỆU ---
Yêu cầu nhập số thứ nhất
Console.Write: In ra màn hình và KHÔNG xuống dòng
Console.Write("Nhap so thu nhat a = ");
Console.ReadLine(): Đọc 1 dòng người dùng nhập (kết quả là chuỗi string)
int.Parse(): Chuyển chuỗi vừa đọc sang kiểu số nguyên (int)
int a = int.Parse(Console.ReadLine());
Yêu cầu nhập số thứ hai
Console.Write("Nhap so thu hai b = ");
int b = int.Parse(Console.ReadLine()); // Viết gộp 2 lệnh
--- PHẦN 2: TÍNH TOÁN ---
Tính toán các phép toán cơ bản
int tong = a + b;
int hieu = a - b;
int tich = a * b;
Lưu ý: Phải ép kiểu (double) cho 1 trong 2 số
để phép chia ra kết quả số thực (ví dụ: 5 / 2 = 2.5)
Nếu không ép kiểu (5 / 2), kết quả sẽ là 2 (chia lấy phần nguyên)
double thuong = (double)a / b;
--- PHẦN 3: XUẤT KẾT QUẢ ---
Console.WriteLine: In ra màn hình và TỰ ĐỘNG xuống dòng
\n là ký tự đặc biệt để xuống thêm 1 dòng, cho đẹp
Console.WriteLine("\n--- KET QUA ---");
Sử dụng định dạng {0}, {1}, {2}
{0} sẽ được thay bằng biến đầu tiên (a)
{1} sẽ được thay bằng biến thứ hai (b)
{2} sẽ được thay bằng biến thứ ba (tong)
Console.WriteLine("{0} + {1} = {2}", a, b, tong);
Console.WriteLine("{0} - {1} = {2}", a, b, hieu);
Console.WriteLine("{0} * {1} = {2}", a, b, tich);
Console.WriteLine("{0} / {1} = {2}", a, b, thuong);
Dừng màn hình để xem kết quả (giống Bài 1.3)
Console.ReadKey();
}
}
}
Bước 3: Chạy và kiểm thử chương trình
Sau khi đã gõ (hoặc dán) mã nguồn, nhấn phím F5 để biên dịch và chạy.
Một cửa sổ Console (màu đen) sẽ hiện ra và hiển thị:
Nhap so thu nhat a =Bạn hãy gõ một số (ví dụ:
10) rồi nhấn Enter.Chương trình sẽ tiếp tục hiển thị:
Nhap so thu hai b =Bạn hãy gõ số thứ hai (ví dụ:
4) rồi nhấn Enter.Chương trình sẽ tính toán và in ra toàn bộ kết quả:
--- KET QUA --- 10 + 4 = 14 10 - 4 = 6 10 * 4 = 40 10 / 4 = 2.5Chương trình sẽ dừng lại (do
Console.ReadKey()). Bạn nhấn phím bất kỳ để đóng lại.
Bài tập 3.2: Thêm #region cho bài 3.1.
- Bọc phần nhập dữ liệu trong một #region Nhap lieu.
- Bọc phần tính toán trong một #region Tinh toan.
- Bọc phần xuất kết quả trong một #region Xuat ket qua.
- Thử thu gọn các region này lại.
Hướng dẫn
Bước 1: Mở lại dự án BaiTap3_TinhToan
Mở Visual Studio 2008.
Mở tệp
Program.cscủa dự ánBaiTap3_TinhToanmà bạn vừa làm ở Bài 3.1.
Bước 2: Thêm các chỉ thị #region và #endregion
Bạn hãy sửa lại tệp Program.cs của mình, thêm các dòng #region [Tên vùng] và #endregion vào đúng vị trí như sau:
C#
using System;
namespace BaiTap3_TinhToan
{
class Program
{
static void Main(string[] args)
{
#region Nhap lieu
// --- PHẦN 1: NHẬP LIỆU ---
// Yêu cầu nhập số thứ nhất
Console.Write("Nhap so thu nhat a = ");
int a = int.Parse(Console.ReadLine());
// Yêu cầu nhập số thứ hai
Console.Write("Nhap so thu hai b = ");
int b = int.Parse(Console.ReadLine());
#endregion // Kết thúc vùng Nhap lieu
#region Tinh toan
// --- PHẦN 2: TÍNH TOÁN ---
int tong = a + b;
int hieu = a - b;
int tich = a * b;
double thuong = (double)a / b;
#endregion // Kết thúc vùng Tinh toan
#region Xuat ket qua
// --- PHẦN 3: XUẤT KẾT QUẢ ---
Console.WriteLine("\n--- KET QUA ---");
Console.WriteLine("{0} + {1} = {2}", a, b, tong);
Console.WriteLine("{0} - {1} = {2}", a, b, hieu);
Console.WriteLine("{0} * {1} = {2}", a, b, tich);
Console.WriteLine("{0} / {1} = {2}", a, b, thuong);
Console.ReadKey();
#endregion // Kết thúc vùng Xuat ket qua
}
}
}
Bước 3: Thử thu gọn các region
Bây giờ là phần thú vị nhất:
Sau khi gõ xong, bạn hãy nhìn sang lề trái của cửa sổ soạn thảo mã (code editor).
Bạn sẽ thấy các dấu trừ (
-) nhỏ xuất hiện ngay bên cạnh các dòng#regionmà bạn vừa gõ.Nhấp chuột vào dấu
-bên cạnh dòng#region Nhap lieu.Kết quả: Toàn bộ khối mã nhập liệu sẽ được “thu gọn” (collapse) lại, chỉ hiển thị dòng tiêu đề
#region Nhap lieu ...và dấu-sẽ biến thành dấu cộng (+).Làm tương tự để thu gọn vùng
Tinh toanvàXuat ket qua.Nhấp lại vào dấu
+để “mở rộng” (expand) khối mã đó ra như cũ.
Bài tập 3.3: Nâng cấp bài TinhToan (sử dụng tham số args)
Mục tiêu: Bài tập này giúp bạn hiểu rõ mục tiêu 3.3 (Các dạng của phương thức Main). Thay vì để chương trình hỏi người dùng (dùng Console.ReadLine()), chúng ta sẽ “truyền” 2 con số vào chương trình ngay lúc nó khởi động, thông qua tham số string[] args.
Hướng dẫn thực hiện
Bước 1: Mở dự án và tệp Program.cs
Mở Visual Studio 2008.
Mở lại dự án
BaiTap3_TinhToan(từ Bài tập 3.1).Trong cửa sổ Solution Explorer (bên phải), nhấp đúp vào tệp
Program.csđể mở cửa sổ soạn thảo mã.
Bước 2: Viết mã nguồn (Chi tiết từng bước)
Chúng ta sẽ sửa lại nội dung bên trong phương thức static void Main(string[] args).
2.1. Thêm khối kiểm tra tham số (Quan trọng)
Mục tiêu: Trước khi làm bất cứ điều gì, chúng ta phải kiểm tra xem người dùng có truyền đủ 2 tham số (2 con số) vào hay không.
Hành động: Gõ đoạn mã này ngay bên dưới dòng
static void Main(string[] args) {C#// Kiểm tra xem số lượng tham số truyền vào (args.Length) có ít hơn 2 không if (args.Length < 2) { // Nếu không đủ, in thông báo lỗi Console.WriteLine("Loi: Ban phai truyen vao 2 con so."); Console.WriteLine("Vi du cach dung: BaiTap3_TinhToan.exe 10 5"); // Dừng màn hình để người dùng đọc lỗi Console.ReadKey(); // Thoát khỏi chương trình (thoát khỏi hàm Main) return; }
2.2. Xóa phần nhập liệu cũ (Xóa Console.ReadLine)
Mục tiêu: Chúng ta không cần hỏi người dùng nữa, nên phải xóa code cũ.
Hành động: Tìm và xóa 4 dòng code dùng để hỏi và đọc số a, b:
C#// XÓA NHỮNG DÒNG NÀY: // Console.Write("Nhap so thu nhat a = "); // int a = int.Parse(Console.ReadLine()); // Console.Write("Nhap so thu hai b = "); // int b = int.Parse(Console.ReadLine());
2.3. Thêm phần lấy dữ liệu từ args
Mục tiêu: Thay thế code vừa xóa bằng code mới, lấy dữ liệu từ mảng
args.Hành động: Gõ đoạn mã này vào vị trí bạn vừa xóa (ngay bên dưới khối
ifbạn gõ ở 2.1).C#// Lấy 2 tham số đầu tiên và chuyển sang kiểu số // args[0] là tham số thứ nhất (dưới dạng chuỗi) // args[1] là tham số thứ hai (dưới dạng chuỗi) Console.WriteLine("Dang lay tham so tu dong lenh..."); int a = int.Parse(args[0]); int b = int.Parse(args[1]);
2.4. (Tùy chọn) Sửa lại phần xuất kết quả (cho rõ ràng)
Mục tiêu: Sửa lại lời dẫn của kết quả để biết rằng đây là dữ liệu tự động.
Hành động: Tìm đến phần “XUẤT KẾT QUẢ” và sửa lại như sau:
C#// --- PHẦN 3: XUẤT KẾT QUẢ --- Console.WriteLine("\n--- KET QUA (Tu dong) ---"); Console.WriteLine("Tham so 1 (a) = " + a); Console.WriteLine("Tham so 2 (b) = " + b); // Phần tính toán và in kết quả {0} + {1} ... giữ nguyên Console.WriteLine("\n--- TINH TOAN ---"); Console.WriteLine("{0} + {1} = {2}", a, b, tong); // ... (các dòng in Hiệu, Tích, Thương giữ nguyên) ...
2.5. Mã nguồn hoàn chỉnh (Để đối chiếu)
Sau khi hoàn thành các bước trên, toàn bộ tệp Program.cs của bạn sẽ trông như thế này:
using System;
namespace BaiTap3_TinhToan
{
class Program
{
// args là một mảng chuỗi, chứa các tham số được truyền từ bên ngoài
static void Main(string[] args)
{
#region Kiem tra dieu kien
// Kiểm tra xem người dùng có truyền đủ 2 tham số không
if (args.Length < 2)
{
Console.WriteLine("Loi: Ban phai truyen vao 2 con so.");
Console.WriteLine("Vi du: BaiTap3_TinhToan.exe 10 5");
Console.ReadKey(); // Dừng lại để đọc lỗi
return; // Thoát chương trình
}
#endregion
#region Nhap lieu (Tu dong tu args)
// Lấy 2 tham số đầu tiên và chuyển sang kiểu số
// Không cần Console.ReadLine() nữa
int a = int.Parse(args[0]);
int b = int.Parse(args[1]);
#endregion
#region Tinh toan
// --- PHẦN 2: TÍNH TOÁN ---
int tong = a + b;
int hieu = a - b;
int tich = a * b;
double thuong = (double)a / b;
#endregion
#region Xuat ket qua
// --- PHẦN 3: XUẤT KẾT QUẢ ---
Console.WriteLine("--- KET QUA (Tu dong) ---");
Console.WriteLine("Tham so 1 (a) = " + a);
Console.WriteLine("Tham so 2 (b) = " + b);
Console.WriteLine("\n--- TINH TOAN ---");
Console.WriteLine("{0} + {1} = {2}", a, b, tong);
Console.WriteLine("{0} - {1} = {2}", a, b, hieu);
Console.WriteLine("{0} * {1} = {2}", a, b, tich);
Console.WriteLine("{0} / {1} = {2}", a, b, thuong);
Console.ReadKey();
#endregion
}
}
}
Bước 3: Cấu hình “Command line arguments” (Quan trọng)
Bây giờ, chúng ta phải “truyền” 2 con số vào mảng args để chương trình chạy thử.
Trong cửa sổ Solution Explorer (bên phải), nhấp chuột phải vào dự án
BaiTap3_TinhToan(dòng chữ in đậm).Chọn Properties (dòng cuối cùng).
Một cửa sổ mới mở ra. Hãy tìm và nhấp vào tab Debug (Gỡ lỗi) ở bên trái.
Bạn sẽ thấy một ô tên là Command line arguments: (Tham số dòng lệnh).
Gõ 2 con số bạn muốn tính vào ô này, cách nhau bằng một khoảng trắng. Ví dụ:
10 4Nhấn
Ctrl + Sđể lưu lại (hoặc nhấn nút Save trên thanh công cụ) rồi đóng cửa sổ Properties.
Bước 4: Chạy và Quan sát
Bây giờ, hãy nhấn phím F5.
Chương trình sẽ chạy mà không hỏi bạn nhập bất cứ thứ gì.
Nó sẽ lấy 2 số
10và4bạn vừa gõ trong Properties để tính toán và in kết quả ra ngay lập tức:--- KET QUA (Tu dong) --- Tham so 1 (a) = 10 Tham so 2 (b) = 4 --- TINH TOAN --- 10 + 4 = 14 10 - 4 = 6 10 * 4 = 40 10 / 4 = 2.5
Thêm một đoạn văn bản ở đây. Nhấp vào ô văn bản để tùy chỉnh nội dung, phong cách phông chữ và màu sắc của đoạn văn của bạn.
Bài tập 3.4: In hoá đơn
Mục tiêu: Bài tập này giúp bạn hiểu rõ mục tiêu 3.4 (Định dạng kết quả của cửa sổ màn hình). Bạn sẽ học cách định dạng căn lề (trái, phải) bằng Console.WriteLine để tạo ra một bảng thông tin ngay ngắn, thay vì chỉ in nối tiếp.
Hướng dẫn thực hiện
Bước 1: Tạo dự án
Trước tiên, chúng ta cần một dự án Console mới.
Mở Visual Studio 2008.
Chọn File -> New -> Project….
Chọn Visual C# (bên trái) và Console Application (bên phải).
Đặt tên (Name) là:
BaiTap3_HoaDonNhấn OK.
Bước 2: Viết mã nguồn (Chi tiết từng bước)
Bây giờ, chúng ta sẽ xây dựng tệp Program.cs từng phần một.
2.1. Mở tệp Program.cs và Chuẩn bị “Bộ khung”
Trong cửa sổ Solution Explorer (bên phải), hãy nhấp đúp vào tệp
Program.cs.Xóa toàn bộ mã lệnh có sẵn.
Gõ (hoặc dán) cấu trúc cơ bản của một chương trình. Đây là “bộ khung” của chúng ta:
C#
using System; namespace BaiTap3_HoaDon { class Program { static void Main(string[] args) { // Chúng ta sẽ viết code vào ĐÂY } } }
2.2. Khai báo Dữ liệu mẫu (Bên trong Main)
Mục tiêu: Tạo một số dữ liệu (biến) để chúng ta có thứ để in ra.
Viết vào bên trong
Main:C#
// --- DỮ LIỆU MẪU --- string sp1 = "Ban phim co"; int sl1 = 2; double gia1 = 750000; string sp2 = "Chuot quang"; int sl2 = 3; double gia2 = 120000; string sp3 = "Man hinh LCD"; int sl3 = 1; double gia3 = 3500000;
2.3. In Tiêu đề Hóa đơn và Dấu gạch ngang
Mục tiêu: In ra các dòng chữ đơn giản để trang trí.
Viết ngay bên dưới Dữ liệu mẫu:
C#
// --- IN HÓA ĐƠN --- Console.WriteLine("--- HOA DON BAN LE ---"); Console.WriteLine("====================================================");
2.4. In Tiêu đề Bảng (Phần quan trọng nhất)
Mục tiêu: In ra dòng “Tên Sản Phẩm”, “Số Lượng”, “Đơn Giá” được căn lề thẳng hàng.
Viết ngay bên dưới:
C#
// --- TIÊU ĐỀ BẢNG --- // Cú pháp: {Index, Alignment} // {0, -20}: Lấy biến index 0, căn lề TRÁI (dấu âm), 20 ký tự. // {1, 10}: Lấy biến index 1, căn lề PHẢI (dấu dương), 10 ký tự. // {2, 15}: Lấy biến index 2, căn lề PHẢI (dấu dương), 15 ký tự. Console.WriteLine("{0, -20} {1, 10} {2, 15}", "Ten San Pham", "So Luong", "Don Gia"); Console.WriteLine("----------------------------------------------------");Giải thích:
{0, -20}: Lấy biến đầu tiên ("Ten San Pham") và căn trái (dấu-) trong một khu vực rộng 20 ký tự.{1, 10}: Lấy biến thứ hai ("So Luong") và căn phải trong một khu vực rộng 10 ký tự.{2, 15}: Lấy biến thứ ba ("Don Gia") và căn phải trong một khu vực rộng 15 ký tự.
2.5. In Dòng dữ liệu sản phẩm (Áp dụng định dạng)
Mục tiêu: In dữ liệu của 3 sản phẩm, áp dụng đúng định dạng căn lề như Tiêu đề Bảng.
Viết ngay bên dưới:
C#
// --- IN DỮ LIỆU SẢN PHẨM (Áp dụng định dạng tương tự) --- // :N0 (hoặc :n0) là định dạng số, thêm dấu phẩy ngăn cách (ví dụ: 750,000) Console.WriteLine("{0, -20} {1, 10} {2, 15:N0}", sp1, sl1, gia1); Console.WriteLine("{0, -20} {1, 10} {2, 15:N0}", sp2, sl2, gia2); Console.WriteLine("{0, -20} {1, 10} {2, 15:N0}", sp3, sl3, gia3);Giải thích
{2, 15:N0}:{2, 15}: Vẫn là căn lề phải 15 ký tự.:N0: Đây là cú pháp “định dạng số” (Number Format),Nlà có dấu phẩy ngăn cách,0là không lấy số thập phân (ví dụ:750000sẽ thành750,000).
2.6. In Phần tổng cộng (Tính toán và định dạng)
Mục tiêu: Tính tổng tiền và in ra, cũng phải căn lề.
Viết ngay bên dưới:
C#
Console.WriteLine("===================================================="); // Tính tổng (đơn giản) double tongTien = (sl1 * gia1) + (sl2 * gia2) + (sl3 * gia3); // {0, 36:N0}: Căn phải 36 ký tự (20 + 10 + 15 = 45, trừ đi "Tong cong: " 11 ký tự) // Bạn có thể phải tinh chỉnh số 36 một chút Console.WriteLine("Tong cong: {0, 36:N0} VND", tongTien);
2.7. Dừng màn hình
Mục tiêu: Ngăn cửa sổ console tắt ngay lập tức.
Viết làm dòng cuối cùng (trước dấu
}củaMain):C#
Console.ReadKey();
Mã nguồn hoàn chỉnh (Để đối chiếu)
Sau khi ghép tất cả các bước nhỏ ở trên lại, tệp Program.cs của bạn sẽ trông như thế này:
C#
using System;
namespace BaiTap3_HoaDon
{
class Program
{
static void Main(string[] args)
{
// --- DỮ LIỆU MẪU ---
string sp1 = "Ban phim co";
int sl1 = 2;
double gia1 = 750000;
string sp2 = "Chuot quang";
int sl2 = 3;
double gia2 = 120000;
string sp3 = "Man hinh LCD";
int sl3 = 1;
double gia3 = 3500000;
// --- IN HÓA ĐƠN ---
Console.WriteLine("--- HOA DON BAN LE ---");
Console.WriteLine("====================================================");
// --- TIÊU ĐỀ BẢNG ---
// Cú pháp: {Index, Alignment}
// {0, -20}: Lấy biến index 0 (Ten SP), căn lề TRÁI (dấu âm), 20 ký tự.
// {1, 10}: Lấy biến index 1 (So Luong), căn lề PHẢI (dấu dương), 10 ký tự.
// {2, 15}: Lấy biến index 2 (Don Gia), căn lề PHẢI (dấu dương), 15 ký tự.
Console.WriteLine("{0, -20} {1, 10} {2, 15}", "Ten San Pham", "So Luong", "Don Gia");
Console.WriteLine("----------------------------------------------------");
// --- IN DỮ LIỆU SẢN PHẨM (Áp dụng định dạng tương tự) ---
// :N0 (hoặc :n0) là định dạng số, thêm dấu phẩy ngăn cách (ví dụ: 750,000)
Console.WriteLine("{0, -20} {1, 10} {2, 15:N0}", sp1, sl1, gia1);
Console.WriteLine("{0, -20} {1, 10} {2, 15:N0}", sp2, sl2, gia2);
Console.WriteLine("{0, -20} {1, 10} {2, 15:N0}", sp3, sl3, gia3);
Console.WriteLine("====================================================");
// Tính tổng (đơn giản)
double tongTien = (sl1 * gia1) + (sl2 * gia2) + (sl3 * gia3);
Console.WriteLine("Tong cong: {0, 36:N0} VND", tongTien);
// Dừng màn hình
Console.ReadKey();
}
}
}
Bước 3: Chạy và Quan sát kết quả
Nhấn phím F5.
Chương trình sẽ chạy và hiển thị một bảng hóa đơn được căn lề thẳng hàng và các con số được định dạng dấu phẩy rất đẹp mắt.
--- HOA DON BAN LE --- ==================================================== Ten San Pham So Luong Don Gia ---------------------------------------------------- Ban phim co 2 750,000 Chuot quang 3 120,000 Man hinh LCD 1 3,500,000 ==================================================== Tong cong: 5,360,000 VND
