C#面向对象

int定义的变量只能放整形数据,string定义的变量只能放字符串数据,它们是内置数据类型;

struct{},class(类)都是用户定义的数据类型,可以放任意类型数据。

用数据类型定义变量就像用模板规范的创建了一个变量,使其不能任意的存储数据,比如int类型的变量无法存储string类型的数据;

所有的数据类型(intstring,struct出来的Student)就像各种各样的模板,struct出来的Student是我们自己创造的数据类型模板。

 

class模板可以写函数,因此比struct模板更高级,class定义的变量我们叫做对象。

面向对象是一种思想,一种思路。

在面向对象编程中,类是最小单位,是类与类之间相互交互。

以class为模板创建出来的数据类型,我们叫做对象。

变量的作用范围:public(在项目所有地方都可以用),private只能在类的内部使用。

不能用class创建的对象创建数组(struct可以),可以创建集合(Array)。

每次创建对象需要用new开辟空间。struct可以自动开辟空间。

object是所有数据类型的基类:就像生物对于所有动物、植物、微生物等等。

小知识点:缩放代码:#region endregion 
蓝块:成员变量 
紫块:成员方法

编程时,右击函数名->转到定义

1.范例:通过struct数组存储、处理学生信息,按如下要求从控制台循环录入10个同学的信息跟成绩(学号,姓名,C语言分数)使用结构体  ,在控制台打印本班的总分和平均分,并打印本班最高分、最低分的学生信息,按成绩高低打印本班成绩册并排出名次,要求使用结构体,自定义函数,数组来完成本题。

复制代码
#region==学生课程题目==
        struct student
        {
            public string code;
            public string name;
            public decimal degree;
        }

        static void Main(string[] args)
        {
            Console.Write("请输入人数:");
            int n = int.Parse(Console.ReadLine().ToString());

            decimal sumfen=0, avg=0, max=0, min=0;
            student[] sumstu = new student[n];
            //根据所输入人数进行循环录入
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("请输入第"+(i+1)+"个学生的信息");
                Console.WriteLine("学号   姓名  c语言分数,以tab键分隔");
                string s = Console.ReadLine();
                string[] sarr = s.Split(new char[]{'\t'});//使用split按照分隔符进行分隔

                sumstu[i].code = sarr[0];
                sumstu[i].name = sarr[1];
                sumstu[i].degree = decimal.Parse(sarr[2]);

                sumfen += sumstu[i].degree;
            }



            Console.WriteLine("****************************************");
            Console.WriteLine("总分:"+sumfen.ToString());
            avg = sumfen / n;
            Console.WriteLine("平均分:"+avg.ToString());

            //冒泡排序
            for (int i = 0; i < n-1; i++)
            {
                for (int j = i+1; j < n; j++)
                {
                    if (sumstu[i].degree < sumstu[j].degree)
                    {
                        Student zhong = new Student();
                        zhong = sumstu[i];
                        sumstu[i] = sumstu[j];
                        sumstu[j] = zhong;
                    }
                }
            }

            Console.WriteLine("最高分:"+sumstu[0].degree.ToString());
            Console.WriteLine("最低分:"+sumstu[n-1].degree.ToString());

            Console.WriteLine("本班成绩列表如下:");
            Console.WriteLine("****************************************");
            Console.WriteLine("名次   学号  姓名  成绩");
            for (int i = 1; i <= n; i++)
            {
                Console.WriteLine(i+"\t"+sumstu[i-1].code+"\t"+sumstu[i-1].name+"\t"+sumstu[i-1].degree);
            }

                Console.ReadLine();
        }
复制代码
 

2.通过Array集合来处理学生信息

复制代码
class Program
    {
        //用Array来存储十个学生信息,(不如上题将结构体放在数组里方便,只是练习一下Array的使用)

        //定义学生信息结构体
        public struct Student
        { 
            public string sno;
            public string name;
            public int degree;
        }

        static void Main(string[] args)
        {
            //定义Student元素类型的Array,存储10个学生信息
            Array myArr = Array.CreateInstance(typeof(Student), 10);
            for (int i = 0; i < myArr.Length; i++)
            {
                Student aaa;
                Console.WriteLine("请输入第" + (i + 1) + "个学生的学号,姓名,成绩");
                aaa.sno = Console.ReadLine();
                aaa.name = Console.ReadLine();
                aaa.degree = Convert.ToInt32(Console.ReadLine());
                myArr.SetValue(aaa, i);
            }

            //分割线
            Console.WriteLine("********************************************************");

            //求总分、平均分
            int sum = 0;
            for (int i = 0; i < myArr.Length; i++)
            {
                object aaa;//定义一个对象来接收从Array中取出的元素
                aaa = myArr.GetValue(i);
                Student b = (Student)aaa;//将取出的元素进行强制转化
                sum += b.degree;
            }


            Console.WriteLine("总分为" + sum + "平均分为" + sum / myArr.Length);
            Console.WriteLine("********************************************************");


            //通过冒泡排序求最高分、最低分
            int[] a = new int[10];//用数组来存储元素的分数

            for (int i = 1; i <= myArr.Length; i++)//冒泡排序,将Array中的元素按照分数的大小排序
            {
                for (int j = 1; j <= myArr.Length - i; j++)
                {
                    object aaa, bbb;//定义两个对象来接收从Array中取出的元素
                    aaa = myArr.GetValue(j - 1);
                    bbb = myArr.GetValue(j);

                    Student aa = (Student)aaa;//将取出的元素进行强制转化
                    Student bb = (Student)bbb;

                    a[j - 1] = aa.degree;//通过比较相邻两个元素的分数的大小,判断是否交换元素的位置
                    a[j] = bb.degree;
                    if (a[j] > a[j - 1])
                    {
                        myArr.SetValue(aa, j);
                        myArr.SetValue(bb, j - 1);
                    }
                }
            }

            object zg, zd;
            zg = myArr.GetValue(0);
            Student mm = (Student)zg;
            zd = myArr.GetValue(myArr.Length - 1);
            Student n = (Student)zd;
            Console.WriteLine("最高分为" + mm.degree + "姓名" + mm.name + "学号" 
                + mm.sno + "最低分为" + n.degree + "姓名" + n.name + "学号" + n.sno);

            //分割线
            Console.WriteLine("********************************************************");

            //打印成绩表
            for (int i = 0; i < myArr.Length; i++)
            {
                object aaa;
                aaa = myArr.GetValue(i);
                Student b = (Student)aaa;

                Console.WriteLine("姓名" + b.name + "学号" + b.sno + "分数为" + b.degree);
            }

        }
    }
复制代码
bb

 

posted @ 2015-04-21 10:52  大哇塞  阅读(333)  评论(0编辑  收藏  举报