C#实例,熟练使用泛型数组等,课程选择小软件
CourseItem.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace LessonList
{
/// <summary>
/// 课程类
/// </summary>
public class CourseItem
{
public CourseItem()
{ } /// <summary>
/// 实例化一个课程的对象
/// </summary>
/// <param name="n">课程名字</param>
/// <param name="s">课程数</param>
/// <param name="a">备注</param>
public CourseItem(string n,int s,string m)
{
Name = n;
Count = s;
More = m;
} /// <summary>
/// 课程名字
/// </summary>
public string Name
{
get;
set;
} /// <summary>
/// 课程数
/// </summary>
public int Count
{
get;
set;
} /// <summary>
/// 备注
/// </summary>
public string More
{
get;
set;
} }
}
Specialty.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace LessonList
{
/// <summary>
/// 专业类
/// </summary>
public class Specialty
{
//声明一个用来存储多门课程的集合。Dictionary是系统提供的一个泛型类,
//主要表示键和值的集合
private Dictionary<string, CourseItem> items;
//用一个变量存储专业的总课时,并同时初始化为0
private int count; //空的构造函数,同时也实例化一个空的集合
public Specialty()
{
items = new Dictionary<string, CourseItem>();
} /// <summary>
/// 带参数的构造函数
/// </summary>
/// <param name="s_name">专业名称</param>
/// <param name="items">存储课程的集合</param>
public Specialty(string s_name,Dictionary<string,CourseItem> items)
{
Name = s_name;
this.items = items;
} /// <summary>
/// 课程名字
/// </summary>
public string Name
{
get;
set;
} /// <summary>
/// 专业总课时,只读
/// </summary>
public int Count
{
get
{
Compute();
return count;
}
} /// <summary>
/// 课程集合
/// </summary>
public Dictionary<string, CourseItem> Items
{
get { return items; }
set { items = value; }
} /// <summary>
/// 计算课时
/// </summary>
private void Compute()
{
int result = ;
if (items.Count > )
{
foreach (CourseItem ci in items.Values)
{
result += ci.Count;
}
}
count = result;
} }
}
form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace LessonList
{
public partial class Form1 : Form
{
#region//第一步 声明类的数据字段 //课程对象
CourseItem c1, c2, c3,c4,c5,c6;
//专业对象
Specialty sp1, sp2;
//声明一个用于存储课程项的Dictionary集合
Dictionary<string, CourseItem> AllCourse;
//声明一个用于存放专业的Dictionary集合
Dictionary<string, Specialty> AllSpecialty; #endregion public Form1()
{
InitializeComponent();
} #region//第二步 初始化类的公有字段
private void InitItem()
{
//初始化课程列表
c1 = new CourseItem("Arduino基础版",,"一周时间");
c2 = new CourseItem("Arduino提高版", , "两周时间");
c3 = new CourseItem("Arduino至尊版", , "一月时间"); c4 = new CourseItem("51基础版", , "一周时间");
c5 = new CourseItem("51提高版", , "两周时间");
c6 = new CourseItem("51至尊版", , "一月时间"); //将所有的课程都填充到课程的集合中去。
AllCourse = new Dictionary<string, CourseItem>();
AllCourse.Add(c1.Name, c1);
AllCourse.Add(c2.Name, c2);
AllCourse.Add(c3.Name, c3); //初始化专业列表
//先初始化第一个专业的信息以及所有的课程列表
Dictionary<string,CourseItem> sp1temp = new Dictionary<string,CourseItem>();
sp1temp.Add(c1.Name,c1);
sp1temp.Add(c2.Name, c2);
sp1temp.Add(c3.Name, c3); //将第一个专业的名称和所包含的课程信息初始化
sp1 = new Specialty("Arduino专业",sp1temp); //先初始化第一个专业的信息以及所有的课程列表
Dictionary<string, CourseItem> sp2temp = new Dictionary<string, CourseItem>();
sp2temp.Add(c4.Name, c4);
sp2temp.Add(c5.Name, c5);
sp2temp.Add(c6.Name, c6); //将第一个专业的名称和所包含的课程信息初始化
sp2 = new Specialty("51单片机专业", sp2temp); //装载存放专业的集合
AllSpecialty = new Dictionary<string, Specialty>();
AllSpecialty.Add(sp1.Name, sp1);
AllSpecialty.Add(sp2.Name, sp2);
}
#endregion #region//第三步 为专业下拉菜单和课程复选列表填充值
private void Form1_Load(object sender, EventArgs e)
{
InitItem(); //初始化所有数据 cb_spec.Text = "----请选择课程----";
foreach(Specialty sp in AllSpecialty.Values)
{
cb_spec.Items.Add(sp.Name);
} foreach (CourseItem ci in AllCourse.Values)
{
clb_course.Items.Add(ci.Name);
} }
#endregion #region//第四步 将制定专业的课程填充到ListView中
//选择专业下拉菜单激发的事件
private void cb_spec_SelectedIndexChanged(object sender, EventArgs e)
{
if (cb_spec.Text == sp1.Name)
{
ModifyListView(sp1);
}
else
{
ModifyListView(sp2);
}
} private void ModifyListView(Specialty sp)
{
//清空listView1
listView1.Items.Clear();
//创建一个ListViewItem引用
ListViewItem lvi; //迭代传入对象的课程集合
foreach(CourseItem ci in sp.Items.Values)
{
lvi = new ListViewItem(ci.Name);
lvi.SubItems.Add(ci.Count.ToString()); //添加课时数列
lvi.SubItems.Add(ci.More); //添加课程简介
listView1.Items.Add(lvi);
} //计算listview1下面的综合信息
lbl_name.Text = sp.Name;
lbl_kcs.Text = sp.Items.Count.ToString();
lbl_kss.Text = sp.Count.ToString();
}
#endregion #region//第五步 将制定的课程添加到下拉列表中选中的专业中
private void button1_Click(object sender, EventArgs e)
{
if (cb_spec.Text != "----请选择课程----" && clb_course.CheckedItems.Count > )
{
//这里声明一个专业对象的引用
Specialty sp = null; //循环选中项
for (int i = ; i < clb_course.CheckedItems.Count; i++)
{
//取出当前选中的专业
sp = AllSpecialty[cb_spec.Text];
//取出当前选中的课程
CourseItem ci = AllCourse[clb_course.CheckedItems[i].ToString()];
//判断,如果被选中专业中 不存在当前项
if (!sp.Items.ContainsValue(ci))
{
sp.Items.Add(ci.Name, ci); //将当前项添加到专业的课程集合中
ModifyListView(sp);
}
else
{
MessageBox.Show(ci.Name + "已经存在了!");
}
} }
else
{
MessageBox.Show("未选中项或者当前未选择要处理的专业");
} }
#endregion #region//第六步 将制定课程从当前专业课程移除
private void button2_Click(object sender, EventArgs e)
{
//得到当前需要处理的专业对象
Specialty sp = AllSpecialty[cb_spec.Text];
//在本实例中我们允许listview1控件实现多选,因此用foreach
foreach(ListViewItem lvi in listView1.SelectedItems)
{
//得到当前需要处理的课程对象
CourseItem ci = sp.Items[lvi.Text]; if (sp.Items.ContainsValue(ci))
{
sp.Items.Remove(ci.Name);
}
}
ModifyListView(sp);
}
#endregion #region//第七步 全选课程复选框列表
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
for (int i = ; i < clb_course.Items.Count; i++)
{
clb_course.SetItemChecked(i, true); //循环选中
}
}
else
{
for (int i = ; i < clb_course.Items.Count;i++ )
{
clb_course.SetItemChecked(i, false); //取消全选
}
} }
#endregion }
}
最终form界面如下:
C#实例,熟练使用泛型数组等,课程选择小软件的更多相关文章
- Java 泛型 泛型数组
Java 泛型 泛型数组 @author ixenos 先给结论 不能(直接)创建泛型数组 泛型数组实际的运行时对象数组只能是原始类型( T[]为Object[],Pair<T>[]为Pa ...
- java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法,泛型嵌套)
JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型. 1.Java泛型 其实Java ...
- Java“禁止”泛型数组
Java“禁止”泛型数组 原文:https://blog.csdn.net/yi_Afly/article/details/52058708 1. 泛型定义泛型编程是一种通过参数化的方式将数据处理与数 ...
- 自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用
通配符 T, K, V, E 等泛型字母为有类型, 类型参数赋予具体的值 ? 未知类型 类型参数赋予不确定值, 任意类型 只能用在 声明类型上,方法参数上, 不能用在定义泛型类上 上限 extends ...
- Java 中为什么不能创建泛型数组?
之前只是知道在 Java 中不能创建泛型数组,今天翻看 <Effective Java>其中对这个部分有讲解,记录一下. 现在我们假设在 Java 中可以创建泛型数组,看看可能会发生什么情 ...
- 泛型数组列表 ArrayList
为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型 ...
- Java泛型数组
文章来自http://blog.csdn.net/orzlzro/article/details/7017435 Java 不支持泛型数组.也就是说, List<String>[] ls ...
- Java 泛型数组
Java 不支持泛型数组.也就是说, List<String>[] ls = new ArrayList<String>[10]; 是不支持的,而 List<String ...
- 每天一个JavaScript实例-递归实现反转数组字符串
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- hdu 5365 Run(BC 50 B题)(求四边形的个数)
本来准备睡觉.结果还是忍不住想把它A了.由于已经看了题解了, 题意:就是给你一些坐标.都是整数,求一些正多边形的数目,官方题讲解是地球人都知道整数坐标构不成正三角形.正五边形和正六边形的... 然而我 ...
- C#利用SharpZipLib解压或压缩文件(支持多层目录递归压缩)
需要下载ICSharpCode.SharpZipLib.dll using System; using System.Collections.Generic; using System.Linq; u ...
- PHP面试题及答案解析(3)—MySQL数据库
1.mysql_num_rows()和mysql_affected_rows()的区别. mysql_num_rows()和mysql_affected_rows(),这两个函数都作用于 mysql_ ...
- Python基础(字符编码与文件处理)
一.了解字符编码的知识储备 1.计算机基础知识(三副图) 2.文本编辑器存取文件的原理(notepad++,Pycharm,word) 打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内 ...
- smarty模版使用php标签,如何获取模版变量
smarty模版使用php标签,如何获取模版变量 in: 后端程序 已经assign一个模版变量$assign,由于要做特殊的循环输出,使用for循环,因此使用到了php标签,但是php语句和模版语句 ...
- 在Vue中使用layer.js弹出层插件
layer.js(mobile)是一个小巧方便的弹出层插件,在之前的apicloud项目中被大量使用,但最近对apicloud的IDE.非常不友好的文档和极低的开发效率深感厌烦,决定弃用然后转向Vue ...
- 简易web服务器(java版)
//直接使用 ServerSocket 监听服务器端口,就能实现web服务器package ThreadPoolTest; import java.io.InputStream; import jav ...
- Vim使用个人心得
个人最近在Windows上使用gVim 1.移动光标 h,j,k,l 键为左,下,上,右,方向键,控制光标移动,插入状态下不可用,插入状态下,按V键进入查看状态,可使用. 2.进入编辑模式:按 i 键 ...
- MSP430G2553电子时钟实验
用msp430g2553控制1602液晶显示时间,并能够通过按键设置时间.我做了正计时和倒计时两种模式 /*********************************************** ...
- EJB是什么?(节选)
近期的项目中使用了EJB.当时就仅仅知道怎么用,没有深入的去理解.当完毕这个项目之后.再回想项目中使用的技术.框架以及工具的时候,突然感觉对EJB这个概念非常是模糊,于是上网搜一些资料.可是,非常多的 ...