数据结构--排序实例
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();//恢复刷新
}
}
}
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();//恢复刷新
}
}
}
相关文章推荐
- javascript数据结构之双链表插入排序实例详解
- 数据结构10-排序方法之直接插入排序的实例
- C语言数据结构 链表与归并排序实例详解
- 数据结构实例<一>(数组排序)入门
- 数据结构13-排序方法之希尔排序的实例
- 数据结构14-排序方法之快速排序的实例
- javascript数据结构之双链表插入排序实例详解
- JAVA算法起步之堆排序实例
- 数据结构各种排序汇总
- javascript数据结构9-排序
- 数据结构之“堆”及推排序
- (JAVA)【实例】按照日期对List进行排序
- (JAVA)【实例】按照日期对List进行排序
- [算法导论]非比较排序及数据结构
- PAT 数据结构 08-排序3. Talent and Virtue (25)
- 数据结构与算法——冒泡排序,选择排序,直接插入排序
- 数据结构 实验六 排序
- 深入解析HashMap、HashTable及应用哈希表对数据排序的实例
- 【数据结构】非比较排序的算法实现(包括计数排序、计数排序)
- JSP内置对象综合实例:学生成绩排序