zoukankan      html  css  js  c++  java
  • 体检套餐的项目

    第5章 体检套餐管理系统
    1,课程内容回顾

    第1章:深入.NET框架

    .NET框架组件

    CLR的作用及组成

    .NET程序编译过程

    .NET核心类库及命名空间

    第2章 深入C#数据类型

    类、对象、属性、封装

    类图

    结构

    拆箱装箱

    值类型和引用类型

    静态成员和静态方法

    第3章 使用集合组织相关数据

    操作集合实现元素的增、删、查、遍历

    ArrayList

    Hashtable

    操作泛型集合实现元素的增、删、查、遍历

    List<T>

    Dictionary<K,V>

    泛型

    第4章 深入类的方法

    构造函数

    方法重载

    类之间通信

    2,知识梳理

    类和对象

    对象

    类和对象的关系

    创建类:

    创建类的属性:只读、只写、验证逻辑

    方法:无参无返回值、带参无返回值、无参有返回值、带参有返回值

    构造函数:有参构造函数、无参构造函数

    方法重载

    静态方法

    对象间互操作

    对象相互协同工作,共同完成软件功能

    封装

    消息传递

    值类型和引用类型

    C#数据类型

    基本数据类型

    枚举

    结构

    泛型

    接口

    集合

    列表

    ArrayList

    List<T>

    02,字典

    哈希表Hashtable

    字典Dictionary<k,v>

    03,队列
    Queue<T>

    04,栈

    Stack<T>

    显示控件数据绑定

    DataGridView控件

    绑定列表集合List<T>

    设置DataSource属性为BindingList<T>对象

    绑定字典集合Dictionary<K,V>

       借助BindingSource对象设置DataSource

    ListView控件

    绑定集合信息

    体检套餐管理系统

    关键思路和代码分析:

    首先可以功能提取出两个类,一个是 HealthCheckItem (检查项目类)和HealthCheckItem(体检套餐类)。首先我们要理清两个类的关系,一项套餐中可以包含多项项目检查。

    HealthCheckItem:包括项目名称、单价和描述3个属性

    例如:肝功能、用于检查肝功能、60

    然后写一个带参构造函数,对这三个字段赋值

    HealthCheckSet:包括要检查的项目、套餐名称、总价(所有要检查项目之和)

    所以这里我们就要考虑检查项目的类型:

    可以定义一个泛型集合来存储项目的类型,如List<HealthCheckItem>

    然后写2个构造函数对List<HealthCheckItem>

    进行初始化,如下

    最后该类还需要一个套餐总价计算方法

    窗体加载时需要初始化几个项目:

    查看、删除套餐体检项目

    编写UpdateSet(HealthCheckSet set)方法,实现DataGridView控件重新绑定集合对象

    体检项目变更时,需要调用CalcPrice()方法重新计算总价

    关键代码:

    添加体检项目

    从体检项目中选择一项,单击“添加”按钮,将选中项添加到泛型集合,并重新绑定DataGridView

    重点:判断添加的体检项目在现有套餐中是否存在

    新建套餐

    需求说明:录入套餐名称,点击“确定”,将新建的套餐添加到套餐集合。

    体检套餐管理系统思路剖析

    今天我们来看下体检套餐管理系统如何书写!

    首先我们来看下系统的效果图,如下

    我们需要清楚的是该项目主要练习泛型集合List<T>和Dictionary<K,V>的用法,以该项目为依托,让我们对内存中数据的存在结构更加清晰。

    书写该系统前,大家先不必考虑功能如何实现,而是先将需求搞清楚,当需求明确后,功能就变得简单了。

    需求:为了提高医务人员的工作效率,我们需要开发一款管理系统。我们都知道一个套餐可以包含多个体检项目,就如大家购买的手机套餐:提供了免费短信和流量等多项服务。

    思路剖析:

    1.根据需求分析,我们可以提取出两个类,一个是套餐类(HealthCheckSet),一个是体检项目类(HealthCheckItem ).

    体检项目类:

    套餐类(HealthCheckSet)内容:

    在窗体中做一些初始化工作

    首先,我们知道套餐可能有N个,体检项目也有很多,所以我们需要考虑使用集合来存储对应的数据。如下在内存中定义一些容器来保存我们关心的数据。

    当套餐下拉框选择项发生改变时,需要加载所选套餐下对应的体检项目。

    分析到这里相信大家对这个项目已的思路已经有了一定的了解,剩下的内容就由大家来完成了。

    总结:当我们拿到一个项目的时候首先要分析需求和总体任务,然后设计合适的类,满足需求和任务,之后就是实例化对象,做一些初始化数据;最后通过外部触发,驱动对象操作。例如用户选择某个套餐后,该套餐的相关信息通过控件展示到用户眼前。

     接下来  我来写一下 一些重要的代码!!

    首先要先创建 两个类来存储

    1.

    public class HealthCheckSet
    {
    //HealthCheckItem的集合
    public List<HealthCheckItem> Item { get; set; }

    //套餐价格阿
    public int Price { get; set; }

    //套餐名称
    public string Name { get; set; }

    //无参构造
    public HealthCheckSet() { }

    //带参构造
    public HealthCheckSet(string name,List<HealthCheckItem> item)
    {
    this.Name = name;
    this.Item = item;
    }

    2.

    public class HealthCheckItem
    {
    //项目描述
    public string Description { get; set; }
    //项目名称
    public string Name { get; set; }
    //项目价格
    public int Price { get; set; }

    //无参构造
    public HealthCheckItem() { }

    //带参构造
    public HealthCheckItem(string name,string description,int price)
    {
    this.Name = name;
    this.Price = price;
    this.Description = description;
    }
    }
    }

    然后是要写在 logd事件里的东西:

    //建立所有 检查项目 集合
    // List<HealthCheckItem> Alllist = new List<HealthCheckItem>();
    Dictionary<string, HealthCheckItem> Alllist = new Dictionary<string, HealthCheckItem>();

    //建立 套餐中的 检查项目 集合
    List<HealthCheckItem> list = new List<HealthCheckItem>();

    //使用字典保存套餐集合
    Dictionary<string, HealthCheckSet> dictionary = new Dictionary<string, HealthCheckSet>();

    //初始化检查项目
    HealthCheckItem item, item2, item3, item4, item5, item6, item7;

    //定义一个默认套餐
    HealthCheckSet moren;

    //初始化检查项目的方法
    public void main()
    {
    item = new HealthCheckItem("身高","用于检查身高",10);
    item2 = new HealthCheckItem("体重","用于检查体重",5);
    item3 = new HealthCheckItem("视力","用于检查视力",15);
    item4 = new HealthCheckItem("听力","用于检查听力",20);
    item5 = new HealthCheckItem("肝功能","用于检查肝功能",100);
    item6 = new HealthCheckItem("B超","用于检查B超", 10);
    item7 = new HealthCheckItem("心电图","用于检查心电图",100);


    Alllist.Add(item.Name,item);
    Alllist.Add(item2.Name,item2);
    Alllist.Add(item3.Name,item3);
    Alllist.Add(item4.Name, item4);
    Alllist.Add(item5.Name,item5);
    Alllist.Add(item6.Name,item6);
    Alllist.Add(item7.Name,item7);


    //dictionary.Add(item.Name,item);

    }

    //生成默认套餐数据
    public void yuan()
    {
    list.Add(item);
    list.Add(item2);
    list.Add(item3);

    moren = new HealthCheckSet("入学体检",list);
    //计算价格
    moren.CalcPrice();

    this.dictionary.Add("入学体检", moren);

    }


    //套餐列表 下拉框的加载方法
    public void combox()
    {
    cbm_sum.Items.Clear();
    cbm_sum.Items.Add("--请选择--");
    foreach (string item in dictionary.Keys)
    {
    cbm_sum.Items.Add(item);
    }
    //默认第一项为选中
    cbm_sum.SelectedIndex = 0;
    }
    //检查项目 下拉框的加载方法
    public void combox2()
    {
    cmb_xiang.Items.Clear();
    cmb_xiang.Items.Add("--请选择--");
    foreach (string item in Alllist.Keys)
    {
    cmb_xiang.Items.Add(item);
    }
    //默认第一项为选中
    cmb_xiang.SelectedIndex = 0;
    }
    private void FrmMain_Load(object sender, EventArgs e)
    {
    main();
    yuan();
    combox();
    combox2();

    }

    //添加套餐
    private void but_add_Click(object sender, EventArgs e)
    {
    if (txt_name.Text!="")
    {
    if (dictionary.Keys.Contains(txt_name.Text))
    {

    MessageBox.Show("已经有该套餐了", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
    return;
    }
    else
    {
    //给health实例化
    List<HealthCheckItem> hao = new List<HealthCheckItem>();
    HealthCheckSet health = new HealthCheckSet();
    health.Item = hao;
    health.Name = "";
    health.Price = 0;
    this.dictionary.Add(txt_name.Text, health);
    combox();
    cbm_sum.Text = txt_name.Text;
    txt_name.Text = "";

    }


    }
    else
    {
    MessageBox.Show("添加的不能为空!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
    }

    }
    //填充套餐的DataGridView
    public void UpdateSet(HealthCheckSet set)
    {
    if (set.Item == null)
    {
    //给DataGridView的数据源赋空值
    dgv.DataSource = new BindingList<HealthCheckItem>();
    return;
    }
    else
    {
    dgv.DataSource = new BindingList<HealthCheckItem>(set.Item);
    }

    }

    //选择套餐
    private void cbm_sum_SelectedIndexChanged(object sender, EventArgs e)
    {


    string setName = cbm_sum.Text;
    if (cbm_sum.Text=="--请选择--")
    {
    //给DataGridView的数据源赋空值
    dgv.DataSource = new BindingList<HealthCheckItem>();

    lab_xianshiname.Text = "";
    cmb_xiang.Text = "";
    lab_xianshiprice.Text = "";
    but_new.Enabled = false;
    return;

    }
    else
    {
    lab_xianshiname.Text = setName;
    if ( dictionary[setName]!=null)
    {
    //根据套餐名给DataGridView绑定数据
    UpdateSet(dictionary[setName]);
    }
    else
    {
    //给DataGridView的数据源赋空值
    dgv.DataSource = new BindingList<HealthCheckItem>();
    }

    //根据套餐名给其中的检查项求总价格
    lab_xianshiprice.Text = dictionary[setName].Price.ToString();
    }


    }

    //删除
    private void but_shan_Click(object sender, EventArgs e)
    {
    string key = dgv.SelectedRows[0].Cells[1].Value.ToString();
    this.dictionary[cbm_sum.Text].Item.Remove(Alllist[key]);

    dgv.DataSource = new BindingList<HealthCheckItem>(dictionary[cbm_sum.Text].Item);
    but_shan.Enabled = false;//删除按钮的禁用

    }
    public string name;
    //选中
    private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
    {
    if (dgv.SelectedRows.Count!=1||dgv.SelectedRows[0].Cells[1].Value==null)
    {
    MessageBox.Show("请你正确的选择一行!","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);
    return;
    }
    else
    {
    name = dgv.SelectedRows[0].Cells[1].Value.ToString();
    but_shan.Enabled = true;//删除按钮的可用
    }

    }

    //添加项目
    private void but_new_Click(object sender, EventArgs e)
    {
    string name = cmb_xiang.Text;
    if (!dictionary[cbm_sum.Text].Item.Contains(Alllist[name]))
    {
    dictionary[cbm_sum.Text].Item.Add(Alllist[name]);
    MessageBox.Show("添加成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    dgv.DataSource = new BindingList<HealthCheckItem>(dictionary[cbm_sum.Text].Item);
    dictionary[cbm_sum.Text].CalcPrice();
    //根据套餐名给其中的检查项求总价格
    lab_xianshiprice.Text = dictionary[cbm_sum.Text].Price.ToString();
    }
    else
    {
    MessageBox.Show("已经有该项目的存在了", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
    }


    }

    //添加按钮的 是否可用
    private void cmb_xiang_SelectedIndexChanged(object sender, EventArgs e)
    {

    if (cmb_xiang.Text == "--请选择--"||cbm_sum.Text=="--请选择--")
    {
    but_new.Enabled = false;
    }
    else
    {
    but_new.Enabled = true;
    }

    }

    private void gb_add_Enter(object sender, EventArgs e)
    {

    }

    private void gb_main_Enter(object sender, EventArgs e)
    {

    }

    private void txt_name_TextChanged(object sender, EventArgs e)
    {

    }

    private void lab_name_Click(object sender, EventArgs e)
    {

    }

    private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

    private void lab_xiang_Click(object sender, EventArgs e)
    {

    }

    private void lab_xianshiprice_Click(object sender, EventArgs e)
    {

    }

    private void lab_price_Click(object sender, EventArgs e)
    {

    }

    private void lab_xianshiname_Click(object sender, EventArgs e)
    {

    }

    private void labname_Click(object sender, EventArgs e)
    {

    }

    private void lab_sum_Click(object sender, EventArgs e)
    {

    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {

    }


    }
    }

    这就是 这个项目的大概代码 了 。

      

  • 相关阅读:
    使用ExcelMapper制作用于打印的矩阵
    八皇后问题-回溯法解
    HashMap-1.8 你看得懂的原理分析
    一生之敌
    必学十大经典排序算法,看这篇就够了(附完整代码/动图/优质文章)
    事务的四种隔离级别
    数据库的三范式
    ConcurrentHashMap底层实现原理和源码分析
    leetcode-160-相交链表(simple)
    JAVA中priorityqueue详解
  • 原文地址:https://www.cnblogs.com/hero96/p/5373333.html
Copyright © 2011-2022 走看看