Пример #1
0
int main()
{
	int index = -1;
	//List of data
	FacultyList facultylist;
	StaffList stafflist;
	StudentList studentlist;
	do
	{
		//Print Menu
		cout<<"0. 구성원 파일 로드"<<endl;
		cout<<"1. 전체 구성원 조회"<<endl;
		cout<<"2. 학과(부서) 구성원 조회"<<endl;
		cout<<"3. 이름으로 검색"<<endl;
		cout<<"4. ID로 검색"<<endl;
		cout<<"5. 구성원 추가"<<endl;
		cout<<"6. 구성원 정보 수정"<<endl;
		cout<<"7. 구성원 정보 삭제"<<endl;
		cout<<"8. 구성원 목록 저장"<<endl;
		cout<<"9. 프로그램 종료"<<endl;
		cout<<">>";
		cin>>index;
		
		switch(index)
		{
		case 0:
			{
				string filename, name, id, dept, position, mail;
				char inputstring[BUFFERSIZE], *ptr;
				int party = 0, people = 0;

				//Input
				cout<<"파일 이름 입력 : ";
				cin>>filename;

				//File open
				ifstream infile(filename.c_str(), ios::in);
				if(!infile)
				{
					cout<<"파일이 존재하지 않습니다!"<<endl;
					break;
				}

				//Init Lists
				facultylist.RemoveAll();
				stafflist.RemoveAll();
				studentlist.RemoveAll();

				//Parsing
				while(infile.getline(inputstring, BUFFERSIZE-1))
				{	
					//To remove carrage return caracter in linux
					if(strlen(inputstring)>0 && inputstring[strlen(inputstring)-1]=='\r')
						inputstring[strlen(inputstring)-1]=0;
					if(strcmp(inputstring,"-교원")==0)
					{
						party = FACULTY;
						continue;
					}
					else if(strcmp(inputstring,"-직원")==0)
					{
						party = STAFF;
						continue;
					}
					else if(strcmp(inputstring,"-학생")==0)
					{
						party = STUDENT;
						continue;
					}
					else
					{
						//Parsing Data & Copy
						ptr = strtok(inputstring," ");
						name.assign(ptr);
						ptr = strtok(NULL," ");
						id.assign(ptr);
						ptr = strtok(NULL," ");
						dept.assign(ptr);
						ptr = strtok(NULL," ");
						position.assign(ptr);
						ptr = strtok(NULL," ");
						mail.assign(ptr);
						if(party == FACULTY)
							facultylist.Add(id, name, dept, position, mail);
						else if (party == STAFF)
							stafflist.Add(id, name, dept, position, mail);
						else if(party == STUDENT)
							studentlist.Add(id, name, dept, position, mail);
						people++;
					}

				}
				//print Results
				cout<<people<<"명의 정보를 로드하였습니다!"<<endl;
				infile.close();
			}
			break;
		case 1:
			//query entire member
			facultylist.InquireAll();
			cout<<endl;
			stafflist.InquireAll();
			cout<<endl;
			studentlist.InquireAll();
			break;
		case 2:
			//Search by dept name
			{
				string dept;
				int people = 0;
				cout<<"학과(부서) 입력 : ";
				cin>>dept;
				people = facultylist.InquireByDept(dept);
				people += stafflist.InquireByDept(dept);
				people += studentlist.InquireByDept(dept);
				if(people==0) cout<<"해당 학과(부서)의 사람이 존재하지 않습니다!"<<endl;
			}
			break;
		case 3:
			//Search by name
			{
				string name;
				int people = 0;
				cout<<"이름 입력 : ";
				cin>>name;
				people = facultylist.InquireByName(name);
				people += stafflist.InquireByName(name);
				people += studentlist.InquireByName(name);
				if(people==0)
					cout<<"해당 이름의 사람이 존재하지 않습니다!"<<endl;
			}
			break;
		case 4:
			//Search by id
			{
				string id;
				int people = 0;
				cout<<"ID 입력 : ";
				cin>>id;
				people = facultylist.InquireByID(id);
				people += stafflist.InquireByID(id);
				people += studentlist.InquireByID(id);
				if(people==0)
					cout<<"해당 ID의 사람이 존재하지 않습니다!"<<endl;
			}
			break;
		case 5:
			//Add member data
			{
				int party;
				string  id, name, dept, position, mail;
				cout<<"구성원 소속 선택(1.교수 2.직원 3.학생): ";
				cin>>party;
				cout<<"ID 입력: ";
				cin>>id;
				cout<<"이름 입력: ";
				cin>>name;
				cout<<"학과(부서) 입력: ";
				cin>>dept;
				cout<<"직급 입력: ";
				cin>>position;
				cout<<"메일 입력: ";
				cin>>mail;
				if(party == FACULTY)
				{
					if(!facultylist.Add(id, name, dept, position, mail))
						cout<<"이미 같은 ID가 존재합니다!"<<endl;
				}
				else if(party == STAFF)
				{
					if(!stafflist.Add(id, name, dept, position, mail))
						cout<<"이미 같은 ID가 존재합니다!"<<endl;
				}
				else if(party == STUDENT)
				{
					if(!studentlist.Add(id, name, dept, position, mail))
						cout<<"이미 같은 ID가 존재합니다!"<<endl;
				}
				else
				{
					cout<<"잘못된 소속입니다!"<<endl;
				}
			}
			break;
		case 6:
			//Modify member data
			{
				string  id, name, dept, position, mail;
				cout<<"ID 입력: ";
				cin>>id;
				cout<<"이름 입력: ";
				cin>>name;
				cout<<"학과(부서) 입력: ";
				cin>>dept;
				cout<<"직급 입력: ";
				cin>>position;
				cout<<"메일 입력: ";
				cin>>mail;
				if(facultylist.Modify(id, name, dept, position, mail))
					cout<<"수정 완료!"<<endl;
				else if(stafflist.Modify(id, name, dept, position, mail))
					cout<<"수정 완료!"<<endl;
				else if(studentlist.Modify(id, name, dept, position, mail))
					cout<<"수정 완료!"<<endl;
				else
					cout<<"일치하는 ID를 찾을 수 없습니다"<<endl;
			}
			break;
		case 7:
			//delete member data
			{
				string id;
				cout<<"ID 입력: ";
				cin>>id;
				if(facultylist.Delete(id))
					cout<<"삭제 완료!"<<endl;
				else if(stafflist.Delete(id))
					cout<<"삭제 완료!"<<endl;
				else if(studentlist.Delete(id))
					cout<<"삭제 완료!"<<endl;
				else
					cout<<"일치하는 ID를 찾을 수 없습니다"<<endl;
				
			}
			break;
		case 8:
			//saving to file
			{
				string filename;
				cout<<"파일 이름 입력: ";
				cin>>filename;
				ofstream outfile(filename.c_str());
				if(!outfile)
				{
					cout<<"File Open Error"<<endl;
					break;
				}
				outfile<<"-교원"<<endl;
				facultylist.SaveFile(outfile);
				outfile<<"-직원"<<endl;
				stafflist.SaveFile(outfile);
				outfile<<"-학생"<<endl;
				studentlist.SaveFile(outfile);
				cout<<"저장 완료!"<<endl;
				outfile.close();
			}
			break;
		case 9:
			break;
		default:
			{
				//Wrong input
				cout<<"잘못된 입력입니다!"<<endl;
			}
			break;
		}
		cout<<endl;
	}while(index!=9);
	return 0;
}