Viết chương trình quản lý sinh viên bằng C++

Chương trình quản lý sinh viên sử dụng struct

Bởi

Nguyễn Văn Hiếu

-

121215

This entry is part 67 of 69 in the series Học C Không Khó

86 / 100

Chương trình quản lý sinh viên, quản lý nhân viên, cán bộ là những bài tập khá phổ biến và cần sử dụng kiến thức về struct để lập trình. Đây là những bài tập giúp các bạn sinh viên ôn luyện về kiểu cấu trúc struct. Tại bài viết này, Nguyễn Văn Hiếu Blog sẽ giải một bài tập struct minh họa – đó là chương trình quản lý sinh viên.

NỘI DUNG BÀI VIẾT

1. Đề bài chương trình quản lý sinh viên

  1. Khai báo kiểu dữ liệu SinhVien có các trường họ tên, giới tính, tuổi, điểm toán – lý – hóa và điểm trung bình.
  2. Nhập vào danh sách N sinh viên
  3. Xuất danh sách N sinh viên
  4. Tính điểm trung bình cho N sinh viên
  5. Sắp xếp N sinh viên theo thứ tự tăng dần của điểm trung bình
  6. Xếp loại N sinh viên
  7. Xuất danh sách N sinh viên ra file
  8. Viết chương trình dạng menu cho phép sử dụng các tính năng trên

2. Kiến thức cần có

  1. Kiến thức lập trình cơ bản
  2. Kiến thức về hàm con
  3. Struct trong C
  4. Cách sử dụng cấu trúc lặp: for, do while, while
  5. Cách sử dụng cấu trúc điều khiển & rẽ nhánh: if else, switch case
  6. Nhập xuất file

?Tham khảo ngay: Dịch vụ code thuê đồ án CNTT của Lập Trình Không Khó

3. Code chương trình quản lý sinh viên

Dưới đây là code tham khảo cho bài tập chương trình quản lý sinh viên đã nêu.

Các bạn có thể khai báo kiểu cấu trúc SinhVien như sau:

1

2

3

4

5

6

7

struct SinhVien{

    char ten[30];

    char gt[5];

    int age;

    float dT, dL, dH;

    float dtb = 0;

};

Viết lại tên kiểu dữ liệu để viết ngắn hơn

1

typedef SinhVien SV;

Khai báo các hàm sẽ sử dụng trong chương trình:

1

2

3

4

5

6

7

8

9

void nhap(SV &sv);

void nhapN(SV a[], int n);

void xuat(SV sv);

void xuatN(SV a[], int n);

void tinhDTB(SV &sv);

void sapxep(SV a[], int n);

void xeploai(SV a);

void xeploaiN(SV a[], int n);

void xuatFile(SV a[], int n, char fileName[]);

Ý tưởng nhập danh sách sinh viên: Viết hàm nhập thông tin của 1 sinh viên, sau đó viết hàm nhập nhiều sinh viên chỉ cần dùng for và gọi hàm nhập 1 sinh viên.

Ý tưởng xuất danh sách sinh viên tương tự ý tưởng nhập.

Các chức năng khác các bạn vui lòng xem code để hiểu rõ hơn.

C++

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

// Nếu bạn bị lỗi thư viện conio.h => Do bạn dùng C++ bản mới.

// Hãy kéo xuống comment và lấy code update nhé.

#include

#include

#include

 

 

struct SinhVien{

    char ten[30];

    char gt[5];

    int age;

    float dT, dL, dH;

    float dtb = 0;

};

 

typedef SinhVien SV;

 

void nhap(SV &sv);

void nhapN(SV a[], int n);

void xuat(SV sv);

void xuatN(SV a[], int n);

void tinhDTB(SV &sv);

void sapxep(SV a[], int n);

void xeploai(SV a);

void xeploaiN(SV a[], int n);

void xuatFile(SV a[], int n, char fileName[]);

 

int main(){

    int key;

    char fileName[] = "DSSV.txt";

    int n;

    bool daNhap = false;

    do{

        printf("\nNhap so luong SV: "); scanf("%d", &n);

    }while(n <= 0);

    SV a[n];

    while(true){

        system("cls");

        printf("******************************************\n");

        printf("**    CHUONG TRINH QUAN LY SINH VIEN    **\n");

        printf("**      1. Nhap du lieu                 **\n");

        printf("**      2. In danh sach sinh vien       **\n");

        printf("**      3. Sap xep sinh vien theo DTB   **\n");

        printf("**      4. Xep loai sinh vien           **\n");

        printf("**      5. Xuat DS sinh vien            **\n");

        printf("**      0. Thoat                        **\n");

        printf("******************************************\n");

        printf("**       Nhap lua chon cua ban          **\n");

        scanf("%d",&key);

        switch(key){

            case 1:

                printf("\nBan da chon nhap DS sinh vien!");

                nhapN(a, n);

                printf("\nBan da nhap thanh cong!");

                daNhap = true;

                printf("\nBam phim bat ky de tiep tuc!");

                getch();

                break;

            case 2:

                if(daNhap){

                    printf("\nBan da chon xuat DS sinh vien!");

                    xuatN(a, n);

                }else{

                    printf("\nNhap DS SV truoc!!!!");

                }

                printf("\nBam phim bat ky de tiep tuc!");

                getch();

                break;

            case 3:

                if(daNhap){

                    printf("\nBan da chon sap xep SV theo STB!");

                    sapxep(a, n);

                    xuatN(a, n);

                }else{

                    printf("\nNhap DS SV truoc!!!!");

                }

                printf("\nBam phim bat ky de tiep tuc!");

                getch();

                break;

            case 4:

                if(daNhap){

                    printf("\nBan da chon thoat xep loai SV!");

                    xeploaiN(a, n);

                }else{

                    printf("\nNhap DS SV truoc!!!!");

                }

                printf("\nBam phim bat ky de tiep tuc!");

                getch();

                break;

            case 5:

                if(daNhap){

                    printf("\nBan da chon xuat DS SV!");

                    xuatFile(a, n, fileName);

                }else{

                    printf("\nNhap DS SV truoc!!!!");

                }

                printf("\nXuat DSSV thanh cong vao file %s!", fileName);

                printf("\nBam phim bat ky de tiep tuc!");

                getch();

                break;

            case 0:

                printf("\nBan da chon thoat chuong trinh!");

                getch();

                return 0;

            default:

                printf("\nKhong co chuc nang nay!");

                printf("\nBam phim bat ky de tiep tuc!");

                getch();

                break;

        }

    }

}

 

void tinhDTB(SV &sv){

    sv.dtb = (sv.dH + sv.dL + sv.dT)/3;    

}

 

void nhap(SV &sv){

    printf("\nNhap ten: "); fflush(stdin); gets(sv.ten);

    printf("\nNhap gioi tinh: "); gets(sv.gt);

    printf("\nNhap tuoi: "); scanf("%d", &sv.age);

    printf("\nNhap diem 3 mon: "); scanf("%f%f%f", &sv.dT, &sv.dL, &sv.dH);

    tinhDTB(sv);

}

 

void nhapN(SV a[], int n){

    printf("\n____________________________________\n");

    for(int i = 0; i< n; ++i){

        printf("\nNhap SV thu %d:", i+1);

        nhap(a[i]);

    }

    printf("\n____________________________________\n");

}

 

void xuat(SV sv){

    printf("\nHo ten SV: %s", sv.ten);

    printf("\nGioi tinh: %s", sv.gt);

    printf("\nTuoi SV  : %d", sv.age);

    printf("\nDiem Toan - Ly - Hoa: %.2f - %.2f - %.2f", sv.dT, sv.dL, sv.dH);

    printf("\nDiem TB: %.2f", sv.dtb);

}

 

void xuatN(SV a[], int n){

    printf("\n____________________________________\n");

    for(int i = 0;i < n;++i){

        printf("\nThong tin SV thu %d:", i+1);

        xuat(a[i]);

    }

    printf("\n____________________________________\n");

}

 

void sapxep(SV a[], int n){

    //Sap xep theo DTB tang dan

    SV tmp;

    for(int i = 0;i < n;++i){

        for(int j = i+1; j < n;++j){

            if(a[i].dtb > a[j].dtb){

                tmp = a[i];

                a[i] = a[j];

                a[j] = tmp;

            }

        }

    }

}

 

void xeploai(SV sv){

    if(sv.dtb >= 8) printf("Gioi");

    else if(sv.dtb >= 6.5) printf("Kha");

    else if(sv.dtb >= 4) printf("Trung binh");

    else printf("Yeu");

}

 

void xeploaiN(SV a[], int n){

    printf("\n____________________________________\n");

    for(int i = 0;i < n;++i){

        printf("\nXep loai cua SV thu %d la: ", i+1);

        xeploai(a[i]);

    }

    printf("\n____________________________________\n");

}

 

void xuatFile(SV a[], int n, char fileName[]){

    FILE * fp;

    fp = fopen (fileName,"w");

    fprintf(fp, "%20s%5s%5s%10s%10s%10s%10s\n", "Ho Ten","GT", "Tuoi", "DT", "DL", "DH", "DTB");

    for(int i = 0;i < n;i++){

        fprintf(fp, "%20s%5s%5d%10f%10f%10f%10f\n", a[i].ten,a[i].gt, a[i].age, a[i].dT, a[i].dL, a[i].dH, a[i].dtb);

    }

    fclose (fp);

}

Kết quả chạy thử chương trình quản lý sinh viên:

Viết chương trình quản lý sinh viên bằng C++
Viết chương trình quản lý sinh viên bằng C++

4. Kết luận

Hầu hết các bài tập struct đều có mô típ khá giống nhau và giống với bài tập quản lý sinh viên phía trên. Do vậy, các bạn hoàn toàn có thể sửa lại để hoàn thành bài tập của mình. Hi vọng bài viết cung cấp cho các bạn thêm kiến thức bổ ích.

Theo dõi lập trình không khó tại:

  • Forum: https://www.facebook.com/groups/LapTrinhKhongKho/
  • Youtube: https://www.youtube.com/HieuNguyenVanOfficial

  • TAGS
  • bài tập c++
  • học c bá đạo
  • khóa học lập trình C
  • kiểu cấu trúc
  • struct

Facebook

Twitter

Pinterest

WhatsApp

Nguyễn Văn Hiếu

Sáng lập cộng đồng Lập Trình Không Khó với mong muốn giúp đỡ các bạn trẻ trên con đường trở thành những lập trình viên tương lai. Tất cả những gì tôi viết ra đây chỉ đơn giản là sở thích ghi lại các kiến thức mà tôi tích lũy được.