zoukankan      html  css  js  c++  java
  • 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 = 0;
                if (items.Count > 0)
                {
                    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基础版",10,"一周时间");
                c2 = new CourseItem("Arduino提高版", 20, "两周时间");
                c3 = new CourseItem("Arduino至尊版", 30, "一月时间");
    
                c4 = new CourseItem("51基础版", 10, "一周时间");
                c5 = new CourseItem("51提高版", 20, "两周时间");
                c6 = new CourseItem("51至尊版", 30, "一月时间");
    
                //将所有的课程都填充到课程的集合中去。
                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 > 0)
                {
                    //这里声明一个专业对象的引用
                    Specialty sp = null;
    
                    //循环选中项
                    for (int i = 0; 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 = 0; i < clb_course.Items.Count; i++)
                    {
                        clb_course.SetItemChecked(i, true);     //循环选中
                    }
                }
                else
                {
                    for (int i = 0; i < clb_course.Items.Count;i++ )
                    {
                        clb_course.SetItemChecked(i, false);    //取消全选
                    }
                }
    
            }
            #endregion
    
    
    
    
    
        }
    }

    最终form界面如下:

    1

  • 相关阅读:
    Oracle索引
    Oracle Union Union All 对查询结果集操作
    Oracle表连接
    BIOS + MBR > UEFI + GPT
    Opensource Licenses
    Linux 系统下使用dd命令备份还原MBR主引导记录
    Linux 文件类型笔记
    Linux 分支那么多,这里可以帮你缩小选择范围
    Arch Linux 的休眠设置
    Arch Linux pacman 与其他发行版操作比较
  • 原文地址:https://www.cnblogs.com/Mysterious/p/3413014.html
Copyright © 2011-2022 走看看