数据结构--排序实例
来源:互联网 发布:刷机软件下载 编辑:程序博客网 时间:2024/06/14 04:39
创建一个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();//恢复刷新
}
}
}
- 数据结构--排序实例
- 数据结构实例<一>(数组排序)入门
- 数据结构10-排序方法之直接插入排序的实例
- 数据结构11-排序方法之选择排序的实例
- 数据结构12-排序方法之冒泡排序的实例
- 数据结构13-排序方法之希尔排序的实例
- 数据结构14-排序方法之快速排序的实例
- 数据结构List实例(四):使用归并排序对单链表进行排序
- 数据结构-排序
- 数据结构----排序
- 数据结构 - 排序
- 数据结构--排序
- 数据结构排序
- 数据结构 排序
- 数据结构排序
- 数据结构-----排序
- 数据结构排序
- 数据结构--排序
- 学习dib+css
- 初学者对java的感想
- ODBC
- shell编程笔记
- 数据结构--排序(续)
- 数据结构--排序实例
- may 11,2011
- 关于冒泡算法的改进
- 误删资料并清空回收站的恢复的方法~
- HelloWorld启动软盘
- 自己的第一次QQ面试
- 第二课
- 颜色的设计
- 谷歌翻译和我写的英语文章相比真是被eclipse了啊