解析XML,将数据显示在treeview上,使用简单工厂模式

 

题目:饮料代理公司商品预定管理

       某公司为实现所售商品的有效管理,更好的为客户提供服务,拟定制作一套进销存软件,本例只实现其中的商品预定功能和定单打印,所商品信息如下:

商品名称

ShoppingName

类型

BeverageType

单价

Unit_price

产地

Producing_area

营养说明

Alimentation_explain

库存数量

Stock_amount

容量(升)

Capacity

一统绿茶

低糖

3.5

一统公司

 

5

1.25

乐乐可乐

碳酸

3

笑笑公司

 

3

2.0

一统牛饮

功能

6

一统公司

富含多种维生素

10

0.35

实现要求:

    1、分析上表,要求对饮料类型进行封装,要求使用枚举(BeverageType);

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ShoppingDemo_6
 7 {
 8     /// <summary>
 9     /// 枚举
10     /// </summary>
11     public enum BeverageType 
12     { 
13         低糖,碳酸,功能
14     }
15 }

 

    2、分析上表,要求对商品(饮料)进行类封装,封装饮料类(BaseBeverage);

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.IO;
 6 
 7 namespace ShoppingDemo_6
 8 {
 9     /// <summary>
10     /// 饮料类
11     /// </summary>
12     public class BaseBeverage
13     {
14         /// <summary>
15         /// 商品名称
16         /// </summary>
17         public string ShoppingName { get; set; }
18 
19         /// <summary>
20         /// 商品类型
21         /// </summary>
22         public BeverageType BeverageType { get; set; }
23 
24         /// <summary>
25         /// 商品单价
26         /// </summary>
27         public double Unit_price { get; set; }
28 
29         /// <summary>
30         /// 产地
31         /// </summary>
32         public string Producing_area { get; set; }
33 
34         /// <summary>
35         /// 库存
36         /// </summary>
37         public int Stock_amount { get; set; }
38 
39         /// <summary>
40         /// 容量
41         /// </summary>
42         public double Capacity { get; set; }
43 
44         /// <summary>
45         /// 打印的方法
46         /// </summary>
47         public virtual void Print()
48         {
49             StreamWriter sw = new StreamWriter("Save.txt");
50             sw.WriteLine("--------商品信息--------");
51             sw.WriteLine("商品名称:"+ShoppingName);
52             sw.WriteLine("类型:" + BeverageType);
53             sw.WriteLine("单价:" + Unit_price);
54             sw.WriteLine("产地:" + Producing_area);
55             sw.WriteLine("营养说明:无" );
56             sw.WriteLine("库存数量:" + Stock_amount);
57             sw.WriteLine("容量(升):" + Capacity);
58             sw.Close();
59         }
60     }
61 }

 

    3、分析上表,要求使用继承来对功能饮料(FunctionalBeverage)进行封装,注意调用父类的构造函数(5分);

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.IO;
 6 
 7 namespace ShoppingDemo_6
 8 {
 9     /// <summary>
10     /// 功能饮料
11     /// </summary>
12     public class FunctionalBeverage:BaseBeverage
13     {
14         /// <summary>
15         /// 营养说明
16         /// </summary>
17         public string Alimentation_explain { get; set; }
18 
19         /// <summary>
20         /// 打印的方法
21         /// </summary>
22         public override void Print()
23         {
24             StreamWriter sw = new StreamWriter("Save.txt");
25             sw.WriteLine("--------商品信息--------");
26             sw.WriteLine("商品名称:" + ShoppingName);
27             sw.WriteLine("类型:" + BeverageType);
28             sw.WriteLine("单价:" + Unit_price);
29             sw.WriteLine("产地:" + Producing_area);
30             sw.WriteLine("营养说明:"+Alimentation_explain);
31             sw.WriteLine("库存数量:" + Stock_amount);
32             sw.WriteLine("容量(升):" + Capacity);
33             sw.Close();
34         }
35     }
36 }

 

    4、创建一个BeverageManager完成商品的管理,使用List< BaseBeverage >泛型集合存储饮料信息(要求只读属性),提价Load BaseBeverage方法,实现将xml数据解析到List< BaseBeverage >集合对象中;

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Xml;
 6 
 7 namespace ShoppingDemo_6
 8 {
 9     public class BeverageManager
10     {
11         public BeverageManager()
12         {
13             beverageList = new List<BaseBeverage>();
14         }
15         private List<BaseBeverage> beverageList;
16         /// <summary>
17         /// 饮料信息
18         /// </summary>
19         public List<BaseBeverage> BeverageList
20         {
21             get { return beverageList; }
22         }
23 
24         /// <summary>
25         /// 解析XML并将数据添加到集合中
26         /// </summary>
27         public void LoadBaseBeverage()
28         {
29             XmlDocument xmlDoc = new XmlDocument();
30             xmlDoc.Load("Data.xml");
31             XmlNodeList parentNode = xmlDoc.GetElementsByTagName("饮料");
32             foreach (XmlNode node in parentNode)
33             {
34                 string type = node.Attributes["Type"].Value;
35                 string alimentation_explain = "";
36                 if (type == "Base")
37                 {
38                     alimentation_explain = "";
39                 }
40                 if (type == "Functional")
41                 {
42                     alimentation_explain = node["营养说明"].InnerText;
43                 }
44                 BaseBeverage beverage = BeverageFactory.CreatBeverage(type,
45                     node["名称"].InnerText,
46                     (BeverageType)Enum.Parse(typeof(BeverageType), node["类型"].InnerText),
47                     Convert.ToDouble(node["单价"].InnerText),
48                      node["产地"].InnerText,
49                      Convert.ToDouble(node["容量"].InnerText),
50                      Convert.ToInt32(node["库存"].InnerText),
51                      alimentation_explain);
52                 BeverageList.Add(beverage);
53             }
54         }
55     }
56 }

XML文件内容如下

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <商品信息>
 3   <饮料 Type="Base">
 4     <名称>一统绿茶</名称>
 5     <类型>低糖</类型>
 6     <单价>3.5</单价>
 7     <产地>一统公司</产地>
 8     <容量>1.25</容量>
 9     <库存>5</库存>    
10   </饮料>
11   <饮料 Type="Base">
12     <名称>乐乐可乐</名称>
13     <类型>碳酸</类型>
14     <单价>3</单价>
15     <产地>笑笑公司</产地>
16     <容量>2</容量>
17     <库存>3</库存>
18   </饮料>
19   <饮料 Type="Functional">
20     <名称>一统牛饮</名称>
21     <类型>功能</类型>
22     <单价>6</单价>
23     <产地>一统公司</产地>
24     <容量>0.35</容量>
25     <库存>10</库存>
26     <营养说明>富含多种维生素</营养说明>
27   </饮料>
28 </商品信息>

 

       5、按照下图绘制程序的主界面并完成要求的功能.

 

图1:主界面

 

       要求:(1)载入时初始化饮料数据(参照表格中的数据);

               (2)根据初始化的数据填充树控件,并显示如上图的效果;

            (3)完成点击树中节点显示详细信息的功能,当为功能饮料时,要显示营养成份

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.IO;
 10 
 11 namespace ShoppingDemo_6
 12 {
 13     public partial class FrmBeverage : Form
 14     {
 15         public FrmBeverage()
 16         {
 17             InitializeComponent();
 18         }
 19 
 20         BeverageManager bm = new BeverageManager();
 21         int index=0;
 22         private void FrmBeverage_Load(object sender, EventArgs e)
 23         {
 24             binCombobox();
 25             bm.LoadBaseBeverage();
 26             BinTreeView();
 27         }
 28 
 29         /// <summary>
 30         /// 绑定combobox
 31         /// </summary>
 32         private void binCombobox()
 33         {
 34             cboBeverageType.DataSource = Enum.GetValues(typeof(BeverageType));
 35         }
 36 
 37         /// <summary>
 38         /// 将数据绑定到treeview上
 39         /// </summary>
 40         private void BinTreeView()
 41         {
 42             TreeNode node = new TreeNode();
 43             node.Text = "饮料";
 44             this.tvBeverage.Nodes.Add(node);
 45             foreach (BaseBeverage item in bm.BeverageList)
 46             {
 47                 node.Nodes.Add(item.ShoppingName);
 48             }
 49         }
 50 
 51         private void tvBeverage_AfterSelect(object sender, TreeViewEventArgs e)
 52         {
 53             if (this.tvBeverage.SelectedNode.Level == 0)
 54             {
 55                 return;
 56             }
 57             index = this.tvBeverage.SelectedNode.Index;
 58             BinText(index);
 59         }
 60 
 61         /// <summary>
 62         /// 在文本框显示数据
 63         /// </summary>
 64         /// <param name="index"></param>
 65         private void BinText(int index)
 66         {
 67             BaseBeverage bb = bm.BeverageList[index];
 68             string alimentation_explain = "";
 69             if (bb is FunctionalBeverage)
 70             {
 71                 alimentation_explain = ((FunctionalBeverage)bb).Alimentation_explain;
 72             }
 73             txtShoppingName.Text = bb.ShoppingName;
 74             txtAlimentation_explain.Text = alimentation_explain;
 75             txtCapacity.Text = bb.Capacity.ToString();
 76             txtProducing_area.Text = bb.Producing_area;
 77             txtStock_amount.Text = bb.Stock_amount.ToString();
 78             txtUnit_price.Text = bb.Unit_price.ToString();
 79             cboBeverageType.Text = bb.BeverageType.ToString();
 80         }
 81         /// <summary>
 82         /// 4个按钮共用的单击事件
 83         /// </summary>
 84         /// <param name="sender"></param>
 85         /// <param name="e"></param>
 86         private void LoadText(object sender, EventArgs e)
 87         {
 88             Button btn = (Button)sender;
 89             string str = btn.Text;
 90             switch (str)
 91             {
 92                 case "首条":
 93                     index = 0;
 94                     break;
 95                 case "前条":
 96                     index = index == 0 ? 0 : --index;
 97                     break;
 98                 case "后条":
 99                     index = index == bm.BeverageList.Count - 1 ? bm.BeverageList.Count - 1 : ++index;
100                     break;
101                 case "尾条":
102                     index = bm.BeverageList.Count - 1;
103                     break;
104             }
105             BinText(index);
106         }
107 
108         private void btnExit_Click(object sender, EventArgs e)
109         {
110             DialogResult dr = MessageBox.Show("确定退出吗?","退出提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
111             if (dr==DialogResult.OK)
112             {
113                 Application.Exit();
114             }
115         }
116 
117         /// <summary>
118         /// 打印按钮
119         /// </summary>
120         /// <param name="sender"></param>
121         /// <param name="e"></param>
122         private void btnPrint_Click(object sender, EventArgs e)
123         {
124             BaseBeverage bb = bm.BeverageList[index];
125             if (bb is FunctionalBeverage)
126             {
127                 bb = (FunctionalBeverage)bb;
128             }
129             bb.Print();
130         }
131     }
132 }

 

【注:购买信息部分不需要完成】

转载于:https://www.cnblogs.com/hidelin/archive/2012/09/26/2704791.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值