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ố

Chuyển đơn vị đo nhiệt độ C và F

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