Bài tập sort algorithms

Cho **mảng một chiều quản lý thông tin của các sinh viên** trong một lớp học (tối đa 50 sinh viên). Mỗi sinh viên gồm các thông tin: **MSSV**, **họ và tên**, **giới tính**, **địa chỉ** và **điểm trung bình**.
 avatar
user_1746670
c_cpp
a month ago
3.9 kB
6
Indexable
Never
#include <iostream>
#include <vector>
#include <string>
using namespace std;

// Struct để lưu thông tin của một sinh viên
struct SinhVien {
    string MSSV;
    string hoTen;
    string gioiTinh;
    string diaChi;
    double diemTB;
};

// Hàm nhập thông tin sinh viên vào danh sách
void nhapSinhVien(SinhVien &sv) {
    cout << "Nhap MSSV: ";
    cin >> sv.MSSV;
    cin.ignore(); // Loại bỏ ký tự newline sau MSSV
    cout << "Nhap Ho va Ten: ";
    getline(cin, sv.hoTen);
    cout << "Nhap Gioi Tinh: ";
    getline(cin, sv.gioiTinh);
    cout << "Nhap Dia Chi: ";
    getline(cin, sv.diaChi);
    cout << "Nhap Diem Trung Binh: ";
    cin >> sv.diemTB;
}

// Hàm in thông tin của một sinh viên
void inSinhVien(const SinhVien &sv) {
    cout << "MSSV: " << sv.MSSV << endl;
    cout << "Ho va Ten: " << sv.hoTen << endl;
    cout << "Gioi Tinh: " << sv.gioiTinh << endl;
    cout << "Dia Chi: " << sv.diaChi << endl;
    cout << "Diem Trung Binh: " << sv.diemTB << endl;
}

// Hàm nhập danh sách sinh viên
void nhapDanhSach(vector<SinhVien> &danhSach) {
    int n;
    cout << "Nhap so luong sinh vien: ";
    cin >> n;
    cin.ignore(); // Loại bỏ ký tự newline sau số lượng
    danhSach.resize(n);
    for (int i = 0; i < n; ++i) {
        cout << "Nhap thong tin sinh vien thu " << i + 1 << ": " << endl;
        nhapSinhVien(danhSach[i]);
    }
}

// Hàm in danh sách sinh viên
void inDanhSach(const vector<SinhVien> &danhSach) {
    for (const auto &sv : danhSach) {
        inSinhVien(sv);
        cout << "--------------------------" << endl;
    }
}

// Hàm xuất thông tin của sinh viên có mã số x
void xuatSinhVienTheoMSSV(const vector<SinhVien> &danhSach, const string &MSSV) {
    bool found = false;
    for (const auto &sv : danhSach) {
        if (sv.MSSV == MSSV) {
            inSinhVien(sv);
            found = true;
            break;
        }
    }
    if (!found) {
        cout << "Khong tim thay sinh vien co MSSV: " << MSSV << endl;
    }
}

// Hàm sắp xếp danh sách sinh viên theo điểm trung bình tăng dần
void sapXepTheoDiemTB(vector<SinhVien> &danhSach) {
    int n = danhSach.size();
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++) {
            if (danhSach[j].diemTB < danhSach[minIdx].diemTB) {
                minIdx = j;
            }
        }
        if (minIdx != i) {
            swap(danhSach[i], danhSach[minIdx]);
        }
    }
}

// Hàm sắp xếp danh sách sinh viên theo họ và tên tăng dần
void sapXepTheoHoTen(vector<SinhVien> &danhSach) {
    int n = danhSach.size();
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++) {
            if (danhSach[j].hoTen < danhSach[minIdx].hoTen) {
                minIdx = j;
            }
        }
        if (minIdx != i) {
            swap(danhSach[i], danhSach[minIdx]);
        }
    }
}

int main() {
    vector<SinhVien> danhSach;
    string MSSV;

    // Nhập danh sách sinh viên
    nhapDanhSach(danhSach);

    // In danh sách sinh viên
    cout << "\nDanh sach sinh vien:" << endl;
    inDanhSach(danhSach);

    // Xuất thông tin của sinh viên có mã số x
    cout << "\nNhap MSSV can tim: ";
    cin >> MSSV;
    xuatSinhVienTheoMSSV(danhSach, MSSV);

    // Sắp xếp danh sách sinh viên theo điểm trung bình
    sapXepTheoDiemTB(danhSach);
    cout << "\nDanh sach sinh vien sau khi sap xep theo diem trung binh:" << endl;
    inDanhSach(danhSach);

    // Sắp xếp danh sách sinh viên theo họ và tên
    sapXepTheoHoTen(danhSach);
    cout << "\nDanh sach sinh vien sau khi sap xep theo ho va ten:" << endl;
    inDanhSach(danhSach);

    return 0;
}
Leave a Comment