포트폴리오/[IoT 기반 피지컬 AI 교육일지]

[ 11일차 기록 ] 조립 PC 재고 관리 프로그램 개발기 #2 (정렬 로직 개선 & 출고 기능 안정화)

개발자혜콩 2026. 2. 20. 16:48

1. 오늘 한 내용 (Day 3 개발 기록)

① 세트 출고 기능 구현 중 이슈 해결

 - 문제

  • 세트 출고 시 여러 개의 데이터를 한 번에 처리해야 함
  • 파일에서 데이터가 정상적으로 불러와지지 않음

 - 원인

  • scanf()로 읽는 개수와
    실제 비교하는 값(==)의 개수가 일치하지 않음

 - 해결

  • scanf() 반환값과 기대 필드 수 일치하도록 수정
  • 파일 파싱 로직 점검

👉 교훈: scanf는 “읽은 개수”를 반환한다는 점을 항상 체크


2. 오늘 추가 및 개선한 기능 (Update)

① 카테고리별 자동 정렬 (Sorted Insertion)

 -  변경 내용

  • 단순 ID 순 삽입 → 카테고리 기준 삽입 정렬
  • Add / Load 시 제자리 삽입

 -  사용 방식

  • 연결 리스트 + 삽입 정렬 로직
  • 노드 위치 탐색 후 중간 삽입

 -  효과

  • CPU → 쿨러 → 메인보드 … 순 자동 정렬
  • 어떤 순서로 입력해도 가독성 향상
  • 조회 기능의 완성도 상승

② 화면 출력용 순번(No.) 도입

 -  변경 내용

  • 내부 ID는 유지
  • 출력 시 1번부터 순차 번호 부여

 - 효과

  • 사용자 경험(UX) 향상
  • 직관적인 선택 가능
  • 내부 관리 ID와 사용자 인터페이스 분리

👉 “내부 로직” 과 “사용자 화면” 을 분리하는 설계 경험


③ 보이는 대로 제어 (Index-based Control)

 - 변경 내용

  • Update / Delete / 단일 Release 시
  • ID 대신 화면의 No. 기준 처리

 - 구현 방식

  • head부터 n번째 노드까지 while문으로 이동
while (current != NULL && count < targetIndex) {
    current = current->next;
    count++;
}
 
 

 - 효과

  • ID를 외울 필요 없음
  • 화면 중심 조작 가능
  • UX 대폭 개선

3. 직면했던 에러 및 해결 과정

  정렬로 인한 ID – No. 불일치 문제

- 문제

  • 카테고리 정렬 후
  • ID와 화면 순번이 일치하지 않음
 

- 해결

  • ID 직접 비교 방식 제거
  • n번째 노드 탐색 방식으로 변경

👉 “ID 기반 제어” → “위치(No) 기반 제어”로 사고 전환


② 출고 기능의 이원화 필요성

 -  문제

  • 단일 출고는 No. 기반이 편함
  • 세트 출고는 미리 정의된 ID 배열 필요

 > 로직 충돌 가능성 발생

 - 해결

  • 출고 메뉴 분리
    • F04-1: 단일 출고 → No. 기반
    • F04-2: 세트 출고 → ID 기반

👉 두 방식의 장점을 모두 유지


③ 데이터 손실 방지 (원자성 고민)

- 문제

  • 수정/출고 도중 프로그램 종료 시 데이터 손상 가능

- 해결

  • 모든 변경 직후 saveToFile() 즉시 호출
  • 파일 실시간 반영

👉 “안전성”을 고려한 설계로 발전


4. 오늘 배운 핵심 개념

  • 삽입 정렬 기반 연결 리스트 재배치
  • 사용자 인터페이스와 내부 데이터 분리
  • 위치 기반 노드 탐색
  • scanf 반환값 검증
  • 데이터 원자성(Atomicity) 개념

5. 오늘 헷갈렸던 것

  • 정렬된 리스트에서 ID 관리 방법
  • 세트 출고와 단일 출고 로직 통합 문제
  • 파일 저장 타이밍 설계

6. 현재 프로그램 진행도

F01 등록
F02 수정
F03 삭제
F04-1 단일 출고
F05 정렬 조회
F04-2 세트 출고 ⏳ 진행 예정

7. 다음 목표

  • 세트 출고 일괄 처리 로직 완성
  • 재고 부족 예외 처리 강화
  • 출고 로그 기록 기능 추가 고려
  • 메모리 해제 로직 최종 점검