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. mysql批量更新数据

    CREATE PROCEDURE `sp_update_temp_data`( out po_returnvalue ) ) leave_top:BEGIN #Routine body goes he ...

  2. 设计模式理解(八)结构型——装饰者模式(记得加上UML图 --- 未完)

    一段时间没写,又忘了,晕...设计模式这种东西一定要经常用. 装饰者模式(Decorator)用于动态地给一个对象增加一些额外的职责,就增加功能来说,他比生成子类更为灵活. 装饰者模式的原则是: 能用 ...

  3. Java 学习笔记- classpath classpath*

    转自:https://blog.csdn.net/javaloveiphone/article/details/51994268 1.src不是classpath, WEB-INF/classes,l ...

  4. ng/cli uses yarn as the package manager

    Switch to working directory Excuting the following command ng config cli.packageManager yarn

  5. spring mvc 简单的文件上传与下载

    上传文件有很多种方法,这里主要讲解的是spring mvc内提供的文件上传 前提使用:spring mvc 在这个之前我们需要把环境给配置好 1:springmvc的XML配置文件加上这一段就即可, ...

  6. 业务限流场景简单实现方案:RateLimiter

    前因:因为本系统中,有大数据高并发的场景.在向下游系统发送请求的时候,需要限流.否则会造成下游系统的堵塞. 实现方案1: Thread.sleep(ms). 优点:简单粗暴,一行代码搞定 缺点:有点l ...

  7. 导航栏中各按钮在点击当前按钮变色其他按钮恢复为原有色的实现方法(vue、jq、原生js)

    一.vue如何实现? 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. webpack学习笔记 (三) webpack-dev-server插件和HotModuleReplacementPlugin插件使用

    webpack-dev-server插件 webpack-dev-server是webpack官方提供的一个小型Express服务器.使用它可以为webpack打包生成的资源文件提供web服务. we ...

  9. MySQL存储过程 CASE语句

    MySQL存储过程  CASE语句 除了IF语句,MySQL提供了一个替代的条件语句CASE. MySQL CASE语句使代码更加可读和高效. CASE语句有两种形式:简单的搜索CASE语句. 简单C ...

  10. Shopping List

    剃须啫喱 吉列 70g $22.00 鲁阳家居专营店 剃须水套装 阿帕奇+酷曼 230g+230g $16.80(限时活动) 鲁阳家居专营店 鸡胸肉 撸铁党 100gx9+100g $49.9(限时活 ...