Danh sách sinh vên cài đặt bằng mảng với các chức năng cơ bản
#include iostream
#include stdio.h
using namespace std;
#define N 50
typedef struct SinhVien {
char HoTen[30];
int NamSinh;
float DiemTB;
};
typedef struct List {
SinhVien SV[N];
int Size;
};
bool KiemTraDay(List L) {
if (L.Size == N) return true;
else return false;
}
// hàm nhập thông tin cho 1 sinh viên
void NhapSV(SinhVien &x) {
cin.ignore();
cout << "Ho ten: ";
cin.getline(x.HoTen, 30);
cout << "Nam sinh: ";
cin >> x.NamSinh;
cout << "Diem tb: ";
cin >> x.DiemTB;
cout << "------------------------------------" << endl;
}
// hàm xuất thông tin cho 1 sinh viên
void XuatSV(SinhVien x) {
cout << "Ho ten: " << x.HoTen << endl;
cout << "Nam sinh: " << x.NamSinh << endl;
cout << "Diem tb: " << x.DiemTB << endl;
cout << "-------------------------------------" << endl;
}
// hàm nhập n sinh viên
void NhapDanhSach(List& L) {
for (int i = 0; i < L.Size; i++) {
cout << "Thong tin sinh vien thu " << i + 1 << endl;
NhapSV(L.SV[i]);
}
}
// hàm xuất n sinh viên
void XuatDanhSach(List L) {
cout << "---------- DANH SACH SINH VIEN ----------" << endl;
for (int i = 0; i < L.Size; i++) {
XuatSV(L.SV[i]);
}
}
// thêm 1 sinh viên vào vị trí thứ k
void ThemBatKy(List &L, SinhVien x, int k) {
if (KiemTraDay(L)) cout << "Danh sach day. " << endl;
else {
if (k < 1 || k > L.Size + 1) cout << "vi tri khong hop le" << endl;
else {
for (int i = L.Size; i > k; i--) {
L.SV[i] = L.SV[i - 1];
}
L.SV[k-1] = x;
L.Size++;
}
}
}
// xóa 1 sinh viên vị trí thứ k
void XoaBatKy(List& L, int k) {
if (KiemTraDay(L)) cout << "Danh sach day." << endl;
else {
if (k<1 k=""> L.Size) cout << "vi tri khong hop le. " << endl;
else {
for (int i = k - 1; i < L.Size - 1; i++) {
L.SV[i] = L.SV[i + 1];
}
L.Size--;
}
}
}
// hàm tìm kiếm chính xác theo tên
void TimKiemChinhXac(List L, char s[]) {
for (int i = 0; i < L.Size; i++) {
if (L.SV[i].HoTen == s) {
cout << "Co sinh vien " << s << " trong danh sach " << endl;
XuatSV(L.SV[i]);
}
}
}
// hàm tìn kiếm theo tên gần đúng
void TimKiemGanDung(List L, char s[]) {
for (int i = 0; i < L.Size; i++) {
int dem = 0, j = 0;
char u;
while (dem != strlen(s) && j != strlen(s)) {
u = s[j];
for (int a = 0; a < strlen(L.SV[i].HoTen); a++) {
if (u == L.SV[i].HoTen[a]) dem++;
}
j++;
}
if (dem == strlen(s)) {
cout << "Co sinh vien " << s << " trong danh sach " << endl;
XuatSV(L.SV[i]);
}
}
}
void LocDanhSach(List L) {
for (int i = 0; i < L.Size; i++) {
if (L.SV[i].DiemTB <= 5.0) {
XuatSV(L.SV[i]);
}
}
}
int main() {
List L;
SinhVien x;
int k;
cout << "So luong sinh vien: ";
cin >> L.Size;
NhapDanhSach(L);
system("cls");
int chon;
do {
system("cls");
cout << "1. Xuat danh sach. " << endl;
cout << "2. Them bat ky. " << endl;
cout << "3. Xoa bat ky. " << endl;
cout << "4. Tim kiem. " << endl;
cout << "5. Loc sinh vien diem trung binhf <= 5.0 " << endl;
cin >> chon;
switch (chon)
{
case 1:
{
XuatDanhSach(L);
system("pause");
break;
}
case 2: {
NhapSV(x);
cout << "Nhap vi tri: ";
cin >> k;
ThemBatKy(L, x, k);
system("pause");
break;
}
case 3: {
cout << "Nhap vi tri: ";
cin >> k;
XoaBatKy(L, k);
system("pause");
break;
}
case 4: {
char s[30];
cin.ignore();
cout << "Ten can tim: ";
cin.getline(s, 30);
TimKiemGanDung(L, s);
system("pause");
break;
}
case 5: {
LocDanhSach(L);
system("pause");
break;
}
default:
break;
}
} while (chon != 0);
}
1>




