14870 - Order Ranker   

Description

電子商務系統中,每筆訂單都有三個屬性:

Amount(金額):訂單總價,範圍 0~20000

ShippingDays(運送天數):下單到到貨天數,範圍 1~30

CustomerRating(顧客信用評分):範圍 0~100

 

此外,系統對於訂單有折扣策略:

食品類 (FOOD):9 折

其他類別:原價

 

訂單分類如下:

HighPriority:高金額 (>=10000) 且 顧客評分高 (>=70) 且 快速運送 (<=3 天)

MediumPriority:高金額 (>=10000) 或 顧客評分高 (>=70),但不符合 HighPriority

LowPriority:低金額 (<10000) 且 顧客評分低 (<70) 且 慢速運送 (>7 天)

Standard:其他訂單

 

給定主要執行程式main.c (題號.c)、以及Header檔function.h (題號.h);請試著完成Header檔中未實現的函式:SetOrderValue()、CalculateFinalAmount()、GetOrderPriority()、CountPriority()

function.h:

 

enum ProductType
{
    ELECTRONICS,
    CLOTHING,
    FOOD,
    BOOK
};
enum OrderPriority
{
    HighPriority,
    MediumPriority,
    LowPriority,
    Standard
};
 
typedef struct Order
{
    char name[50];         // 商品名稱
    enum ProductType type; // 商品類別
    int Amount;            // 訂單金額
    int ShippingDays;      // 運送天數
    int CustomerRating;    // 顧客信用評分
} Order;

methods:

-float CalculateFinalAmount(Order *firstOrder) – 需不斷拜訪傳進的 Order 記憶體的下一個 Order(或透過陣列指標移動),並依商品類別計算折扣後金額,返回最後金額

-enum OrderPriority GetOrderPriority(Order *firstOrder) – 需不斷拜訪傳進的 Order 記憶體,依金額、顧客信用評分、運送天數判斷優先級,返回該優先級

-void CountPriority(Order *firstOrder, int n, int *high, int *medium, int *low, int *standard) – 需透過迴圈和指標拜訪所有 Order,統計每個優先級訂單數量

 

hint:

  1. 可以透過迴圈和指標不斷拜訪下一個 Order
  2. 可以透過判斷指標是否為 NULL(或迴圈計數到 n)來決定何時終止
  3. 可以透過 Order 結構體成員判斷折扣與優先級
 

function.c

#include "function.h"
 
// 設定單筆訂單資料
void SetOrderValue(Order *order, char *_name, enum ProductType _type, int _amount, int _days, int _rating)
{
    // TODO: 使用指標設定 Order 的各個欄位
}
 
// 計算折扣後金額
float CalculateFinalAmount(Order *firstOrder)
{
    // TODO: 透過指標拜訪 Order,判斷是否 FOOD 類折扣,返回最終金額
}
 
// 判斷單筆訂單優先級
enum OrderPriority GetOrderPriority(Order *firstOrder)
{
    // TODO: 透過指標拜訪 Order,依規則判斷並返回優先級
}
 
// 統計多筆訂單各優先級數量
void CountPriority(Order *firstOrder, int n, int *high, int *medium, int *low, int *standard)
{
    // TODO: 透過指標迴圈拜訪所有訂單,累計各優先級數量
}

Input

每筆訂單包含以下資料:

Name Type Amount ShippingDays CustomerRating

……

 

Name:商品名稱(字串,長度 ≤ 50)

Type:商品類別(整數,0=ELECTRONICS, 1=CLOTHING, 2=FOOD, 3=BOOK)

Amount:訂單金額(整數,0 ≤ Amount ≤ 20000)

ShippingDays:運送天數(整數,1 ≤ ShippingDays ≤ 30)

CustomerRating:顧客信用評分(整數,0 ≤ CustomerRating ≤ 100)

 

Note:

  1. 第一行輸入為訂單數量 N,接下來 N 行為訂單資料
  2. 不需處理輸入
 

Output

統計所有訂單的優先級數量,輸出格式如下:

HighPriority: x

MediumPriority: y

LowPriority: z

Standard: w

 

每筆訂單折扣後的最終金額:

Name final amount: value

若商品類別為 FOOD,最終金額需打 9 折

value 保留兩位小數

 

Note:

  1. 輸出的最後必須要有一個換行符號 (“\n”)
  2. 不需處理輸出

Sample Input  Download

Sample Output  Download

Partial Judge Code

14870.c

Partial Judge Header

14870.h

Tags




Discuss