안녕하세요! C언어를 공부하시면서 가장 빨리 실력이 느는 방법은 직접 예제를 짜보는거라고 생각합니다!
그래서 이제 문법은 다 배웠으니 예제를 통해서 실력을 늘리고자 합니다!
요구 조건 :
스타트업 프로젝트 회사가 있다고 가정을 한다.
이 프로젝트 회사에서는 DB와 서버를 사용하려고 했으나,
서버, 클라이언트, DB를 이용할 줄 아는 개발자가 없다.
외주를 하려고 했으나 회사 자금이 모자라서 아웃소싱도 불가능하다.
따라서 할 수 있는 최선의 방법으로 프로그램을 계속 켜놓음으로서
프로젝트가 들어오는 것과 나가는 것을 관리할 수 있고
한 컴퓨터를 통해서 지속적으로 데이터를 쌓아두려고 한다.
컴퓨터가 꺼지지 않는 한 데이터를 지속적으로
저장된 상태로 유지하고 있어야한다.
돈이 조금 벌리면 이제 아웃소싱을 맡겨 제대로 된 프로그램을
작성할 것이다. 그러기 위해서는 우선 돈을 벌어야 한다.
우선 코더가 아닌 프로그래머가 되기 위해서는 요구조건을 분석할 줄 알아야합니다!
요구조건을 분석해보면 DB, Server 사용 X 프로젝트 생성 가능, 삭제 가능, 완료 기능, 데이터 쌓아두기입니다.
이번 시간에는 프로젝트 생성 기능을 만들어보고자 합니다!
총 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
|
#include <stdio.h>
#define Web 0
#define C 1
#define Cpp 2
#define JAVA 3
int main() {
int project[4][1000];
char Project_Contents[4][1000][200];
int N, K;
int _W = 0, _C = 0, _Cpp = 0, _J = 0;
while (1) {
printf("프로젝트 종류를 선택하여 주세요. Web : 0, C : 1, C++ : 2, JAVA : 3\n");
scanf_s("%d", &N);
printf("1. 프로젝트 보기 2. 프로젝트 생성 3. 프로젝트 삭제\n");
scanf_s("%d", &K);
if (K == 2)
switch (N) {
case 0:
printf("Web을 선택하셨습니다. 100자 이내로 입력해주세요.\n"); project[Web][_W] = 1;
scanf_s(" %[^\n]s", Project_Contents[Web][_W++], 100);
printf("%s\n", Project_Contents[0][0]);
break;
case 1:
printf("C을 선택하셨습니다. 100자 이내로 입력해주세요.\n"); project[C][_C] = 1;
scanf_s(" %[^\n]s", Project_Contents[C][_C++], 100);
printf("%s\n", Project_Contents[1][0]);
break;
case 2:
printf("C++을 선택하셨습니다. 100자 이내로 입력해주세요.\n"); project[Cpp][_Cpp] = 1;
scanf_s(" %[^\n]s", Project_Contents[Cpp][_Cpp++], 100);
printf("%s\n", Project_Contents[2][0]);
break;
case 3:
printf("Java++을 선택하셨습니다. 100자 이내로 입력해주세요.\n"); project[JAVA][_J] = 1;
scanf_s(" %[^\n]s", Project_Contents[JAVA][_J++], 100);
printf("%s\n", Project_Contents[3][0]);
break;
}
}
return 0;
}
|
cs |
Line 2~5 : 먼저 #define 매크로를 통해서 Web, C, Cpp, JAVA의 값을 각각 0,1,2,3으로 정의했습니다. 보통 대문자로 많이 쓰지만 상관 없습니다. 코드가 짧기 때문에!
Line 7 : int project[4][1000]을 선언했습니다. 이 회사에서 사용하는 언어는 4개의 언어라고 생각을 하고 그 언어를 가지고 프로젝트를 받아온다고 선언했습니다. 그리고 작은 스타트업 기업이고 아직 프로젝트를 한개도 안 받아본 기업이기 때문에 한번에 1000개 이상의 프로젝트를 수행하기는 불가능합니다. 따라서 각 언어마다 1000개의 공간을 할당했습니다.
Line 8 : 삼차원 배열처럼 보입니다. 맞습니다. 그런데 꼭 그렇게 안보셔도 되고 2차원 배열로 보셔도 됩니다. 풀이를 해볼게요! 프로젝트가 총 언어 4개 각각 1000개의 공간을 할당을 했죠? 그렇다면 프로젝트 내용을 담는 char Project_Contents는 총 언어 4개 각각 1000개 공간의 설명을 하기 위해서 저장할 수 있도록 만든 변수입니다. 따라서 프로젝트 본문의 내용을 담기 때문에 1000개의 공간과 각각 연결이 되어 있다고 생각하시면 됩니다.
Line 9 : 입력을 받아서 상황 별로 흐름이 갈 수 있도록 하기 위해서 변수 N, K를 선언했습니다.
Line 10 : int _W = 0, _C = 0, _Cpp = 0, _J = 0;는 각각 언어들의 프로젝트 개수를 파악하기 위해서 선언한 것입니다.
Line 11 : 프로그램 요구 사항에 컴퓨터가 꺼지지 않는 한 데이터를 지속적으로 저장된 상태로 유지하고 있어야한다.고 했습니다. 따라서 while문을 통해 지속적으로 반복이 되어서 프로그램이 종료되지 않도록 합니다.
Line 12 ~ 15 : 프로젝트 종류와 어떤걸 선택할지 옵션을 위해서 입력을 받습니다.
Line 16 : K==2일 때 switch문이 동작을 하도록 한 것인데 K가 2일 경우에는 프로젝트 생성의 경우입니다. 따라서 '사용자가 프로젝트 생성을 선택했을 경우(2를 입력) 흐름을 이렇게 하겠다.' 라는 뜻입니다.
Line 17~38 : swtich-case문을 통해서 제어를 합니다. N을 받아와서 그 N이 0일 경우에 Web, N이 1일 경우에 C, N이 2일 경우에 Cpp, N이 3일 경우에 JAVA로 흐름이 가도록 합니다. 그리고 그 내부적으로는 다 동작이 비슷 비슷하니 Web(N이 0일 시에)만 보겠습니다. 먼저 이 프로젝트는 현재 진행중이다라는 것을 표시하기 위해서 안의 값을 1로 바꿔줍니다. 이렇게 될 경우 프로젝트 보기를 할 때 편하게 코드를 짤 수 있습니다. 그리고 이후 프로젝트 내용을 입력 받고 첫 내용이 잘 들어갔나 한번 출력하기 위해서 일단 printf함수로 출력을 한번 해봤습니다. 참고로 100자 이내로 받은 이유는 한글은 2byte를 차지합니다. 하지만 char 자료형은 1byte짜리기 때문에 char 두개가 한글 한개입니다. 따라서 할당을 받을 때에 200byte를 할당 받았기 때문에 100자 이내로 입력을 받으셔야 합니다. scanf_s에서는 [^\n]이라는 기호를 사용했습니다. 그 기호는 공백까지 입력받기 위해서 한 것입니다. 그리고 %[^\n]s 앞에 띄어쓰기를 한칸 한 이유는 앞에서 입력을 받을 때 입력 버퍼에 들어가 있던 값을 무마시키기 위해서 사용합니다.
출력창을 보실까요?
잘 출력되는걸 볼 수 있습니다! 한글, 영어, 공백 다 상관 없이 저장을 하고 있는 모습을 볼 수 있습니다.
이제 점점 더 어려워지실텐데 하나씩 차근 차근 공부해나가시길 바랍니다!
고생하셨습니다!
'IT > C언어' 카테고리의 다른 글
C언어 예제 - 프로젝트 회사 프로그램(3) 포인터, if, switch-case문 사용하기 (0) | 2020.04.07 |
---|---|
C언어 예제 - 프로젝트 회사 프로그램 만들기(2) (1) | 2020.04.06 |
C언어 기초 문법 - 포인터에 대해서 이해하기 (0) | 2020.04.04 |
C언어 기초 문법- 구조체 기본 구조, 구조체 malloc,free 응용하기, 구조체 size 알기 (0) | 2020.04.02 |
C언어 기초 문법 - malloc, free, 메모리 동적할당을 담당하는 함수 (0) | 2020.03.31 |