큐를 이용한 간단한 구직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;
 

}

}

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,