HolaJun

35 object(s)
 

Nodejs활용_간단재고검색

Node.js를 이용한 (간단)상품재고 검색

기능


실행 순서

  1. 현재 상품 목록 출력
  2. 재고 검색할 상품명 입력
  3. 검색 결과 출력


추가해보면 좋을 것들


소스

// 문자열 내에 검색어가 존재할 경우, 검색어 앞에 '*'을 붙여 전체 문자열 return
function strCompare(content, search) {
  let found = content.includes(search);
  if(found == true) {
    return content.replace(search, "*"+search);
  }
    return 0;
}


// 상품 및 재고 존재 검사 후, 문자열 출력
function resultProducts(search) {
  // 배열 깊은복사
  // parse 메소드는 string 객체를 json 객체로 변환시켜줌.
  // stringify 메소드는 json 객체를 String 객체로 변환시켜줌.
  let tempArray = JSON.parse(JSON.stringify(productList));
  let order = 0;

  // 이름순으로 배열 정렬(Selection Sort)
  for(i=0; i<tempArray.length; i++) {
    // 최솟값
    let min = i;
    for(j=i+1; j<tempArray.length; j++) {
      // 최솟값 탐색
      // 내용의 첫번째 문자 비교.
      if(tempArray[j].productName.charAt(0) < tempArray[min].productName.charAt(0)) {
        min = j;
      }
    }
    temp = tempArray[min].productName;
    tempArray[min].productName = tempArray[i].productName;
    tempArray[i].productName = temp;
    temp = tempArray[min].productCount;
    tempArray[min].productCount = tempArray[i].productCount;
    tempArray[i].productCount = temp;
  }

  // 재고 존재 유무 검사
  for(i=0; i<tempArray.length; i++) {
    result = strCompare(tempArray[i].productName, search);

    // 상품가 존재하고(result에 *이 있는지 확인), 재고가 있는 경우.
    // indexOf 사용시 toString() 사용하지 않으면 없는 함수라고 error.
    if(result.toString().indexOf('*') != -1 && tempArray[i].productCount != 0 ) {
      console.log(`${result} : 재고 ${tempArray[i].productCount}개`);
    }
    // 상품는 존재하나, 재고가 없는 경우.
    if(result.toString().indexOf('*') != -1 && tempArray[i].productCount == 0 ) {
      console.log(`${result} : 재고 없음`);
    }
  }
  return 0;
}

// 현재 상품목록 출력
function currentNumberOfProducts(productList) {
  console.log(`\n`);
  for(let i=0; i<productList.length; i++) {
    var stock = (productList[i].productCount == 0) ? '(재고 없음)' : `(재고 ${productList[i].productCount}개)`;
    console.log(`${productList[i].productName} : ${stock}`);
  }
  console.log(`\n`);
  return 0;
}

// 상품 검색창
function searchProduct() {
  const readline = require("readline");

  // rl 변수에 대한 input, output 생성
  const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
  });
  // 입력받기 앞에 나타내주는 문구
  rl.setPrompt("[상품 이름을 입력해주세요] : ");
  // 입력받음
  rl.prompt();
  // on: 특정 이벤트에 대한 처리.
  // line: 한 줄을 입력받는 내용. 키보드로 한줄 입력하면 콜백함수의 파라메터로 line이 들어오게 됨.
  //        종료조건이 없으면 화면 콘솔에 line 출력하고, 다시 prompt 반복.
  rl.on("line", (data) => {
    resultProducts(data);
    console.log(`\n`);
    rl.prompt();
  });

  return 0;
}

// 상품 이름, 재고 수량 담는 배열 초기화.
let productList= [
 {"productName":"온라인 문화상품권", "productCount":999},
 {"productName":"닌텐도 스위치", "productCount":3},
 {"productName":"GTX1060", "productCount":1},
 {"productName":"GTX1080TI", "productCount":4},
 {"productName":"게이밍 스피커", "productCount":0},
 {"productName":"크레마 사운드", "productCount":4},
 {"productName":"맥주 디스펜서", "productCount":2},
 {"productName":"미니드론", "productCount":4},
];

// 메인
currentNumberOfProducts(productList);
searchProduct();


결과

img


img


img