cấu trúc struct

Đề bài:
Đọc và ghi ra file
Danh sách sinh viên đăng kí học cho từng sinh viên và tính điểm trung bình cho từng sinh viên.



//khai bao sinh vien
//khai bao mon hoc
//khai bao sinh vien hoc mon hoc gi
#include<iostream>
#include<cstring>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;

typedef struct sinhvien{
 string ten;
 string namsinh;
};

typedef struct monhoc{
 string ten;
};

typedef struct dangkyhoc{
 sinhvien *sv;
 monhoc *ds[100];
 int somonhoc;
};

typedef struct diem{
 int sodiem;
 monhoc *mh;
};

typedef struct bangDiem{
 sinhvien *sv;
 diem *dsDiem[100];
 int doDaiBang;
};

bangDiem *dsBangDiem[100];

int soSv;
sinhvien *dssv[100];
int soMonhoc;
monhoc  *dsMonhoc[100];
dangkyhoc *dsDangky[100];
int vitri;

void input(){
 fstream f("dssv.cpp");
 f >> soSv;
 f.ignore();
 for(int i = 0; i < soSv; i++){
  dssv[i] = new sinhvien(); //khoi tao doi tuong sinhvien tai i
  getline(f, dssv[i]->ten); //doc ten sinh vien tai i tu file
  getline(f, dssv[i]->namsinh); //doc nam sinh tai i tu file
 }
 
 fstream f1("monhoc.cpp");
 f1 >> soMonhoc;
 f1.ignore();
 for(int i = 0; i < soMonhoc; i++){
  dsMonhoc[i] = new monhoc(); //khoi tao doi tuong mon hoc tai i
  getline(f1, dsMonhoc[i]->ten);// doc ten mon hoc tai i tu file
 }
 //nhap mon hoc
}

void inDsSv(){
 cout << "Danh sach sinh vien " << endl;
 for(int i = 0; i < soSv; i++){
  cout << setw(20) << dssv[i]->ten << "  " << setw(10) << dssv[i]->namsinh << endl; // in ra ten va nam sinh cua sinh vien thu i
 }
}

void inDsMonhoc(){
 cout << endl;
 cout << "Danh sach mon hoc " << endl;
 for(int i = 0; i < soMonhoc; i++){ 
  cout << "["<<i<<"]"<< dsMonhoc[i] ->ten << endl;// in ten hon hoc thu i
 }
}

void inDsDangKy(){
 cout << "-------------------------------------------------"<<endl;
 cout << "Danh sach dang ky hoc:" << endl;
 
 for(int i = 0; i < soSv; i++){
  cout << "*************************************"<<endl;
  cout << setw(30) << dsDangky[i]->sv->ten << setw(20) << dsDangky[i]->sv->namsinh << endl; // in ra ten nam sinh sinh vien 
  cout << "Danh sach mon hoc da dang ky: " << endl;
  for(int j = 0; j < dsDangky[i] -> somonhoc; j++){
   cout <<"----------------: " << dsDangky[i]->ds[j]->ten<<endl;// in ten mon hoc da dang ki
  }
 }
}

void dangKyHocChoSinhVien(){
 for(int i = 0; i < soSv; i++){
  dsDangky[i] = new dangkyhoc();// khoi tao doi tuong dang ky hoc tai i
  dsDangky[i]->sv = dssv[i]; // gan sinh vien i vào dsDangky tai i sao cai nay k can new a
  cout << "\nChon mon hoc cho sinh vien :" << dssv[i]->ten << endl;
  cout << "Ban co muon chon mon hoc hay khong ? y/n";
  cin.ignore();
  char x = getchar();
  if(x == 'n'){
   //bo qua ko nhap mon hoc
   continue;
  }
   
  while(true){
   
   inDsMonhoc();
   while(true){
   cout << "Moi ban chon mon hoc: ";
   cin >> vitri;// vi tri mon hoc dang ky
   if( vitri < 0 || vitri > soMonhoc){
    cout <<"ban da nhap mon khong ton tai trong danh sach mon hoc " << endl;
    cout << "nhap lai "<< endl;
   }
   else{
    break;// thoat khoi while
   }
   }
   dsDangky[i]->ds[dsDangky[i]->somonhoc] = dsMonhoc[vitri];//gan mon hoc da chon vao trong danh sach dang ky
   dsDangky[i]->somonhoc++;// tang somonhoc trong danh sach dang ky
   cout << "Ban da chon mon hoc: " << dsMonhoc[vitri]->ten<<endl;//in ra mon hoc da chon
   //hoi co muon chon them mon hoc hay ko.
   cout << "Ban co muon chon mon hoc tiep hay khong ? y/n";
   cin.ignore();
   char x1 = getchar();
   if(x1 == 'n'){
    //thoat khoi vong while de nhap cho sinh vien tiep theo
    break;
   }
   
  }
 }
}

void inDsDiemCuaSv(){
 for(int i = 0; i < soSv; i++){
  cout << "\n*************************************"<<endl;
  cout << "Danh sach diem cua sinh vien [" << dsBangDiem[i]->sv->ten<<"]"<<endl;// in ra ten sinh vien trong danh sach bang diem
  int tong = 0;
  for(int j = 0; j < dsBangDiem[i]->doDaiBang; j++){
  // in ra ten va diem va diem trong danh sach bang diem 
   cout << "\n-----------------> Mon hoc [" << dsBangDiem[i]->dsDiem[j]->mh->ten<<"]  :  "  << dsBangDiem[i]->dsDiem[j]->sodiem;
   tong+=dsBangDiem[i]->dsDiem[j]->sodiem; //tinh tong diem tu cac mon trong danh sach bang diem
  }
  float tb = 0;
  tb = (float)tong/dsBangDiem[i]->doDaiBang; 
  if(dsBangDiem[i]->doDaiBang != 0)
   cout << "\nDiem Trung Binh: " << tb; // in ra diem trung binh cua hoc dinh do
  else cout << "\n0";
 }
}

void nhapdiemChoSinhVien(){
 for(int i = 0; i < soSv; i++){
  dsBangDiem[i] = new bangDiem();// khoi tao doi tuong bang diem tai i
  dsBangDiem[i] -> sv = dssv[i]; // gan sinh vien thu i vao danh sach bang diem
  dsBangDiem[i]->doDaiBang = dsDangky[i]->somonhoc; // gan do dai bang diem bang so mon hoc trong ds dang ky
  cout << endl << "Nhap diem cho sinh vien [" << dssv[i]->ten<<"]"<<endl; // nhap diem cho sinh vien thu i
  for(int j = 0; j < dsBangDiem[i]->doDaiBang; j++){
   //nhap diem cho mon hoc.
   dsBangDiem[i]->dsDiem[j] = new diem();// khoi tao doi tuong diem tai i de nhap diem
   dsBangDiem[i]->dsDiem[j]->mh = dsDangky[i]->ds[j];// gan mon hoc co trong danh sach dang ki vao danh sach bang diem
   cout << "Nhap diem cho mon hoc [" << dsDangky[i]->ds[j]->ten<<"] ";// in ra ten mon hc nhap diem
   cin >> dsBangDiem[i]->dsDiem[j]->sodiem;// nhap diem cua mon hoc tren
  }
 }
}

int main(){
 input();
 inDsSv();
 inDsMonhoc();
 dangKyHocChoSinhVien();
 inDsDangKy();
 nhapdiemChoSinhVien();
 inDsDiemCuaSv();
 
 return 0;
}

Nhận xét

Bài đăng phổ biến từ blog này

Đổi chỗ chữ số đầu tiên và chữ số cuối cùng của một số

Đếm số thuần nguyên tố trong một khoảng

Tìm số đẹp (lộc phát)