30/09/2018, 23:01

Danh sách học sinh sử dụng struct

Em không biết sai ở đâu mà không xuất ra được.
Đề: Quản lý sinh viên với số lượng không biết trước dùng struct!

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<iostream>
using namespace std;
int slm;
typedef struct{
    char TenMonHoc[20];
    float DiemTK;
}Subject;
typedef struct {
    char TenSV[20];
    int age;
    char Lop[20];
    Subject Diem[3];
    float DTB;
    char Xl[10];
}Student;
 void KhoiTao(Student *myStudent,int sl)
 {
     myStudent = new Student[sl];
     for(int i=0;i<sl;i++){
        cout << "
Hoc sinh thu: " << i;
        cout << "
Ho va ten: ";
        fflush(stdin);
        gets(myStudent[i].TenSV);
        cout << "
Tuoi: ";
        cin >> myStudent[i].age;
        cout << "
Lop: ";
        fflush(stdin);
        gets(myStudent[i].Lop);
        for(int j=0;j<3;j++){
            cout << "
Mon: ";
            fflush(stdin);
            gets(myStudent[i].Diem[j].TenMonHoc);
            cout << "
Diem TB cua mon hoc: ";
            cin >> myStudent[i].Diem[j].DiemTK;
        }
         myStudent[i].DTB=(myStudent[i].Diem[0].DiemTK +myStudent[i].Diem[1].DiemTK + myStudent[i].Diem[2].DiemTK)/3;
        if(myStudent[i].DTB < 5){
            strcpy(myStudent[i].Xl,"Yeu");
        }
        else if(myStudent[i].DTB >=5 && myStudent[i].DTB <= 6.5){
            strcpy(myStudent[i].Xl,"Trung Binh");
        }
        else if(myStudent[i].DTB > 6.5 && myStudent[i].DTB <8){
            strcpy(myStudent[i].Xl,"Kha");
        }
        else {
            strcpy(myStudent[i].Xl,"Gioi");
        }
     }
 }
 void Xuat(Student *myStudent, int sl)
 {
     for(int i=0;i<sl;i++){
        cout << "
Ten sinh vien: " << myStudent[i].TenSV;
        cout << "
Tuoi: " << myStudent[i].age;
        cout << "
Lop: " << myStudent[i].Lop;
        for(int j=0;j<3;j++){
            cout << "
Mon: " << myStudent[i].Diem[j].TenMonHoc << "diem tong ket: " << myStudent[i].Diem[j].DiemTK;
        }
        cout << "
Diem trung binh: " << myStudent[i].DTB;
        cout << "
Xep loai: " << myStudent[i].Xl;
     }
 }
void Loc (Student *myStudent, int sl)
{
    for(int i=0;i<sl;i++){
        if(strcmp(myStudent[i].Xl,"Gioi")==0){
            cout << "
Ten sinh vien: " << myStudent[i].TenSV;
            cout << "
Tuoi: " << myStudent[i].age;
            cout << "
Lop: " << myStudent[i].Lop;
            for(int j=0;j<3;j++){
                cout << "
Mon: " << myStudent[i].Diem[j].TenMonHoc << "diem tong ket: " << myStudent[i].Diem[j].DiemTK;
            }
            cout << "
Diem trung binh: " << myStudent[i].DTB;
        }
    }
}
 int main ()
 {
     Student *myStudent;
     int sl=0;
     cout << "
Nhap vao so luong hov sinh trong lop: ";
     cin >> sl;

     KhoiTao(myStudent,sl);
     Xuat(myStudent,sl);
     cout << "
Hoc sinh xep loai Gioi: ";
     Loc(myStudent,sl);
     delete [] myStudent;
     return 0;
 } 
*grab popcorn* viết 01:07 ngày 01/10/2018

Lần sau nhớ viết TV đàng hoàng nha bạn.

ThuThao viết 01:02 ngày 01/10/2018

cai go TV no bi hong r a!

Trần Thị Diệu Ninh viết 01:06 ngày 01/10/2018

cho phần khởi tạo myStudent = new Student[sl]; xuống hàm main là được.
Lý do, vì bạn để khởi tạo con trỏ trong hàm KhowiTao() thì khi thực hiện xong hàm này , hàm này bị hủy. con trỏ cũng thế. Nên khi xuống hàm Xuat, myStudent chưa có, nên chtrinh k biết xuất thông tin của ai.

Bài liên quan
0