Thứ Hai, 6 tháng 5, 2024

44. Chương trình tào lao phiên bản 3 trong C++ phần 1

Chúng ta đi từ một chương trình tào lao được thêm mắm muối từ chương trình Hello World! trong C++ tới chương trình tào lao phiên bản 2 với vòng lặp, mảng....trong phần trước, và giờ đây chúng ta chuẩn bị viết một chương trình cũng...tào lao, nhưng là phiên bản 3 bằng ngôn ngữ C++.

"Trái tim" của chương trình tào lao phiên bản 2 là một hàm với tham số là một mảng tên của sinh viên. Tuy nhiên, nó chỉ là một mảng họ tên sinh viên, ngoài ra không có bất cứ thông tin gì khác. Trong phiên bản 3, chúng ta cần sử dụng mảng cấu trúc để lưu giữ thông tin của sinh viên, ngoài tên còn có địa chỉ, email, điểm...



Hình dung chương trình


  • Chúng ta sẽ cần khai báo một cấu trúc SinhVien, gọi là struct SinhVien
  • Chúng ta sẽ cần một hàm để nhập mảng cấu trúc, gọi là nhapSinhVien()
  • Chúng ta sẽ cần một hàm để xuất mảng cấu trúc, gọi là xuatSinhVien()


Vẫn với phong cách...tào lao, trước hết chúng ta sẽ xây móng của chương trình.

Đây là những thủ tục đầu tiên


 #include <iostream>
 #include <string>

using namespace std;

    int main()
    {
       
        return 0;
    }



Sử dụng IDE Online để chạy thử

 


Để tiếp tục, chúng ta sẽ hình dung về các hàm:

Hàm đầu tiên là hàm để xuất mảng cấu trúc. Nó gần giống hàm in danh sách sinh viên chúng ta đã làm. Tuy nhiên, chúng ta không thể làm vậy ở phần này. 

Trong phiên bản 2, chúng ta chỉ tạo một hàm in danh sách với tham số là mảng danh sách sinh viên. Chúng ta không cần tạo hàm nhập mảng tên sinh viên. Với kiểu dữ liệu cấu trúc thì ta cần tách biệt thành hai phần: Nhập và Xuất, hơn nữa như trình bày bên dưới, mỗi hàm Xuất và Nhập cũng cần tách nhỏ ra làm hai phần, có nghĩa là thực tế chúng ta sẽ viết 4 hàm riêng biệt dành cho việc nhập, xuất dữ liệu.



Chúng ta ví dụ với một cấu trúc tương tự thế này:

struct NhanVien thongTinNhanVien[50] = {
               "Tran Van A", "tranvanA@email.com","123 so 2, Da Nang" ....,
               "Le Van B", "levanB@email.com","456 so 3, Da Nang" .....
               "Nguyen Thi C", "nguyenthiC@email.com", "789 so 4, Da Nang" .....
};

Sẽ rất khó để viết một hàm in toàn bộ thông tin như vậy, chúng ta nên xây dựng 2 hàm dùng cho việc này: Hàm thứ nhất để in thông tin cho 1 biến struct, hàm thứ hai in ra toàn bộ mảng struct.


Hàm thứ hai hoạt động tương tự như hàm in danh sách sinh viên trong phiên bản 2, nghĩa là sử dụng vòng lặp For. Ví dụ có 50 sinh viên thì nó sẽ lặp lại 50 lần lệnh in của HÀM THỨ NHẤT.
Hàm thứ nhất có nhiệm vụ in thông tin của MỘT SINH VIÊN. Ví dụ:

 "Tran Van A", "tranvanA@email.com","123 dương so 2, Da Nang" ....


Hàm tiếp theo là hàm nhập mảng cấu trúc. Tương tự như với hàm xuất thông tin, chúng ta cũng sẽ tách việc nhập thông tin thành hai hàm. Hàm thứ nhất là hàm nhập thông tin cho 1 sinh viên và hàm thứ hai hàm nhập danh sách sẽ gọi hàm thứ nhất để nhập toàn bộ danh sách. Hàm thứ hai cũng sẽ sử dụng vòng lặp For. Ví dụ có 50 sinh viên thì nó sẽ lặp lại 50 lần lệnh nhập thông tin của HÀM THỨ NHẤT.

Hàm thứ nhất sẽ nhập thông tin bằng lệnh getline()

Bây giờ chúng ta sẽ bắt đầu bước tiếp theo.

Đầu tiên quan trọng nhất đó là khai báo cấu trúc:

struct SinhVien{
    string hoten;
    string email;
    string diaChi;
    string chuyenNganh;
    double diemTrungBinh;
};



Chúng ta cũng sẽ dùng lệnh typedef struct SinhVien SinhVien; bên dưới khai báo cấu trúc

Còn đây là khai báo hàm, đặt trên main(). Ta sẽ cần khai báo 4 hàm, tất cả đều là void vì chúng ta không cần giá trị trả về.


void nhap(SinhVien x);
void nhapSinhVien(SinhVien a[], int n);
void xuat(SinhVien x);
void xuatSinhVien(SinhVien a[], int n);



Vẫn sử dụng IDE Online, bấm Run để chạy chương trình, mọi thứ ổn.

 


 

 Chúng ta thêm 4 định nghĩa hàm bên dưới main()

void nhap(SinhVien x){
}
void nhapSinhVien(SinhVien a[], int n){
}
void xuat(SinhVien x){
}
void xuatSinhVien(SinhVien a[], int n){
}

Chương trình tào lao phiên bản 3 sẽ có bộ khung thế này

#include <iostream>
#include <string>

using namespace std;
struct SinhVien{
    string hoten;
    string email;
    string diaChi;
    string chuyenNganh;
    double diemTrungBinh;
};

typedef struct SinhVien SinhVien;

void nhap(SinhVien x);
void nhapSinhVien(SinhVien a[], int n);
void xuat(SinhVien x);
void xuatSinhVien(SinhVien a[], int n);


int main()
{
    

    return 0;
}


void nhap(SinhVien x){
}
void nhapSinhVien(SinhVien a[], int n){
}
void xuat(SinhVien x){
}
void xuatSinhVien(SinhVien a[], int n){
}


Bấm Run để chạy thử

 


 

 

 

Phần tiếp theo

 

Phần trước

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Không có nhận xét nào:

Đăng nhận xét