iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
自我挑戰組

NodeJS with MongoDB專案開發系列 第 18

Node.js with Mongo DB專案開發

  • 分享至 

  • xImage
  •  

餐廳運營狀況

一間餐廳是否有賺錢,系統的分析是相當重要的,因此寫一個node.js的程式來分析餐廳的運營狀況在適合不過了

const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

const restaurantDataFile = 'restaurant_data.json';

// 讀取餐廳數據
function readRestaurantData() {
  try {
    const data = fs.readFileSync(restaurantDataFile, 'utf8');
    return JSON.parse(data);
  } catch (error) {
    return [];
  }
}

// 寫入餐廳數據
function writeRestaurantData(data) {
  fs.writeFileSync(restaurantDataFile, JSON.stringify(data, null, 2), 'utf8');
}

// 添加新餐廳
function addRestaurant() {
  rl.question('請輸入新餐廳的名稱:', (name) => {
    rl.question('請輸入新餐廳的營運數據:', (revenue) => {
      const restaurant = {
        name,
        revenue: parseFloat(revenue)
      };

      const restaurantData = readRestaurantData();
      restaurantData.push(restaurant);
      writeRestaurantData(restaurantData);

      console.log(`成功添加餐廳:${name}`);
      rl.close();
    });
  });
}

// 更新餐廳的營運數據
function updateRestaurant() {
  const restaurantData = readRestaurantData();
  if (restaurantData.length === 0) {
    console.log('沒有可供更新的餐廳數據。');
    rl.close();
    return;
  }

  console.log('現有餐廳列表:');
  restaurantData.forEach((restaurant, index) => {
    console.log(`${index + 1}. ${restaurant.name}`);
  });

  rl.question('請選擇要更新的餐廳編號:', (choice) => {
    const index = parseInt(choice) - 1;
    if (isNaN(index) || index < 0 || index >= restaurantData.length) {
      console.log('無效的選擇。');
      rl.close();
      return;
    }

    rl.question(`請輸入新的營運數據 for ${restaurantData[index].name}:`, (revenue) => {
      restaurantData[index].revenue = parseFloat(revenue);
      writeRestaurantData(restaurantData);

      console.log(`成功更新餐廳 ${restaurantData[index].name} 的營運數據。`);
      rl.close();
    });
  });
}

// 主選單
function mainMenu() {
  console.log('歡迎使用餐廳營運情況管理系統!');
  console.log('1. 添加新餐廳');
  console.log('2. 更新餐廳營運數據');
  console.log('3. 退出');
  rl.question('請選擇操作:', (choice) => {
    switch (choice) {
      case '1':
        addRestaurant();
        break;
      case '2':
        updateRestaurant();
        break;
      case '3':
        rl.close();
        break;
      default:
        console.log('無效的選擇。');
        mainMenu();
        break;
    }
  });
}

mainMenu();

以下是程式碼的解釋

  1. 引入模塊:
const fs = require('fs');
const readline = require('readline');

這裡引入了 Node.js 的 fs 模塊,用於文件讀取和寫入,以及 readline 模塊,用於處理用戶的命令行輸入。

  1. 創建 readline 接口:
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

這個程式使用 readline 模塊創建一個命令行輸入接口,以便與用戶進行交互。

  1. 定義數據文件:
const restaurantDataFile = 'restaurant_data.json';

這裡指定了一個 JSON 文件的名稱,用於保存餐廳的基本信息和營運數據。

  1. 讀取和寫入數據的輔助函數:
function readRestaurantData() { /* ... */ }
function writeRestaurantData(data) { /* ... */ }

這些函數用於讀取和寫入餐廳數據,它們通過讀取 JSON 文件來加載現有數據,並將更新後的數據寫入 JSON 文件中。

  1. 添加新餐廳的函數:
function addRestaurant() { /* ... */ }

這個函數允許用戶輸入新餐廳的名稱和營運數據,然後將其添加到餐廳數據中。

  1. 更新餐廳營運數據的函數:
function updateRestaurant() { /* ... */ }

這個函數首先列出現有的餐廳,然後允許用戶選擇要更新的餐廳,並輸入新的營運數據。

  1. 主選單函數:
function mainMenu() { /* ... */ }

這個函數是整個程序的入口點,顯示主選單,根據用戶的選擇執行相應的操作。

最後,通過調用 mainMenu() 函數,程序開始運行,並等待用戶的輸入。用戶可以選擇添加新餐廳、更新餐廳營運數據或退出程序。根據用戶的選擇,程序調用相應的函數,並進行互動。

整個程式的目標是提供一個簡單的方式來管理餐廳的營運情況,並將數據保存在 JSON 文件中,以便在後續運行時保留數據。


上一篇
day 17Node.js with Mongo DB專案開發
下一篇
day 19 node.js with mongo db專案開發
系列文
NodeJS with MongoDB專案開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言