使用泛型集合写的一个小项目

  1.要实现新建体检套餐,并且如果已经有了该体检套餐就不能再次新建,

  2.要实现套餐列表动态更新,没添加一个体检套餐,在套餐列表里就自动添加一项;

  3.向当前套餐类表里添加检查项目,一个体检套餐里不可以有重复的体检项目;

  4.动态计算套餐当前价格;

  5.动态的将套餐列表当前套餐的体检项目显示在dgvlist中;

  6.实现删除体检项目: 

下面是实现的效果图:

新建体检套餐:

给体检套餐添加体检项目并计算套餐价格:

删除选中的体检项目:

在套餐列表中选择体检套餐可以查看具体的体检项目和套餐价格:

不能添加重复的套餐,每个套餐不能有重复的体检项目:

下面是代码:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 体检套餐系统
{
public class HC
{
//体检项目类
public HC()
{
}
//代参构造方法用于初始化成员变量
public HC(string name, string desc, int price)
{
this.Name = name;
this.Price = price;
this.Desc = desc;
}
public string Name { get; set; }
public string Desc { get; set; }
public int Price { get; set; }
}
}

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 体检套餐系统
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//声明一个HC类型的集合,保存初始化后的体检项目
List<HC> hc1 = new List<HC>()
{
new HC("身高","用于检查身高",),
new HC("体重","用于检查体重",),
new HC("肝功能","用于检查肝功能",),
new HC("B超","用于检查身体内部",),
new HC("心电图","用于检查心电图",),
new HC("听力","用于检查听力",),
};
//声明一个双列集合,用于保存体检套餐,套餐名为key,体检项目为value;
Dictionary<string, List<HC>> hc2 = new Dictionary<string, List<HC>>(); private void Form1_Load(object sender, EventArgs e)
{
//把体检项目的名称绑定在下拉列表cbo2中
foreach (HC item in hc1)
{
cbo2.Items.Add(item.Name);
}
}
//将体检套餐的名称绑定在下拉列表cbo1中
private void info()
{
cbo1.Items.Clear();
foreach (string item in hc2.Keys)
{
cbo1.Items.Add(item);
}
}
//新建体检套餐的方法
private void 新建_Click(object sender, EventArgs e)
{
int error = ;
foreach (string item in hc2.Keys)
{
if (item == txt1.Text)
{ error = ; }
}
if(txt1.Text!=""&&error!=)
{
hc2.Add(txt1.Text, new List<HC>());
info();
MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else if (error == )
{
MessageBox.Show("已经有该套餐了不能再次添加", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
MessageBox.Show("套餐名不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); }
}
//向选中的体检套餐添加体检项目的方法
private void button2_Click(object sender, EventArgs e)
{
int error = ;
foreach (string item in hc2.Keys)
{
if (item == cbo1.Text)
{
for (int i = ; i < hc2[item].Count; i++)
{
if (hc2[item][i].Name == cbo2.Text)
{
error = ;
}
}
}
}
HC h = new HC();
if (cbo1.Text != "" && cbo2.Text !=""&&error==)
{
foreach (HC item in hc1)
{
if (item.Name == cbo2.Text)
{
h = item;
}
}
foreach (string item in hc2.Keys)
{
if (item == cbo1.Text)
{
hc2[item].Add(h); }
}
}
else if (error == )
{
MessageBox.Show("不能有重复的体检项目", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
MessageBox.Show("请补全体检套餐信息", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
info1();
} private void cbo1_SelectionChangeCommitted(object sender, EventArgs e)
{
info1();
}
//动态更新体检套餐的方法
private void info1()
{
int money = ; foreach (string item in hc2.Keys)
{
if (cbo1.SelectedItem.ToString() == item)
{
for (int i = ; i <hc2[item].Count; i++)
{
money += hc2[item][i].Price;
}
dataGridView1.DataSource = new BindingList<HC>(hc2[item]);
lb1.Text = cbo1.SelectedItem.ToString();
lb2.Text = money.ToString();
}
} }
//删除的方法
private void button3_Click(object sender, EventArgs e)
{ foreach (string item in hc2.Keys)
{
if (item == cbo1.SelectedItem.ToString())
{
if (dataGridView1.SelectedRows.Count >= )
{
for (int i = ; i < hc2[item].Count; i++)
{
if (hc2[item][i].Name == dataGridView1.SelectedRows[].Cells[].Value.ToString())
{
DialogResult dr = MessageBox.Show("是否删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
if (dr == DialogResult.Yes)
{
hc2[item].RemoveAt(i);
info1();
MessageBox.Show("删除成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}
}
} }
} private void txt1_TextChanged(object sender, EventArgs e)
{ } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ }
}
}
 

C#体检套餐项目的更多相关文章

  1. 字典集合Dictionary<K,V>和构造的应用==>>体检套餐项目

    效果 首先,我们先来准备我们需要的类 1.检查项目类 using System; using System.Collections.Generic; using System.Linq; using ...

  2. 大型三甲医院医疗体检信息管理系统源码 PEIS 体检科软件 CS

    详情请点击查看 开发环境 :VS2008 + C# + SQL2000 功能介绍: 1:设置:操作员设置   系统功能设置    用户组权限设置  公告打印设置  数据字典设置  临床类型设置  体检 ...

  3. 【深入学习.Net】.泛型集合【体检管理系统】

    基于泛型List的体检管理系统(蜗牛爬坡) 第五章[体检管理系统] 一.项目展示图(基于.net core6.0) 二.首先准备两个Model类 HealthCheckItem(项目类):Name(项 ...

  4. S2---深入.NET平台和C#编程的完美总结

    1.NET简单解说 l 面向对象提升 OOP(Object Oriented  Programming)面向对象编程 AOP:(Aspache  Oriented Programming):面向切面编 ...

  5. 2014年5月份第4周51Aspx源码发布详情

    最基本wcf服务器与客户端交互源码  2014-5-26 [VS2003]源码描述:本示例讲解的是最基本的wcf语法,示例浏览请先运行服务端,然后在运行客户端,适合想要学习wcf的初学者.仅供借鉴,欢 ...

  6. 对于家政020 APP平台如何走出资本寒冬?

    成都亿合科技小编了解到,随着O2O烧钱大战过去,网络上流传的一份O2O项目死亡名单上显示,近年来,汽车.社区.旅游.教育等16个领域的多个O2O项目关门大吉,仅外卖餐饮O2O项目倒闭的就有十几个.只有 ...

  7. impdp因致命错误终止 ORA-7445 [kpodpals]

    基本要素 前天好不easy成功给用户把数据全库导出,今天用户又告知导出的数据无法导入,首先就问用户有什么错误提示,给我的回答是就一个'作业"SYSTEM"."SYS_IM ...

  8. iPhone 6/6 Plus国行版开卖当日抢购攻略

    在距离苹果首批发售时隔一个月也就是北京时间10月17日,苹果iPhone 6.iPhone 6 Plus终于也要在中国大陆开卖,众多国内用户终于有机会安排自己的购机计划.据不完全数据显示,目前iPho ...

  9. MyBatis-xml配置SQL文件中,传入List数组、基本类型String、int……、与自定义类型的方法

    //基本类型 @Override public String queryItemNumber(String packId) throws Exception { // TODO Auto-genera ...

随机推荐

  1. Java 序列化与反序列化

    1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...

  2. Android之图片加载框架Fresco基本使用(二)

    PS:最近看到很多人都开始写年终总结了,时间过得飞快,又到年底了,又老了一岁. 学习内容: 1.进度条 2.缩放 3.ControllerBuilder,ControllerListener,Post ...

  3. Moon.Orm 配置说明

    一.在线技术文档: http://files.cnblogs.com/files/humble/d.pdf   二.使用的大致流程   1.首先下载代码生成器,可以一键生成项目Model层;(其中含有 ...

  4. C# 高效编程笔记2

    C# 高效编程笔记2 1.理解GetHashCode()的陷阱 (1)作用:作为基于散列集合定义键的散列值,如:HashSet<T>,Dictionary<K,V>容器等 (2 ...

  5. C#开发微信门户及应用(2)--微信消息的处理和应答

    微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为计划的安排事情之一了.本系列文章希望从一个循序渐进的角度上,全面介绍微 ...

  6. screen命令

    基本用法 screen -S testname 在这里面执行命令,即使终端突出,进程也不会断掉 screen -list查看有哪些screen screen -r testname 恢复

  7. java类的初始化顺序

    在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...

  8. 同步辅助类CountDownLatch用法

    CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则使当前线程处于等待状态,调用countDow ...

  9. 来玩Play框架05 数据库

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 数据库是整个站点的数据储藏室.用户提交的数据可以存储在数据库中,以便未来使用.Pl ...

  10. Maven远程仓库的配置

    在很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库.这时,可以在POM中配置该仓库,见代码如下: <!-- 远程仓库的配置 ...