Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

Switch문과 함수 호출로 구현하는 C 언어 선거 투표 프로그램

문제 정의

선거에 참여하는 각 후보에게 투표를 행사하고, 후보별 득표 수를 집계한 뒤 그 결과를 화면에 출력하는 프로그램을 C 언어로 어떻게 작성할 수 있을까요?

해결 방법

이번 예제에서는 세 명의 후보가 선거에 출마했다고 가정합니다. 프로그램이 제공해야 할 핵심 기능은 다음 두 가지입니다.

  • 투표하기(Cast Vote) — 메뉴에서 번호를 선택해 원하는 후보에게 투표합니다.

  • 득표 수 확인(Find Vote Count) — 각 후보가 획득한 총 득표 수를 집계하여 최다 득표자(당선자)를 출력합니다.

모든 동작은 main() 함수의 switch문에서 기능에 맞는 함수를 호출하는 방식으로 처리됩니다. 후보 이름은 #define 매크로로 정의하고, 득표 수는 전역 변수로 관리하면 어느 함수에서든 손쉽게 접근할 수 있습니다.

예제 코드

#include <stdio.h>
#define CANDIDATE1 "ABC"
#define CANDIDATE2 "XYZ"
#define CANDIDATE3 "PQR"

int votescount1 = 0, votescount2 = 0, votescount3 = 0;

void castvote() {
   int choice;
   printf("\n\n ### Please choose your Candidate ####\n\n");
   printf("\n 1. %s", CANDIDATE1);
   printf("\n 2. %s", CANDIDATE2);
   printf("\n 3. %s", CANDIDATE3);
   printf("\n 4. None of These");
   printf("\n Input your choice (1 - 4) : ");
   scanf("%d", &choice);
   switch(choice){
      case 1: votescount1++; break;
      case 2: votescount2++; break;
      case 3: votescount3++; break;
      default: printf("\n Error: Wrong Choice !! Please retry");
      getchar();
   }
   printf("\n thanks for vote !!");
}

void votesCount() {
   printf("\n\n ##### Voting Statistics ####");
   printf("\n %s - %d", CANDIDATE1, votescount1);
   printf("\n %s - %d", CANDIDATE2, votescount2);
   printf("\n %s - %d", CANDIDATE3, votescount3);
   if(votescount1 > votescount2 && votescount1 > votescount3)
      printf("\n\n Winner : %s", CANDIDATE1);
   else if(votescount2 > votescount1 && votescount2 > votescount3)
      printf("\n\n Winner : %s", CANDIDATE2);
   else if(votescount3 > votescount1 && votescount3 > votescount2)
      printf("\n\n Winner : %s", CANDIDATE3);
   else
      printf("\n\n No leading candidate yet.");
}

int main(){
   int choice;
   do{
      printf("\n\n ###### Welcome to Election/Voting 2019 #####");
      printf("\n\n 1. Cast the Vote");
      printf("\n 2. Find Vote Count");
      printf("\n 0. Exit");
      printf("\n Please enter your choice : ");
      scanf("%d", &choice);
      switch(choice){
         case 1: castvote(); break;
         case 2: votesCount(); break;
         case 0: break;
         default: printf("\n Error: Invalid Choice");
      }
   }while(choice != 0);
   getchar();
   return 0;
}

코드 설명

castvote() 함수

후보자 목록을 화면에 출력한 뒤 사용자로부터 번호를 입력받습니다. switch문이 입력값을 판별하여 해당 후보의 전역 득표 변수를 1 증가시키며, 1~4 범위를 벗어난 값이 들어오면 오류 메시지를 출력합니다.

votesCount() 함수

세 후보의 현재 득표 수를 출력하고, 비교 연산을 통해 최다 득표자를 찾아 당선자로 안내합니다. 득표 수가 같아 우세한 후보가 없으면 그 사실을 알려줍니다.

main() 함수

do-while 반복문을 이용해 사용자가 0(종료)을 입력할 때까지 메뉴를 계속 보여 줍니다. 메뉴 선택 값에 따라 switch문이 castvote() 또는 votesCount() 함수를 호출하는 구조입니다.

실행 결과

###### Welcome to Election/Voting 2019 #####

 1. Cast the Vote
 2. Find Vote Count
 0. Exit
 Please enter your choice : 1


 ### Please choose your Candidate ####


 1. ABC
 2. XYZ
 3. PQR
 4. None of These
 Input your choice (1 - 4) : 1

 thanks for vote !!

###### Welcome to Election/Voting 2019 #####

 1. Cast the Vote
 2. Find Vote Count
 0. Exit
 Please enter your choice : 1


 ### Please choose your Candidate ####


 1. ABC
 2. XYZ
 3. PQR
 4. None of These
 Input your choice (1 - 4) : 1

 thanks for vote !!

###### Welcome to Election/Voting 2019 #####

 1. Cast the Vote
 2. Find Vote Count
 0. Exit
 Please enter your choice : 2


 ##### Voting Statistics ####
 ABC - 2
 XYZ - 0
 PQR - 0

 Winner : ABC

###### Welcome to Election/Voting 2019 #####

 1. Cast the Vote
 2. Find Vote Count
 0. Exit
 Please enter your choice : 0