您的位置:首页 > 理论基础 > 数据结构算法

数据结构--排序实例

2011-05-11 18:37 169 查看
创建一个CsScoreInfo存放成绩信息类
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace DataStructWinForm

{

    /// <summary>

    /// 存放成绩信息的类

    /// </summary>

    public class CsScoreInfo : IComparable<CsScoreInfo>

    {

        #region 属性

        private int _id;

        /// <summary>

        /// 学号

        /// </summary>

        public int ID

        {

            get

            {

                return _id;

            }

            set

            {

                _id = value;

            }

        }

 

        private string _name;

        /// <summary>

        /// 姓名

        /// </summary>

        public string Name

        {

            get

            {

                return _name;

            }

            set

            {

                _name = value;

            }

        }

 

        private float _cSharp;

        /// <summary>

        /// C#程序设计成绩

        /// </summary>

        public float CSharp

        {

            get

            {

                return _cSharp;

            }

            set

            {

                _cSharp = value;

            }

        }

 

        private float _dataStruct;

        /// <summary>

        /// 数据结构成绩

        /// </summary>

        public float DataStruct

        {

            get

            {

                return _dataStruct;

            }

            set

            {

                _dataStruct = value;

            }

        }

 

        private float _database;

        /// <summary>

        /// 数据库成绩

        /// </summary>

        public float Database

        {

            get

            {

                return _database;

            }

            set

            {

                _database = value;

            }

        }

 

        /// <summary>

        /// 总分

        /// </summary>

        public float Total

        {

            get

            {

                return _cSharp + _dataStruct + _database;

            }

        }

        #endregion

 

        /// <summary>

        /// 构造函数

        /// </summary>

        public CsScoreInfo()

        { }

 

        /// <summary>

        /// 检查成绩的合法性

        /// </summary>

        /// <param name="score">成绩</param>

        /// <returns>成绩</returns>

        private float CheckScore(float score)

        {

            //成绩只能在0-100之间

            if (score < 0 || score > 100)

            {

                throw new ArgumentOutOfRangeException("成绩不合法!");

            }

            return score;

        }

        /// <summary>

        /// 实现IComparable<T>接口

        /// </summary>

        /// <param name="other">参与比较的对象</param>

        /// <returns></returns>

        public int CompareTo(CsScoreInfo other) 

        {

            return _id.CompareTo(other._id);

        }

        /// <summary>

        ///

        /// </summary>

        /// <returns></returns>

        public override string ToString()

        {

            //return base.ToString();

            return string.Format("{0,-3}{1,5}{2,8}{3,10}{4,9}{5,8}",

                   _id.ToString(),_name,_cSharp.ToString(),_dataStruct.ToString(),

                   _database.ToString(),Total.ToString());

 

        }

    }

    /// <summary>

    /// 针对C#程序设计成绩的IComparer接口实现

    /// </summary>

    public class CSharpCompare : IComparer<CsScoreInfo>

    {

        /// <summary>

        ///

        /// </summary>

        /// <param name="left"></param>

        /// <param name="right"></param>

        /// <returns></returns>

        public int Compare(CsScoreInfo left, CsScoreInfo right)

        {

            return left.CSharp.CompareTo(right.CSharp);

        }

    }

    /// <summary>

    /// 针对数据结构成绩的IComparer接口实现

    /// </summary>

    public class DataStructCompare : IComparer<CsScoreInfo>

    {

        /// <summary>

        ///

        /// </summary>

        /// <param name="left"></param>

        /// <param name="right"></param>

        /// <returns></returns>

        public int Compare(CsScoreInfo left, CsScoreInfo right)

        {

            return left.DataStruct.CompareTo(right.DataStruct);

        }

    }

    /// <summary>

    /// 针对数据结构成绩的IComparer接口实现

    /// </summary>

    public class DatabaseCompare : IComparer<CsScoreInfo>

    {

        /// <summary>

        ///

        /// </summary>

        /// <param name="left"></param>

        /// <param name="right"></param>

        /// <returns></returns>

        public int Compare(CsScoreInfo left, CsScoreInfo right)

        {

            return left.Database.CompareTo(right.Database);

        }

    }

    /// <summary>

    /// 针对总分的IComparer接口实现

    /// </summary>

    public class TotalCompmre : IComparer<CsScoreInfo>

    {

        public int Compare(CsScoreInfo left, CsScoreInfo right)

        {

            float lTotal = left.CSharp + left.DataStruct + left.Database;

            float rTotal = right.CSharp + right.DataStruct + right.Database;

            return lTotal.CompareTo(rTotal);

        }

    }

}

创建一个WinForm窗体,下面的代码是实现:
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 DataStructWinForm

{

    public partial class FrmSort : Form

    {

        public FrmSort()

        {

            InitializeComponent();

 

            cmbSort.SelectedIndex = 0;

        }

 

        private void btnAdd_Click(object sender, EventArgs e)

        {

            //添加一个新的成绩

            CsScoreInfo sInfo = new CsScoreInfo();

            try

            {

                sInfo.ID = int.Parse(txtID.Text);

                sInfo.Name = txtName.Text;

                sInfo.CSharp = Single.Parse(txtCSharp.Text);

                sInfo.DataStruct = Single.Parse(txtDataStruct.Text);

                sInfo.Database = Single.Parse(txtDatabase.Text);

                lstScoreInfo.Items.Add(sInfo);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            //删除选中项

            if (lstScoreInfo.SelectedItems.Count > 0)

            {

                lstScoreInfo.Items.Remove(lstScoreInfo.SelectedItem);

            }

        }

 

        private void btnSort_Click(object sender, EventArgs e)

        {

            lstScoreInfo.BeginUpdate();//停止刷新

            if (cmbSort.SelectedIndex == 0)

            {

                lstScoreInfo.Sorted = true;

            }

            else

            {

                lstScoreInfo.Sorted = false;

                //使用一个临时数组进行排序

                CsScoreInfo[] arr = new CsScoreInfo[lstScoreInfo.Items.Count];

                lstScoreInfo.Items.CopyTo(arr, 0);//从LISTBOX内复制数据

                lstScoreInfo.Items.Clear();

                if (cmbSort.SelectedIndex == 1)

                {

                    CSharpCompare csCom = new CSharpCompare();

                    Array.Sort(arr, csCom);

                }

                if (cmbSort.SelectedIndex == 2)

                {

                    DataStructCompare dsCom = new DataStructCompare();

                    Array.Sort(arr, dsCom);

                }

                if (cmbSort.SelectedIndex == 3)

                {

                    DatabaseCompare dbCom = new DatabaseCompare();

                    Array.Sort(arr, dbCom);

                }

                if (cmbSort.SelectedIndex == 4)

                {

                    TotalCompmre totalCom = new TotalCompmre();

                    Array.Sort(arr, totalCom);

                }

                //把在临时数组内排好序的数据复制到LISTBOX中

                lstScoreInfo.Items.AddRange(arr);

            }

            lstScoreInfo.EndUpdate();//恢复刷新

        }

 

    }

}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息