새소식

인기 검색어

비트교육_단기과정

파이썬 class 성적관리 프로그램

  • -
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import pickle
import os
import copy
 
 
class studentInfo:
    __dataList = dict()
 
    def __init__(self):
 
        if os.path.isfile("db.p"):  # 파일 존재 확인
            dpSize = os.path.getsize('db.p')  # 파일이 비어있는지 검사
            if dpSize != 0:
                with open('db.p''rb'as file:  # 파일 열어서 읽기
                    self.__dataList = pickle.load(file)  # __dataList 변수에 저장하기
 
    def getDataList(self):
        return self.__dataList
 
    def setDataList(self, datalistTemp):
        with open('db.p''wb'as file:
            pickle.dump(datalistTemp, file)
 
 
class studentManagement:
    oj = studentInfo()
    __stddataList = oj.getDataList()
 
    def insertinfo(self):  # 학생정보 입력 메서드
        category = ['학과''이름''국어''영어''수학''총점''평균']
 
        data = input('학번, 학과, 이름, 국어 점수, 영어 점수, 수학 점수를 입력하시오 : ').split()
        if len(data) == 6:
            std_id = data[0]  # 학번
            if std_id not in self.__stddataList:  # 학생정보딕셔너리에 현제 입력한 학번이 존재하지않을 경우
                del data[0]  # 입력받은 데이터에서 학번 삭제
                data.append(int(data[2]) + int(data[3]) + int(data[4]))
                data.append(int(data[5]) // 3)
                dataDict = dict(zip(category, data))  # 관리 항목과 입력받은 데이터를 key : value 형식으로 딕셔너리 생성
                self.__stddataList.setdefault(std_id, dataDict)  # 리스트에 정보 추가
            else:
                print('해당 학번 학생이 이미 존재합니다')
        else:
            print('형식에 맞게 입력하시오')
 
    def dispALLInfo(self):  # 학생 전체 출력
        if not self.__stddataList:
            print('출력할 값이 존재하지 않습니다')
        else:
            for key, value in self.__stddataList.items():  #
                print(key, end=' ===>   ')
                for key, value in value.items():
                    print(key, end=' = ')
                    print(value, end='   ')
                print()
 
    def dispInfo(self, std_id):  # 학생 한명 출력
        if std_id not in self.__stddataList:
            print('출력할 값이 존재하지 않습니다')
        else:
            print(std_id, end=' ===>   ')
            for key, value in self.__stddataList.get(std_id).items():
                print(key, end=' = ')
                print(value, end='   ')
            print()
 
    def dispInfoTp(self*temp):  # sorted 반환값 전용 출력 함수
        for i in temp:
            x, y = i
            self.dispInfo(x)
 
    def deleteInfo(self, a):  # 사번으로 삭제
        try:
            del self.__stddataList[a]
            print('삭제 후 결과\n')
            self.dispALLInfo()  # 삭제 후 학생정보 전체 출력력
        except Exception as e:
            print('해당하는 데이터가 존재하지 않습니다')
 
    def dbDump(self):  # DB 저장
        self.oj.setDataList(self.__stddataList)
 
    def searchInfo(self):  # 학생 검색
        searchChoice = input('검색 유형을 선택하시오 => 1. 학번  2. 이름  3. 학과  : ')
        if searchChoice == '1':
            std_id = input('검색할 학생의 학번을 입력하시오 : ')
            self.dispInfo(std_id)
        elif searchChoice == '2':
            std_name = input('검색할 학생의 이름을 입력하시오 : ')
            for key, value in self.__stddataList.items():
                if value.get('이름'== std_name:
                    self.dispInfo(key)
        elif searchChoice == '3':
            std_depart = input('검색할 학생의 학과를 입력하시오 : ')
            for key, value in self.__stddataList.items():
                if value.get('학과'== std_depart:
                    self.dispInfo(key)
 
    def modifyInfo(self):  # 학생 정보 수정
        std_id = input('정보수정할 학생의 학번을 입력하시오 : ')
        self.dispInfo(std_id)
        if std_id in self.__stddataList:  # 딕셔너리 키값중에 입력받은 키값이 존재 할 경우
            ch = input('\n수정할 항목을(총점, 평균 제외)입력 하시오 : ')
            value = input('변경값을 입력 하시오 : ')
            self.__stddataList[std_id].update({ch: value})
            if ch == '국어' or '수학' or '영어':  # 국어 수학 영어 항목을 수정할 경우
                self.__stddataList[std_id].update(
                    총점=(int(self.__stddataList[std_id].get('국어')) + int(self.__stddataList[std_id].get('영어')) + int(
                        self.__stddataList[std_id].get('수학'))))  # 해당 학번 학생의 총점 value값을 업데이트
                self.__stddataList[std_id].update(
                    평균=int(self.__stddataList[std_id].get('총점')) // 3)  # 해당 학번 학생의 평균 value값을 업데이트
 
        else:
            print('해당 학번 학생이 존재하지 않습니다')
 
    def printInfo(self):
        opt2 = input('1. 등록순  2. 총점순  3. 이름순 : ')
        if opt2 == '1':
            stm.dispALLInfo()
        elif opt2 == '2':
            temp = copy.deepcopy(self.__stddataList)  # deep copy
            temp = sorted(temp.items(), key=lambda x: x[1].get('총점'), reverse=True)  # 총점 기준으로 내림차순
            stm.dispInfoTp(*temp)
        elif opt2 == '3':
            temp = copy.deepcopy(self.__stddataList)
            temp = sorted(temp.items(), key=lambda x: x[1].get('이름'), reverse=False)
            stm.dispInfoTp(*temp)
        else:
            print('형식에 맞게 입력하시오')
 
    def start(self):
        while True:
            print()
            userChoic = input('1.입력  2.출력  3.검색  4.삭제  5.수정  6.종료   ==>    ')
            if userChoic == '1':
                stm.insertinfo()
            elif userChoic == '2':
                stm.printInfo()
            elif userChoic == '3':
                stm.searchInfo()
            elif userChoic == '4':
                stm.deleteInfo(input('삭제할 학번을 입력하시오  ==>  '))
            elif userChoic == '5':
                stm.modifyInfo()
            elif userChoic == '6':
                stm.dbDump()
                exit()
            else:
                print('형식에 맞게 입력하세요')
 
 
# 메인
stm = studentManagement()
stm.start()
 
cs

'비트교육_단기과정' 카테고리의 다른 글

단기 프로젝트 진행사항  (0) 2022.10.21
성적관리프로그램 파이썬  (0) 2022.07.29
원형 큐 실습  (0) 2022.07.26
숫자 야구 Python ver  (0) 2022.07.26
로또 당첨 프로그램 Python ver  (0) 2022.07.26
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.