using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace HealthCheck
{
public class HealthCheckSet
{
public List<HealthCheckItems> Items { get; set; }
public string Name { get; set; }
public int Price { get; set; } public HealthCheckSet()
{
this.Items = new List<HealthCheckItems>();
}
/// <summary>
/// 计算总金额
/// </summary>
public void CalcPrice()
{
int totalPrice = ;
foreach (HealthCheckItems item in this.Items)
{
totalPrice += item.Price;
}
this.Price = totalPrice;
} }
}

套餐类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace HealthCheck
{
public class HealthCheckItems
{
public string Description { get; set; }
public string Name { get; set; }
public int Price { get; set; } /// <summary>
/// 方法重载
/// </summary>
/// <param name="description"></param>
/// <param name="name"></param>
/// <param name="price"></param>
public HealthCheckItems(string description,string name,int price)
{
this.Description = description;
this.Name = name;
this.Price = price;
}
public HealthCheckItems()
{
} }
}

体检项类

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace HealthCheck
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
List<HealthCheckItems> Items;//声明Items集合用于保存套餐中的体检项
List<HealthCheckItems> AllItems = new List<HealthCheckItems>();//声明AllItems集合,用于保存所有体检项
HealthCheckSet Hcs;//声明HealthCheckSet对象
//创建SetMeal字典
public Dictionary<string, HealthCheckSet> SetMeal = new Dictionary<string, HealthCheckSet>(); /// <summary>
/// 初始化各体检项,套餐并将全部检查项绑定到cmbItem中
/// </summary>
public void InitItems()
{
HealthCheckItems hc1 = new HealthCheckItems("用于检查身高","身高",);
HealthCheckItems hc2 = new HealthCheckItems( "用于检查体重","体重", );
HealthCheckItems hc3 = new HealthCheckItems( "用于检查视力","视力", );
HealthCheckItems hc4 = new HealthCheckItems( "用于检查听力","听力", );
HealthCheckItems hc5 = new HealthCheckItems( "用于检查肝功能","肝功能", );
HealthCheckItems hc6 = new HealthCheckItems( "用于检查B超","B超", );
AllItems.Add(hc1);
AllItems.Add(hc2);
AllItems.Add(hc3);
AllItems.Add(hc4);
AllItems.Add(hc5);
AllItems.Add(hc6); for (int i = ; i < AllItems.Count; i++)
{
cmbItem.Items.Add(AllItems[i].Name);
} Items = new List<HealthCheckItems>();
Items.Add(hc1);
Items.Add(hc2);
Items.Add(hc4);
Items.Add(hc5);
Hcs = new HealthCheckSet();
Hcs.Items = Items;
Hcs.Name = "入学体检";
Hcs.CalcPrice();
SetMeal.Add(Hcs.Name,Hcs);
BindList();
}
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_Load(object sender, EventArgs e)
{
InitItems();
}
/// <summary>
/// 选中套餐之后加载所对应的各项,并更新视图
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmbSetMealList_SelectedIndexChanged(object sender, EventArgs e)
{
string Name = this.cmbSetMealList.Text;
if (Name.Equals("请选择"))
{
dgvHealthCheckItem.DataSource = new BindingList<HealthCheckItems>();
lblTcName.Text = "";
lblPrice.Text = "";
btnAdd.Enabled = false;
btnDelete.Enabled = false;
}
else
{
UpdateView(SetMeal[Name]);
btnDelete.Enabled = true; }
}
/// <summary>
/// 更新视图
/// </summary>
/// <param name="Hes"></param>
public void UpdateView(HealthCheckSet Hes)
{
dgvHealthCheckItem.DataSource = new BindingList<HealthCheckItems>(Hes.Items);
cmbItem.SelectedIndex = ;
lblTcName.Text = Hes.Name;
lblPrice.Text = Hes.Price.ToString();
}
/// <summary>
/// 绑定套餐类到cmbSetMealList中
/// </summary>
public void BindList()
{
this.cmbSetMealList.Items.Clear();
this.cmbSetMealList.Items.Add("请选择");
foreach (var Hc in SetMeal.Keys)
{
cmbSetMealList.Items.Add(Hc);
}
cmbSetMealList.SelectedIndex = ;
}
/// <summary>
/// 删除
/// </summary>
public void Delete()
{
//获取套餐名称
string Name = this.cmbSetMealList.Text;
//判断是否选中一行
if (dgvHealthCheckItem.SelectedRows.Count == )
{
MessageBox.Show("请选中要删除的项", "提示");
}
else
{
//获取选中项的索引
int index = dgvHealthCheckItem.SelectedRows[].Index;
//删除选中项的集合
SetMeal[Name].Items.RemoveAt(index);
SetMeal[Name].CalcPrice();
//更新DataGridView视图
UpdateView(SetMeal[Name]);
MessageBox.Show("删除成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/// <summary>
/// 单击删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDelete_Click(object sender, EventArgs e)
{
Delete();
}
/// <summary>
/// 选中体检项时,添加按钮可用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmbItem_SelectedIndexChanged(object sender, EventArgs e)
{
this.btnAdd.Enabled = true;
}
/// <summary>
/// 添加
/// </summary>
public void Insert()
{
//获取当前套餐名字
string Name = cmbSetMealList.Text;
if (cmbItem.SelectedIndex == -)
{
MessageBox.Show("请选择一个项目!");
}
else
{
//获取选中项目的下标
int index = cmbItem.SelectedIndex;
//判断套餐中的项目集合是否有选择的项目
if (!SetMeal[Name].Items.Contains(AllItems[index]))
{
//添加选择项目到套餐中
SetMeal[Name].Items.Add(AllItems[index]); //重新计算
SetMeal[Name].CalcPrice();
//更新视图
UpdateView(SetMeal[Name]);
lblPrice.Text = SetMeal[Name].Price.ToString();
MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("该项目存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
/// <summary>
/// 单击添加
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAdd_Click(object sender, EventArgs e)
{
Insert();
}
/// <summary>
/// 新建套餐
/// </summary>
public void NewSetMeal()
{
if (string.IsNullOrEmpty(txtSetMealName.Text.Trim()))
{
MessageBox.Show("请输入套餐名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
//获取新建套餐的名字
string NewName = txtSetMealName.Text.Trim();
//新建套餐类
Hcs= new HealthCheckSet();
Hcs.Name = NewName;
//添加到套餐字典中
SetMeal.Add(Hcs.Name, Hcs);
//套餐选择框加载
BindList();
//默认选中新建套餐
cmbSetMealList.SelectedIndex = SetMeal.Count;
//更新视图
UpdateView(SetMeal[NewName]);
MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/// <summary>
/// 单击新建套餐
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnInsert_Click(object sender, EventArgs e)
{
NewSetMeal();
}
}
}

Main

S2T40,第五章的更多相关文章

  1. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...

  3. 精通Web Analytics 2.0 (7) 第五章:荣耀之钥:度量成功

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第五章:荣耀之钥:度量成功 我们的分析师常常得不到我们应得的喜欢,尊重和资金,因为我们没有充分地衡量一个黄金概念:成果.因为我们 ...

  4. 《Linux内核设计与实现》读书笔记 第五章 系统调用

    第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...

  5. Java语言程序设计(基础篇) 第五章 循环

    第五章 循环 5.2 while循环 1.while循环的语法如下: while(循环继续条件){ //循环体 语句(组); } 2.程序:提示用户为两个个位数相加的问题给出答案 package co ...

  6. 读《编写可维护的JavaScript》第五章总结

    第五章 UI层的松耦合 5.1 什么是松耦合 在Web开发中,用户界面是由三个彼此隔离又相互作用的层定义的: HTML是用来定义页面的数据和语义 CSS用来给页面添加样式 JavaScript用来给页 ...

  7. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  8. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  9. 《java编程思想》读书笔记(一)开篇&第五章(1)

    2017 ---新篇章  今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...

随机推荐

  1. postman的几个问题

    最近使用postman写了几个web接口测试用例,工具使用比较简单,大概步骤如下: 1.new collections——>建文件夹,类似建一个测试合集,用于方便整理,例如可以把同一个接口各种参 ...

  2. jvm启动参数设置 -Dfile.encoding=UTF-8 解决freemark乱码

    今天一个spring boot应用windows跑起来后页面显示乱码,加上jvm启动参数为utf-8后,页面显示正常.

  3. 关于Java多线程的一些常考知识点

    前言 Java多线程也是面试中经常会提起到的一个点.面试官会问:实现多线程的两种方式以及区别,死锁发生的4个条件以及如何避免发生死锁,死锁和活锁的区别,常见的线程池以及区别,怎么理解有界队列与无界队列 ...

  4. Exp2 后门原理与实践 20164303 景圣

    Exp2 后门原理与实践 一.基础问题回答: 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:在网上点击不安全的网页或链接. 2.例举你知道的后门如何启动起来(win及linux)的方式? ...

  5. Eclipse中Lombok的安装和注解说明

    Lombok 可用来帮助开发人员消除 Java 的重复代码,尤其是对于简单的 Java 对象(POJO),比如说getter/setter/toString等方法的编写.它通过注解实现这一目的. 官网 ...

  6. Java集合源码分析之LinkedList

    1. LinkedList简介 public class LinkedList<E> extends AbstractSequentialList<E> implements ...

  7. ssm框架中文请求乱码get

    <bean id="utf8Charset" class="java.nio.charset.Charset" factory-method=" ...

  8. js 整理

    类型 1.js 中的数据类型,解释清楚原始数据类型和引用数据类型 js中共有null, underfined, string, number, boolean, object 六种数据类型 原始数据类 ...

  9. 基于Flask的Web应用程序插件式结构开发

    事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress.谷歌火狐浏览器等. Python这样的动态 ...

  10. Hadoop之运行模式

    Hadoop运行模式包括:本地模式.伪分布式以及完全分布式模式. 一.本地运行模式 1.官方Grep案例 1)在hadoop-2.7.2目录下创建一个 input 文件夹 [hadoop@hadoop ...