基于泛型List的体检管理系统(蜗牛爬坡)

第五章【体检管理系统】

  一、项目展示图(基于.net core6.0)

二、首先准备两个Model类  

  • HealthCheckItem(项目类):Name(项目名称)、Description(项目描述)、Price(当前项目价格)
  • HealthCheckSet(套餐类):Name(套餐名称)、Items(套餐项目集合)、Price(套餐项目总价格)
  • 代码如下

     1 /// <summary>
    2 /// 检查项目类
    3 /// </summary>
    4 public class HealthCheckItem
    5 {
    6 public HealthCheckItem(string name, string description, decimal price)
    7 {
    8 Name = name;
    9 Description = description;
    10 Price = price;
    11 }
    12
    13 /// <summary>
    14 /// 项目名称
    15 /// </summary>
    16 public string Name { get; set; }
    17 /// <summary>
    18 /// 项目描述
    19 /// </summary>
    20 public string Description { get; set; }
    21 /// <summary>
    22 /// 项目价格
    23 /// </summary>
    24 public decimal Price { get; set; }
    25 }

     1     /// <summary>
    2 /// 套餐类
    3 /// </summary>
    4 public class HealthCheckSet
    5 {
    6 /// <summary>
    7 /// 套餐名称
    8 /// </summary>
    9 public string Name { get; set; }
    10
    11 /// <summary>
    12 ///套餐包含的项目
    13 /// </summary>
    14 public List<HealthCheckItem> Items { get; set; }
    15
    16 /// <summary>
    17 /// 包含项目的总价
    18 /// </summary>
    19 public decimal Price { get; set; }
    20
    21 /// <summary>
    22 /// 计算总价的方法
    23 /// </summary>
    24 public void CalcPrice()
    25 {
    26 decimal totalPrice = 0;
    27 foreach (var item in Items)
    28 {
    29 totalPrice+=item.Price;
    30 }
    31 this.Price = totalPrice;
    32 }
    33
    34 public HealthCheckSet()
    35 {
    36 Items = new List<HealthCheckItem>();
    37 }
    38 public HealthCheckSet(string name, List<HealthCheckItem> items)
    39 {
    40 Name = name;
    41 Items = items;
    42 }
    43 }

  三、首先创建两个项目对象集合,在添加多个初始项目对象

   

1    private List<HealthCheckItem> AllItems = new List<HealthCheckItem>(); //所有项目对象集合
2 private List<HealthCheckItem> items = new List<HealthCheckItem>();// 套餐项目集合
3 private HealthCheckItem item1, item2, item3, item4, item5, item6, item7; //初始项目

  四、创建套餐对象、和套餐对象集合

    

1  private HealthCheckSet healthSet; //初始套餐对象
2 private List<HealthCheckSet> healthSets = new List<HealthCheckSet>(); //套餐对象集合

    五、直接上代码(Tips:本项目无需点击添加相应控件事件)

    

  1         public FrmMain()
2 {
3 InitializeComponent();
4 Load += FrmMain_Load;
5 }
6
7 /// <summary>
8 /// 窗体加载事件
9 /// </summary>
10 /// <param name="sender"></param>
11 /// <param name="e"></param>
12 private void FrmMain_Load(object? sender, EventArgs e)
13 {
14 btnAdd.Enabled = false;
15 btnDelete.Enabled = false;
16 ComboBox();
17 HealthTao();
18 btnNameAdd.Click += BtnNameAdd_Click;
19 btnAdd.Click += BtnAdd_Click;
20 cbNameList.SelectedIndexChanged += CbNameList_SelectedIndexChanged;
21 btnDelete.Click += BtnDelete_Click;
22 }
23 /// <summary>
24 /// 删除事件
25 /// </summary>
26 /// <param name="sender"></param>
27 /// <param name="e"></param>
28 private void BtnDelete_Click(object? sender, EventArgs e)
29 {
30 if (dataGridView1.SelectedRows.Count > 0)
31 {
32 int index = dataGridView1.SelectedRows[0].Index;
33 healthSets[cbNameList.SelectedIndex].Items.RemoveAt(index);
34 dataGridView1.DataSource = null;
35 Add();
36 }
37 else
38 {
39 MessageBox.Show("表中没有该选项!");
40 cbHealthList.SelectedIndex = 0;
41 }
42 }
43
44 /// <summary>
45 /// 套餐列表选中改变事件
46 /// </summary>
47 /// <param name="sender"></param>
48 /// <param name="e"></param>
49 private void CbNameList_SelectedIndexChanged(object? sender, EventArgs e)
50 {
51 if(cbNameList.Text != String.Empty)
52 {
53 btnAdd.Enabled = true;
54 btnDelete.Enabled = true;
55 dataGridView1.DataSource = null;
56 Add();
57 lbName.Text = cbNameList.Text;
58 }
59 }
60 /// <summary>
61 /// 套餐添加项目事件
62 /// </summary>
63 /// <param name="sender"></param>
64 /// <param name="e"></param>
65 private void BtnAdd_Click(object? sender, EventArgs e)
66 {
67 if (dataGridView1.SelectedRows.Count <= 0)
68 {
69 cbHealthList.SelectedIndex = 0;
70 }
71 if (cbNameList.Text != String.Empty)
72 {
73 var name = cbNameList.Text;
74 var heal = cbHealthList.Text;
75 int index = cbHealthList.SelectedIndex;
76 if ((healthSets[cbNameList.SelectedIndex].Items.Any(m => m.Name == heal)))
77 {
78 MessageBox.Show("已添加过该项目");
79 }
80 else
81 {
82 dataGridView1.DataSource = null;
83 healthSets[cbNameList.SelectedIndex].Items.Add(AllItems[index]);
84 Add();
85 MessageBox.Show("添加成功!");
86 int healIndex = cbHealthList.SelectedIndex;
87 if (healIndex < cbHealthList.Items.Count - 1)
88 {
89 cbHealthList.SelectedIndex = healIndex + 1;
90 }
91 else
92 {
93 cbHealthList.SelectedIndex = 0;
94 }
95 }
96 }
97 else
98 {
99 MessageBox.Show("请选择相应套餐!");
100 }
101 }
102 /// <summary>
103 /// 添加套餐点击事件
104 /// </summary>
105 /// <param name="sender"></param>
106 /// <param name="e"></param>
107 private void BtnNameAdd_Click(object? sender, EventArgs e)
108 {
109 if (tbName.Text.Trim() != String.Empty)
110 {
111 healthSet = new HealthCheckSet();
112 healthSet.Name = tbName.Text;
113 if (!healthSets.Any(m => m.Name == tbName.Text))
114 {
115 cbNameList.Items.Add(healthSet.Name);
116 healthSets.Add(healthSet);
117 tbName.Text = String.Empty;
118 dataGridView1.DataSource = null;
119 int index = cbNameList.FindString(healthSet.Name);
120 cbNameList.SelectedIndex = index;
121 MessageBox.Show("添加成功!");
122 }
123 else
124 {
125 MessageBox.Show("已存在该套餐了!");
126 tbName.Text = String.Empty;
127 }
128 }
129 else
130 {
131 MessageBox.Show("请输入套餐名称!");
132 }
133
134 }
135 /// <summary>
136 /// 下拉框绑定
137 /// </summary>
138 private void ComboBox()
139 {
140 item1 = new HealthCheckItem("身高", "用于检查身高", 5);
141 item2 = new HealthCheckItem("体重", "用于检查体重", 15);
142 item3 = new HealthCheckItem("视力", "用于检查视力", 5);
143 item4 = new HealthCheckItem("听力", "用于检查听力", 10);
144 item5 = new HealthCheckItem("肝功能", "用于检查肝功能", 45);
145 item6 = new HealthCheckItem("B超", "用于检查B超", 55);
146 item7 = new HealthCheckItem("心电图", "用于检查心脏", 65);
147 AllItems.Add(item1);
148 AllItems.Add(item2);
149 AllItems.Add(item3);
150 AllItems.Add(item4);
151 AllItems.Add(item5);
152 AllItems.Add(item6);
153 AllItems.Add(item7);
154 foreach (var item in AllItems)
155 {
156 cbHealthList.Items.Add(item.Name);
157 }
158 cbHealthList.SelectedIndex = 0;
159
160 }
161
162 /// <summary>
163 /// 初始套餐/项目对象
164 /// </summary>
165 private void HealthTao()
166 {
167 items.Add(item1);
168 items.Add(item2);
169 items.Add(item3);
170 items.Add(item4);
171 healthSet = new HealthCheckSet("入学套餐", items);
172 healthSets.Add(healthSet);
173 cbNameList.Items.Add(healthSet.Name);
174 healthSet.CalcPrice();
175 }
176
177 /// <summary>
178 /// 表格刷新共用方法
179 /// </summary>
180 private void Add()
181 {
182 healthSets[cbNameList.SelectedIndex].CalcPrice();
183 lbPrice.Text = healthSets[cbNameList.SelectedIndex].Price.ToString("C2");
184 dataGridView1.DataSource = healthSets[cbNameList.SelectedIndex].Items;
185 dataGridView1.Columns["Name"].HeaderText = "项目名称";
186 dataGridView1.Columns["Description"].HeaderText = "项目描述";
187 dataGridView1.Columns["Price"].HeaderText = "项目价格";
188 }
189 }

  六、小结:本项目采用泛型集合实现,进一步对控件的使用和深入学习面向对象的编程思想,有更深的学习和了解

  

【深入学习.Net】.泛型集合【体检管理系统】的更多相关文章

  1. LINQ学习系列-----3.1 查询非泛型集合

    一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...

  2. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  3. LINQ学习系列-----3.1 查询非泛型集合和多个分组

    一.查询非泛型集合 1.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继 ...

  4. 泛型学习第三天——C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合

    定义一个类: public class UserInfo    {        public System.Guid ID { get; set; } public string LoginName ...

  5. 【学习笔记】C#中的泛型和泛型集合

    一.什么是泛型? 泛型是C#语言和公共语言运行库(CLR)中的一个新功能,它将类型参数的概念引入.NET Framework.类型参数使得设计某些类和方法成为可能,例如,通过使用泛型类型参数T,可以大 ...

  6. c#利用泛型集合,为自己偷偷懒。

    有人说"越懒"的程序员进步的越快!其实还挺有道理.亲身体验,从刚出来工作到现在,自己变"懒"了许多,但感觉写出来的代码确有了不少提升.刚开始啊,同样的代码,赋值 ...

  7. 编写高质量代码改善C#程序的157个建议[泛型集合、选择集合、集合的安全]

    前言   软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...

  8. ConvertHelper与泛型集合

    在机房重构时.我们常常会用到ConvertHelper. 它把从数据库中查询到的dateTable(也是一个暂时表)转化为泛型,然后再填充到DataGridView控件中. ConvertHelper ...

  9. C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合List<T>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享. 1.关于Func<> Fun ...

随机推荐

  1. 免申请直接用上 IDEA 新 UI,只需要这三步配置

    早上给大家介绍了IDEA官方宣布正在开发一套全新的UI,但目前是预览版需要申请才能体验. 随后马上就有网友分享了,不需要申请直接就能激活体验的方法. 本期视频:https://www.bilibili ...

  2. 【主流技术】Mybatis Plus的理解与应用

    前言 mybatis plus是一个mybatis的增强工具,在其基础上只做增强不做改变.作为开发中常见的第三方组件,学习并应用在项目中可以节省开发时间,提高开发效率. 官方文档地址:MyBatis- ...

  3. 使用FileSystemWatcher监听文件状态

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 一.FileSystemWatcher类型介绍 在.NET中使用 FileSystemWatcher 类型可以进行监视指定 ...

  4. 树莓派开发笔记(十七):树莓派4B+上Qt多用户连接操作Mysql数据库同步(单条数据悲观锁)

    前言   安装了mysq数据库,最终时为了实现在一个树莓派上实现多用户多进程操作的同步问题,避免数据并发出现一些错误,本篇安装了远程服务并且讲述了使用Qt进行悲观锁for update操作,命令行进行 ...

  5. 1.1 操作系统的第一个功能——虚拟化硬件资源 -《zobolの操作系统学习札记》

    1.1 操作系统的第一个功能--虚拟化硬件资源 目录 1.1 操作系统的第一个功能--虚拟化硬件资源 问1:操作系统一般处于计算机系统的哪一个位置? 问2:管理硬件资源为什么要单独交给操作系统? 问3 ...

  6. java标识符 identifier

    1,标识符 --> 类名 方法名  变量名 常量名 接口名   为程序员自己命名的内容 main也是标识符但是不能修改 2, 命名规则 只能以   数字 字母(中文) 下划线 美元符号      ...

  7. JSP 入门学习

    概念:java Server Pages java服务器页面 一个特殊的,既可以定义html标签,也可以定义Java代码 用于简化书写 原理 在浏览器上访问 jsp文件时 服务器先解析请求,找到是否有 ...

  8. 解决远程连接阿里云服务器的Redis失败问题

    参考网址: https://www.pianshen.com/article/91461328818/ https://blog.csdn.net/weixin_42518709/article/de ...

  9. 解决github.com 的响应时间过长以及hosts配置不能保存的问题

    github.com 的响应时间过长 1 获取github可以使用的DNS域名 DNS查询 选择TTL值最小的 2 修改hosts配置 打开之后在最后加上如下内容,保存即可 3 出现hosts不能保存 ...

  10. browserify的standalone的含义

    白话:就像Jquery的$, 把你打包后的函数挂在window下你指定的名字下 废话:白话看不懂,就看下面的废话,你不得不花更多时间理解--standalone AAA的含义$ browserify ...