728x90
반응형

주제 : 고객 정보 관리 시스템

진행 인원  : 4명

진행 방법 : 짝 프로그래밍

 

짝 프로그래밍

- 중간 지점에 하나의 컴퓨터를 둔다.

- 10분 간격으로 서로 옮겨 가면서 코드를 작성한다. 

- 네비게이터(navigator)가 전략을 제시하고 드라이버(driver)가 실제 코드를 작성한다.

지금 까지 배운 내용을 토대로 고객의 정보를 관리하는 프로그램을 만듭니다.
고객의 정보를 관리하는 프로그램에서 사용하는 고객 정보를 저장하는 자료구조는 자신 있는 것을 이용합니다.
 
1. 주요 내용
- 고객의 정보는 이름, 성별, 이메일, 출생년도가 있습니다.
- 고객의 정보를 입력받아 본인이 선택한 자료구조에 저장해야 합니다.
- 이름은 문자열로 저장
- 성별은 남자는 M, 여자는 F로 저장
- 이메일은 문자열로 저장
- 태어난 연도는 정수로 저장
 
2. 요구사항
- 고객 관리 프로그램은 고객의 정보를 저장, 조회, 수정, 삭제 할 수있는 기능이 있어야 합니다.
- 고객 정보를 파일에 저장하는 기능을 구현하지 않아도 됩니다.
- “ I ”를 눌러 고객의 정보를 입력받도록 합니다.
- 저장된 고객 정보는 “ P ” 또는 “ N ”을 눌러 이전 고객정보 또는 다음 고객정보를 조회할 수 있어야 합니다.
- 조회한 고객 정보는 “ U ”를 눌러 새로운 정보로 수정할 수 있어야 합니다.
- “ D ”를 누르면 조회한 고객 정보를 삭제해야 합니다.
- 프로그램의 종료는 “ Q ”를 누릅니다.
 

실습 시작 전 주요내용 정리하기

# 이름, 성별, 이메일, 출생년도
# 이름 - 문자열
# 성별 - M / F
# 이메일 - 문자열
# 출생년도 - 정수

# 저장, 조회, 수정, 삭제
# I - 사용자가 이름, 성별, 이메일, 출생년도를 순차적으로 입력할 수 있게한다.
# P, N - 입렭받은 여러명의 정보를 조회 (이전, 이후)
# U - 현재 위치의 고객정보를 수정해야 한다.
# D - 현재 위치의 고객정보를 삭제해야 한다.
# Q - 종료
 
 

작성한 코드

import re

# clientData = list()
# 기본으로 입력된 데이터 입니다.
clientData = [{'name' : 'aaa', 'gender' : 'M', 'email' : 'abc@gmail.com', 'birth' : '2000'},
              {'name' : 'bbb', 'gender' : 'F', 'email' : 'bbb@gmail.com', 'birth' : '2001'},
              {'name' : 'ccc', 'gender' : 'M', 'email' : 'ccc@gmail.com', 'birth' : '2002'}]
gender_pattern = re.compile(r'^[MFmf]$')

while True:
    yourInput = input('I, R, U, D, Q 중에 입력하시오 : ')
    
    if 'I' == yourInput:
        while True:
            name = input('이름을 입력하세요 : ')
            if name.isalpha():
                pass
            else:
                print('올바른 이름을 입력하세요.')
                continue
            gender = input('성별을 입력하세요(M / F) : ')
            if gender_pattern.match(gender):
                pass
            else:
                print('올바른 성별을 입력하세요.')
                continue
            email = input('이메일을 입력하세요 : ')
            if email.isalpha():
                pass
            else:
                print('올바른 이메일을 입력하세요.')
                continue
            birth = input('태어난 연도를 입력하세요 : ')
            if birth.isdecimal():
                pass
            else:
                print('올바른 태어난 연도를 입력하세요.')
            dic = {'name' : name, 'gender' : gender, 'email' : email, 'birth' : birth}
            clientData.append(dic)
            print('입력완료 되었습니다.')
            break
            
    elif 'R' == yourInput:
        count = -1
        print('고객 정보를 조회하세요.')
        while True:
            search = input('이전정보를 조회하려면 P 다음 정보를 조회하려면 N을 입력하세요 : ')
            if 'N' in search:
                count += 1
                print(clientData[count], f'당신의 번호는 {count}')
                continue
            elif 'P' in search:
                count -= 1
                print(clientData[count], f'당신의 번호는 {count}')
                continue
            elif 'Q' in search:
                break
            else :
                print('N, P, Q중에 입력하세요 : ')
                continue
                
    elif 'U' == yourInput:
        print('고객 정보를 수정하세요.')
        user_count = input('당신의 번호를 입력하세요 : ')
        print(f'현재 당신이 가지고있는 고객정보{clientData[int(user_count)]}')
        rename = input('변경할 이름을 입력하세요 : ')
        regender = input('변경할 성별을 입력하세요(M / F) : ')
        reemail = input('변경할 이메일을 입력하세요 : ')
        rebirth = input('변경할 태어난 연도를 입력하세요 : ')
        dic = {'name' : rename, 'gender' : regender, 'email' : reemail, 'birth' : rebirth}
        clientData[int(user_count)]=dic
        print('입력완료 되었습니다.')
        break
        
    elif 'D' == yourInput:
        print('삭제하시겠습니까?')
        userDelCount=input('삭제할 번호를 입력하세요. 나가시려면 Q를 입력해주세요 : ')
        if 'Q' in userDelCount:
            continue
        print(f'당신의 개인정보는 다음과 같습니다{clientData[int(userDelCount)]}')
        real = input('정말 지우겠습니까?(Y / N) : ')

        if 'Y' in real:
            del clientData[int(userDelCount)]
        continue

    elif 'Q' == yourInput:
        break

오류사항

- 고객 정보 조회 시 List에 존재하는 데이터 count을 넘어가면 오류가 난다.

- 이메일 입력시 isalpha()함수를 써서 문자형인지 확인하는데 정확한 이메일 형식을 입력하면 '@'와 '.' 등의 기호가 들어가기 때문에 문자 형식에 맞지 않아 오류가 난다.

 

 

728x90
반응형

+ Recent posts