본문 바로가기

Python

PyCharm - 성적처리 프로그램


# 성적 처리 프로그램 v4
# 성적데이터 추가 / 조회 / 수정 / 삭제 기능 제공


# 성적 데이터 저장용 변수
sjs = []

# 메뉴 정의 함수
def display_menu():
    # 화면출력용 메뉴 정의
    main_menu = '''
       성적처리 프로그램 v4
    ---------------------------
      1. 성적 데이터 추가
      2. 성적 데이터 조회
      3. 성적 데이터 상세조회
      4. 성적 데이터 수정
      5. 성적 데이터 삭제
      0. 프로그램 종료 
    ----------------------------
    '''

    print(main_menu, end=' ')

    # 메뉴 입력
    menu = input('  => 작업을 선택하세요  :  ')

    return menu


# 성적 입력 함수
# 이름, 국어, 영어, 수학 데이터 입력 총점, 평균, 학점을 계산하여 dict형으로 변환후 리스트에 저장
def add_sungjuk():
    # 성적 데이터 입력받음
    name = input('이름은?')
    kor = int(input('국어는?'))
    eng = int(input('영어는?'))
    mat = int(input('수학은?'))

    # 입력받은 데이터로 초기화
    sj = {'name':name, 'kor':kor, 'eng':eng, 'mat':mat }

    # 총점, 평균, 학점을 계산하기 위해 compute_sungjuk 호출
    compute_sungjuk(sj)

    # 처리된 성적 데이터를 리스트에 저장
    sjs.append(sj)

    # 입력 결과 확인  그러나 메모리 저장용이라 0 누르면 날라감 ->나중에 데이터베이스 저장
    print(len(sjs), sjs)


def compute_sungjuk(sj):
    tot = sj['kor'] + sj['eng'] + sj['mat']
    avg = tot / 3
    grd = '가'
    if avg >= 90: grd = '수'
    elif avg >= 80: grd = '우'
    elif avg >= 70: grd = '미'
    elif avg >= 60: grd = '양'

    sj['tot'] = tot
    sj['avg'] = avg
    sj['grd'] = grd


# 성적데이터 목록으로 출력
# 전체 성적 데이터에서 '이름,국어,영어,수학만 출력'

def list_sungjuk() :
    hdr = '\n\t이름 \t국어 \t영어 \t수학\n'
    hdr += '\t------------------------------\n'
    print(hdr)
    result = ''
    for sj in sjs:
        result += f"\t{sj['name']}\t\t{sj['kor']}\t\t{sj['eng']}\t\t{sj['mat']}\n"
    print(result)



# 성적데이터 상세 출력
# 이름을 입력받아 해당 학생의 성적데이터 출력
def view_sungjuk() :
    name = input(f'조회할 학생의 이름을 입력하시오')

    result = '찾는 학생이 없습니다.'
    # 조회할 대상이 sjs에 존재하는지 확인
    for sj in sjs:
        if name == sj['name']:
            result = f"{sj['name']} {sj['kor']} {sj['eng']} {sj['mat']} \n" \
                     f"{sj['tot']} {sj['avg']} {sj['grd']} "
            break              #데이터 삭제 후에 검색중지
    print(result)


# 성적 데이터 수정
# 수정할 학생이 존재하면 국어,영어,수학 다시 입력하고
# 총점, 평균, 학점을 다시 계산하고 dict형으로 변환하고 리스트에 저장, 데이터 수정완료 출력
def mdf_sungjuk():
    name = input('수정할 학생의 이름은?')
    result = '데이터가 없습니다.'
    for sj in sjs:
        if name == sj['name']:
            name = input(f"수정할 이름은? [기존 : {sj['name']}]")
            kor = int(input(f"수정할 국어점수는? [기존 : {sj['kor']}]"))
            eng = int(input(f"수정할 영어점수는? [기존 : {sj['eng']}]"))
            mat = int(input(f"수정할 수학점수는? [기존 : {sj['mat']}]"))

            # 입력받은 데이터로 초기화
            # sj['name'] = name
            # sj['kor'] = kor
            # sj['eng'] = eng
            # sj['mat'] = mat 이 방법은 복잡하고 메모리 큼
            sju = {'name': name, 'kor': kor, 'eng': eng, 'mat': mat}



            # 총점, 평균, 학점을 재 계산하기 위해 compute_sungjuk 호출
            compute_sungjuk(sju)

            # 기존 삭제 후 업데이트
            idx = sjs.index(sj)
            sjs.remove(sj)
            sjs.insert(idx, sju)

            # 입력 결과 확인  그러나 메모리 저장용이라 0 누르면 날라감 ->나중에 데이터베이스 저장
            print(len(sjs), sjs)

            result = '데이터 수정완료'
            break

    print(result)


# 이름을 입력받아 그 이름의 학생 성적 데이터 제거

def rmv_sungjuk():
    name = input('삭제할 학생의 이름은?')

    result = '삭제할 데이터가 없습니다'       # 삭제여부 저장용 변수
    for sj in sjs:
        if name == sj['name']:
            sjs.remove(sj)       # 리스트의 요소인 dict를 제거           # del sj['name'] 은 이름만 지우기
            result = '성공적으로 제거됨'
            break

    print(result)


# 프로그램 main
while True:
    # 메뉴를 화면에 표시하고 실행할 메뉴를 선택받아 menu 변수에 저장
    menu = display_menu()

    # 입력받은 메뉴 구분
    if menu == '1' : add_sungjuk()
    elif menu == '2' : list_sungjuk()
    elif menu == '3' : view_sungjuk()
    elif menu == '4' : mdf_sungjuk()
    elif menu == '5' : rmv_sungjuk()
    elif menu == '0' : break
    else : print('  => 잘못 입력하셨습니다.')

 


# 사원 관리 프로그램 v1
# 사원 데이터 추가/조회/수정/삭제 기능 제공


# 사원 데이터 저장용 변수
emps = []

# 메뉴 정의 함수
def display_empmenu():
    # 화면출력용 메뉴 정의
    main_menu = '''
       사원관리 프로그램 v1
    ---------------------------
      1. 사원 데이터 추가
      2. 사원 데이터 조회
      3. 사원 데이터 상세조회
      4. 사원 데이터 수정
      5. 사원 데이터 삭제
      0. 프로그램 종료 
    ----------------------------
    '''

    print(main_menu, end=' ')

    # 메뉴 입력
    menu = input('  => 작업을 선택하세요  :  ')

    return menu


# 사원 입력 함수
def add_emp():
    # 사원 데이터 입력받음
    empno = input('사원번호를 입력하시오')
    fname = input('이름을 입력하시오')
    lname = input('성을 입력하시오')
    email = input('이메일을 입력하시오')
    phone = input('전화번호를 입력하시오')
    hdate = input('입사일을 입력하시오')
    jobid = input('직책을 입력하시오')
    sal = input('급여를 입력하시오')
    comm = input('수당을 입력하시오')
    mgrid = input('매니저 이름을 입력하시오')
    deptid = input('부서를 입력하시오')

    # 입력받은 데이터로 초기화
    emp = {'empno': empno, 'fname': fname, 'lname': lname,
           'email': email, 'phone': phone, 'hdate': hdate,
           'jobid': jobid, 'sal': sal, 'comm': comm,
           'mgrid': mgrid, 'deptid': deptid}

    # 처리된 사원 데이터를 리스트에 저장
    emps.append(emp)

    # 입력 결과 확인  그러나 메모리 저장용이라 0 누르면 날라감 ->나중에 데이터베이스 저장
    print(len(emps), emps)






# 사원정보 조회
# 사번, 이름, 성, 이메일, 직책, 부서번호
def list_emp():
    result = ''

    for emp in emps:
        result += f"\t사원번호: {emp['empno']}\t이름: {emp['fname']}\t성: {emp['lname']}\t이메일: {emp['email']}\t직책: {emp['jobid']}\t부서: {emp['deptid']}\n"

    print(result)








# 사원정보 상세조회
# 사번을 입력받음
def view_emp():
    empno = input(f'조회할 사원의 사원번호를 입력하시오')

    result = '찾는 사원이 없습니다'
    for emp in emps:
        if empno == emp['empno']:
            result = f"{emp['empno']}{emp['fname']}{emp['lname']}{emp['email']} \n" \
                     f"{emp['phone']}{emp['hdate']}{emp['jobid']}{emp['sal']} \n"  \
                     f"{emp['comm']}{emp['mgrid']}{emp['deptid']}"
            break
    print(result)


# 사원정보 수정
# 사번을 입력받음
def mdf_emp():
    empno = input('수정할 사원의 사원번호는?')

    result = '데이터 없음'

    for emp in emps :
        if empno == emp['empno']:

            empno = input(f"수정할 사원번호는?   [기존 : {emp['empno']}]")
            fname = input(f"수정할 이름은?   [기존 : {emp['fname']}]")
            lname = input(f"수정할 성은? [기존 : {emp['lname']}]")
            email = input(f"수정할 이메일은? [기존 : {emp['email']}]")
            phone = input(f"수정할 전화번호는? [기존 : {emp['phone']}]")
            hdate = input(f"수정할 입사일은?   [기존 : {emp['hdate']}]")
            jobid = input(f"수정할 직책은? [기존 : {emp['jobid']}]")
            sal   = input(f"수정할 급여는? [기존 : {emp['sal']}]")
            comm  = input(f"수정할 수당은? [기존 : {emp['comm']}]")
            mgrid = input(f"수정할 상사번호는? [기존 : {emp['mgrid']}]")
            deptid = input(f"수정할 부서번호는? [기존 : {emp['deptid']}]")

            empk = {'empno':empno,'fname' : fname, 'lname' : lname,'email': email,
                   'phone': phone, 'hdate':hdate, 'jobid': jobid,'sal': sal,
                    'comm': comm, 'mgird': mgrid, 'deptid': deptid}

            idx = emps.index(emp)
            emps.remove(emp)
            emps.insert(idx, empk)

            print(len(emps), emps)

            result = '데이터 수정완료'
            break
    print(result)





# 사원정보 삭제
# 사번을 입력받음
def rmv_emp():
    empno = input('삭제할 사원의 번호는?')

    result = '삭제할 데이터가 없습니다.'

    for emp in emps:
        if empno == emp['empno']:
            emps.remove(emp)
            result ='성공적으로 제거됨'
            break
    print(result)







# 프로그램 main
while True:
    # 메뉴를 화면에 표시하고 실행할 메뉴를 선택받아 menu 변수에 저장
    menu = display_empmenu()

    # 입력받은 메뉴 구분
    if menu == '1' : add_emp()
    elif menu == '2' : list_emp()
    elif menu == '3' : view_emp()
    elif menu == '4' : mdf_emp()
    elif menu == '5' : rmv_emp()
    elif menu == '0' : break
    else : print('  => 잘못 입력하셨습니다.')

'Python' 카테고리의 다른 글

PyCharm - 모듈  (0) 2022.05.17
PyCharm - comprehension  (0) 2022.05.17
PyCharm - Dict  (0) 2022.05.12
PyCharm - Tuple, Set  (0) 2022.05.12
PyCharm - list  (0) 2022.05.11