close

吉他管理系統:

1.功能:

a.可供客戶查詢

b.可輸入吉他資料

 

2.用到技術:

a.利用封裝將程式拆解程更多更細零件。

b.委派: 將特定工作的責任交給另一個物件處理。

 

3.程式部分

enum檔:

public enum Wood
{
INDIAN_ROSEWOOD, BRAZILIAN_ROSEWOOD, MAHOGANY, MAPLE,
COCOBOLO, CEDAR, ADIRONDACK, ALDER, SITKA,
}

public enum Type
{
ACOUSTIC,
ELECTRIC
}

public enum Builder
{
FENDER, MARTIN, GIBSON, COLLINGS, OLSON, RYAN, PRS, ANY,
}

第一個類別檔案 : Guitar.cs: 用來存放吉他規格資訊

public class Guitar
{
private string serialNumber;
private double price;
GuitarSpec spec; //每一把吉他還是需要參考到guitarSpec

public Guitar(string serialNumber,double price,GuitarSpec spec)
{
this.serialNumber = serialNumber;
this.price = price;
this.spec = spec;
}

public String getSerialNumber()
{
return serialNumber;
}

public double getPrice()
{
return price;
}

public void setPrice(float newPrice)
{
this.price = newPrice;
}

public GuitarSpec getSpec()
{
return spec;
}
}

 

第二個類別檔案 :

GuitarSpec.cs: 從Guitar類別中封裝抽出來的類別,為了拆成更細的零件(客戶查詢時可能提供部分查詢資訊,我扪就將其拆解成另一個class來提供查詢用)

 

public class GuitarSpec
{
private Builder builder;
private String model;
private Type type;
private int numStrings;
private Wood backWood;
private Wood topWood;

 

//建構子,一new就設定値
public GuitarSpec(Builder builder, string model, Type type, int numStrings, Wood backWood, Wood topWood)
{
this.builder = builder;
this.model = model;
this.type = type;
this.numStrings = numStrings;
this.backWood = backWood;
this.topWood = topWood;
}

 

public Builder getBuilder()
{
return builder;
}

 

public String getModel()
{
return model;
}

 

public Type getType()
{
return type;
}

 

public int getNumStrings()
{
return numStrings;
}

 

public Wood getBackWood()
{
return backWood;
}

 

public Wood getTopWood()
{
return topWood;
}

 

//被委派的檢查方法另外寫出來讓查詢可以委派它處理,傳入GuitarSpec進來比對
public Boolean matches(GuitarSpec otherSpec)
{
if (builder != otherSpec.builder)
return false;
if ((model != null) && (!model.Equals("")) &&(!model.ToLower().Equals(otherSpec.model.ToLower())))
return false;
if (type != otherSpec.type)
return false;
if (numStrings != otherSpec.numStrings)
return false;
if (backWood != otherSpec.backWood)
return false;
if (topWood != otherSpec.topWood)
return false;
return true;
}
}

 

第三個類別檔案 : Inventory.cs :吉他庫存

public class Inventory
{
private List<Guitar> guitars;

//建構子,一new此物件就產生一個串列
public Inventory()
{
guitars = new List<Guitar>();
}

//加入新吉他
public void addGuitar(String seriaNumber, double price, GuitarSpec spec)
{
Guitar guitar = new Guitar(seriaNumber, price, spec);
guitars.Add(guitar);
}

//取得吉他,傳入serialNumber
public Guitar getGuitar(string serialNumber)
{
//進去guitars(是list,型別為Guitar)繞行
foreach(var items in guitars)
{
Guitar guitar = items;
//若list中有guitar的SerialNumber相等於傳入的serialNumber
if (guitar.getSerialNumber().Equals(serialNumber))
//回傳在list中這筆guitar record
return guitar;
}
//找不到 ruturn null
return null;
}

//傳入spec尋找吉他
public List<Guitar> serach(GuitarSpec searchSpec)
{
List<Guitar> matchingGuitars = new List<Guitar>();
//進去guitars(是list,型別為Guitar)繞行
foreach (var items in guitars)
{
//傳入spec與list的spec比對
if (items.getSpec().matches(searchSpec))
//符合就將list中record加入matchingGuitars list中
matchingGuitars.Add(items);
}
//最後整串list回傳
return matchingGuitars;
}

}

 

網頁.cs 檔案 : 建立吉他店的資料,還有查訊顯示等功能測試

 

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//建立吉他庫存資料
Inventory inventory = new Inventory();
initializeInventory(inventory);

 


//輸入要搜尋的吉他
GuitarSpec whatErinLikes = new GuitarSpec(Builder.FENDER, "Stratocastor", Type.ELECTRIC, 6, Wood.ALDER, Wood.ALDER);
List<Guitar> matchingGuitars = inventory.serach(whatErinLikes);

 

if (matchingGuitars != null)
{
Response.Write("Erin, you might like these guitars:" + "<br/>");
foreach (var items in matchingGuitars)
{
GuitarSpec spec = items.getSpec();
Response.Write(" We have a " + spec.getBuilder() + "," + spec.getModel() + "," + items.getPrice());
}
}
}

 

//建立吉他庫存副程式
public static void initializeInventory(Inventory inventory)
{
inventory.addGuitar("11277", 3999.95, new GuitarSpec(Builder.COLLINGS, "CJ", Type.ACOUSTIC, 6, Wood.INDIAN_ROSEWOOD, Wood.SITKA));
inventory.addGuitar("V95693", 1499.95,
new GuitarSpec(Builder.FENDER, "Stratocastor", Type.ELECTRIC, 6,
Wood.ALDER, Wood.ALDER));
inventory.addGuitar("V9512", 1549.95,
new GuitarSpec(Builder.FENDER, "Stratocastor", Type.ELECTRIC, 6,
Wood.ALDER, Wood.ALDER));
inventory.addGuitar("122784", 5495.95,
new GuitarSpec(Builder.MARTIN, "D-18", Type.ACOUSTIC, 6,
Wood.MAHOGANY, Wood.ADIRONDACK));
inventory.addGuitar("76531", 6295.95,
new GuitarSpec(Builder.MARTIN, "OM-28", Type.ACOUSTIC, 6,
Wood.BRAZILIAN_ROSEWOOD, Wood.ADIRONDACK));
inventory.addGuitar("70108276", 2295.95,
new GuitarSpec(Builder.GIBSON, "Les Paul", Type.ELECTRIC, 6,
Wood.MAHOGANY, Wood.MAHOGANY));
inventory.addGuitar("82765501", 1890.95,
new GuitarSpec(Builder.GIBSON, "SG '61 Reissue", Type.ELECTRIC, 6,
Wood.MAHOGANY, Wood.MAHOGANY));
inventory.addGuitar("77023", 6275.95,
new GuitarSpec(Builder.MARTIN, "D-28", Type.ACOUSTIC, 6,
Wood.BRAZILIAN_ROSEWOOD, Wood.ADIRONDACK));
inventory.addGuitar("1092", 12995.95,
new GuitarSpec(Builder.OLSON, "SJ", Type.ACOUSTIC, 12,
Wood.INDIAN_ROSEWOOD, Wood.CEDAR));
inventory.addGuitar("566-62", 8999.95,
new GuitarSpec(Builder.RYAN, "Cathedral", Type.ACOUSTIC, 12,
Wood.COCOBOLO, Wood.CEDAR));
inventory.addGuitar("6 29584", 2100.95,
new GuitarSpec(Builder.PRS, "Dave Navarro Signature", Type.ELECTRIC,
6, Wood.MAHOGANY, Wood.MAPLE));
}
}

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()