컴공생의 다이어리
[c++] 정보 추가, 삭제, 검색 및 정렬 프로그램 본문
문제
네 가지 기능(배열의 정보 추가, 삭제, 검색 및 정렬)이있는 프로그램을 작성하시오. 배열은 크기 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
'Development > C & C++' 카테고리의 다른 글
[c++] 입력받은 문자열에서의 특정 문자 빈도 수 (0) | 2021.02.13 |
---|---|
[c++] 2차 함수의 최대 값과 최소값 찾기 (0) | 2021.02.12 |
[c++] 교통 카드 잔액 (0) | 2021.02.10 |
[c++] 문자(별표, 다이아몬드) 찍기 (0) | 2021.02.09 |
[c++] forward_list container(std::forward_list) (0) | 2021.01.30 |
Comments