班级学生总成绩和平均成绩计算

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test9
{
    class Program
    {
        //  班级学生总成绩和平均成绩计算:

        //1)让用户输入班级人数

        //2)让用户依次输入该班级每个学员的姓名和成绩(0-100之间)

        //3)按成绩进行排序,按成绩由高到低依次输出学生的姓名和成绩


        static void Main(string[] args)
        {
            //提示用户输入
            Console.WriteLine("请输入班级人数:");
            //定义接收总人数变量
            int Zong = 0;
            //变量,控制输入正确后下一步
            bool b = true;
            while (b)
            {
                //判断输入是否正确,错误抛出异常
                try
                {
                    Zong = Convert.ToInt32(Console.ReadLine());
                    b = false;
                }
                catch (Exception)
                {
                    //出现异常提示重新输入
                    Console.WriteLine("输入错误!重新输入");
                    b = true;
                }
            }
            //定义存放成绩的数组Nums和存放名字的数组Names
            string[] Names = new string[Zong];
            int[] Nums = new int[Zong];
            //循环让用户依次输入该班级每个学员的姓名和成绩
            for (int i = 0; i < Zong; i++)
            {
                Console.WriteLine("请输入第{0}个人的姓名:", i + 1);
                Names[i] = Console.ReadLine();
                Console.WriteLine("请输入{0}的分数:", Names[i]);
                string N = Console.ReadLine();
                //对成绩进行处理
                Nums[i] = TryNum(N);

            }
            //对成绩进行排序
            Nums = PaiXu(Nums,ref Names);
            //循环输出排序好的数组
            for (int i = 0; i < Nums.Length; i++)
            {
                Console.WriteLine("第{0}名是:{1},分数:{2}",i+1,Names[i],Nums[i]);
            }
            Console.ReadKey();
        }
        /// <summary>
        /// 处理用户输入的成绩
        /// </summary>
        /// <param name="n">用户输入数据</param>
        /// <returns>返回正确值</returns>
        static int TryNum(string n)
        {
            int Num = 0;
            //处理用户的输入
            try
            {
                //转换,出错进入异常。正确继续
                Num = Convert.ToInt32(n);
                //判断数字是否大于0小于100
                if (0 > Num || Num > 100)
                {
                    //大于0小于100抛出错误
                    throw new Exception("大于0小于100");

                }
            }
            catch (Exception e)
            {
                //异常提示
                Console.WriteLine("输入错误请重新输入:"+e);
                //递归,继续执行
                TryNum(Console.ReadLine());

            }
            return Num;

        }
        /// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="array">分数数组</param>
        /// <param name="names">姓名数组</param>
        /// <returns>排序后的数组</returns>
        static int[] PaiXu(int[] array,ref string[] names)
        {
            int length = array.Length - 1;
            bool isExchanged = false;
            for (int i = 0; i < length; i++)
            {
                isExchanged = false;
                for (int j = length; j > i; j--)
                {
                    if (array[j] > array[j - 1])
                    {
                        int temp = array[j];
                        array[j] = array[j - 1];
                        array[j - 1] = temp;
                        string t = names[j];
                        names[j] = names[j - 1];
                        names[j - 1] = t;
                        isExchanged = true;
                    }
                }
                if (!isExchanged)//一遍比较过后如果没有进行交换则退出循环
                    break;
            }
            return array;
        }
    }
}

 

posted @ 2013-04-30 13:52  叶亮  阅读(1308)  评论(0编辑  收藏  举报