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. .net core 运行时事件(Runtime Events)

    .Net Core 2.2.0 .Net Core 2.2.0已经发布有一段时间了,很多新鲜功能已经有博主介绍了,今天给大家介绍一下运行时事件并附上demo. 运行时事件 通常需要监视运行时服务(如当 ...

  2. day1——分割数组

    // 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第915题 今日算法题干//给定一个数组 A,将其划分为两个不相交(没有公共元素) ...

  3. SQL Server 视图(仅代码及练习)

    use electric go --建立供电局1#仓库所存放物资的视图. create view s1_stock as select * from stock where warehouse='供电 ...

  4. printf打印输出

    int PrintVal = 9;    /*按整型输出,默认右对齐*/    printf("%d\n",PrintVal);    /*按整型输出,补齐4位的宽度,补齐位为空格 ...

  5. OpenBUGS抽样数据基本操作

    新建两个文件 第一个文件写操作程序,第二个文件写数据数量,类似于下图 鼠标聚焦在第一个文件中,点击工具栏的Model,选择Specification,然后点击check Moel,会有弹框出现 点击确 ...

  6. 浅谈前端nuxt(ssr)

    SSR: 服务端渲染(Server Side Render),即:网页是通过服务端渲染生成后输出给客户端. 一.那为什么要使用SSR呢? 我用一句话理解的就是降低SPA(Single Page App ...

  7. javascript高级程序设计第3版——第4章 变量作用域以及内存

  8. HDFS的一些重要流程

    该随笔记录HDFS学习过程中遇到的比较重要的几个过程,包括:HDFS启动流程.DataNode备份流程.流程.写流程.删除流程.HDFS合并流程.这里都是从我的学习笔记中摘取出来的,如果哪里有误,还望 ...

  9. Vue 给axios做个靠谱的封装(报错,鉴权,跳转,拦截,提示)

    需求及实现 统一捕获接口报错 弹窗提示 报错重定向 基础鉴权 表单序列化 用法及封装 用法 // 服务层 , import默认会找该目录下index.js的文件,这个可能有小伙伴不知道可以去了解npm ...

  10. day 05字典相关内容

    1.day 04内容回顾及作业讲解 列表:增 append insert extend 删 remove pop clear del 改 li[索引]='被修改的内容' li[切片]='被修改的内容' ...