Node.js를 이용한 (간단)상품재고 검색
기능
- 콘솔 환경에서 Node.js 이용해 상품 재고 검색
- 현재 상품 목록 출력
- 실제 보유중인 상품인지, 재고가 있는지 검색 및 출력
- 검색 결과 출력시 이름순 정렬(Selection Sort)
- 검색어가 포함된 상품 출력시, 검색어 앞에 별표(*)를 붙여 출력
실행 순서
- 현재 상품 목록 출력
- 재고 검색할 상품명 입력
- 검색 결과 출력
추가해보면 좋을 것들
- 데이터 관리
- DB 구축(MySQL or MongoDB)
- 배열변수가 아닌 DB에 데이터 저장
- 콘솔 입출력이 아닌 웹 페이지에 입출력
소스
// 문자열 내에 검색어가 존재할 경우, 검색어 앞에 '*'을 붙여 전체 문자열 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();
결과
donate.html