Nhảy tới nội dung

Danh sách sinh viên

Khai báo kiểu dữ liệu

typedef struct
{
char ID[10], Name[50];
float R1, R2, R3;
} Student;

struct Node
{
Student Element;
struct Node *Next;
};

typedef struct Node *Position;
typedef struct Node *List;

Một số phép toán

append

Yêu cầu

Chèn thêm một SinhVien vào cuối phần tử.

int append(Student s, List *pL)
{
List P = *pL;
while (P->Next != NULL)
{
if (strcmp(s.ID, P->Next->Element.ID) == 0)
return 0;
P = P->Next;
}
P->Next = (List)malloc(sizeof(struct Node));
strcpy(P->Next->Element.ID, s.ID);
strcpy(P->Next->Element.Name, s.Name);
P->Next->Element.R1 = s.R1;
P->Next->Element.R1 = s.R2;
P->Next->Element.R1 = s.R3;
return 1;
}

getList

Yêu cầu

Tạo một danh sách sinh viên rỗng.

List getList()
{
List L;
L = (List)malloc(sizeof(struct Node));
return L;
}

getFailedList

Yêu cầu

Trả về danh sách sinh viên chưa đạt.

List getFailedList(List L)
{
List S = L,
FL = getList();
int a;
while (S->Next != NULL)
{
if ((S->Next->Element.R1 + S->Next->Element.R2 + S->Next->Element.R3) / 3 < 4)
a = append(S->Next->Element, &FL);
S = S->Next;
}
a++;
return FL;
}

locate

Yêu cầu

Trả về vị trí đầu tiên của sinh viên có ID là ID : )

List locate(char ID[], List L)
{
List P = L;
while (P->Next != NULL)
{
if (strcmp(ID, P->Next->Element.ID) == 0)
return P;
P = P->Next;
}
return P;
}

printList

Yêu cầu

In danh sách sinh viên.

void printList(List L)
{
List P = L;
int i = 1;
while (P->Next != NULL)
{
printf("%2d -", i);
printf("%11s -", P->Next->Element.ID);
printf("%51s - ", P->Next->Element.Name);
printf("%.3f - ", P->Next->Element.R1);
printf("%.3f - ", P->Next->Element.R2);
printf("%.3f - ", P->Next->Element.R3);
printf("%.3f\n", (P->Next->Element.R1 + P->Next->Element.R2 + P->Next->Element.R3) / 3);
P = P->Next;
i++;
}
}

showPassedList

Yêu cầu

Hiển thị danh sách các sinh viên đạt.

void showPassedList(List L)
{
List P = L;
int i = 1;
while (P->Next != NULL)
{
if ((P->Next->Element.R1 + P->Next->Element.R2 + P->Next->Element.R3) / 3 >= 4)
{
printf("%2d -", i);
printf("%11s -", P->Next->Element.ID);
printf("%51s - ", P->Next->Element.Name);
printf("%.3f - ", P->Next->Element.R1);
printf("%.3f - ", P->Next->Element.R2);
printf("%.3f - ", P->Next->Element.R3);
printf("%.3f\n", (P->Next->Element.R1 + P->Next->Element.R2 + P->Next->Element.R3) / 3);
i++;
}
P = P->Next;
}
printf("%d students in total", i - 1);
}