큐를 이용한 간단한 구직Pro
Queue.h
template<typename TYPE>
struct NODE
{
TYPE data;
};
template<typename TYPE>
class Queue
{
private:
int front;
int rear;
int count;
int maxSize;
NODE<TYPE>* queueAry;
public:
Queue(int size = 100);
~Queue();
bool EnQueue(TYPE dataln);
bool DeQueue(TYPE& dataOut);
int QueueCount();
bool QueueFront(TYPE& dataOut);
bool QueueRear(TYPE& dataOut);
bool EmptyQueue();
bool FullQueue();
};
template<typename TYPE>
Queue<TYPE>::Queue(int size=100)
{
maxSize= size;
queueAry = new NODE<TYPE> [maxSize];
if(!queueAry)
{
cout << " 큐에 할당할 메모리가 충분치 않습니다."<<endl;
exit(100);
}
front =-1;
rear = -1;
count = 0;
}
template<typename TYPE>
Queue<TYPE>::~Queue()
{
delete [] queueAry;
queueAry=NULL;
}
template<typename TYPE>
bool Queue<TYPE>::EnQueue(TYPE dataIn)
{
if(count == maxSize)
{
return false;
}
rear++;
if(rear == maxSize)
{
rear=0;
}
queueAry[rear].data=dataIn;
if(count == 0)
{
front = 0;
}
count++;
return true;
}
template<typename TYPE>
bool Queue<TYPE>::DeQueue(TYPE& dataOut)
{
if(count==0)
{
return false;
}
dataOut = queueAry[front].data;
front++;
if(front== maxSize)
{
front=0;
}
if(count==1)
{
rear=front =-1; // 다시 초기화
}
count--;
return true;
}
template<typename TYPE>
int Queue<TYPE>::QueueCount()
{
return count;
}
template<typename TYPE>
bool Queue<TYPE>::QueueFront(TYPE& dataOut)
{
if(count==0)
{
return false;
//underflow
}
else
{
dataOut = queueAry[front].data;
return true;
}
}
template<typename TYPE>
bool Queue<TYPE>::QueueRear(TYPE& dataOut)
{
if(count==0)
{
return false;
}
else
{
dataOut = queueAry[rear].data;
return true;
}
}
template<typename TYPE>
bool Queue<TYPE>::EmptyQueue()
{
return (count==0);
}
template<typename TYPE>
bool Queue<TYPE>::FullQueue()
{
return (count==maxSize);
}
main.cpp
#include <iostream>
#include <iomanip>
#include <ctime> // 랜덤변수를 넣기 위해
#include "Queue.h"
#include <string>
#include <fstream>
using namespace std;
struct FUNC
{
char name[100];
char num[100];
int time;
};
enum MENU{MENU_ADD,MENU_jobPe, MENU_deQ, MENU_QUIT};
MENU ShowMenu(); //응용
void inPutFUNC(Queue< FUNC >& funclist);
void add(Queue< FUNC >& funclist);
void Pser(Queue< FUNC >& funclist);
int main()
{
Queue<FUNC> FList;
inPutFUNC(FList);
bool flag=false;
while(true)
{
MENU select;
select=ShowMenu();
switch(select)
{
case MENU_ADD:
{
add(FList);
break;
}
case MENU_jobPe:
{
Pser(FList);
break;
}
case MENU_QUIT:
{
cout<<"프로그램종료"<<endl;
flag=true;
break;
}
}
if(flag==true)
{
break;
}
}
return 0; //소멸자
}
MENU ShowMenu()
{
while(true)
{
cout<< "\n------메뉴-----\n";
cout<< "1. 추가 \n";
cout<< "2. 구직서비스 받기 \n";
cout<< "Q. 프로그램 종료\n";
cout<<"===================\n";
cout<<"원하는 작업의 번호를 입력하세요 : ";
char select;
cin>>select;
switch(select)
{
case '1':
return MENU_ADD;
case '2':
return MENU_jobPe;
case 'q':
case 'Q':
return MENU_QUIT;
default :
cout<<"\n올바른 값을 입력해주세요\n";
break;
}
}
}
void inPutFUNC(Queue< FUNC >& funclist)
{
int res;
FUNC func;
ifstream infile;
infile.open("in.txt");
while(infile>>func.name)
{
infile.getline(func.num,sizeof(func.num));
func.time=time(0);
res= funclist.EnQueue(func);
cout<< func.name<<" "<<func.num<<""<<"입력된시간:"<<func.time<<endl;
}
cout<< "현재 큐에 3명의 학생이 서비스를 기다림"<<endl;
infile.close();
}
void add(Queue< FUNC >& funclist)
{
FUNC func;
char temp[15];
bool res;
int count=funclist.QueueCount();
if(count<5)
{
cout<<"이름 입력: ";
cin>>func.name;
cin.getline(temp, 10);
cout<<"전화번호입력: ";
cin.getline(func.num, sizeof(func.num));
func.time=time(0);
res=funclist.EnQueue(func);
cout<<"성공적으로 추가"<<endl;
}
else
{
cout <<"최대학생수 5명이 찼습니다"<<endl;
}
}
void Pser(Queue< FUNC >& funclist)
{
FUNC func;
srand(time(0));
int nowTime=time(0);
while(!(funclist.EmptyQueue()))
{
bool success=funclist.DeQueue(func);
int inFutTime=func.time;
int tot= nowTime-inFutTime;
cout<<endl;
cout<< func.name<<" "<<func.num<<""<<"큐에 들어온 시각"<<func.time<<endl;
cout <<"서비스 받은 시각:"<<time(0) <<endl;
cout<< "큐에서 기다린 시간:"<<tot<<"(s)"<<endl;
cout<<endl;
}
}
'1. IT Story > Development' 카테고리의 다른 글
오픈 API를 이용한 간단한 번역프로그램 (0) | 2012.03.29 |
---|---|
ChatClient (0) | 2012.03.29 |
MultiChatServer (0) | 2012.03.29 |
MultiChatClient (0) | 2012.03.29 |
queueADT를 이용한 간단한 응용프로그램 (0) | 2012.03.29 |
circularAry 큐를 사용하여 복사하기 (0) | 2012.03.29 |
StackADT를 이용한 중위식구하기 (0) | 2012.03.29 |
배열로 구현한 Stack을 이용한 중위식구하기 (0) | 2012.03.29 |