面向过程思维下的年级排名 C#

  • 面向过程思维下的年级排名 C#已关闭评论
  • 170 次浏览
  • A+
所属分类:.NET技术
摘要

 </font>@[TOC](面向过程思维下的年级排名)
<hr style=” border:solid; width:100px; height:1px;” color=#000000 size=1″>

 

</font>

@[TOC](面向过程思维下的年级排名)

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

# 前言

<font color=#999AAA >提示:面向过程,面向对象,相信很多刚学编程的人都听过这两个词。面向对象定义网上铺天盖地,一个个例子也很生动,但要是联系到代码实例中,可能也处理不是很好,下面是一个简单的例子,希望大家体会。如有不当之处,还望大家指导。</font>

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

<font color=#999AAA >提示:以下是本篇文章正文内容,下面案例可供参考

# 一、面向过程是什么?

<font color=#999AAA >简单的举个例子,是如何将大象装进冰箱

为了解决这个问题,我们采用两种方案,一种是面向过程方案,另一种是面向对象方案

***面向过程:***

总共分三个过程,第一个过程:冰箱门打开(关着门的冰箱) 返回值是打开门的冰箱

第二个过程:大象装进去(打开门的冰箱) 返回值是打开着门,装着大象的冰箱

第三个过程:冰箱门关上(打开着门,装着大象的冰箱) 返回值关着门的装着大象的冰箱

***面向对象:***

总共分三个动作,(每个动作都有一个对象去执行)

第一个动作:冰箱.开门()

第二个动作:冰箱.装进(大象)

第三个动作:冰箱.关门()

或者是链式调用冰箱.开门().装进(大象).关门()

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

## 运用到实例中呢?
再举个例子,现在期末考试下来了,年级一共8个班,一个班50到56人若干不等。有三门考试科目,语文数学英语,分数也是随机不定,请写出年级大榜,按照三科总成绩进行排名,并奖励前十名同学。下面试着用面向对象的思想去写出代码。

# 二、代码
## 1.学生类
<font color=#999AAA >代码如下(示例):

```c
namespace ConsoleApplication1
{
class Student
{
public string Name { get; set; }
public double English { get; set; }
public double Chinese { get; set; }
public double Maths { get; set; }
public double SumScore { get; set; }
public double Average
{
get { return Math.Round(SumScore / 3, 2); }
}
public Student(string names)
{
this.Name = names;
}
public Student()
{
}
}
}
```
## 2.班级类

<font color=#999AAA >代码如下(示例):

 

```c
class Banji
{
public string BanjiName { get; set; } //班级名
public int BanjiNumber { get; set; } //班级学生数量
public List<Student> Students { get; set; } //学生集合
public Teacher[] Ttype = new Teacher[3];
public double AvgTotal
{
get { return Students.Average(p => p.SumScore); }
}
public double AvgChinese
{
get { return Students.Average(p => p.Chinese); }
}
public double AvgMath
{
get { return Students.Average(p => p.Maths); }
}
public double AvgEnglish
{
get { return Students.Average(p => p.English); }
}
public List<Student> UseInit()
{
Init a = new Init();
var stu = a.Students;
return stu;
}
}
```
## 3.初始化

<font color=#999AAA >代码如下(示例):

 

```c
/// <summary>
/// 实例化各种类
/// </summary>
class Init
{
public List<Student> Students { get; set; } //学生集合
public List<Banji> Banjilist { get; set; } //班级集合
public void InitBanji() // 初始化班级,班级只管班级自己的事,班级名,班级号,班级人数
{
Banjilist = new List<Banji>();
Random r = new Random(DateTime.Now.Millisecond);
for (int j = 0; j < 8; j++)
{
Banji bj = new Banji();
bj.BanjiNumber = r.Next(50, 56);
bj.BanjiName = "C" + (j + 1).ToString();
this.Banjilist.Add(bj); //前面是个空的集合,后面方法无效
}
}

public void InitStudent() //初始化学生,学生只管学生自己的事,学生姓名,语数英分数,总分,平均分
{
Students = new List<Student>();
Random r = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < 8; i++) //外层是班级,八个班
{
Banjilist[i].Students = new List<Student>();
for (int j = 0; j < Banjilist[i].BanjiNumber; j++) //Banjilist里面放着banjinumber数量,一个班的人数
{
Student student = new Student(); //new 一个实例
student.Maths = r.Next(70, 150);
student.English = r.Next(80, 150);
student.Chinese = r.Next(90, 145);
student.SumScore = student.Maths + student.English + student.Chinese;
student.Name = ("C" + (i + 1).ToString()) + (j + 1).ToString().PadLeft(3, '0'); //学生名字是 本班名字+在班级第几个(如c101,c102)
Banjilist[i].Students.Add(student); //加入到数组里
Students.Add(student);
}
}
}
}
```
## 4 方法
```c
public static void Student_Sort()
{
Init Is = new Init(); //实例化一个对象
//var LS = Is.InitStudent(); //调用Init里的InitBanji方法
Is.InitBanji();
Is.InitStudent();
#region
//for (int i = 0; i < banjilist.Count; i++) //班级个数
//{
// foreach (var csl in banjilist[i].Students) //班级里的学生数量
// {
// Stotal.Add(csl);
// }
//}
#endregion
var stuOrder = Is.Students.OrderByDescending(p => p.SumScore).ToList();
for (int i = 0; i < stuOrder.Count; i++)
{
Console.WriteLine("排名:{0},姓名:{1},成绩:{2}", i + 1, stuOrder[i].Name, stuOrder[i].SumScore);
}
Console.ReadKey();
Console.WriteLine("表扬以下前十的学生:");
var topten = (from a in Is.Students orderby a.SumScore descending select a).Take(10).ToList();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(topten[i].Name);
}
Console.ReadKey();
}
```

<font color=#999AAA >最后在Main函数里调用方法
效果如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210610193224757.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMyODM1NQ==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210610193251179.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMyODM1NQ==,size_16,color_FFFFFF,t_70)

这是实例中的一个功能,所以还有别的数据...
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

# 总结
<font color=#999AAA >这个例子里,面向对象思想,对于学生来说,就考虑学生自己的事,什么是自己的事,叫什么(名字)学号,考了哪几门,总分多少就可以了;以至于一个班里有多少个学生,我是哪个班的不是学生该管的事。相应的班级也是,考虑到遍历年级所有学生时,要把学生集合加到班级类里面去,以上。