더 많은 포스팅 보기 자세히보기

T자형 개발

C언어 번호표 발급과 호출 프로그램 구현

유도혁 2020. 5. 13. 16:49

1. 프로젝트로 선정하게 된 이유

평소에 음식점이나 은행, 병원 등과 같은 곳에 갈 때마다 기다리는 사람이 많으면 대기 번호표를 뽑게 하여서 질서를 지키는 것이 생각나게 되었다. 이러한 시스템도 프로그래밍하여서 만들어졌겠다고 생각하였고, 어떻게 프로그래밍이 되었는지 궁금해지게 되었다. 그래서 ‘내가 직접 만들어 보면 어떨까?’라고 생각해보게 되었고 정말로 구현해보게 되었다.

2. 프로젝트 제작 과정

처음에 어떤 식으로 프로그래밍을 할지 생각해보다가 구글링을 해보기로 하였다. 구글링을 통하여 자료구조 큐(Queue)에 대하여 알게 되었고 그것을 자세히 공부하게 되었다. 큐(Queue)에 대하여 공부하고 나서 그것을 이용하여 프로그래밍을 시작하게 되었다. 기본적인 기능을 다 만들고 보니 프로그램을 시작하기 전에 배열의 크기를 지정해 두어서 대기자의 최대 숫자가 제한적이고 필요 없는 메모리를 차지하게 되어 불편한 점이 많다는 것을 알게 되었다. 그래서 필요한 만큼의 메모리만을 사용할 수 있게 만들어 봐야겠다고 생각했고, 이번에도 구글링 하여 필요한 것을 찾아보게 되었다. 오랜 구글링 끝에 메모리 동적 할당에 대하여 알게 되었고, 원래 소스에서 배열을 사용하던 부분을 동적으로 필요한 만큼 배열을 만들어주는 번호표 발급과 호출 프로그램을 구현하게 되었다.

3. 목표

1. 프로그램을 시작하면, 프로그램을 구동하거나 프로그램을 종료할 수 있다.

2. 번호표 발급 버튼을 누르면 누른 순서대로 번호를 발급해 줄 수 있다.

3. 호출 버튼은 누르면 번호표를 발급한 순서대로 호출 할 수 있다.

4. 호출 하였는데 대기 중인 사람이 없으면, 대기 중인 사람이 없다고 출력한다.

5. 번호표를 발급할 때 필요한 만큼의 메모리만 사용하여 메모리를 절약할 수 있다.

 

​4. 제작 일정

2019

  기간 개발내용
1 11/5~11/7 프로젝트 구상
2 11/8 보고서 및 PPT 기초작업
3 11/9~11/14 아이디어 구상을 통한 코드 작성
4 11/15 ~ 11/21 보고서 및 PPT 완성

 

5. 프로그램 순서도

 

6. 프로그램 코드

main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>// CMD 명령어를 사용하기 위하여 사용
#include <mmsystem.h>// 효과음을 사용하기 위하여 사용
#pragma comment(lib, "winmm.lib")// 효과음을 사용하기 위하여 사용
 
#include "Definition.h"
 
int main() {
    PlaySound(TEXT("Startup.wav"), NULL, SND_ASYNC);
    StProgram();  // 프로그램 구동과 종료를 위한 함수 호출
 
    int *waiting = NULL;    // 대기자의 명수 기억하기 위한 포인터 배열을 선언
    int* tmp;
    int s = 0; // 호출을 하기위한 변수
    int t = 0; // 대기자의 최대 명수를 기록하기 위한 변수
    int Command = 0; // 명령을 받기 위한 변수
 
    for (;;) {
        printf("번호표를 뽑으시려면 앞에있는 버튼은 눌러주시기 바랍니다. \n");
        scanf_s("%d", &Command);
        system("CLS");
        if (Command == 0) { // Command 함수가 0이면 대기자 호출로 이동
            if (s < t) { // 호출된 번호가 대기자가 발급된 수보다 적으면 번호를 호출함
                printf("%03d번 손님 앞으로 나와주세요.\n", waiting[s]);
                PlaySound(TEXT("Call.wav"), NULL, SND_ASYNC);    
                s++;
                Sleep(2000);
                system("CLS");
            }
            else{
                printf("대기중인 손님이 없습니다.");
                Sleep(2000);
                system("CLS");
            }
        }
        else if (Command < 0) { // Command 함수가 음수이면 프로그램 구동과 종료를 위한 함수 호출
            s = 0;
            t = 0;
            StProgram();
        }
        else { // Command 함수가 정수이면 대기자 번호 발급으로 이동
            tmp = (int*)realloc(waiting, sizeof(int) * (t + 1));
            waiting = tmp;
            for (int i = 0; i <= t; i++) {
                waiting[i] = i + 1;
            }
            PlaySound(TEXT("Bik.wav"), NULL, SND_ASYNC);
            printf("당신은 %03d번 손님입니다. \n번호가 호출이 되면 앞으로 나와주시기 바랍니다.\n", t + 1);
            t++;
            Sleep(2000);
            system("CLS");
        }
    }
}

 

Definition.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma once
int StProgram() { // 프로그램 구동과 종료를 위한 함수
    int Start;
    printf("┍──────────────────────────────\n");
    printf("│\n");
    printf("│     번호표 발급과 출력 프로그램\n");
    printf("│\n");
    printf("│   1. 프로그램 구동\n");
    printf("│\n");
    printf("│   2. 종료\n");
    printf("│\n");
    printf("│\n");
    printf("│  * 핵심파일 제작자 : 유도혁\n");
    printf("│  * 핵심파일 버전 : Ver.1.0\n");
    printf("│  * 제작날짜 : 2019.11.13\n");
    printf("│\n");
    printf("┕──────────────────────────────\n");
    printf("원하는 항목의 숫자를 입력하고 엔터(Enter) : ");
    scanf_s("%d", &Start);
    if (Start != 1) {
        PlaySound(TEXT("Shutdown.wav"), NULL, SND_ASYNC);
        Sleep(2000);
        exit(0); //main함수 이외의 함수에서 프로그램을 종료시키기 위하여 사용함
    }
system("CLS");
}

 

 

6. 프로그램 동영상

 

프로그램.zip
1.02MB

'T자형 개발' 카테고리의 다른 글

개인프로젝트에 대한 생각  (0) 2022.07.09
Mac 사용 툴  (0) 2022.05.15
Mac 기본 세팅  (0) 2022.05.15
git 멀티계정 사용 정리  (0) 2022.04.10
M1 Mac에서 iPhone, iPad 앱 사이드로드하기  (0) 2021.08.11