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**.user_1746670
c_cpp
a year ago
3.9 kB
13
Indexable
#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;
}
Editor is loading...
Leave a Comment