AR삽질러

C_Project : 학생관리프로그램 본문

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