1. 프로그램 실행 시 파일의 내용을 all_std 리스트에 불러온다.
2. (1. 입력 2.출력 3.검색 4.수정 5.삭제 6.종료) 를 진행한다.
3. 프로그램 종료 시 all_std의 내용을 파일에 저장한다. (덮어쓰기)
import pickle
import sys
all_std = []
#파일 전체 내용 로드 함수
def pickleLoadAll():
with open('DB.p', 'rb') as file:
while True:
try:
data = pickle.load(file)
except EOFError:
break
all_std.append(data)
#실행시 파일 내용 불러옴
pickleLoadAll()
print("DB :",all_std)
#메인
while(True):
print('-'*42)
print('1.입력 2.출력 3.검색 4.수정 5.삭제 6.종료 :')
print('-'*42)
menu = int(input())
if(menu not in [1,2,3,4,5,6]):
print("잘못 입력하셨습니다.")
continue
# 1. 입력
if menu == 1:
std = []
print("------학생 등록------")
stdNum = input("학번 입력:")
#중복된 학번 확인
flag = True
for i in all_std:
if i[0] == stdNum:
flag = False
if flag:
std.append(stdNum)
else:
print("중복된 학번입니다. 다시 입력해주세요.")
continue
std.append(input("학과 입력:"))
std.append(input("이름 입력:"))
std.append(int(input("국어점수 입력:")))
std.append(int(input("수학점수 입력:")))
std.append(int(input("영어점수 입력:")))
std.append(sum(std[3:6]))#총점
std.append(round(std[6]/3,2))#평균
all_std.append(std)
# 2. 출력
if menu == 2:
user_input = int(input("1. 전체출력 2. 학과출력 :"))
#전체출력
if user_input == 1:
for i in all_std:
print(i)
#학과출력
elif user_input == 2:
user_input = input("학과입력 :")
for i in all_std:
if(i[1] == user_input):
print(i)
else:
print("잘못된 입력입니다.")
# 3. 검색
if menu == 3:
user_input = int(input("1. 이름검색 2. 학과검색 3. 성적검색 :"))
# 1.이름검색
if user_input == 1:
searchName = input("검색할 이름 입력 : ")
for i in all_std:
if i[2] == searchName:
print(i)
# 2.학과검색
if user_input == 2:
searchDept = input("검색할 학과 입력 : ")
for i in all_std:
if i[1] == searchDept:
print(i)
# 3.성적검색
if user_input == 3:
searchScore = int(input("1.국어 2.영어 3.수학"))
scoreCut = int(input("몇 점 이상? : "))
if searchScore == 1:
#정렬 lambda
print("--------국어점수",scoreCut,"점 이상---------")
for i in sorted(all_std, key = lambda x: -x[3]):
if i[3]>=scoreCut:
print(i)
elif searchScore == 2:
print("--------영어점수",scoreCut,"점 이상---------")
for i in sorted(all_std, key = lambda x: -x[4]):
if i[4]>=scoreCut:
print(i)
elif searchScore == 3:
print("--------수학점수",scoreCut,"점 이상---------")
for i in sorted(all_std, key = lambda x: -x[5]):
if i[5]>=scoreCut:
print(i)
else:
print("잘못된 입력입니다.")
# 4. 수정
if menu == 4:
stdNum = input("수정할 학번 입력 : ")
for i in all_std:
if i[0] == stdNum:
a,b,c = map(int,input("수정할 국어, 영어, 수학 점수 입력(공백구분) : ").split())
i[3] = a
i[4] = b
i[5] = c
i[6] = a+b+c
i[7] = round((a+b+c)/3,2)
print("수정을 완료했습니다.")
# 5. 삭제
if menu == 5:
delStdNum = input("삭제할 학번 입력 : ")
for i in all_std:
if i[0] == delStdNum:
print(i[2],"학생을 삭제합니다.")
all_std.remove(i)
# 6. 종료
if menu == 6:
#종료시 파일 저장(덮어쓰기)
with open('DB.p','wb') as file:
for i in all_std:
pickle.dump(i, file)
print("저장완료")
print("프로그램을 종료합니다.")
sys.exit()
⦁ 실행 시 파일안에 있는 학생 출력
1. 학생등록 : all_std 배열에 append
*학번 중복시 continue
2. 출력
3. 검색
-이름검색
-학과검색
-성적검색 ( 일정 점수 이상 내림차순 정렬 )
4. 수정
5. 삭제
6. 종료 ( 파일에 저장 )
다시 실행 시 파일을 불러온다.
참고 문헌 : 파이썬 코딩도장
'Python' 카테고리의 다른 글
[Python] VSCode에서 주피터노트북 실행하기 (가상환경, conda커널 설정 방법) (0) | 2023.04.24 |
---|---|
[Python] 파이썬 기후 데이터 시각화하기 (Indian Summers, plt, 선 차트, 막대 차트, 파이 차트) (4) | 2023.04.17 |
[Python] 파이썬 지뢰찾기 구현 (2차원 리스트) (3) | 2022.07.27 |
[Python] 로또 당첨번호 (별찍기 예제) (0) | 2022.07.26 |
[Python] 파이썬 별찍기 for, while문 (0) | 2022.07.26 |