#include
#include
#include
#define MAX_NAME_LENGTH 12
typedef struct StudentData {
char name[MAX_NAME_LENGTH];
int kor, eng, math;
int total;
int ranking;
float average;
} SD;
typedef struct node {
SD data;
struct node *p_next;
}NODE;
void AddNode(NODE* ap_head, NODE* ap_tail, SD* ap_data) {
if (NULL != ap_head) {
ap_tail->p_next = (NODE*)malloc(sizeof(NODE));
ap_tail = ap_tail->p_next;
}
else {
ap_head = (NODE*)malloc(sizeof(NODE));
ap_tail = ap_head;
}
memcpy(&ap_tail->data, ap_data, sizeof(SD));
ap_tail->p_next = NULL;
}
void DeleteALLNode(NODE** ap_head, NODE** ap_tail) {
NODE* p;
while (NULL != *ap_head) {
p = (*ap_head)->p_next;
free(*ap_head);
*ap_head =p;
}
*ap_head = *ap_tail = NULL;
}
void UpdateRanking(NODE* ap_head, SD* ap_data) {
NODE* p = ap_head;
while (NULL != p) {
if (ap_data->total data(점) total) {
ap_data->ranking++;
}
else {
p->data.ranking++;
}
p = p->p_next;
}
}
void InputData(SD* ap_data, int a_count) {
printf("%d 번째 학생 이름 : ", a_count);
scanf("%s", ap_data->name);
printf("국어 점수 : ");
scanf("%d", &ap_data->kor);
printf("영어 점수 : ");
scanf("%d", &ap_data->eng);
printf("수학 점수 : ");
scanf("%d", &ap_data->math);
ap_data->ranking = 1;
ap_data->total = ap_data->kor + ap_data->eng + ap_data->math;
ap_data->average = ap_data->total / 3.0f;
}
void DisplayData(NODE *ap_head) {
NODE* p = ap_head;
printf("-------------------------------------------------\n");
printf(" 이름 국어 영어 수학 총점 평균 등수\n");
printf("-------------------------------------------------\n");
while (NULL != p) {
printf("%-8s %3d %3d %3d %3d %3.0f %2d등\n",
p->data.name, p->data.kor, p->data.eng, p->data.math,
p->data(점) total, p->data.average, p->data.ranking);
p = p->p_next;
}
}
int main() {
NODE* p_head = NULL, * p_tail = NULL;
SD temp;
int num, count = 0;
while (1) {
printf("[ Menu ]\n");
printf(" 1. 성적 입력\n");
printf(" 2. 성적 확인\n");
printf(" 3. 종료\n");
printf(" --------------\n");
printf(" 선택(1 ~ 3) : ");
scanf("%d", #);
printf("\n\n");
if (num == 3) break;
else if (num == 1) {
InputData(&temp, ++count);
UpdateRanking(p_head, &temp);
AddNode(p_head, p_tail, &temp);
}
else if (num == 2) {
DisplayData(p_head);
}
printf("\n\n");
}
DeleteALLNode(&p_head, &p_tail);
return 0;
}
(점) 대신. 으로 고치세요
https://nanikit.github.io/dc-highlighter/