Bài tập C++: Bài tập Struct trong C++

#include

<cstdlib>

#include

<iostream>

#include

<iomanip>

#include

<string.h>

using

namespace

std

;

//khai bao sinhvien structure

typedef

struct

sinhvien

{

string

mssv

;

char

tensv

[

20

];

char

sex

;

float

diemkt1

;

float

diemkt2

;

float

diemcc

;

float

diemgk

;

float

diemck

;

float

tongdiem

;

int

soItem

;

};

//cac nguyen mau ham (function prototype)

int

search

(

struct

sinhvien st

[],

string

id

,

int

biendem

);

void

clean

(

struct

sinhvien st

[],

int

deleteitem

);

//ham de hien thi menu tuy chon

void

displaymenu

(){

cout

<<

“==========================================”

<<

“\n”

;

cout

<<

” MENU “

<<

“\n”

;

cout

<<

“==========================================”

<<

“\n”

;

cout

<<

” 1. Them ban ghi sinh vien”

<<

“\n”

;

cout

<<

” 2. Xoa ban ghi sinh vien”

<<

“\n”

;

cout

<<

” 3. Cap nhat ban ghi sinh vien”

<<

“\n”

;

cout

<<

” 4. Quan sat tat ca ban ghi sinh vien”

<<

“\n”

;

cout

<<

” 5. Tinh diem trung binh cua sinh vien da chon”

<<

“\n”

;

cout

<<

” 6. Hien thi sinh vien co tong diem cao nhat”

<<

“\n”

;

cout

<<

” 7. Hien thi sinh vien co tong diem thap nhat”

<<

“\n”

;

cout

<<

” 8. Tim sinh vien boi ID”

<<

“\n”

;

cout

<<

” 9. Sap xep cac ban ghi boi tong diem”

<<

“\n”

;

}

//ham de them cac ban ghi

void

them_banghi

(

struct

sinhvien st

[],

int

&

biendem

){

again

:

cout

<<

“\nNhap ID cua sinh vien: “

;

cin

>>

st

[

biendem

].

mssv

;

if

(

search

(

st

,

st

[

biendem

].

mssv

,

biendem

)!=-

1

){

cout

<<

“ID nay da ton tai\n”

;

goto

again

;

}

cout

<<

“Nhap ten sinh vien: “

;

cin

>>

st

[

biendem

].

tensv

;

cout

<<

“Nhap gioi tinh cua sinh vien (F hoac M): “

;

cin

>>

st

[

biendem

].

sex

;

cout

<<

“Nhap diem kiem tra 1: “

;

cin

>>

st

[

biendem

].

diemkt1

;

cout

<<

“Nhap diem kiem tra 2: “

;

cin

>>

st

[

biendem

].

diemkt2

;

cout

<<

“Nhap diem chuyen can: “

;

cin

>>

st

[

biendem

].

diemcc

;

cout

<<

“Nhap diem giua ky: “

;

cin

>>

st

[

biendem

].

diemgk

;

cout

<<

“Nhap diem cuoi ky: “

;

cin

>>

st

[

biendem

].

diemck

;

st

[

biendem

].

tongdiem

=

st

[

biendem

].

diemkt1

+

st

[

biendem

].

diemkt2

+

st

[

biendem

].

diemcc

+

st

[

biendem

].

diemgk

+

st

[

biendem

].

diemck

;

++

biendem

;

}

//ham de tim vi tri ban ghi

int

search

(

struct

sinhvien st

[],

string

id

,

int

biendem

){

int

found

=-

1

;

for

(

int

i

=

0

;

i

<

biendem

&&

found

==-

1

;

i

++)

{

if

(

st

[

i

].

mssv

==

id

)

found

=

i

;

else

found

=-

1

;

}

return

found

;

}

//ham de quan sat tat ca ban ghi

void

viewall

(

struct

sinhvien st

[],

int

biendem

){

int

i

=

0

;

cout

<<

left

<<

setw

(

5

)<<

“ID”

<<

setw

(

20

)<<

“TEN”

<<

setw

(

5

)<<

“GIOI TINH”

<<

setw

(

5

)<<

“DKT1”

<<

setw

(

5

)<<

“DKT2”

<<

setw

(

5

)<<

“DCC”

<<

setw

(

5

)<<

“DGK”

<<

setw

(

5

)<<

“DCK”

<<

setw

(

5

)<<

“TONG”

<<

“\n”

;

cout

<<

“==============================================\n”

;

while

(

i

<=

biendem

){

if

(

st

[

i

].

mssv

!=

“”

){

cout

<<

left

<<

setw

(

5

)<<

st

[

i

].

mssv

<<

setw

(

20

)<<

st

[

i

].

tensv

<<

setw

(

5

)

<<

st

[

i

].

sex

;

cout

<<

setw

(

5

)<<

st

[

i

].

diemkt1

<<

setw

(

5

)<<

st

[

i

].

diemkt2

<<

setw

(

5

)<<

st

[

i

].

diemcc

<<

setw

(

5

)<<

st

[

i

].

diemgk

<<

setw

(

5

)<<

st

[

i

].

diemck

<<

setw

(

5

)

<<

st

[

i

].

tongdiem

;

cout

<<

“\n”

;}

i

=

i

+

1

;

}

}

//ham de xoa ban ghi

void

xoa_banghi

(

struct

sinhvien st

[],

int

&

biendem

){

string

id

;

int

index

;

if

(

biendem

>

0

)

{

cout

<<

“Nhap ID cua sinh vien: “

;

cin

>>

id

;

index

=

search

(

st

,

id

,

biendem

);

if

((

index

!=-

1

)

&&

(

biendem

!=

0

))

{

if

(

index

==

(

biendem

1

))

//Xoa ban ghi cuoi cung

{

clean

(

st

,

index

);

biendem

;

cout

<<

“Ban ghi da duoc xoa.\n”

;

}

else

//xoa ban ghi dau tien hoac o giua

{

for

(

int

i

=

index

;

i

<

biendem

1

;

i

++)

{

st

[

i

]

=

st

[

i

+

1

];

clean

(

st

,

biendem

);

biendem

;

}

}

}

else

cout

<<

“Ban ghi khong ton tai. Kiem tra ID va thu lai.\n”

;

}

else

cout

<<

“Khong co ban ghi nao duoc xoa\n”

;

}

//ham de xoa sach ban ghi da bi xoa

void

clean

(

struct

sinhvien st

[],

int

index

)

{

st

[

index

].

mssv

=

“”

;

strcpy

(

st

[

index

].

tensv

,

“”

);

st

[

index

].

sex

=

NULL

;

st

[

index

].

diemkt1

=

0

;

st

[

index

].

diemkt2

=

0

;

st

[

index

].

diemcc

=

0

;

st

[

index

].

diemgk

=

0

;

st

[

index

].

diemck

=

0

;

st

[

index

].

tongdiem

=

0

;

}

//ham de cap nhat ban ghi

void

capnhat_banghi

(

struct

sinhvien st

[],

int

biendem

){

string

id

;

int

column_index

;

cout

<<

“Nhap ID cua sinh vien: “

;

cin

>>

id

;

cout

<<

“Ban muon cap nhat truong nao (1-7) ?: “

;

cin

>>

column_index

;

int

index

=

search

(

st

,

id

,

biendem

);

if

(

index

!=

1

)

{

if

(

column_index

==

1

)

{

cout

<<

“Nhap ten sinh vien: “

;

cin

>>

st

[

index

].

tensv

;

}

else

if

(

column_index

==

2

)

{

cout

<<

“Nhap gioi tinh sinh vien (F hoac M)

: “

;

cin

>>

st

[

index

].

sex

;

}

else

if

(

column_index

==

3

)

{

cout

<<

“Nhap diem kiem tra 1: “

;

cin

>>

st

[

index

].

diemkt1

;

}

else

if

(

column_index

==

4

)

{

cout

<<

“Nhap diem kiem tra 2: “

;

cin

>>

st

[

index

].

diemkt2

;

}

else

if

(

column_index

==

5

)

{

cout

<<

“Nhap diem chuyen can: “

;

cin

>>

st

[

index

].

diemcc

;

}

else

if

(

column_index

==

6

)

{

cout

<<

“Nhap diem thi giua ky: “

;

cin

>>

st

[

index

].

diemgk

;

}

else

if

(

column_index

==

7

)

{

cout

<<

“Nhap diem thi cuoi ky: “

;

cin

>>

st

[

index

].

diemck

;

}

else

cout

<<

“Gia tri chi muc khong hop le”

;

st

[

index

].

tongdiem

=

st

[

index

].

diemkt1

+

st

[

index

].

diemkt2

+

st

[

index

].

diemcc

+

st

[

index

].

diemgk

+

st

[

index

].

diemck

;

}

else

cout

<<

“Ban ghi khong ton tai. Kiem tra ID va thu lai.”

;

}

//Ham de hien thi tong diem lon nhat

void

showmax

(

struct

sinhvien st

[],

int

biendem

)

{

float

max

=

st

[

0

].

tongdiem

;

int

index

=

0

;

if

(

biendem

>=

2

)

{

for

(

int

j

=

0

;

j

<

biendem

1

;

++

j

)

if

(

max

<

st

[

j

+

1

].

tongdiem

)

{

max

=

st

[

j

+

1

].

tongdiem

;

index

=

j

+

1

;

}

}

else

if

(

biendem

==

1

)

{

index

=

0

;

max

=

st

[

0

].

tongdiem

;

}

else

cout

<<

“Khong tim thay ban ghi nao!\n”

;

if

(

index

!=

1

)

cout

<<

“Sinh vien co ID la “

<<

st

[

index

].

mssv

<<

” dat tong diem cao nhat la “

<<

max

<<

endl

;

}

//ham de hien thi tong diem nho nhat

void

showmin

(

struct

sinhvien st

[],

int

biendem

)

{

float

min

=

st

[

0

].

tongdiem

;

int

index

=

0

;

if

(

biendem

>=

2

)

{

for

(

int

j

=

0

;

j

<

biendem

1

;

++

j

)

if

(

min

>

st

[

j

+

1

].

tongdiem

)

{

min

=

st

[

j

+

1

].

tongdiem

;

index

=

j

+

1

;

}

}

else

if

(

biendem

==

1

)

{

index

=

0

;

min

=

st

[

0

].

tongdiem

;

}

else

cout

<<

“Khong tim thay ban ghi nao!\n”

;

if

(

index

!=

1

)

cout

<<

“Sinh vien co ID la “

<<

st

[

index

].

mssv

<<

” co tong diem thap nhat la “

<<

min

<<

endl

;

}

//ham de tim ban ghi

void

find

(

struct

sinhvien st

[],

int

biendem

)

{

string

id

;

cout

<<

“Nhap ID cua sinh vien: “

;

cin

>>

id

;

int

index

=

search

(

st

,

id

,

biendem

);

if

(

index

!=

1

)

{

//hien thi ban ghi da tim thay

cout

<<

left

<<

setw

(

5

)<<

st

[

index

].

mssv

<<

setw

(

20

)<<

st

[

index

].

tensv

<<

setw

(

5

)<<

st

[

index

].

sex

;

cout

<<

setw

(

5

)<<

st

[

index

].

diemkt1

<<

setw

(

5

)<<

st

[

index

].

diemkt2

<<

setw

(

5

)

<<

st

[

index

].

diemcc

<<

setw

(

5

)<<

st

[

index

].

diemgk

<<

setw

(

5

)<<

st

[

index

].

diemck

<<

setw

(

5

)

<<

st

[

index

].

tongdiem

;

cout

<<

“\n”

;

}

else

cout

<<

“Ban ghi khong ton tai.”

;

}

//ham de sap xep cac ban ghi theo tong diem

void

bubblesort

(

struct

sinhvien dataset

[],

int

n

)

{

int

i

,

j

;

for

(

i

=

0

;

i

<

n

;

i

++)

for

(

j

=

n

1

;

j

>

i

;

j

–)

if

(

dataset

[

j

].

tongdiem

<

dataset

[

j

1

].

tongdiem

)

{

sinhvien temp

=

dataset

[

j

];

dataset

[

j

]

=

dataset

[

j

1

];

dataset

[

j

1

]

=

temp

;

}

}

//ham de tinh diem trung binh cua mot sinh vien

void

average

(

struct

sinhvien st

[],

int

biendem

)

{

string

id

;

float

avg

=

0

;

cout

<<

“Nhap ID cua sinh vien: “

;

cin

>>

id

;

int

index

=

search

(

st

,

id

,

biendem

);

if

(

index

!=

1

&&

biendem

>

0

)

{

st

[

index

].

tongdiem

=

st

[

index

].

diemkt1

+

st

[

index

].

diemkt2

+

st

[

index

].

diemcc

+

st

[

index

].

diemgk

+

st

[

index

].

diemck

;

avg

=

st

[

index

].

tongdiem

/

5

;

}

cout

<<

“Diem trung binh la “

<<

avg

;

}

//ham main

int

main

(

int

argc

,

char

*

argv

[])

{

sinhvien st

[

80

];

int

biendem

=

0

;

//hien thi menu

displaymenu

();

int

luachon

;

char

confirm

;

do

{

cout

<<

“\nNhap lua chon cua ban (1-9): “

;

cin

>>

luachon

;

switch

(

luachon

){

case

1

:

them_banghi

(

st

,

biendem

);

break

;

case

2

:

xoa_banghi

(

st

,

biendem

);

break

;

case

3

:

capnhat_banghi

(

st

,

biendem

);

break

;

case

4

:

viewall

(

st

,

biendem

);

break

;

case

5

:

average

(

st

,

biendem

);

break

;

case

6

:

showmax

(

st

,

biendem

);

break

;

case

7

:

showmin

(

st

,

biendem

);

break

;

case

8

:

find

(

st

,

biendem

);

break

;

case

9

:

bubblesort

(

st

,

biendem

);

break

;

default

:

cout

<<

“Khong hop le”

;

}

cout

<<

“Nhan y hoac Y de tiep tuc: “

;

cin

>>

confirm

;

}

while

(

confirm

==

‘y’

||

confirm

==

‘Y’

);

return

0

;

}