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. 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

    在使用asp.net core的时候,采用take().skip()分页的时候报如下错误: SqlException: 'OFFSET' 附近有语法错误. 在 FETCH 语句中选项 NEXT 的用法 ...

  2. 【读书笔记】使用代理录制Web性能测试脚本

    读书笔记:<零成本实现Web性能测试>第3章 基本操作步骤: 在测试计划中添加线程组. 在该线程组中添加HTTP请求默认值.设置服务器名称或ip.端口. 在工作台添加HTTP代理服务器.设 ...

  3. javascript自定义一个全类型读取的函数

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.因为我们知道,在JavaScript中有自带的方法可以读取类型,但是不很全面,今天来分享下如何自己定义一个函数,将所有传入参数的类型给打印出来, ...

  4. thinkphp应用目录不可写,目录无法自动生成! 请手动生成项目目录~

    一是 要把 html下的相关目录设置成 777 chmod -R 777 /var/www/html/..... 二是 要设置 selinux , 或者是 临时 关闭 selinux: setenfo ...

  5. CMS收集器产生的问题和解决方案

    垃圾收集器长时间停顿,表现在 Web 页面上可能是页面响应码 500 之类的服务器错误问题,如果是个支付过程可能会导致支付失败,将造成公司的直接经济损失,程序员要尽量避免或者说减少此类情况发生. 提升 ...

  6. 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN

    论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...

  7. Cent OS & Windows 双系统自定义引导菜单

    系统环境 系统:Windows 10 (64-bit) & Cent OS 7 (64-bit) 引导程序:Grub2 编辑 grub.cfg 为了方便,在终端使用命令 su 输入密码进入超级 ...

  8. js原生实现抽奖活动(方形非圆盘)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. js中的继承总结全( 含new 原理过程 )

    1. 借用 new 构造函数继承 原理:  利用 new 的原理, 通过apply,call , bind 改变 this , 只能实现部分方法的继承: MDN对new的描述: new 运算符创建一个 ...

  10. python中的mysql数据库like模糊查询

    %在python中是个特殊的符号,如%s,%d分别代表了字符串占位符和数字占位符. 大家知道,mysql的模糊查询也需要用到%. 所以,可以先把需要查的字符串抽出来,再以参数方式传入. args = ...