Thứ Ba, 11 tháng 4, 2017

Danh sách liên kết kiểu mảng(Sinh Viên)

#include 
#include 
#include 
using namespace std;


struct Sinhvien
{
 string Masv;
 string ten;
 string lop;
 int namsinh;
 float dtb;
};


struct Listsv
{
 Sinhvien sv;
};

Sinhvien Input() {
 Sinhvien sv;
 cin.ignore();
 cout << "nhap ten : ";
 getline(cin, sv.ten);
 cout << "nhap msv : ";
 getline(cin, sv.Masv);
 cout << "nhap lop : ";
 getline(cin, sv.lop);
 cout << "nhap nam sinh : ";
 cin >> sv.namsinh;
 cout << "nhap diem trung binh : ";
 cin >> sv.dtb;
 return sv;
}

void Nhap(Listsv L[], int &n) {

 cout << "nhap so luong sv : ";
 cin >> n;
 for (int i = 0; i < n; i++)
 {
  L[i].sv = Input();
 }
}

void Output(Listsv L[], int i) {
 Sinhvien sv;

 cout << " ten : ";
 cout << L[i].sv.ten << endl;
 cout << " msv : ";
 cout << L[i].sv.Masv << endl;
 cout << " lop : ";
 cout << L[i].sv.lop << endl;
 cout << " nam sinh : ";
 cout << L[i].sv.namsinh << endl;
 cout << "nhap diem trung binh : ";
 cout << L[i].sv.dtb << endl;

}

void xuat(Listsv L[], int n) {
 for (int i = 0; i < n; i++)
 {
  Output(L, i);
 }
}

bool KiemTraRong(int n) {
 if (n == 0)
 {
  return true;

 }
 else
 {
  return false;
 }
}

bool KiemTraDay(int n, int max) {
 if (n == max) {
  return true;
 }
 else
 {
  return false;
 }
}

void Them_vitri_K(Listsv L[], int &n, int k) {
 n = n + 1;
 for (int i = n - 1; i >= k; i--)
 {
  L[i + 1].sv = L[i].sv;
 }
 L[k].sv = Input();
}
void Them_cuoi(Listsv L[], int &n) {
 n = n + 1;
 L[n].sv = Input();
}

void Xoa_K(Listsv L[], int &n, int k) {
 for (int i = k; i < n - 1; i++)
 {
  L[i].sv = L[i + 1].sv;
 }
 n = n - 1;
}

string *chuoi = new string[1000];

void NhapChuoi( int i, string tam) {
 
 *(chuoi + i) = tam;
}
int TimMax(int *a, int n) {
 int max = 0;
 for (int i = 0; i < n; i++)
 {
  if (max < *(a + i))
  {
   max = *(a + i);

  }
 }
 return max;
}

void GanMangVeKhong(int *a, int n) {
 for (int i = 0; i < n; i++)
 {
  *(a + i) = 0;
 }
}
void timkiem (int n, Listsv L[]) {
 

 int *mangDoDai = new int[n];
 GanMangVeKhong(mangDoDai, n); // gan cac phan tu trong mang ve 0;
 cin.ignore();
 string timKiem;
 cout << "nhap ten nguoi muon tim kiem : ";
 getline(cin, timKiem);

 for (int k = 0; k < n; k++)
 {
  int maxchuoi = 0; // mot sau co the trung ky tu toi hai lan, nen phai dung bien so sanh
  for (int i = 0; i < (chuoi + k)->size(); i++)
  {
   int dem = 0;
   if (timKiem[0] == chuoi[k][i])
   {
    for (int j = 0; j < timKiem.size(); j++) // so sanh va dem so luong ky tu trong gan vao mang so luong
    {

     if (timKiem[j] != chuoi[k][i])
     {
      if (dem >= maxchuoi)
      {
       maxchuoi = dem;
       *(mangDoDai + k) = maxchuoi;
       break;
      }
      else
      {
       *(mangDoDai + k) = dem;
       break;
      }
     }
     else
     {
      dem++;
      if (j == timKiem.size() - 1)
      {

       *(mangDoDai + k) = dem;
       //cout << *(mangDoDai + k) << "\t";
      }
     }
     i++;
    }
   }
  }
 }
 
 cout << "\nchuoi tim duoc la : " << endl;
 int max = TimMax(mangDoDai, n);
 for (int i = 0; i < n; i++)
 {
  if (*(mangDoDai + i) == max)
  {
   Output(L, i);
    cout << endl << endl;
  }
 }
 
}


void Tim_sinhvien(Listsv L[], int n) {
 for (int i = 0; i < n; i++)
 {
  NhapChuoi(i, L[i].sv.ten);
  
 }
 timkiem(n, L);
}

int main() {
 Listsv L[100];
 int n;
 Nhap(L, n);
 
 system("cls"); // lenh xoa man hinh, giup xem code khong bi xem code  nhap du lieu
 xuat(L, n);
 cout << "-------------------------------------------" << endl << endl; // endl la lenh xuong dong, 2 cai endl la suong hai dong
 Tim_sinhvien(L, n);
 system("pause");
 return 0;
}
Share:

0 nhận xét:

Đăng nhận xét