14884 - Order Ranker (with Critical Priority)   

Description

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

  • Amount(金額):訂單總價,範圍 0~20000
  • ShippingDays(運送天數):下單到到貨天數,範圍 1~30
  • CustomerRating(顧客信用評分):範圍 0~100

 

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

  • 食品類 (FOOD):9 折
  • 其他類別:原價

 

訂單分類如下:

  • HighPriority:高金額 (>=10000) 且 顧客評分高 (>=70) 且 快速運送 (<=3 天)
  • CriticalPriority:非高金額 (<10000) 但 要求極速運送 (<= 1 天)
  • MediumPriority:(高金額 (>=10000) 或 顧客評分高 (>=70)),且不符合上述優先級
  • 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,
    CriticalPriority,
    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,依規則判斷並返回優先級
 
}
 
 
 
// 統計多筆訂單各優先級數量
 
CountPriority(Order *orders, int n, int *high, int *critical, 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

CriticalPriority: y

MediumPriority: z

LowPriority: n

Standard: m

 

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

Name final amount: value

若商品類別為 FOOD,最終金額需打 9 折,value 保留兩位小數

 

Note:

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

Sample Input  Download

Sample Output  Download

Partial Judge Code

14884.c

Partial Judge Header

14884.h

Tags




Discuss