์ด๋ฒ์ ์ด์ฐ์ํ ๊ณผ์ ๋ก ๋์จ ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ……
๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์์ ๊ฝค๋ ๋ง์ด ์ฐ์ธ๋ค๋๋ฐ……
(๋ฌผ๋ก ๋ค์ํ๊ฒ ์์ฉ ๊ฐ๋ฅ?!)

์ด๊ฒ ๊ฝค๋ ๋จธ๋ฆฌ๋ฅผ ์จ์ผ ๋ง๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ์
์ผ๋จ ์ดํด ํ๋ฉด์ ์ธ์ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ฉํ์๋ค.
์ํด ์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ฃ์๋ง์ ๋ฐ๋ก ์งค์ ์๋ค๋ฉด ์ผ๋ง๋ ์ข์๊น?
์ ์ด์์ฌ ๋์๊ฒ ์ฒ์ฌ์ ์ฌ๋ฅ์ ์ ๋ฐ;;;;;
์์ธํ ์์ค๋ ๋ฐ์์ ๊ณ์~
[spoiler]
#include <stdio.h>
#include <malloc.h>
typedef struct edge // ๊ฐ์ ์ ๋ํ๋ด๋ ๊ตฌ์กฐ์ฒด
{
int vertex[2]; // ์์์ ๊ณผ ๋์
int cost; // ๊ฐ์ค์น
}Edge;
int **make_array(int n);// ๋ฐฐ์ด ๋ง๋ค๊ธฐ
void read_array(FILE *file, int *G[], int n);// ํ์ผ์์ ๋ฐฐ์ด๊ฐ ์ฝ๊ธฐ
void convert_array_to_edge(int* G[], Edge E[], int n);// ๋ฐฐ์ด์ ๊ฐ์ ์ผ๋ก ๋ณํ
void convert_edge_to_array(int* G[], Edge E[], int n, int m);// ๊ฐ์ ์ ๋ฐฐ์ด๋ก ๋ณํ
void print_edgy(Edge E[], int n);// ๊ฐ์ ์งํฉ ์ถ๋ ฅ
void kruskal(int n, int m, Edge E[], Edge F[]);// ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
void bubble_sort(Edge E[], int m);// ๊ฑฐํ ์ ๋ ฌ
void find_merge(int p, int q, int U[]);// ์งํฉ์ ํฉ์น๋ ํจ์
int find_set(int i, int U[]);// ํด๋น ์ ์ ์ด ์ด๋ค ์งํฉ์ ์ํ๋์ง ์ฐพ๋ ํจ์
int main()
{
int n, m; // n๊ฐ์ ์ ์ ๊ณผ m๊ฐ์ ๊ฐ์ ์ ์ ์ฅํ ๋ณ์
int **G; // ๋๋ธ ํฌ์ธํฐ๋ก ๋์ ๋ฐฐ์ด์ ์์ฑํ ๋ณ์ ์ ์ธ
int **result; // ์ต์์ ์ฅ ํธ๋ฆฌ๋ฅผ ์ธ์ ๋ฐฐ์ด๋ก ๋ํ๋ด๊ธฐ ์ํ ๋ณ์ ์ ์ธ
Edge *E, *F;
FILE* file;
file = fopen(”kruskal_array.txt”, “r”);
if(file == NULL) {
perror(”File open error”);
return 0;
}
fscanf(file, “%d %d”, &n, &m); // ํ์ผ๋ก๋ถํฐ m, n์ ์
๋ ฅ ๋ฐ๋๋ค
E = (Edge *) malloc(sizeof(Edge)*(m-1)); // ์ฒ์ ์
๋ ฅ ๋ฐ์ ๋ฐฐ์ด์ ๊ฐ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํ Edge
F = (Edge *) malloc(sizeof(Edge)*(n-2)); // ์ต์๋น์ฉ ์ ์ฅํธ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ Edge
G = make_array(n); // ๋ฐฐ์ด ๋ง๋ค๊ธฐ
result = make_array(n);
read_array(file, G, n); // ํ์ผ์์ ๋ฐฐ์ด ์ ๋ณด ์ฝ๊ธฐ
convert_array_to_edge(G, E, n); // ๋ฐฐ์ด ์ ๋ณด๋ฅผ ๊ฐ์ ์ ๋ณด๋ก ๋ณํ
printf(”\n## Kruskal ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ ##\n”); // ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ฆฐ ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ๋ฅผ F ๊ฐ์ ์งํฉ์ ์ฝ์
kruskal(n, m, E, F); // ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ ๊ฒฐ๊ณผ ์ถ๋ ฅ
printf(”\n์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ ๊ฒฐ๊ณผ\n”);
print_edgy(F, n);
printf(”\n์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ ๊ฒฐ๊ณผ(์ธ์ ๋ฐฐ์ด)\n”);
convert_edge_to_array(result, F, n, m); // n-1๊ฐ์ ๊ฐ์ ์ด F์ ํฌํจ๋๋ฏ๋ก
fclose(file);
return 0;
}
void print_edgy(Edge E[], int n) // ๊ฐ์ ์งํฉ ์ถ๋ ฅ
{
int i;
for(i = 0; i < n; i++) {
if(E[i].cost != 0)
printf(”v%d -> v%d, ๊ฐ์ค์น = %d\n”, E[i].vertex[0]+1, E[i].vertex[1]+1, E[i].cost);
}
}
int** make_array(int n) // N x N ๋ฐฐ์ด ๋ง๋ค๊ธฐ
{
int i, j;
int** array; // N x N ๋์ ๋ฐฐ์ด์ ํ ๋น๋ฐ์ ๋๋ธ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธ
n–;
array = (int**)malloc(sizeof(int*)*n);
for(i = 0; i <= n; i++) {
array[i] = (int*)malloc(sizeof(int)*n);
}
for (i = 0; i <= n; i++) {
for (j = 0; j <= n; j++) {
array[i][j] = 0;
}
}
return array; // array์ ์ฃผ์๊ฐ์ ๋ฐํํด์ค๋ค
}
void read_array(FILE *file, int *G[], int n) // ํ์ผ์์ ๋ฐฐ์ด ๊ฐ์ ์ฝ์ด ๋ฐฐ์ด G์ ์ ์ฅ
{
int i, j;
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
fscanf(file, “%d”, &G[i][j]);
}
}
}
void convert_array_to_edge(int *G[], Edge E[], int n)// ๋ฐฐ์ด ์ ๋ณด๋ฅผ ๊ฐ์ ์ ๋ณด๋ก ๋ณํ
{
int i, j, num = 0;
for(i = 0; i < n; i++) { // ๋ฐฐ์ด์ ์ ๋ณด๋ฅผ ๊ฐ์ ๊ตฌ์กฐ์ฒด์ ์ฝ์
for(j = i; j < n; j++) {
if( G[i][j] != 0 && G[i][j] != 99 ) { // ๊ฐ์ค์น์ ๊ฐ์ด 1์์ 99 ์ฌ์ด๋ก ์กด์ฌํ ๋
E[num].vertex[0] = i; // i๋ฅผ ๋ฐฐ์ด ์ฒซ๋ฒ์งธ ์์์ ๋ฃ๋๋ค(๊ฐ์ ์ ์์์ )
E[num].vertex[1] = j; // j๋ฅผ ๋ฐฐ์ด ๋๋ฒ์งธ ์์์ ๋ฃ๋๋ค(๊ฐ์ ์ ๋์ )
E[num].cost = G[i][j]; // ๊ฐ์ค์น๋ฅผ ๋ฃ๋๋ค
num++; // E์ ๋ค์๋ฐฐ์ด์ ์ฆ๊ฐ์์ผ์ค๋ค
}
}
}
}
void convert_edge_to_array(int* G[], Edge F[], int n, int m)
{
int i, j;
int sum = 0;
int num = 0;
while (num < m) {
for (i = 0; i < n; i++) {
if (F[num].vertex[0] == i) {
for (j = 0; j < n; j++) {
if (F[num].vertex[1] == j) {
G[j][i] = F[num].cost;
G[i][j] = F[num].cost;
sum += F[num].cost;
continue;
}
}
}
}
num++;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf(”%2d “, G[i][j]);
}
printf(”\n”);
}
printf(”์ด๋น์ฉ : %d\n”, sum);
}
void kruskal(int n, int m, Edge E[], Edge F[]) // ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
{
int start_vertex, end_vertax, i, current_edge;
int p, q; // ์๋ก์ ์ฒดํฌ๋ฅผ ์ํ ์งํฉ์ ๊ฐ๋ฆฌํค๋ ๋ณ์
int num = 0;
int* U = (int*)malloc(sizeof(int)*(n-1)); // ์งํฉ ์ ์ธ
Edge edge_temp;
printf(”\n์ ๋ ฌ ์ Edge E\n”);
print_edgy(E, m);
bubble_sort(E, m); // E์ ์ํ m๊ฐ์ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์์ ๊ฒ๋ถํฐ ์ฐจ๋ก๋ก ์ ๋ ฌ
printf(”\n์ ๋ ฌ ํ Edge E\n”);
print_edgy(E, m);
for (i = 0; i < n; i++) {// ์งํฉ Initialize
U[i] = i;
}
current_edge = 0;
while(num < n-1) { // ๊ฐ์ ์ ์๊ฐ n-1๋ณด๋ค ์์ ๋์
edge_temp = E[current_edge]; // ์์ง ๊ณ ๋ คํ์ง ์์ ๊ฐ์ ์ค ๊ฐ์ค์น๊ฐ ์ต์์ธ ๊ฐ์
start_vertex = E[current_edge].vertex[0]; // i, j = e์ ์ฐ๊ฒฐ๋ ์ ์
end_vertax = E[current_edge].vertex[1];
p = find_set(start_vertex, U); // start_vertax๊ฐ ์ํ๋ ์งํฉ์ p์ ์ ์ฅ
q = find_set(end_vertax, U); // end_vertax๊ฐ ์ํ๋ ์งํฉ์ q์ ์ ์ฅ
if(p != q ) { // p์ q ๊ฐ ์๋ก ์ํ ์งํฉ์ด ๋ค๋ฅด๋ค๋ฉด
find_merge(p, q, U); // p, q๊ฐ ์ํ ์งํฉ์ ํฉ์นจ
F[num] = edge_temp; // edge_temp๋ฅผ F์ ์ถ๊ฐ
num++;
}
current_edge++;
}
}
int find_set(int i, int U[]) // i๊ฐ ์งํฉ U์ ์ด๋ ์งํฉ์ ์ํ๋?
{
int j;
j = i;
while(U[j] != j) {
j = U[j];
}
return j;
}
void find_merge(int p, int q, int U[]) // p, q๋ฅผ ์งํฉ U์ ํฉ์นฉ
{
if (p < q) { // p๋ ํฉ๋ณ๋ ์งํฉ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
U[q] = p; // q๋ ๋ ์ด์ ์งํฉ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์๋
}
else {
U[p] = q;
}
}
void bubble_sort(Edge E[], int m) // E ์ฃ์ง ์งํฉ์ ๊ฐ์ค์น๋ฅผ ์ ๋ ฌํ๊ธฐ ์ํ ํจ์
{
int i, Sorted = 0;
Edge tmp;
while( !S
orted ) {// ์ ๋ ฌ์ด ์๋ฃ๋์ง ์์์ผ๋ฉด
Sorted = 1;
for(i = 1; i < m; i++) {
if( E[i-1].cost > E[i].cost ) {
tmp = E[i-1];
E[i-1] = E[i];
E[i] = tmp;
Sorted = 0;
}
}
}
}
[/spoiler]
๊ฒ์ ๋ ์ง : 6์ 9th, 2008
๊ธ ๋ถ๋ฅ :
ํ๋ก๊ทธ๋๋ฐ
ํ๊ทธ :
๊ณผ์ ,
๊ตฌ์กฐ,
๋น์ฉ,
์ํ,
ํธ๋ฆฌ,
์ ์ฅ,
์ด์ฐ,
์ด์ฐ์ํ,
์๋ฃ,
์๋ฃ๊ตฌ์กฐ,
์ต์,
์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ
๋จ๊น๋ง :
ํ๋๋ ์์ด์ฉ!.
์ด๋ฒ์ ๋ง๋ ํ๋ก๊ทธ๋จ์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ
๊ฐ๋จํ? ์
,ํด์ ๋ฐ ๋ณ์ค ๋ฐ ๋ณ๋ ์
์ํํฉ์ ์์ ์๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
ํ์ผ๋ก๋ถํฐ ์
๋ ฅ๋ฐ์ ํ์์ ๋ณ์ค ๋ชฉ๋ก์ ์ด์ฉํด์
๋ณ์ค ์ ๋ณด ์์ ๋งํฌ๋๋ฆฌ์คํธ๋ก ์
์์ค์ธ ํ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ
๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ค.
ํด์์ ๋ฐ๋๋ก ๋งํฌ๋๋ฆฌ์คํธ์์ ์ ์ธํ๋๊ฒ.
ํ์ ๋ชฉ๋ก์ ํ์ฌ ์
์์ค์ธ ํ์์ ํด์ํ ํ์ 2๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์ด
์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ชฉ๋ก์ ๊ฐ๊ฐ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์
์ ๋ฐ ํด์์ ๊ฐ๊ฐ ๋ชฉ๋ก์ผ๋ก ์ฎ๊ฒจ์ฃผ์ด์ผ ๋๋ ๋จ์ ์ด ์์ง๋ง
๋ฐ๋ก ๊ด๋ฆฌ ํ๊ธฐ ๋๋ฌธ์ ๋ ํธ๋ฆฌํ ๋ถ๋ถ์ด ์๋ค.
[spoiler "์์ค ๋ด์ฉ"]
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
#include <time.h>
using namespace std;
#pragma warning(disable:4996) // warning ์ ๊ฐ์ถฐ์ฃผ๋ ๋งคํฌ๋ก
#define MAX_PATIENTS 100 // ์ต๋ ํ์์
#define MAX_ROOMS 100 // ์ต๋ ๋ฐฉ์
#define MAX_CLINICAL_PARTS 10 // ์ต๋ ์ง๋ฃ๋ถ์์
#define MAX_LENGTH 20 // ์ต๋๊ธธ์ด
#define MAX_DATE_LEN 9 // “yyyymmdd”
#define EMPTY “”
#define EMPTY_DATE “0″ // empty data of in_date or out_date
#define EMPTY_ROOM -1
#define EMPTY_PATIENT -1
#define DUMMY_P_ID -999 // ๋ณ์ค ์
์ ํ์ ๋ชฉ๋ก ๋๋ฏธ๋
ธ๋์ Patient ID ๊ฐ
#define SUCCESS 1
#define NOT_FOUND -1
#define CHECKED_IN -2 // ์
์์ค์ธ ํ์
#define CHECKED_OUT -3 // ํด์ํ ํ์
#define WANT_TO_QUIT -999
#define TRUE 1
#define FALSE 0
// menu constants
#define CHECK_IN 1
#define CHECK_OUT 2
#define INQUIRY 3
#define EXIT 4
void get_date(char date[]);
int get_menu();
//ํ์ ๊ด๋ จ ํด๋์ค
class Patient {
int patient_id; // ๊ณ ์ ๋ฒํธ
char patient_name[MAX_LENGTH];
char sex; // F:female, M:male
int age;
char insurance; // Y:๊ฐ์
, N:๋ฏธ๊ฐ์
char clinic_part;
char in_date[MAX_DATE_LEN]; // yyyymmdd
int room_no; // ํ์ฌ ์
์์ค์ธ ํ์: ๋ณ์ค๋ฒํธ, ํด์ํ์:NULL
char out_date[MAX_DATE_LEN]; // ํ์ฌ ์
์์ค์ธ ํ์: EMPTY, ํด์ํ์:ํด์์ผ
public:
Patient() { // ์์ฑ์
patient_id=EMPTY_PATIENT; strcpy(patient_name, “”);
sex=0; age=0; insurance=’N';
clinic_part=0;
strcpy(in_date, “”);
room_no = EMPTY_ROOM, strcpy(out_date, “”);
}
Patient(int p_id, char *p_name, char p_sex, int p_age, char p_insurance, char p_clinic_part, char *p_in_date, int r_no, char *p_out_date) { // ์์ฑ์ ์ค๋ฒ๋ผ์ด๋ฉ
patient_id=p_id;
strncpy(patient_name, p_name, MAX_LENGTH);
sex=p_sex;
age=p_age;
insurance=p_insurance;
clinic_part=p_clinic_part;
strncpy(in_date, p_in_date, MAX_DATE_LEN);
room_no = r_no;
strncpy(out_date, p_out_date, MAX_DATE_LEN);
}
~Patient() { } // ํ๊ดด์
void setPatientId(int p_id) { patient_id = p_id; } //ํ์ ID ์ ์ฅ
int getPatientId() { return patient_id; } //ํ์ ID ๋ฐํ
char* getPatientName() { return patient_name; } //ํ์ ์ด๋ฆ๋ฐํ
char getSex() { return sex; } //ํ์ ์ฑ๋ณ ๋ฐํ
int getAge() { return age; } // ํ์ ๋์ด ๋ฐํ
char getInsurance() { return insurance; } // ํ์ ๋ณดํ์ฌ๋ถ ๋ฐํ
char getClinicPartId() { return clinic_part; } // ์ง๋ฃ๋ถ์ ๋ฐํ
char* getInDate() { return in_date; } // ์
์์ผ์ ๋ฐํ
int getRoomNo() { return room_no; } // ์
์๋ณ์ค ๋ฐํ
char* getOutDate() { return out_date;} // ํด์์ผ์ ๋ฐํ
void setRoomNo(int room) { room_no = room; }
void SetOutDate(char date[]) { strcpy(out_date, date); }
};
// ํ์ ๋ชฉ๋ก ํด๋์ค
class PatientList {
int max_number;
int patient_count;
Patient *patient_list; // ํ์ ๋ชฉ๋ก์ ๋ฐฐ์ด
public:
PatientList() {max_number=MAX_PATIENTS; patient_count=0; patient_list = new Patient[MAX_PATIENTS];}
PatientList(int n) {max_number=n; patient_count=0; patient_list = new Patient[n];}
~PatientList() { delete[] patient_list;}
int getMaxNumber() { return max_number; }
int getPatientCount() { return patient_count; }
Patient *getPatientList() { return patient_list;}
Patient getPatient(int index) {return patient_list[index];}
void InsertPatient(Patient p);
void deletePatient(int p_index);
int findPatientByIndex(int p_id); // ID๋ฅผ ์ด์ฉํด ํ์ ๋ชฉ๋ก ๊ฒ์ํ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
void SortPatientList();
};
// ํ์ ์ ๋ณด ํจ๋ค๋ง ํด๋์ค
class PatientDataHandler {
ifstream in;
ofstream out; // ํ์ผ ์ถ๋ ฅ์ฉ out์ ์ ์ธ
void OpenPatientFile(char *fname) {in.open(fname);}
void SavePatientFile(char *fname) {out.open(fname);}
void ClosePatientFile() {in.close();}
void CloseSavePatientFile() {out.close();}
Patient getPatientFromFile(); // ํ์ ์ ๋ณด๋ฅผ ํ์ผ๋ก๋ถํฐ ๋ถ๋ฌ์จ๋ค.
public:
PatientDataHandler() {}
~PatientDataHandler() {}
int getPatientIdFromKeyboard(); // ํค๋ณด๋๋ก๋ถํฐ ํ์ID๋ฅผ ์
๋ ฅ๋ฐ์ ๋ฐํํด์ค
Patient getPatientDataFromKeyboard(int p_id); // ํค๋ณด๋๋ก๋ถํฐ ํ์์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์
void getPatientsFromFile(char *fname, PatientList *in_p_list, PatientList *out_p_list); //ํ์ผ๋ก๋ถํฐ ํ์๋ชฉ๋ก์ ์
๋ ฅ๋ฐ์
void savePatientToFile(char *fname, PatientList *in_p_list, PatientList *out_p_list); // ํ์ ๋ชฉ๋ก์ ํ์ผ๋ก ์ ์ฅํจ
};
// ๋ณ์ค ์ ๋ณด์ ์ฐ๊ฒฐ๋ ํ์ NODE ํด๋์ค
class PatientNode
{
int patient_id;
PatientNode * pNext; // ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ํ ํฌ์ธํฐ
public:
PatientNode() {}
PatientNode(int p_id) {patient_id = p_id; pNext = NULL; }
~PatientNode() {};
int getPatientId() { return patient_id; }
PatientNode* getPatientNodepNext() { return pNext;}
void SetPatientNodepNext(PatientNode *p_pNext) { pNext = p_pNext;}
};
// ์ง๋ฃ๋ถ์ ํด๋์ค
class ClinicPart
{
char part_id; // ์ง๋ฃ๋ถ์ ์ฝ๋
char part_name[MAX_LENGTH]; // ์ง๋ฃ๋ถ์ ์ด๋ฆ
int ward_no; // ๋ณ๋ ์ธ๋ฑ์ค
public:
ClinicPart() {part_id = 0; strcpy(part_name, “”); ward_no=0;}
ClinicPart(int p_id, char *p_name, int w_no) {part_id = p_id; strcpy(part_name, p_name); ward_no = w_no; }
~ClinicPart(){}
char getPartId() {return part_id;}
char* getPartName() {return part_name;}
int getWardNo() {return ward_no;}
};
// ์ง๋ฃ๋ถ์ ๋ชฉ๋ก ํด๋์ค
class ClinicPartTable
{
int count; // ํ์ฌ ์ง๋ฃ๋ถ์์ ์
ClinicPart * clinicPartTable; // ์ง๋ฃ๋ถ์ ๋ฐฐ์ด
public:
ClinicPartTable();
~ClinicPartTable() { delete[] clinicPartTable; }
ClinicPart getClinicPartId(char pId); // ์ง๋ฃ๋ถ์ ์ฝ๋์ ํด๋นํ๋ ์ง๋ฃ๋ถ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
ClinicPart getClinicPartId(int roomNo); // ๋ณ์ค ๋ฒํธ์ ํด๋นํ๋ ์ง๋ฃ๋ถ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฉ์
};
// ๋ณ์ค ์ ๋ณด ํด๋์ค
class Room
{
int room_no; // ๋ณ์ค๋ฒํธ
int capacity; // ์์ฉ์ธ์
char sex; // B:both, F:female, M:male
int count; // ํ์ฌ ์
์ ํ์ ์
public:
PatientNode *p_list; // ํด๋น ๋ณ์ค ์
์ํ์ ๋ชฉ๋ก์ ๋ํ ํฌ์ธํฐ, ๋๋ฏธ ๋
ธ๋ ์ฌ์ฉ
public:
Room() { room_no=EMPTY_ROOM; capacity=0; sex=’ ‘; count=0; p_list=new PatientNode(DUMMY_P_ID); }
Room(int r_no, int r_capa, char r_sex) { room_no=r_no; capacity=r_c
apa; sex=r_sex, count=0; p_list=new PatientNode(DUMMY_P_ID); }
~Room(){}
int getRoomNo() { return room_no; }
int getCapacity() { return capacity; }
char getSex() { return sex;}
int getCount() { return count; }
PatientNode * getPatinetList() { return p_list; }
void insertPatient(PatientNode* p); // ํ์ ๋
ธ๋๋ฅผ ๋ณ์ค ์ ๋ณด์ ์ฝ์
int deletePatient(int p_id); // ๋๊ฒจ๋ฐ์ ID๋ก ํ์ ์ ๋ณด ์ญ์
};
// ๋ณ์ค ๋ชฉ๋ก ํด๋์ค
class RoomList
{
int max_number; // ์ต๋ ๋ณ์ค ๊ฐฏ์
int count; // ํ์ฌ ๋ณ์ค์ ๊ฐฏ์
Room *room_list; // ๋ณ์ค ๋ชฉ๋ก์ ๋ฐฐ์ด
public:
RoomList() {max_number = MAX_ROOMS; count = 0; room_list = new Room[MAX_ROOMS]; };
RoomList(int n) {max_number = n; count = 0; room_list = new Room[n]; };
~RoomList(){}
int getCount() { return count;}
int getRoomIndex(int room_no);
Room * getRoom(int index) { return &room_list[index];}
void loadPatientsIntoRoom(PatientList &in_p_list); // ์ฝ์ด์จ ํ์ ์ ๋ณด๋ฅผ ๋ณ์ค์ ์ฝ์
int findRoomIndexForCheckIn(char clinicPart_id, char sex); // ์ฑ๋ณ๊ณผ ์ง๋ฃ๋ถ์์ ๋ง๋ ๋ณ์ค์ ์ฐพ์ ๋ณ๋๋ฒํธ๋ฅผ ๋ฐํ
void insertRoom(Room r); // ๋ณ์ค ์ ๋ณด๋ฅผ ์ฝ์
};
// ๋ณ์ค ์ ๋ณด ํธ๋ค๋ฌ ํด๋์ค
class RoomDataHandler
{
ifstream in;
void openRoomFile(char *fname) { in.open(fname); }
void closeRoomFile() { in.close(); }
Room getRoomFromFile(); // ํ์ผ๋ก๋ถํฐ ๋ณ์ค ์ ๋ณด๋ฅผ ์ฝ์ด์จํ ๋ฐํํ๋ค
public:
RoomDataHandler(){}
~RoomDataHandler(){}
int getClinicPartIdIdFromKeyboard(); // ์ง๋ฃ๋ถ์๋ฅผ ํค๋ณด๋๋ก๋ถํฐ ์
๋ ฅ๋ฐ๋๋ค.
void getRoomListFromFile(char *fname, RoomList *r_list); // ํ์ผ๋ก๋ถํฐ ๋ณ์ค ์ ๋ณด๋ฅผ ์ฝ์ด์ ๋ณ์ค ๋ชฉ๋ก์ ๋ง๋ ๋ค
};
// ์ฌ์ฉ์๋ก ๋ถํฐ ์
๋ ฅ๋ฐ์ ๋ฉ๋ด๋ฅผ ์งํ
class RoomListProcessor {
public :
RoomListProcessor() {};
~RoomListProcessor() {};
void checkInHandler(PatientList &in_p_list, PatientList &out_p_list, RoomList &room_list);
void checkOutHandler(PatientList &in_p_list, PatientList &out_p_list, RoomList &room_list);
void inquiryHandler(PatientList &in_p_list, PatientList &out_p_list, RoomList &room_list);
};
// ===== Class ์ ์ ์์======
void PatientList::InsertPatient(Patient p)
{
if(patient_count >= max_number) {
cout << “ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค.\n” << endl;
exit(1);
}
patient_list[patient_count] = p;
patient_count++;
}
void PatientList::deletePatient(int p_index)
{
int i;
if (patient_count == 0) {
cout << “Patient List Empty!!” << endl;
return;
}
for (i = p_index; i < patient_count; i++) {
patient_list[i] = patient_list[i+1];
}
patient_count–;
}
// ID๋ฅผ ์ด์ฉํด ํ์ ๋ชฉ๋ก ๊ฒ์ํ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
int PatientList::findPatientByIndex(int p_id)
{
for(int i=0; i<patient_count; i++ )
if(p_id == patient_list[i].getPatientId()) return i;
return NOT_FOUND;
}
// ๋ฒ๋ธ sort ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ์ ๋ ฌ
void PatientList::SortPatientList()
{
Patient temp; // ์ค์์ ์ํ temp
for(int i=0; i<patient_count; i++) {
int min = i;
for(int j=i+1; j<patient_count; j++)
if(patient_list[j].getPatientId() < patient_list[min].getPatientId())
min = j;
if(min != i) {
temp = patient_list[i];
patient_list[i] = patient_list[min];
patient_list[min]= temp;
}
}
}
int PatientDataHandler::getPatientIdFromKeyboard()
{
int p_id;
cout << “\nType patient id, (quit to ” << WANT_TO_QUIT << ” )==> “;
cin >> p_id;
return p_id;
}
// ํ์ ์ ๋ณด๋ฅผ ํค๋ณด๋๋ก๋ถํฐ ์
๋ ฅ๋ฐ๋๋ค
Patient PatientDataHandler::getPatientDataFromKeyboard(int p_id)
{
char name[MAX_LENGTH];
char sex; // F:female, M:male
int age;
char insurance; // Y:๊ฐ์
, N:๋ฏธ๊ฐ์
char clinic_part;
char in_date[MAX_DATE_LEN];
char out_date[MAX_DATE_LEN];
// ID๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ ๋ณด๋ฅผ ํค๋ณด๋๋ก ๋ถํฐ ์
๋ ฅ๋ฐ๋๋ค.
cout << “\nType a patient name ==> “;
cin >> name;
cout << “\nType sex of patient. (F:female, M:male) ==> “;
cin >> sex;
cout << “\nType age of patient ==> “;
cin >> age;
cout << “\nType insurance. (0:๋ฏธ๊ฐ์
, 1:๊ฐ์
) ==> “;
cin >> insurance;
cout << “\nType a clinical part id. ==> “;
cin >> clinic_part;
get_date(in_date); // ์
์์ผ์๋ฅผ ํ์ฌ๋ ์ง๋ก ์
๋ ฅ๋ฐ๋๋ค.
strcpy(out_date, “”); // ํด์์ผ์์ “”๋ฅผ ๋ฃ์ด์ค๋ค.
Patient p(p_id, name, sex, age, insurance, clinic_part, in_date, EMPTY_ROOM, out_date); // ์
๋ ฅ๋ฐ์ ๊ฐ์ผ๋ก Patient ํด๋์ค๋ฅผ ์์ฑ
return p; // Patient ํด๋์ค๋ฅผ ๋ฐํํด์ค๋ค.
}
// ํ์ ์ ๋ณด๋ฅผ ํ์ผ๋ก๋ถํฐ ์ ์ฅ๋ฐ๊ณ ์ ์ฅ๋ฐ์ ๊ฐ์ ๋ฐํํ๋ค.
Patient PatientDataHandler::getPatientFromFile()
{
int id;
char name[MAX_LENGTH];
char sex; // F:female, M:male
int age;
char insurance; // Y:๊ฐ์
, N:๋ฏธ๊ฐ์
char clinic_part;
char in_date[MAX_LENGTH];
int room_no;
char out_date[MAX_LENGTH];
if( in.eof() ) {
Patient p(EMPTY_PATIENT,”", 0, 0, 0, 0, “”, 0, “”);
return p;
}
in >> id >> name >> sex >> age >> insurance >> clinic_part >> in_date >> room_no >> out_date;
Patient p(id, name, sex, age, insurance, clinic_part, in_date, room_no, out_date);
return p;
}
// ํ์ผ๋ก๋ถํฐ ์ฝ์ด๋ค์ธ ํ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ํ์ ๋ชฉ๋ก์ ๋ง๋ ๋ค
void PatientDataHandler::getPatientsFromFile(char *fname, PatientList *in_p_list, PatientList *out_p_list)
{
Patient p;
OpenPatientFile(fname);
while(1) { // ํ์ผ๋ก ๋ถํฐ ์ฝ์ด์จ ํ์ ์ ๋ณด๊ฐ NULL ๊ฐ์ ๊ฐ์ง๋๊น์ง ๋ฐ๋ณต
p = getPatientFromFile();
if (p.getPatientId() == EMPTY_PATIENT) break;
if ( strcmp(p.getOutDate(), EMPTY_DATE) == 0) in_p_list->InsertPatient(p); // ์
์ํ์ ๋ชฉ๋ก์ ๋ง๋ ๋ค
else out_p_list->InsertPatient(p); // ํด์ํ์ ๋ชฉ๋ก์ ๋ง๋ ๋ค
}
ClosePatientFile();
}
void PatientDataHandler::savePatientToFile(char *fname, PatientList *in_p_list, PatientList *out_p_list)
{
Patient p;
SavePatientFile(fname);
int i;
for (i = 0; i < in_p_list->getPatientCount(); i++) {
p = in_p_list->getPatient(i);
out << p.getPatientId() <<” “<< p.getPatientName() << ” ” << p.getSex() << ” ” << p.getAge() << ” ” << p.getInsurance() << ” ” << p.getClinicPartId() << ” ” << p.getInDate() << ” ” << p.getRoomNo() << ” ” << “0″ << endl;
}
for (i = 0; i < out_p_list->getPatientCount(); i++) {
p = out_p_list->getPatient(i);
out << p.getPatientId() <<” “<< p.getPatientName() << ” ” << p.getSex() << ” ” << p.getAge() << ” ” << p.getInsurance() << ” ” << p.getClinicPartId() << ” ” << p.getInDate() << ” ” << p.getRoomNo() << ” ” << p.getOutDate() << endl;
}
CloseSavePatientFile();
}
// ์ง๋ฃ๋ถ์ ํ
์ด๋ธ์ ๋ง๋ ๋ค
ClinicPartTable::ClinicPartTable()
{
cli
nicPartTable = new ClinicPart[5];
clinicPartTable[0] = ClinicPart(’A', “๋ด๊ณผ”, 61);
clinicPartTable[1] = ClinicPart(’B', “์ธ๊ณผ”, 62);
clinicPartTable[2] = ClinicPart(’C', “์ ๊ฒฝ๊ณผ”, 63);
clinicPartTable[3] = ClinicPart(’D', “์์๊ณผ”, 64);
clinicPartTable[4] = ClinicPart(’E', “์ฐ๋ถ์ธ๊ณผ”, 65);
count = 5;
}
ClinicPart ClinicPartTable::getClinicPartId(char pId)
{
for(int i=0; i<count; i++)
if(clinicPartTable[i].getPartId() == pId) return clinicPartTable[i];
return ClinicPart(NOT_FOUND, NULL, 0); // NOT_FOUND
}
ClinicPart ClinicPartTable::getClinicPartId(int roomNo)
{
for(int i=0; i<count; i++)
if( clinicPartTable[i].getWardNo() == (roomNo/10) ) return clinicPartTable[i];
return ClinicPart(NOT_FOUND, NULL, 0); // NOT_FOUND
}
// ํ์ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํด์ค๋ค.(๋งํฌ๋ ๋ฆฌ์คํธ)
void Room::insertPatient(PatientNode* p)
{
PatientNode *ptr = p_list;
// ๋๋ฏธ ๋ค์ Node๋ก ์ฐ๊ฒฐ
p->SetPatientNodepNext(ptr->getPatientNodepNext());
ptr->SetPatientNodepNext(p);
count++;
}
// ํ์ ๋
ธ๋๋ฅผ ์ญ์ ํ๋ค.
int Room::deletePatient(int p_id)
{
PatientNode *ptr = p_list;
PatientNode *trail;
while(ptr != NULL) {
if(ptr->getPatientId()== p_id) {
trail->SetPatientNodepNext(ptr->getPatientNodepNext());
delete ptr; // ptr ์ ๋ฉ๋ชจ๋ฆฌ ํด์ ํด์ค
count–; // ํ์ฌ ํ์์๋ฅผ -1 ํด์ค
return SUCCESS;
}
trail = ptr;
ptr = ptr->getPatientNodepNext();
}
return NOT_FOUND;
}
void RoomList::loadPatientsIntoRoom(PatientList &in_p_list)
{
int p_list_count = in_p_list.getPatientCount();
for(int i=0; i<p_list_count; i++) {
// ํ์ ๋ฐ์ดํฐ ํ๋ ์ ํ
Patient p = in_p_list.getPatient(i);
// ๊ธฐ์กด ์
์ ๋ณ์ค์ ์ ํ
int roomNo = p.getRoomNo();
int r_index = getRoomIndex(roomNo);
if( r_index == NOT_FOUND) {
cout << “์กด์ฌํ์ง ์๋ ๋ณ์ค ๋ฒํธ์
๋๋ค.” << endl;
continue;
}
Room *room = getRoom(r_index);
if( room->getCount() >= room->getCapacity() ) {
cout << “์
์ ๊ฐ๋ฅ ํ์์๋ฅผ ์ด๊ณผํ์ฌ ” << p.getPatientId() << “ํ์๋ ์ฒ๋ฆฌ ํ ์ ์์ต๋๋ค.” << endl;
continue;
}
// ํ์ ๋
ธ๋ ๋ง๋ค์ด์ ๋ณ์ค์ ํ์ ์ฝ์
PatientNode *pNode = new PatientNode(p.getPatientId());
room->insertPatient(pNode);
}
}
int RoomList::findRoomIndexForCheckIn(char clinicPart_id, char sex)
{
ClinicPartTable clinicPartTable;
ClinicPart clinicPart;
Room room;
char r_sex;
clinicPart = clinicPartTable.getClinicPartId(clinicPart_id);
// ์
์ ๊ฐ๋ฅํ ๋ณ์ค์ ์ฐพ๋ ์กฐ๊ฑด ๊ฒ์ฌ
for(int i=0; i<count; i++) {
room = room_list[i];
if( room.getRoomNo()/10 != clinicPart.getWardNo() ) continue;
r_sex = room.getSex();
if( r_sex != ‘B’ && r_sex != sex ) continue;
if( room.getCount() >= room.getCapacity()) continue;
return i;
}
return NOT_FOUND;
}
int RoomList::getRoomIndex(int room_no)
{
for(int i=0; i<count; i++)
if(room_list[i].getRoomNo() == room_no) return i;
return NOT_FOUND;
}
void RoomList::insertRoom(Room r)
{
if( count >= max_number) {
cout << “๋ณ์ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค.\n” << endl;
exit(1);
}
room_list[count] = r;
count++;
}
Room RoomDataHandler::getRoomFromFile()
{
int room_no; // ๋ณ์ค๋ฒํธ
int capacity; // ์์ฉ์ธ์
char sex; // B:both, F:female, M:male
Room nullRoom;
if( in.eof()) return nullRoom;
in >> room_no >> capacity >> sex;
Room r(room_no, capacity, sex);
return r;
}
void RoomDataHandler::getRoomListFromFile(char *fname, RoomList *r_list)
{
Room r;
openRoomFile(fname);
while(1) { // ๋ณ์ค ์ ๋ณด๊ฐ NULL ์ผ๋๊น์ง ๋ฐ๋ณต
r = getRoomFromFile();
if( r.getRoomNo() == EMPTY_ROOM ) break;
r_list->insertRoom(r);
}
closeRoomFile();
}
int RoomDataHandler::getClinicPartIdIdFromKeyboard()
{
int r_no;
cout << “\nType Room Number, (quit to ” << WANT_TO_QUIT << ” )==> “;
cin >> r_no;
return r_no;
}
void RoomListProcessor::checkInHandler(PatientList &in_p_list, PatientList &out_p_list, RoomList &room_list)
{
Patient p;
int p_id;
int p_index; // index for patient list
int r_index; // index for room list
PatientDataHandler pdh;
while(1) {
// ํ์ ์ฝ๋๋ฅผ ๋ฐ๋๋ค.
p_id = pdh.getPatientIdFromKeyboard();
// ์ข
๋ฃ๋ฅผ ์ํ๋ฉด ์ข
๋ฃ
if( p_id == WANT_TO_QUIT) return ;
// ์
์ ํ์ ๋ชฉ๋ก์์ p_id ์ ํด๋นํ๋ index ์ป์ด ์
์ ํ์ ์ธ์ง ํ์ธ
p_index = in_p_list.findPatientByIndex(p_id);
if( p_index != NOT_FOUND ) {
cout << “์
์์ค์ธ ํ์์
๋๋ค. ” << endl;
continue ;
}
// ํด์ ํ์ ๋ชฉ๋ก์์ p_id ์ ํด๋นํ๋ index ์ป์ด ๊ธฐ์กด ํ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธ
p_index = out_p_list.findPatientByIndex(p_id);
if( p_index == NOT_FOUND )
p = pdh.getPatientDataFromKeyboard(p_id); // ์ ํ์ ์
๋ ฅ
else
p = out_p_list.getPatient(p_index); // existing patient
// ์ง๋ฃ๊ณผ ์ฝ๋์ ํด๋นํ๋ ๋ณ์ค ๋ชฉ๋ก์์ ์
์ ํ ์ ์๋ ๋ณ์ค์ index ์ฐพ๊ธฐ
r_index = room_list.findRoomIndexForCheckIn(p.getClinicPartId(), p.getSex());
if( r_index == NOT_FOUND) {
cout << “ํด๋น ์ง๋ฃ ๋ถ์์๋ ์
์ ๊ฐ๋ฅํ ๋ณ์ค์ด ์์ต๋๋ค.”;
continue;
}
// ํด๋น ๋ณ์ค์ ํ์ ๋
ธ๋ ์ฝ์
Room *room = room_list.getRoom(r_index);
p.setRoomNo(room->getRoomNo());
cout << room->getRoomNo() << ” ๋ณ์ค์ ์
์” << endl;
// ์
์ ํ์ ๋ชฉ๋ก์ ํ์ ๋ฐ์ดํฐ ์ฝ์
in_p_list.InsertPatient(p);
PatientNode *pNode = new PatientNode(p.getPatientId());
room->insertPatient(pNode);
}
}
// ํด์ ํ๋ก์ธ์ ๋ฏธ๊ตฌํ
void RoomListProcessor::checkOutHandler(PatientList &in_p_list, PatientList &out_p_list, RoomList &room_list)
{
PatientDataHandler pdh;
Patient p;
int p_id;
int p_index;
int r_index;
char out_date[MAX_DATE_LEN];
while (1) {
// ํ์ ๋ฒํธ ์
๋ ฅ
p_id = pdh.getPatientIdFromKeyboard();
// ์ข
๋ฃ๋ฅผ ์
๋ ฅํ์ ๊ฒฝ์ฐ
if (p_id == WANT_TO_QUIT) return ;
// ์
์ ํ์ ๋ชฉ๋ก์์ p_id์ ํด๋นํ๋ index๋ฅผ ์ป์ด ์
์ ํ์์ธ์ง ํ์ธ
p_index = in_p_list.findPatientByIndex(p_id);
if (p_index == NOT_FOUND) {
cout << “์
์์ค์ธ ํ์๊ฐ ์๋๋๋ค.” << endl;
continue;
}
// ๋ฐํ๋ฐ์ ํ์๋ชฉ๋ก index๋ฅผ ๊ฐ์ง๊ณ ํ์ ์ ๋ณด๋ฅผ ๋ฐํ๋ฐ์
p = in_p_list.getPatient(p_index);
// ํด์์ผ์๋ฅผ ํ์ฌ ๋ ์ง๋ก
get_date(out_date);
p.SetOutDate(out_date);
r_index = room_list.getRoomIndex(p.getRoomNo());
out_p_list.InsertPatient(p);
in_p_list.deletePatient(p_index);
Room *room = room_list.getRoom(r_index);
room->deletePatient(p_id);
}
//
}
// ์
์ํ์ ํํฉ ํ๋ก์ธ์
void RoomListProcessor::inquiryHandler(PatientList &in_p_list, PatientList &out_p_list, RoomList &room_list)
{
Patient p;
Room *r_node;
PatientNode *p_node;
<
p>ClinicPartTable *c_temp = new ClinicPartTable();
ClinicPart c;
int r_no; // ๋ณ์ค๋ฒํธ ์
๋ ฅ์ ์ํ ๋ณ์
int r_index; // ๋ณ์ค ๋ชฉ๋ก ๋ฐฐ์ด์ ๋ฐํ๋ฐ์ ๋ณ์
RoomDataHandler rdh;
while (1) {
// ๋ณ์ค ๋ฒํธ ์
๋ ฅ
r_no = rdh.getClinicPartIdIdFromKeyboard();
// ์ฌ์ฉ์๊ฐ ์ข
๋ฃ๋ฅผ ์ ํํ์ ์
if (r_no == WANT_TO_QUIT) return ;
// ์
๋ ฅ๋ฐ์ ๋ณ์ค๋ฒํธ๋ก ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ๋ฐํ๋ฐ๋๋ค
r_index = room_list.getRoomIndex(r_no);
// ๋ฐํ๋ฐ์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ก ์
๋ ฅ๋ฐ์ ๋ณ์ค์ r_node์ ์ ์ฅํ๋ค.
r_node = room_list.getRoom(r_index);
c = c_temp->getClinicPartId(r_no);
cout << “๋ณ๋ : ” << c.getWardNo() << endl;
cout << “๋ณ์ค๋ฒํธ ํ์์ฝ๋ ํ์์ฑ๋ช
์ฑ๋ณ ๋์ด” << endl;
// p_node์ PatientNode->pNext ๊ฐ์ ๋ฃ๊ณ NULL ์ผ๋๊น์ง ๋ฐ๋ณต
for (p_node = r_node->p_list->getPatientNodepNext(); p_node; p_node = p_node->getPatientNodepNext()) {
// ํ์ ์ ๋ณด๋ฅผ Patient p์ ๋์
p = in_p_list.getPatient(in_p_list.findPatientByIndex(p_node->getPatientId()));
// ํ์ ์ ๋ณด ์ถ๋ ฅ
cout << r_node->getRoomNo() << ” ” << p.getPatientId() << ” ” <<p.getPatientName() << ” ” << p.getSex() << ” ” << p.getAge() << endl;
}
}
}
// === ํด๋์ค ์ ์ ๋ถ๋ถ ๋ ===
// ์ค๋์ ๋ ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์
void get_date(char date[])
{
time_t timer;
struct tm *t;
timer = time(NULL); // ํ์ฌ ์๊ฐ์ ์ด ๋จ์๋ก ์ป๊ธฐ
t = localtime(&timer); // ์ด ๋จ์์ ์๊ฐ์ ๋ถ๋ฆฌํ์ฌ ๊ตฌ์กฐ์ฒด์ ์ ์ฅ
// date์ “YYYYMMDD” ํ์์ผ๋ก ์ ์ฅ
sprintf(date, “%0.4d%0.2d%0.2d”, t->tm_year+1900, t->tm_mon+1, t->tm_mday);
}
// get a menu for user
int get_menu()
{
int menu;
while(1) {
// ๋ฉ๋ด ์ถ๋ ฅ
printf(” ***menu***\n”);
printf(”1) Check In\n”);
printf(”2) Check Out\n”);
printf(”3) Inquiry\n”);
printf(”4) Exit\n”);
// ๋ฉ๋ด ์ ํ
printf(”\nMENU ==> “);
scanf(”%d”,&menu);
if(menu >= CHECK_IN && menu <= EXIT)
return menu;
// ์๋ชป๋ ์
๋ ฅ์ผ ๊ฒฝ์ฐ
printf(”\nInvalid menu!! Retry!!”);
}
}
int main()
{
PatientList in_p_list;
PatientList out_p_list;
RoomList room_list;
PatientDataHandler patient_data_handler;
RoomDataHandler room_data_handler;
RoomListProcessor roomListProcessor;
int menu;
patient_data_handler.getPatientsFromFile(”patient.dat”, &in_p_list, &out_p_list);
in_p_list.SortPatientList();
out_p_list.SortPatientList();
room_data_handler.getRoomListFromFile(”room.dat”, &room_list);
// ๋ณ์ค๋ชฉ๋ก์ ๊ธฐ์กด ์
์ ํ์๋ชฉ๋ก ๋ก๋
room_list.loadPatientsIntoRoom(in_p_list);
// ์ฌ์ฉ์๋ก๋ถํฐ ๋ฉ๋ด ์
๋ ฅ์ ๋ฐ๋๋ค.
while(1)
{
menu = get_menu();
if(menu == EXIT) {
patient_data_handler.savePatientToFile(”patient.dat”, &in_p_list, &out_p_list);
break;
}
switch(menu) {
case CHECK_IN:
roomListProcessor.checkInHandler(in_p_list, out_p_list, room_list);
break;
case CHECK_OUT:
roomListProcessor.checkOutHandler(in_p_list, out_p_list, room_list);
break;
case INQUIRY:
roomListProcessor.inquiryHandler(in_p_list, out_p_list, room_list);
break;
}
}
}
[/spoiler]