C
C_Project : 학생관리프로그램
아랑팡팡
2023. 7. 25. 00:12
728x90
3. 1번의 이진 탐색 트리 프로그램을 이용하여 학생들과 관련된 자료를 저장하고 탐색하는 프로그램을 개발하여 보자. 하나의 학 생은 학번(정수), 이름(문자열), 주소(문자열), 소속학과(정수)의 정보를 가지고 있다. 이들 정보를 학번을 키로 하여 이진 탐색 트리에 저장하고 다음과 같은 메뉴가 가능하도록 프로그램을 작성하라. 학번 순으로 출력하는 것은 이진 탐색 트리의 중위 순 회시 정렬된 숫자가 얻어지는 것을 이용하여 구현하라.
1.학생 정보 입력
1 선택시 학번 이름 주소 학과를 받아 저장한다.
2. 학생 정보 삭제
2 선택 후 학생 이름을 입력하면 해당학생이 삭제되고 존재하지않는 이름입력시 되돌아간다.
3. 학생 정보 탐색
3 선택 후 학생의 학번을 입력하면 존재여부를 알수 있다.
4. 학생 정보 학번순으로 출력
4 선택 시 입력한 학생이 출력된다.
5. 현재 저장된 학생들의 총 숫자
5 선택을 제일위로 실시간으로 저장된 학생의 숫자를 만들어 두었다.
6. 전부 삭제 / 7. 종료
6 선택 시 전부 삭제되면서 종료된다. 7번도 6번과 마찬가지로 전부 삭제 후 종료된다.
// 1번의 이진 탐색 트리 프로그램을 이용하여 학생들과 관련된 자료를 저장하고 탐색하는 프로그램을 개발하여 보자.
// 하나의 학 생은 학번(정수), 이름(문자열), 주소(문자열), 소속학과(정수)의 정보를 가지고 있다.
// 이들 정보를 학번을 키로 하여 이진 탐색 트리에 저장하고 다음과 같은 메뉴가 가능하도록 프로그램을 작성하라.
// 학번 순으로 출력하는 것은 이진 탐색 트리의 중위 순 회시 정렬된 숫자가 얻어지는 것을 이용하여 구현하라.
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
typedef struct Student
{
int Data;
char Name[256];
char Add[256];
char Depart[256];
struct Student* Link; // 자기참조 구조체
}Student;
// 함수원형 전방선영 F12 해당함수로 이동
char* CreateName();
Student* CreateStudent();
Student* Insert(Student* node);
void PrintStudent(Student* student, int Number);
void Print(Student* node);
char* CreateNode()
{
Student* NewNode = (Student*)malloc(sizeof(Student));
printf("학번입력 : ");
scanf("%d", &NewNode->Data);
printf("이름입력 : ");
scanf("%s", NewNode->Name);
printf("주소입력 : ");
scanf("%s", NewNode->Add);
printf("학과입력 : ");
scanf("%s", NewNode->Depart);
printf("\n");
NewNode->Link = NULL;
return NewNode;
}
// 학생정보 생성
Student* Insert(Student* Node)
{
if (Node == NULL)
return CreateNode();
else
Node->Link = Insert(Node->Link);
return Node;
}
// 출력
void PrintStudent(Student* student, int Number)
{
printf(" 학번 : %d", student->Data);
printf(" 이름 : %s", student->Name);
printf(" 주소 : %s", student->Add);
printf(" 학과 : %s", student->Depart);
printf("\n");
}
void Print(Student* node)
{
if (node == NULL)
return;
printf("학번 : %d 이름 : %s 주소 : %s 학과 : %s\n", node->Data, node->Name, node->Add, node->Depart);
Print(node->Link);
}
void Search(Student* Node, int Data)
{
if (Node == NULL)
printf("데이터가 존재하지않습니다.\n");
else if (Node->Data == Data)
printf("데이터가 존재합니다.\n");
else
Search(Node->Link, Data);
}
// 전체 삭제
Student* Delete(Student* Node, char Name[256])
{
if (Node == NULL)
return NULL;
Node->Link = Delete(Node->Link, Name);
if (strcmp(Node->Name, Name) == 0)
{
Student* DeleteNode = Node;
Node = Node->Link;
printf("%s 학생 삭제완료\n", DeleteNode->Name);
free(DeleteNode);
}
return Node;
}
// 할당해제
void Release(Student* node, int Number)
{
if (node == NULL)
return;
Release(node->Link, Number+1);
PrintStudent(node, Number);
free(node);
}
void main()
{
int StudentCount = 0;
Student* Head = NULL;
char Name[256];
while (TRUE)
{
system("cls");
printf("===안양대 학생정보관리프로그램===\n");
printf(" 현재 저장된 학생 숫자 : %d\n", StudentCount);
printf(" 1. 학생 정보 입력\n");
printf(" 2. 학생 정보 삭제\n");
printf(" 3. 학생 정보 탐색\n");
printf(" 4. 학생 정보 학번순으로 출력\n");
printf(" 5. 전부삭제\n");
printf(" 6. 종료\n");
printf("=====================\n\n");
int Select;
printf("Selection : ");
scanf("%d", &Select);
system("cls");
switch (Select)
{
case 1:
++StudentCount;
Head = Insert(Head);
break;
case 2:
printf("학생 이름 : ");
scanf("%s", Name);
Head = Delete(Head, Name);
--StudentCount;
break;
case 3:
printf("검색할 학번 입력 : ");
scanf("%d", &Select);
Search(Head, Select);
break;
case 4:
Print(Head);
system("pause");
break;
case 5:
case 6:
Release(Head, 1);
printf("\n종료");
return;
}
system("pause");
}
}
728x90
반응형
LIST