【发布时间】:2013-11-14 02:38:17
【问题描述】:
Find Top 3 Button – 处理数据以找到 3 个最高销售额 并显示这些销售人员的姓名以及他们的位置(1st、2nd、3rd), 和销售额。
我有两个列表框,我只想找到销售额最高的前 3 名销售人员,并将他们作为消息框显示给用户,分 3 行显示
应用图片: http://s17.postimg.org/6dvo3a4qn/Untitled.jpg
列表框名称:lstNames、lstTotalSales
我找到前 3 个按钮的代码是:
private void btnFindTop3_Click(object sender, EventArgs e)
{
decimal dec1HighestAmount = 0;
decimal dec2HighestAmount = 0;
decimal dec3HighestAmount = 0;
for (int Index = 0; Index < lstTotalSales.Items.Count; Index++)
{
if (Convert.ToDecimal(lstTotalSales.Items[Index]) > dec1HighestAmount)
{
dec1HighestAmount = Convert.ToDecimal(lstTotalSales.Items[Index]);
}
if (Convert.ToDecimal(lstTotalSales.Items[Index]) < dec1HighestAmount)
{
dec2HighestAmount = Convert.ToDecimal(lstTotalSales.Items[Index]);
}
if (Convert.ToDecimal(lstTotalSales.Items[Index]) < dec2HighestAmount)
{
dec2HighestAmount = Convert.ToDecimal(lstTotalSales.Items[Index]);
}
}
MessageBox.Show("Highest Amount is " + dec1HighestAmount + " and " + dec2HighestAmount + " and " + dec3HighestAmount);
}
这是我用来填充列表框的代码:
public partial class Form1 : Form
{
List<decimal> lstTotal = new List<decimal>();
public Form1()
{
InitializeComponent();
}
private void btnReadInSalesData_Click(object sender, EventArgs e)
{
openFileDialog1.FileName = "SalesNumbers.txt";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) //If and Open Dialog OK
{
StreamReader srFile = File.OpenText(openFileDialog1.FileName);
decimal decTotal = 0;
while (!srFile.EndOfStream)
{
string strline = srFile.ReadLine();
string[] strSplit = strline.Split('$');
foreach (string strSplittedOutput in strSplit)
{
if (decimal.TryParse(strSplittedOutput, out decTotal))
{
lstTotal.Add(decTotal);
lstTotalSales.Items.Add(strSplittedOutput);
}
else //else than decimals add strings
{
lstNames.Items.Add(strSplittedOutput); //add the Sales men names to lstNames listbox
}
}
} //End of while
srFile.Close(); //Close StreamReader
}
else
MessageBox.Show("User Cancel Read File Operation."); // if the user cancel the read file operation show this messagebox
// ... ??
}
// ...
}
谢谢
【问题讨论】:
-
问题是..?
-
而不是找到前 3 名,为什么不对列表进行排序呢?以防万一这个程序的用户想要找到前 5 名、前 10 名等。
-
这是消息框的输出:s22.postimg.org/tb90fml0x/Untitled2.jpg,我只是想获取 lstNames 中人名的索引号,该索引号等于显示在消息框中的前 3 个。谢谢