使用简单工厂模式,解析XML文件,并将数据显示在treeview上
来源:互联网 发布:九九乘法表算法 编辑:程序博客网 时间:2024/06/05 21:00
题目:饮料代理公司商品预定管理
某公司为实现所售商品的有效管理,更好的为客户提供服务,拟定制作一套进销存软件,本例只实现其中的商品预定功能和定单打印,所商品信息如下:
商品名称
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);
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ShoppingDemo_6{ /// <summary> /// 枚举 /// </summary> public enum BeverageType { 低糖,碳酸,功能 }}
2、分析上表,要求对商品(饮料)进行类封装,封装饮料类(BaseBeverage);
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ShoppingDemo_6{ /// <summary> /// 饮料类 /// </summary> public class BaseBeverage { /// <summary> /// 商品名称 /// </summary> public string ShoppingName { get; set; } /// <summary> /// 商品类型 /// </summary> public BeverageType BeverageType { get; set; } /// <summary> /// 商品单价 /// </summary> public double Unit_price { get; set; } /// <summary> /// 产地 /// </summary> public string Producing_area { get; set; } /// <summary> /// 库存 /// </summary> public int Stock_amount { get; set; } /// <summary> /// 容量 /// </summary> public double Capacity { get; set; } /// <summary> /// 打印的方法 /// </summary> public virtual void Print() { StreamWriter sw = new StreamWriter("Save.txt"); sw.WriteLine("--------商品信息--------"); sw.WriteLine("商品名称:"+ShoppingName); sw.WriteLine("类型:" + BeverageType); sw.WriteLine("单价:" + Unit_price); sw.WriteLine("产地:" + Producing_area); sw.WriteLine("营养说明:无" ); sw.WriteLine("库存数量:" + Stock_amount); sw.WriteLine("容量(升):" + Capacity); sw.Close(); } }}
3、分析上表,要求使用继承来对功能饮料(FunctionalBeverage)进行封装,注意调用父类的构造函数(5分);
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ShoppingDemo_6{ /// <summary> /// 功能饮料 /// </summary> public class FunctionalBeverage:BaseBeverage { /// <summary> /// 营养说明 /// </summary> public string Alimentation_explain { get; set; } /// <summary> /// 打印的方法 /// </summary> public override void Print() { StreamWriter sw = new StreamWriter("Save.txt"); sw.WriteLine("--------商品信息--------"); sw.WriteLine("商品名称:" + ShoppingName); sw.WriteLine("类型:" + BeverageType); sw.WriteLine("单价:" + Unit_price); sw.WriteLine("产地:" + Producing_area); sw.WriteLine("营养说明:"+Alimentation_explain); sw.WriteLine("库存数量:" + Stock_amount); sw.WriteLine("容量(升):" + Capacity); sw.Close(); } }}
4、创建一个BeverageManager完成商品的管理,使用List< BaseBeverage >泛型集合存储饮料信息(要求只读属性),提价Load BaseBeverage方法,实现将xml数据解析到List< BaseBeverage >集合对象中;
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml;namespace ShoppingDemo_6{ public class BeverageManager { public BeverageManager() { beverageList = new List<BaseBeverage>(); } private List<BaseBeverage> beverageList; /// <summary> /// 饮料信息 /// </summary> public List<BaseBeverage> BeverageList { get { return beverageList; } } /// <summary> /// 解析XML并将数据添加到集合中 /// </summary> public void LoadBaseBeverage() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("Data.xml"); XmlNodeList parentNode = xmlDoc.GetElementsByTagName("饮料"); foreach (XmlNode node in parentNode) { string type = node.Attributes["Type"].Value; string alimentation_explain = ""; if (type == "Base") { alimentation_explain = "无"; } if (type == "Functional") { alimentation_explain = node["营养说明"].InnerText; } BaseBeverage beverage = BeverageFactory.CreatBeverage(type, node["名称"].InnerText, (BeverageType)Enum.Parse(typeof(BeverageType), node["类型"].InnerText), Convert.ToDouble(node["单价"].InnerText), node["产地"].InnerText, Convert.ToDouble(node["容量"].InnerText), Convert.ToInt32(node["库存"].InnerText), alimentation_explain); BeverageList.Add(beverage); } } }}
XML文件内容如下
<?xml version="1.0" encoding="utf-8"?><商品信息> <饮料 Type="Base"> <名称>一统绿茶</名称> <类型>低糖</类型> <单价>3.5</单价> <产地>一统公司</产地> <容量>1.25</容量> <库存>5</库存> </饮料> <饮料 Type="Base"> <名称>乐乐可乐</名称> <类型>碳酸</类型> <单价>3</单价> <产地>笑笑公司</产地> <容量>2</容量> <库存>3</库存> </饮料> <饮料 Type="Functional"> <名称>一统牛饮</名称> <类型>功能</类型> <单价>6</单价> <产地>一统公司</产地> <容量>0.35</容量> <库存>10</库存> <营养说明>富含多种维生素</营养说明> </饮料></商品信息>
5、按照下图绘制程序的主界面并完成要求的功能.
图1:主界面
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace ShoppingDemo_6{ public partial class FrmBeverage : Form { public FrmBeverage() { InitializeComponent(); } BeverageManager bm = new BeverageManager(); int index=0; private void FrmBeverage_Load(object sender, EventArgs e) { binCombobox(); bm.LoadBaseBeverage(); BinTreeView(); } /// <summary> /// 绑定combobox /// </summary> private void binCombobox() { cboBeverageType.DataSource = Enum.GetValues(typeof(BeverageType)); } /// <summary> /// 将数据绑定到treeview上 /// </summary> private void BinTreeView() { TreeNode node = new TreeNode(); node.Text = "饮料"; this.tvBeverage.Nodes.Add(node); foreach (BaseBeverage item in bm.BeverageList) { node.Nodes.Add(item.ShoppingName); } } private void tvBeverage_AfterSelect(object sender, TreeViewEventArgs e) { if (this.tvBeverage.SelectedNode.Level == 0) { return; } index = this.tvBeverage.SelectedNode.Index; BinText(index); } /// <summary> /// 在文本框显示数据 /// </summary> /// <param name="index"></param> private void BinText(int index) { BaseBeverage bb = bm.BeverageList[index]; string alimentation_explain = "无"; if (bb is FunctionalBeverage) { alimentation_explain = ((FunctionalBeverage)bb).Alimentation_explain; } txtShoppingName.Text = bb.ShoppingName; txtAlimentation_explain.Text = alimentation_explain; txtCapacity.Text = bb.Capacity.ToString(); txtProducing_area.Text = bb.Producing_area; txtStock_amount.Text = bb.Stock_amount.ToString(); txtUnit_price.Text = bb.Unit_price.ToString(); cboBeverageType.Text = bb.BeverageType.ToString(); } /// <summary> /// 4个按钮共用的单击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LoadText(object sender, EventArgs e) { Button btn = (Button)sender; string str = btn.Text; switch (str) { case "首条": index = 0; break; case "前条": index = index == 0 ? 0 : --index; break; case "后条": index = index == bm.BeverageList.Count - 1 ? bm.BeverageList.Count - 1 : ++index; break; case "尾条": index = bm.BeverageList.Count - 1; break; } BinText(index); } private void btnExit_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("确定退出吗?","退出提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question); if (dr==DialogResult.OK) { Application.Exit(); } } /// <summary> /// 打印按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnPrint_Click(object sender, EventArgs e) { BaseBeverage bb = bm.BeverageList[index]; if (bb is FunctionalBeverage) { bb = (FunctionalBeverage)bb; } bb.Print(); } }}
要求:(1)载入时初始化饮料数据(参照表格中的数据);
(2)根据初始化的数据填充树控件,并显示如上图的效果;
(3)完成点击树中节点显示详细信息的功能,当为功能饮料时,要显示营养成份
【注:购买信息部分不需要完成】
- 使用简单工厂模式,解析XML文件,并将数据显示在treeview上
- 解析XML文件,并将信息显示在窗体上
- 安卓下如何使用XmlPullParser解析xml文件并显示在TextView控件上
- 将json数据显示在table上,并对该数据进行简单的模糊搜索
- JSOUP解析网页信息并将其数据显示在listview上
- 读写XML文件的内容并将其显示在ListView控件上
- java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中
- 将XML解析出的内容显示在ListView上
- 解析xml文件和使用TreeView空间
- json数据解析并显示在listView上
- 简单工厂模式、DOM,SAX ---解析XML
- 7.14 将例7.13以二进制形式存放在磁盘文件中的数据读入内存,并在显示器上显示。
- 将反射应用在工厂模式上
- 使用FileInputStream类, 实现从磁盘读取本应用程序源代码文件,并将文件内容显示在屏幕上。
- Tomcat使用jsp解析xml文件并在浏览…
- 【Android】pull解析xml文件+将数据存储为xml格式,并保存在内存里
- 使用C#实现将XML数据填充到TreeView中
- XML 文件读到TreeView上
- flex advanceddatagrid 分组统计
- 谈编程代码的经验与效率
- mutex spinlock
- 暴力字符串匹配
- ExtJS了解
- 使用简单工厂模式,解析XML文件,并将数据显示在treeview上
- Flex操作cookie
- usaco 5.4 Character Recognition(统计DP)
- 痛苦造就性格(也许还造就坏产品)(zz.IS2120)
- 通用USB设备驱动源码分析
- spinlock
- usb设备的probe全过程
- 如何找出字典中的兄弟单词
- 网页内嵌Windows Media Player播放器的多文件播放方法