A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
using System.IO;
namespace test8
{  //编写一个WinForm程序,有一个记录了学生成绩的文本文档,每个学生成绩是一行,每行是用|分割的数据,用|分割的域分别是姓名、年龄、成绩,写程序取出成绩最高学生的姓名和成绩。提示:读取文件可以使用File.ReadAllLines()函数。
  //文件格式例子:
//张三|20|80
//李四|22|90
//王小明|30|83
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义一个结构存储学生信息
        struct Student
        {
            public string Name;
            public int Age;
            public int Score;
        }      
        private void btnhq_Click(object sender, EventArgs e)
        {

            //获取文件路径
            string path = "student.txt";
            //分行读取,返回一个string数组
            string[] studentArr = File.ReadAllLines(path, Encoding.Default);
            //New一个数组
            Student[] stu = new Student[studentArr.Length];
            //循环该数组
            for (int i = 0; i < studentArr.Length; i++)
            {
                //把每一行进行split分割
                string[] stuArr = studentArr[i].Split('|');
                stu[i].Name = stuArr[0].ToString();
                stu[i].Age = Convert.ToInt32(stuArr[1]);
                stu[i].Score = Convert.ToInt32(stuArr[2]);
            }
            //假设下标为0的那个人的成绩是最高成绩的人
            Student maxStu = stu[0];
            //循环遍历stu数组
            for (int i = 1; i < stu.Length; i++)
            {
                //如果第i个人的成绩大于最高成绩的人
                if (maxStu.Score < stu[i].Score)
                {
                    //则把第i个人赋值个maxstu
                    maxStu = stu[i];
                }
            }
            //显示出去
            this.txtName.Text = maxStu.Name;
            this.txtAge.Text = maxStu.Age.ToString();
            this.txtScore.Text = maxStu.Score.ToString();
        }

        private void btntc_Click(object sender, EventArgs e)
        {
            this.Close();   
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
重新给你加一下注释,再试着看一下:

//定义一个结构存储学生信息,这里的目的就是把与一个学生有关的信息集中存储在一起,看起来更直观。对结构不清楚的话还是专门去查一下吧
        struct Student
        {
            public string Name;
            public int Age;
            public int Score;
        }      
        private void btnhq_Click(object sender, EventArgs e)
        {

            //获取文件路径
            string path = "student.txt";
            //每一行学生的信息都是一个字符串,这里调用静态类File的ReadAllLines方法从指定的文件中读取每一行的数据并返回一个字符串数组
string[] studentArr = File.ReadAllLines(path, Encoding.Default);
            //New一个数组
            Student[] stu = new Student[studentArr.Length];
            //循环该数组
            for (int i = 0; i < studentArr.Length; i++)
            {
                //每次循环对字符串数组studentArr中的一个字符串进行操作,调用字符串实例的Split方法,对该字符串按指定字符“切割”,返回一个新的字符串数组。这个字符串数组由“切割”后的子字符串组成
string[] stuArr = studentArr[i].Split('|');
//因为学生数据的格式是“张三|20|80”,所以分割后产生三个子字符串(学生的姓名、年龄、成绩)保存在新字符串数组中,对新数组中的数据操作,依次把学生信息保存在刚才定义的学生数组中
stu[i].Name = stuArr[0].ToString();
                stu[i].Age = Convert.ToInt32(stuArr[1]);
                stu[i].Score = Convert.ToInt32(stuArr[2]);
            }
            //数组中求最大值,先声明一个Student结构型的变量maxStu
//假设下标为0的那个人的成绩是最高成绩的人
Student maxStu = stu[0];
            //循环遍历stu数组,比较的是成绩
            for (int i = 1; i < stu.Length; i++)
            {
                //如果第i个人的成绩大于最高成绩的人
                if (maxStu.Score < stu[i].Score)
                {
                    //则把第i个人赋值个maxstu,保存的是Student结构型的学生
maxStu = stu[i];
                }
            }
            //显示出去
            this.txtName.Text = maxStu.Name;
            this.txtAge.Text = maxStu.Age.ToString();
            this.txtScore.Text = maxStu.Score.ToString();
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
很简单的解决方法如下:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int max = 0; //最高分
            string name = ""; //最高分学生姓名
            string[] strs = System.IO.File.ReadAllLines("student.txt", Encoding.Default);
            foreach (string s in strs) //遍历每一行数据
            {
                string[] items = s.Split('|'); //分割每一行数据
                if (Convert.ToInt32(items[2]) > max) //如果该行的分数大于最高分变量
                {
                    max = Convert.ToInt32(items[2]); //将该分数赋值给最高分变量
                    name = items[0]; //该学生姓名赋值给姓名变量
                }
            }
            MessageBox.Show(String.Format("成绩最高学生的姓名为{0},成绩为{1}", name, max), "显示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
李青 发表于 2012-12-6 14:15
很简单的解决方法如下:
public partial class Form1 : Form
    {

谢谢教我简单的算法哦
回复 使用道具 举报
刘亚龙 发表于 2012-12-5 22:06
重新给你加一下注释,再试着看一下:

//定义一个结构存储学生信息,这里的目的就是把与一个学生有关的信 ...

谢谢详细的解释:)path, Encoding.Default);这个还不是很理解

评分

参与人数 1技术分 +2 收起 理由
张文 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马