컴공생의 다이어리

[c++] 정보 추가, 삭제, 검색 및 정렬 프로그램 본문

Development/C & C++

[c++] 정보 추가, 삭제, 검색 및 정렬 프로그램

컴공 K 2021. 2. 11. 02:11

문제

네 가지 기능(배열의 정보 추가, 삭제, 검색 및 정렬)이있는 프로그램을 작성하시오. 배열은 크기 2 * 6 (행 * 열) 정수 유형의 2 차원 배열이다. 첫 번째 열에는 학생 ID가 포함되고 두 번째 행에는 해당 수학 점수가 포함된다. 프로그램이 시작되면 배열이 비어 있다. 사용자의 명령에 따라 반복적으로 수행되는 기능으로 'End'를 입력하면 프로그램이 종료된다. 네 가지 기능 각각에 대한 기능을 만드시오.

  • Append(추가)
    : 사용자가 입력한 학생 ID와 수학 점수 쌍을 배열 끝에 추가한다. 추가하고 나서 배열을 2차원 모양으로 인쇄한다.
  • Delete(삭제)
    : 사용자가 입력한 학생 ID와 일치하는 학생ID와 수학 점수 쌍을 삭제한다. 삭제 한후 배열을 2차원 모양으로 인쇄한다.
  • Search(검색)
    : 사용자가 입력한 학생 ID와 일치하는 학생ID와 수학 점수 쌍을 인쇄한다. 찾은 정보를 인쇄한다.
  • Sort(정렬)
    : 학생 ID 또는 점수에 따라 오름차순으로 배열을 정렬한다. 정렬 후 배열을 2차원 모양으로 인쇄한다.

 

 

코드

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

void Append(int(*arr)[6], int id, int score){
	if (arr[0][0] != NULL && arr[0][1] != NULL && arr[0][2] != NULL && arr[0][3] != NULL && arr[0][4] != NULL && arr[0][5] != NULL)
		cout << "Data space is full" << endl;
	else{
		for (int i = 0; i < 6; i++)	{
			if (arr[0][i] == NULL && arr[1][i] == NULL)	{
				arr[0][i] = id;
				arr[1][i] = score;
				break;
			}
		}
	}

	for (int j = 0; j < 2; j++)	{
		for (int k = 0; k < 6; k++)
			if (arr[j][k] != NULL)
				cout << arr[j][k] << " ";
		cout << endl;
	}
	return;
}

void Search(int(*arr)[6], int id){
	if (arr[0][0] != id && arr[0][1] != id && arr[0][2] != id && arr[0][3] != id && arr[0][4] != id && arr[0][5] != id)
		cout << "There is no data for the corresponding student ID." << endl;
	else{
		for (int i = 0; i < 6; i++)
			if (arr[0][i] == id)
				cout << arr[0][i] << endl << arr[1][i] << endl;
	}

	return;
}

void Sort(int(*arr)[6], char* is){
	if (!strcmp(is, "ID")) {//Sort - ID
		for (int i = 0; i < 6; i++)	{
			int minid = arr[0][i];
			int location = i;
			for (int j = i + 1; j < 6; j++)	{
				if (minid > arr[0][j])	{
					minid = arr[0][j];
					location = j;
				}
			}
			swap(arr[0][i], arr[0][location]);
			swap(arr[1][i], arr[1][location]);
		}
	}
	else if (!strcmp(is, "Score")){ //Sort - Score
		for (int i = 0; i < 6; i++)	{
			int minsc = arr[1][i];
			int location = i;
			for (int j = i + 1; j < 6; j++){
				if (minsc > arr[1][j]){
					minsc = arr[1][j];
					location = j;
				}
			}
			swap(arr[0][i], arr[0][location]);
			swap(arr[1][i], arr[1][location]);
		}
	}

	for (int j = 0; j < 2; j++) {
		for (int k = 0; k < 6; k++)
			if (arr[j][k] != NULL)
				cout << arr[j][k] << " ";
		cout << endl;
	}
	return;
}

void Delete(int(*arr)[6], int id) {
	if (arr[0][0] != id && arr[0][1] != id && arr[0][2] != id && arr[0][3] != id && arr[0][4] != id && arr[0][5] != id)	{
		cout << "There is no data for the corresponding student ID." << endl;
	}
	else {
		for (int i = 0; i < 6; i++)	{
			if (arr[0][i] == id){
				arr[0][i] = NULL;
				arr[1][i] = NULL;
			}
		}
		for (int j = 0; j < 2; j++)	{
			for (int k = 0; k < 6; k++)
				if (arr[j][k] != NULL)
					cout << arr[j][k] << " ";
			cout << endl;
		}
	}
	return;
}
int main()
{
	int arr[2][6] = { NULL, }; //row=6,column=2
	char a[10] = { NULL };//a = Menu select
	int id, score;
	char is[10]; //id or score
	char k[30]; //menu - wrong select

	while (1){
		cout << "#Enter function :";
		cin >> a;
		if (strcmp(a, "Append") && strcmp(a, "Search") && strcmp(a, "Sort") && strcmp(a, "Delete") && strcmp(a, "End"))	{
			cin.getline(k, sizeof(k));
			cout << "You entered wrong. Please enter again" << endl;
		}

		if (!strcmp(a, "Append")){
			cin >> id >> score;
			Append(arr, id, score);
		}
		else if (!strcmp(a, "Search"))	{
			cin >> id;
			Search(arr, id);
		}
		else if (!strcmp(a, "Sort")){
			cin >> is;
			if (strcmp(is, "ID") && strcmp(is, "Score")){
				cout << "You entered wrong. Please enter again" << endl;
			}
			else
				Sort(arr, is);
		}

		else if (!strcmp(a, "Delete"))	{
			cin >> id;
			Delete(arr, id);
		}
		else if (!strcmp(a, "End"))	{
			cout << endl;	break;
		}
		cout << endl;
	}
	return 0;
}

 

 

출력결과

728x90
Comments