• Y
  • List All
  • Feedback
    • This Project
    • All Projects
Profile Account settings Log out
  • Favorite
  • Project
  • All
Loading...
  • Log in
  • Sign up
hylee / salarySplitSend star
  • Project homeH
  • CodeC
  • IssueI
  • Pull requestP
  • Review R
  • MilestoneM
  • BoardB
  • Files
  • Commit
  • Branches
salarySplitSendsrcemployee_manager.py
Download as .zip file
File name
Commit message
Commit date
__pycache__
first commit
08-28
src
first commit
08-28
test
first commit
08-28
README.md
first commit
08-28
build.bat
first commit
08-28
email_config.json
first commit
08-28
employees.json
first commit
08-28
payslip_splitter_gui_v3.py
first commit
08-28
requirements.txt
first commit
08-28
급여명세서분할기_메일기능_v4.exe
.exe file add
08-28
File name
Commit message
Commit date
__pycache__
first commit
08-28
email_sender.py
first commit
08-28
employee_manager.py
first commit
08-28
pdf_preview.py
first commit
08-28
hehihoho3@gmail.com 08-28 722a0e6 first commit UNIX
Raw Open in browser Change history
import json import os import csv from typing import Dict, List from datetime import datetime class EmployeeManager: """직원 정보 관리 클래스""" def __init__(self, data_file="employees.json"): self.data_file = data_file self.employees = self.load_employees() def load_employees(self) -> Dict[str, str]: """직원 데이터 로드 (JSON 파일에서)""" if os.path.exists(self.data_file): try: with open(self.data_file, 'r', encoding='utf-8') as f: return json.load(f) except Exception as e: print(f"직원 데이터 로드 실패: {e}") return {} # 기본 직원 데이터 default_employees = { "김혜리": "khr2205@iten.co.kr", "이준호": "tolag3@iten.co.kr", "이호영": "hylee@iten.co.kr", "유인식": "smartyu@iten.co.kr", "원영현": "dudgusw@iten.co.kr", "유찬희": "ych@iten.co.kr", "조현희": "hc3874@iten.co.kr", "강영묵": "ymkang@iten.co.kr", "조용준": "antelope@iten.co.kr", "우영두": "rosehips@iten.co.kr", "김상훈": "aricowiz@iten.co.kr", "장영익": "yeongik@iten.co.kr", "정다은": "jungde@iten.co.kr", "이지우": "dlwldn1024@iten.co.kr", "박진순": "jsp@iten.co.kr", "정수빈": "dhgksk99@iten.co.kr", "강민경": "kmk0522@iten.co.kr" } # 기본 데이터 저장 self.save_employees_data(default_employees) return default_employees def save_employees(self): """직원 데이터 저장""" self.save_employees_data(self.employees) def save_employees_data(self, data: Dict[str, str]): """직원 데이터를 파일에 저장""" try: with open(self.data_file, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) # 백업 CSV 파일도 생성 self.backup_to_csv(data) except Exception as e: print(f"직원 데이터 저장 실패: {e}") def backup_to_csv(self, data: Dict[str, str]): """CSV 백업 파일 생성""" try: backup_file = "employees_backup.csv" with open(backup_file, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['이름', '이메일', '백업일시']) current_time = datetime.now().strftime('%Y-%m-%d %H:%M') for name, email in data.items(): writer.writerow([name, email, current_time]) except Exception as e: print(f"CSV 백업 실패: {e}") def add_employee(self, name: str, email: str) -> bool: """직원 추가""" if name.strip() in self.employees: return False # 이미 존재 self.employees[name.strip()] = email.strip() self.save_employees() return True def update_employee(self, old_name: str, new_name: str, email: str) -> bool: """직원 정보 수정""" if old_name not in self.employees: return False old_name = old_name.strip() new_name = new_name.strip() email = email.strip() # 이름이 변경되는 경우 if old_name != new_name: if new_name in self.employees: return False # 새 이름이 이미 존재 del self.employees[old_name] self.employees[new_name] = email self.save_employees() return True def delete_employee(self, name: str) -> bool: """직원 삭제""" if name in self.employees: del self.employees[name] self.save_employees() return True return False def get_employee_email(self, name: str) -> str: """직원 이메일 조회""" return self.employees.get(name.strip(), "") def get_all_employees(self) -> Dict[str, str]: """전체 직원 목록 반환""" return self.employees.copy() def search_employees(self, query: str) -> Dict[str, str]: """직원 검색""" query = query.lower().strip() if not query: return self.get_all_employees() result = {} for name, email in self.employees.items(): if query in name.lower() or query in email.lower(): result[name] = email return result def import_from_csv(self, file_path: str) -> tuple: """CSV 파일에서 직원 정보 가져오기""" success_count = 0 error_list = [] try: encodings = ['utf-8', 'cp949', 'euc-kr'] for encoding in encodings: try: with open(file_path, 'r', encoding=encoding) as f: reader = csv.reader(f) header = next(reader, None) # 헤더 스킵 for row_num, row in enumerate(reader, 2): if len(row) >= 2: name = row[0].strip() email = row[1].strip() if name and email and '@' in email: if self.add_employee_silent(name, email): success_count += 1 else: error_list.append(f"행 {row_num}: '{name}' 이미 존재") else: error_list.append(f"행 {row_num}: 유효하지 않은 데이터") break except UnicodeDecodeError: continue except Exception as e: error_list.append(f"파일 읽기 오류: {str(e)}") if success_count > 0: self.save_employees() return success_count, error_list def add_employee_silent(self, name: str, email: str) -> bool: """직원 추가 (저장하지 않음, 배치 처리용)""" if name.strip() in self.employees: return False self.employees[name.strip()] = email.strip() return True def export_to_csv(self, file_path: str) -> bool: """CSV 파일로 내보내기""" try: with open(file_path, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['이름', '이메일']) # 헤더 for name, email in sorted(self.employees.items()): writer.writerow([name, email]) return True except Exception as e: print(f"CSV 내보내기 실패: {e}") return False def get_employee_count(self) -> int: """직원 수 반환""" return len(self.employees) def clear_all_employees(self): """모든 직원 정보 삭제""" self.employees.clear() self.save_employees()

          
        
    
    
Copyright Yona authors & © NAVER Corp. & NAVER LABS Supported by NAVER CLOUD PLATFORM

or
Sign in with github login with Google Sign in with Google
Reset password | Sign up