[C++] 조작자를 이용한 구조체 객체들의 정보 출력 프로그램(feat. struct, setw(), switch)

2020. 6. 21. 03:52·🖥️ 컴퓨터공학 🖥️/C | C++
반응형

1. 문제

 

 

2. 요구사항

1.     Namecard의 구조체 작성(이름, 주소, 연락처)

2.     입력할 인원을 입력할 수 있어야 함

3.     입력한 인원들의 정보를 정렬해야 함

4.     이를 출력

5.     위의 요구사항들 + 종료를 실행할 수 있는 메뉴가 있어야 함

 

 

프로그램 설계도

 

 

소스 코드

 

#include<iostream>//C++ 
#include<algorithm>//정렬을 위한 sort함수 헤더함수 
#include<iomanip>//조작자 setw()을 사용하기 위한 헤더함수 
using namespace std; 
struct namecard {//namecard객체 
	char name[30];//namecard의 이름 
    char address[30];//namecard의 주소 
    char tel[20];//namecard의 전화번호 
 }; 
 int menu; //메뉴를 숫자로 할 것이기 때문에 int형으로 설정 
 
 void main() { 
 	while (menu != 4) { 
    //menu로 4를 입력시 종료하기 때문에 위와 같이 입력 
    cout << "1. 입력" << "," << "2. 정렬" << "," << "3. 출력" << "4. 종료" << endl; 
    //메뉴 작성을 위한 안내문 
    int n;//namecard 인원의 수 
    struct namecard list[10000]; 
    //namecard 객체의 수를 n으로 지정하려 하였으나 초기화를 하여 넣어야 한다고 하였으므로 10000으로 설정(어짜피 n까지만 루프를 돌릴 것이므로) 
    cin >> menu;
    //menu입력 
    switch (menu) {
    //사용자가 입력하는 menu값에 다른 switch문 실행 
    case 1: {
    //사용자가 1을 입력하였을 경우 
    cout << "입력을 선택하셨습니다. " << endl; 
    cout << "입력할 인원 수를 입력하세요=>"; 
    cin >> n;
    //namecard 인원 수 입력 
    for (int i = 0; i < n; i++) {
    //n명의 인원의 이름, 주소, 전화번호를 입력! 
    cout << "이름을 입력하세요=>"; 
    cin >> list[i].name; 
    cout << "주소를 입력하세요=>"; 
    cin >> list[i].address; cout << "전화번호를 입력하세요=>"; 
    cin >> list[i].tel; 
    cout << "===============" << endl;
 	} 
	 cout << "===============" << endl; break; 
 } 
 	case 2: {
 	//사용자가 2번을 선택했을 경우 
 	cout << "정렬을 선택하셨습니다" << endl; 
	 struct namecard tmp;
	 //순서를 바꾸기 위해 임의의 저장소 namecard의 또다른 객체인 tmp 생성 
	 for (int i = 0; i < n-1; i++) { 
 	if (list[i].name > list[i + 1].name) { 
   //만약 앞의 순서의 이름이 뒤의 순서의 이름보다 아스키코드가 크다면 
	 tmp = list[i]; 
	 list[i] = list[i + 1]; 
	 list[i + 1] = tmp;//바꾸기 완료!
 	}
 	} 
	 cout << "정렬이 완료되었습니다" << endl;
	 break; 
 } 
	 case 3: {
	 //사용자가 3을 입력하였을 경우 
	 cout << "출력을 선택하셨습니다" << endl; 
	 //출력은 조작자를 이용하였음
	 cout << setw(8) << "이름";//8칸의 width로 이름 넣는 칸 설정 
	 cout << setw(10) << "주소";//10칸의 width로 주소 넣는 칸 설정 
	 cout << setw(15) << "전화번호"<<endl;//15칸의 width로 전화번호 넣는 칸 설정 
 	for (int i = 0; i < n; i++) {
 	//위에서 설정한 width만큼 namecard의 객체들의 이름, 주소, 전화번호를 출력 
 	//남은 공간에는 ' '으로 함으로서 공백으로만 채움 
 	cout << setw(8) << setfill(' ') <<list[i].name; 
 	cout << setw(10) << setfill(' ') << list [i] .address;
 	cout << setw(15) << setfill(' ') << list[i].tel << endl; 
 	} 
 	cout << "===============" << endl; break; 
 			} 
 		} 
 	} 
 }

결과

 

의견

마지막 과제였는데 어려웠다. 구조체를 많이 안쓰다 보니 익숙하지 않아서 그런 듯 하다.

구조체와 구조체의 배열을 설정할 때는 구조체 정의 따로, 구조체 배열 정의 따로 해야 한다.

아스키 코드에 따라 정렬을 하는 부분에서 애를 많이 먹었던 것 같다.

또 메뉴를 설정할 때 switch문을 사용했는데 이 부분은 그렇게 어렵지는 않았지만 역시나 익숙하지 않다는 느낌이 들었다. 하지만 지금까지 수업시간에 내주신 과제 중에서 가장 재미있고 보람 있는 과제인 것 같다.

728x90
반응형

'🖥️ 컴퓨터공학 🖥️ > C | C++' 카테고리의 다른 글

[C++] string 클래스 (feat. copy, getline, substr, find, replace)  (0) 2020.06.24
[C++] 예외 처리 (Exception)  (0) 2020.06.21
[C++] 제네릭 함수 (feat. template)  (0) 2020.06.21
[C++] 상속(Inheritance) - 2 (feat. 가상 함수와 추상클래스)  (0) 2020.06.20
[C++] 상속(Inheritance) - 1 (feat. 개념, 상속 접근 지정자)  (0) 2020.06.19
'🖥️ 컴퓨터공학 🖥️/C | C++' 카테고리의 다른 글
  • [C++] string 클래스 (feat. copy, getline, substr, find, replace)
  • [C++] 예외 처리 (Exception)
  • [C++] 제네릭 함수 (feat. template)
  • [C++] 상속(Inheritance) - 2 (feat. 가상 함수와 추상클래스)
공대생 배기웅
공대생 배기웅
군노답 미필 공대생 배기웅의 대학생활을 갈아 넣은 블로그
    반응형
  • 공대생 배기웅
    글쓰는공대생의 IT블로그
    공대생 배기웅
  • 전체
    오늘
    어제
    • 분류 전체보기 (166)
      • 🖊️ 공대생 글쓰기 🖊️ (17)
        • 공대생 회고록 (4)
        • 공대생의 끄적끄적 (4)
        • 슬기로운 공대생활 (9)
        • 사회초년생의 업무일기 (0)
      • 📈 산업공학 📈 (14)
        • 금융, 파생상품 (13)
        • 통계 (0)
        • 재무회계 (1)
      • 🖥️ 컴퓨터공학 🖥️ (92)
        • 머신러닝, 딥러닝 (12)
        • 텐서플로우, 케라스 (1)
        • 알고리즘 (24)
        • 웹 (5)
        • Python (3)
        • C | C++ (23)
        • Java (15)
        • 코드 에러 모음집 (9)
      • 😙 취미, 교양 😙 (2)
        • 영어공부 (1)
        • 일본어회화 공부 (1)
      • 🔍 정보 공유 🔍 (38)
        • 대학생 외부활동 정보 (2)
        • 개발자관련 정보 (3)
        • 대입 논술 입시자료 정보 (22)
        • 프로그램 세팅 (11)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • [공지] 글쓰는 공대생입니다 😃
  • 인기 글

  • 태그

    데이터베이스
    예외
    equals프레임워크
    C++
    조작자
    이클립스
    경제성공학
    알고리즘
    백준
    자바
    스캐너
    객체지향
    무작위 변수
    프랜드함수
    acmicpc
    재귀함수
    OOP
    Operator
    Java
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
공대생 배기웅
[C++] 조작자를 이용한 구조체 객체들의 정보 출력 프로그램(feat. struct, setw(), switch)
상단으로

티스토리툴바