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. [腾讯 TMQ] 零基础学习 Fiddler 抓包改包

    本文转载于https://testerhome.com/topics/7159 一.Fiddler1.1.简介Fiddler是一款HTTP协议调试代理工具,它能够抓取记录本机所有HTTP(S)请求,通 ...

  2. javascript继承—prototype最优两种继承(空函数和循环拷贝)

    一.利用空函数实现继承 参考了文章javascript继承-prototype属性介绍(2) 中叶小钗的评论,对这篇文章中的方案二利用一个空函数进行修改,可以解决创建子类对象时,父类实例化的过程中特权 ...

  3. 多trac的安装和配置

    其他相关网页: trac+svn: http://wenku.baidu.com/view/84389a81ec3a87c24028c43f.html apache(GCI):http://hi.ba ...

  4. About the Apple Captive Network Assistant

    If you’re a mac user, you likely have seen a strange popup window appear on your computer when you t ...

  5. Java编程手冊-Collection框架(上)

    该文章所讲内容基本涵盖了Collection里面的全部东西,尽管基于jdk 1.5的.可是思路非常清晰 1.引言 1.1 Collection框架的介绍 尽管我们能够使用数组去存储具有同样类型的元素集 ...

  6. 解密和解压浏览器上加密的js文件

    F12 -> 进入Sources -> 找到任意一个加密的js文件,如图 点击最下方的 {} 即可解压

  7. Ubuntu安装CodeBlocks

    访问 https://launchpad.net/~damien-moore/+archive/ubuntu/codeblocks-stable,找到页面上加粗的那一段英文(以“ppa:”开头),如“ ...

  8. java学习笔记——java中对象的创建,初始化,引用的解析

    如果有一个A类. 1.例如以下表达式: A  a1 = new A(); 那么A是类,a1是引用.new A()是对象.仅仅是a1这个引用指向了new A()这个对象. 2.又如: A  a2; A代 ...

  9. Atitit.异步编程的发展历史 1.1. TAP & async/await

    Atitit.异步编程的发展历史 1.1. TAP & async/await 1. 异步编程的发展历史1 1.1. Thread1 1.2. Task1 1.3. Async await2 ...

  10. [译]GLUT教程 - 整合代码1

    Lighthouse3d.com >> GLUT Tutorial >> Input >> The Code So Far 以下是前面几节的完整整合代码: #inc ...