훈, IT 공부/C,C++,MFC

[프로그램]복권(로또)게임 #랜덤으로 뽑기(자동)

IT훈이 2018. 1. 30.
반응형

복권게임!!! 로또로또





저는 로또를 한번도 구매해본 적은 없지만 구매한 지인들은 여럿 봐왔습니다.


이들의 공통점은 구입하고 난 뒤, 당첨결과를 기다리는 날들이 행복하다 는 것입니다.


당첨된 뒤에도 행복할 까요??


저는 복권 당첨되는 것은 그렇게 원치는 않네요. 막상 당첨되면 기분이 째지겠지만요 ㅎ-ㅎ

갑자기 몇십억 몇백억 의 돈이 생긴다면, 사람들은 순간의 기쁨과 지속적인 경계와 불안감을 가지게 될것이고

일전의 인생보다 행복하여 지지는 않았다는 결과가 여기저기 많이 떠돌아 다니는 것이 사실입니다.

( 물론 그만한 돈을 운영하는 자산가 혹은 억만장자 같은 사람들은 다른 결과를 가질 가능성은 높죠 )


복권은 저의 삶을 질을 높이는 것이 아니라 오히려 떨어뜨리고 심리적인 불안감을 가지게 할 것이기 때문입니다.



저 또한 그렇게 생각하기에 내린 결론은



" 땀을 흘려 얻은 수확이야말로 값진 돈이고 가치있는 돈 이기 때문입니다. "


" 쉽게 얻은 돈은 쉽게 잃게 될 것입니다. "



인생한방을 위한 로또가 아닌 나눔과 재미를 위한 로또가 되길.. 


그런 의미에서 프로그램은 재미로 봐주세요 ㅎㅎ


제작할 복권게임의 특징


일반 복권과는 다른점이란... "토요일"에 발표되는 것이 아니라 번호를 발행하는 즉시 발표됩니다.


기능 

1. 복권판매점의 자동모드 와 수동모드를  그대로 구현하였습니다.

2. 자주 반복되는 코드는 함수화 하였습니다. ( 예를들어 결과를 출력해주는 기능, 메뉴선택기능 )

3. 자동모드는 원하는 숫자만큼 출력해주고 그때그때 결과를 만들어 줍니다.

4. 사용자가 선택할 수 있는 메뉴인터페이스를 제공합니다.



코드

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include<stdio.h>
#include<stdlib.h>    // rand함수 사용
#include<time.h>    // Random한 rand사용을 위해서
 
int NumChk(int *ppDest, int len);
void RankUI(int rank);
 
// 복권추첨 번호를 생성하는 함수
void SettingFunc(int *pDest,int len){
    srand(time(NULL));        // 흘러가는 시간을 토대로 랜덤함수
 
    for (int i = 0; i < len; i++){
        *(int*)(pDest+i) = rand() % 45 + 1;
        if (NumChk(pDest,len) == 1--i;
    }
}
 
// 중복된 숫자 체크. 1~45 사이 숫자 판별
int NumChk(int *ppDest,int len){
    
    int i = 0;
    // 중복 숫자 체크
    while (ppDest[i] != 0 && i < len){
        for (int j = i+1; j < len; j++){
            if (ppDest[i] == ppDest[j]) return 1;
            if (ppDest[j] == 0return 0;
        }
        i++;
    }
 
    // 1~45사이 숫자
    i = 0;
    while (ppDest[i] != 0 && i < len){
        if (ppDest[i]>45 || ppDest[i] < 1return 1;
        i++;
    }
    return 0;
}
 
// 사용자가 복권을 입력하는 함수
int UserInputFunc(int *pSource,int len){
    
    for (int i = 0; i < len; i++){
        printf("%d번째 숫자:", i + 1);
        scanf_s("%d"&pSource[i]);
        fflush(stdin);
    }
    if (NumChk(pSource,len) == 1return 1;        // 중복된 숫자일 경우 오류 
 
    printf("입력한 로또번호:");
    for (int i = 0; i < len; i++){
        printf("%02d ", pSource[i]);
    }
    puts(" ");
    return 0;
}
 
// 복권의 결과를 출력해주는 함수.
// 1등은 숫자 6개 모두 맞는사람
// 2등은 숫자 5개 맞고 보너스까지 맞는사람
// 3등은 숫자 5개 맞는사람
// 4등은 숫자 4개
// 5등은 숫자 3개
void ResultFunc(int *pD, int *pS,int len){        // pD가 복권당첨번호 pS가 사용자 복권번호
    int count = 0;
 
    for (int i = 0; i < len-1; i++){        // 보너스 번호는 2등만 해당하기에 6개만 판별한다.
        for (int j = 0; j < len-1; j++){
            if (pD[i] == pS[j]) count++;    // 숫자가 맞는지 판별
 
        }
    }
    if (count == 6) count++;    // 1등 숫자일 경우에는 2등과 분별을 시킨다.
 
    if (count == 5){            // 보너스볼 확인
        if (pD[len - 1== pS[len - 1])    count++;
    }
    ///////////////////////////////////////////////
    // 화면 출력
    puts("\t==============================");
    printf("\t@@복권 당첨번호@@\n\t");
    for (int i = 0; i < len; i++){
        printf("%02d ", pD[i]);
        if (i == 5printf("+");
    }
    puts("");
 
    printf("\t당신이 입력한 로또번호\n\t");
    for (int i = 0; i < len; i++){
        printf("%02d ", pS[i]);
        if (i == 5printf("+");
    }
    puts("");
    puts("\t==============================\n");
    ////////////////////////////////////////////////
    RankUI(count);        //순위 측정해주는 함수 호출
}
 
// 사용자의 복권 번호를 랜덤으로 만들어주는 코드.
// RandomFunc-> NumChk()호출
// RandomFunc -> 
void RandomFunc(int *pD,int *pS,int cnt, int len){
    srand(time(NULL));
    ///////////////
    // 번호 생성
    for (int j = 0; j < cnt; j++){                // 매개변수 cnt의 값에 따라서 반복결정
        for (int i = 0; i < len; i++){
            pS[i] = rand() % 45 + 1;
            if (NumChk(pS, len) == 1--i;
        }
    ///////////////
        printf("\n\t%02d번째 자동생성 번호:",j+1);
        for (int z = 0; z < len; z++){
            printf("%d ",pS[z]);
            if (z == 5printf("+");
        }
        puts("");
        ResultFunc(pD, pS, len);
        puts("");
    }
}
 
// 사용자가 사용할 메뉴 인터페이스 제공
int UserUI(){
    int Select = 0;
    system("cls");
 
    puts("==== 복권 자동화 프로그램 ====");
    printf("[1] 자동 [2] 수동 [3]종료 : ");
    scanf_s("%d"&Select);
 
    return Select;
}
 
// 로또 결과를 출력해주는 함수
void RankUI(int rank){
    switch (rank){
    case 3:
        printf("\t#####1/45 확률 5등입니다. 축하드립니다. #####\n");
        break;
    case 4:
        printf("\t####1/733 확률 4등입니다. 축하드립니다. ####\n");
        break;
    case 5:
        printf("\t###1/35,724 확률의 사나이 3등입니다. 축하드립니다.###\n");
        break;
    case 6:
        printf("\t##1/1,357,510 확률의 사나이 2등입니다. 축하드립니다.##\n");
        break;
    case 7:
        printf("\t#1/8,145,060 확률의 사나이 1등입니다.축하드립니다. #\n");
        break;
    default:
        puts("\tFAIL!!! 돌아가 없어 아무것도.");
        break;
    }
}
 
// 계속하기 기능
int GoFunc(){
    int YN = 0;
    printf("계속하시겠나요? Y:1 N:0 :");
    scanf_s("%d"&YN);
    if (YN != 1 && YN != 0return 0;    // 다른것 입력시 종료
    return YN;
}
 
int main(){
    int LottoNum[7= { 0 };    // 복권당첨번호
    int UserNum[7= { 0 };        // 사용자 복권번호
    int Loop = 1;                // 무한루프를 위한 변수
    int cnt = 0;                // 자동생성시 개수 변수
 
 
    //복권번호를 생성
    SettingFunc(LottoNum,(sizeof(LottoNum))/4);
 
    // 복권생성번호를 확인해보려면 아래 주석을 해제하세요
    //for (int i = 0; i < sizeof(lottonum) / 4;i++){
    //    printf("%d ", lottonum[i]);
    //}
    //puts(" ");
    //_getch();
 
    while (Loop != 0){
        switch (UserUI()){
        case 1:
            printf("몇개를 생성하시겠나요? :");
            scanf_s("%d"&cnt);
            RandomFunc(LottoNum, UserNum, cnt, (sizeof(LottoNum)) / 4);
            Loop = GoFunc();
            break;
        case 2:
            if (UserInputFunc(UserNum, (sizeof(LottoNum)) / 4== 1) {
                puts("숫자를 잘못 입력하였습니다.");
                Loop = GoFunc();
                break;
            }
            ResultFunc(LottoNum, UserNum, (sizeof(LottoNum)) / 4);
            Loop = GoFunc();
            break;
        case 3
            puts("복권 프로그램을 종료합니다.");
            exit(0);
            break;
        }
    }
 
    return 0;
}
 
cs


실행결과


메뉴선택


자동모드


수동모드




감사합니다.


재미난 것 있으면 또 만들어 봐야지~!


반응형

댓글