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#实例,熟练使用泛型数组等,课程选择小软件的更多相关文章

  1. Java 泛型 泛型数组

    Java 泛型 泛型数组 @author ixenos 先给结论 不能(直接)创建泛型数组 泛型数组实际的运行时对象数组只能是原始类型( T[]为Object[],Pair<T>[]为Pa ...

  2. java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法,泛型嵌套)

    JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型.  1.Java泛型  其实Java ...

  3. Java“禁止”泛型数组

    Java“禁止”泛型数组 原文:https://blog.csdn.net/yi_Afly/article/details/52058708 1. 泛型定义泛型编程是一种通过参数化的方式将数据处理与数 ...

  4. 自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用

    通配符 T, K, V, E 等泛型字母为有类型, 类型参数赋予具体的值 ? 未知类型 类型参数赋予不确定值, 任意类型 只能用在 声明类型上,方法参数上, 不能用在定义泛型类上 上限 extends ...

  5. Java 中为什么不能创建泛型数组?

    之前只是知道在 Java 中不能创建泛型数组,今天翻看 <Effective Java>其中对这个部分有讲解,记录一下. 现在我们假设在 Java 中可以创建泛型数组,看看可能会发生什么情 ...

  6. 泛型数组列表 ArrayList

    为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型 ...

  7. Java泛型数组

    文章来自http://blog.csdn.net/orzlzro/article/details/7017435 Java 不支持泛型数组.也就是说, List<String>[] ls ...

  8. Java 泛型数组

    Java 不支持泛型数组.也就是说, List<String>[] ls = new ArrayList<String>[10]; 是不支持的,而 List<String ...

  9. 每天一个JavaScript实例-递归实现反转数组字符串

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. 字符串截取 及 substr 和 substring 的区别

    1..字符串截取 str.substr(0, 1) // 获取字符串第一个字符 str.substr(-1) // 获取字符串最后一个字符 str.charAt(str.length - 1) // ...

  2. Directional Light,Ambient,Specular,光照感性认识...

  3. jdk1.6 升级到 jdk1.7

    将 jdk1.6 升级到 jdk1.7 下载jdk-7u11-linux-x64.tar.gz   tar zxvf  jdk-7u11-linux-x64.tar.gz mkdir   /usr/l ...

  4. 将NSArray反向排序

    NSArray * array = [NSArray arrayWithObjects:", nil]; NSArray * reverseArray = [[array reverseOb ...

  5. DOM概念的区分:Attribute和Property, html()及.text(), .val()

    Attribute就是dom节点自带的属性 例如:html中常用的id.class.title.align等: <div id="immooc" title="慕课 ...

  6. 转Python 标准库 urllib2 的使用细节

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 P ...

  7. Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结

    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...

  8. lua学习笔记(六)

    (2012-04-12 23:32:35) 转载▼   函数  定义     function mytest(a,b,c) <函数体> end     mytest = function( ...

  9. linux flush memcache缓存

    telnet localhost 11211 flush_all  memcached Telnet Interface Command Description Example get Reads a ...

  10. Google Code Jam 2014 Round 1 A:Problem B. Full Binary Tree

    Problem A tree is a connected graph with no cycles. A rooted tree is a tree in which one special ver ...