//객체지향 금123 2012.05.04
//2번 200911636박정욱
#include<iostream>
#include<iomanip>
using namespace std;
int data[10]={1, 2, 3, 4, 5}; //data 배열; 1~5번째요소 초기화.
int changed[10]={NULL}; //삽입,수정,삭제 된 요소들을 표시하기 위한 배열.
//ex) i번째 요소가 삭제됬을시, changed[i-1] = 1;
int input_i(); //요소입력 함수. 1~10 의 값만 받고 리턴한다.
//그외의 숫자는 반복문으로 입력을 다시 받는다.
void show_data(); //data배열의 요소들의 값을 보여주는 함수.
//보여준 후 changed[i] (i=0~10)를 NULL로 초기화한다.
void menu(); //menu 목록을 보여주는 함수.
//1.삽입 2.수정 3.삭제 4.종료
//4번 이외의 숫자는 반복으로 다시 menu함수를 다시 수행한다.
void add(); //삽입 함수. data가 모두 입력되있으면 삽입 불가능.
void re(); //수정 함수. data를 수정한다.
void del(); //삭제 함수. data를 삭제한다.
//메인함수
void main()
{
show_data(); //show_data함수 호출. data를 보여준다.1~5번째 요소만 초기값이 있다.
menu(); //menu 함수 호출.
}
//data배열의 요소들의 값을 보여주는 함수.
void show_data()
{
int i; //for문을 이용하기위한 변수
for(i=0; i<10 ; i++)
{
if(changed[i] != NULL){cout <<"★";} //삽입, 수정, 삭제가 되었는지를 확인하여 ★로 표시.
cout << "data["<<i<<"] = ";
if(data[i]==NULL) //data의 값이 NULL인 요소들은 X로 표시.
{ cout << "X"<<endl;}
else //NULL이 아닌 경우 값을 표시.
{ cout << data[i] <<endl;}
}
for(i=0; i<10; i++) //chanded배열의 초기화.
{changed[i] = NULL;}
};
//메뉴함수.
void menu()
{
int input;
while(1) //무한반복문. 4번 종료를 선택하면 종료한다.
{ cout << "1.삽입"<< endl;
cout << "2.수정"<< endl;
cout << "3.삭제"<< endl;
cout << "4.종료"<< endl;
cin >> input;
switch(input)
{
case 1 : add(); break; //add 삽입함수 호출
case 2 : re(); break; //re 수정함수 호출
case 3 : del(); break; //del 삭제함수 호출
case 4 : cout << "종료합니다."<<endl; exit(1); break; //종료
default : cout << "1~4번 입력하세요."<<endl; menu(); //1~4 이외의 숫자를 입력시.
}
}
};
//삽입 함수. 값이없는 요소를 찾아서 입력 받는다.
void add()
{
int i; //for문을 이용하시위한 변수
int input; //사용자로부터 cin할 변수
char more; //n값이 입력되면 삽입 종료, 그외는 계속 삽입
for(i=0; i<10 ; i++)
{ if(data[i] == NULL) //data[i]가 NULL이면 input을 입력받아 data[i]에 삽입.
{
cout << i+1<<"번째 요소에 삽입합니다. 값을 입력하세요(정수)"<<endl;
cin >> input;
data[i]=input;
cout << "삽입 종료합니까?(종료 : n 입력)"<< endl;
cin >> more;
changed[i]= 1; //show_data 함수에 수정된값을 표시하기위해 changed[i]를 1대입.
if(more =='n')
{ break;} //n 입력시 for문 break;
}
}
//위의 for문중 NULL값을 찾지 못하거나
if(i == 10 ) //10번째 요소 이상까지 삽입하면 다음을 출력.
{ cout << "data가 꽉차있어 삽입이 불가능합니다."<<endl;}
show_data(); //data배열을 보여준다.
};
//수정 함수
void re()
{
int i,input; //i 수정 할 요소, 입력받을 input 값
cout <<"몇번째 요소를 수정합니까?"<<endl;
i=input_i(); //input_i함수는 요소 i의 값을 1~10만 입력받아 리턴한다.
cout << i<<"번째 요소를 수정합니다"<<endl;
cin >> input; //값을 입력받아 수정한다.
data[i-1] = input;
changed[i-1]=1; //삽입한 i번째 요소를 표시하기위해 changed[i-1]의 값을 1로 한다.
show_data(); //data배열의 요소들을 보여준다
};
//삭제함수.
void del()
{
int i; //삭제할 i 요소
cout << "몇번째 요소를 삭제합니까? 1~10" << endl;
i=input_i(); //input_i 함수를 호출하여 1~10값을 리턴한다.
if(data[i-1] == NULL) //NULL인 요소는 이미 값이 없다는걸 알려준다.
{ cout << i<<"번째 요소 data[" << i-1<<"]는 이미 값이 없습니다."<<endl;}
else
{ data[i-1] = NULL; //i번쨰 요소 data[i-1]를 NULL로 바꾼다.
cout << i<<"번째 요소 data[" << i-1<<"]을 삭제 하였습니다."<<endl;
changed[i-1]=1; //삭제한 i번째 요소를 표시하기위해 changed[i-1]의 값을 1로 한다.
}
show_data(); //data배열의 요소들을 보여준다
};
//요소 입력 받는 함수.
int input_i()
{ //입력받는 i가 1~10값일경우 i를 리턴하고, 그외는 반복문으로 재입력 받는다.
int i;
cin >> i;
while(i<1 || i>10)
{ cout << " 1~10요소를 선택하세요."<<endl;
cin >> i;
}
return i;
};