用C# 设计一个 Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生等派生类,当输入相关数据,单击不同的按钮(小学生、中学生、大学生)将分别创建不同的学生对象,并输出当前学生总人数,该学生的姓名、学生类型和平均成绩。

1.题目要求如下:

用C# 设计一个 Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生等派生类,当输入相关数据,单击不同的按钮(小学生、中学生、大学生)将分别创建不同的学生对象,并输出当前学生总人数,该学生的姓名、学生类型和平均成绩。

如下图所示,要求如下:

     (1)每个学生都要姓名和年龄。

    (2)小学生有语文、数学成绩。

 (3)中学生有语文、数学和英语成绩

 (4)大学生有必修课学分总数和选修课学分总数,不包含单科成绩。

 (5)学生类提供向外输出信息的方法。

 (6)学生类提供统计个人总成绩或总学分的方法。

   (7)通过静态成员自动记录学生总人数。

  (8)能通过构造函数完成各字段成员初始化。
 
2.来吧展示,代码如下:
using System;
using System.Windows.Forms;

namespace All_Student_4._1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Pupil pu = new Pupil(textBox1.Text, Convert.ToInt16(textBox2.Text), Convert.ToDouble(textBox3.Text), Convert.ToDouble(textBox4.Text));
                richTextBox1.Text += pu.getInfo();
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";
            }
            catch
            {
                MessageBox.Show("请输入完善的信息!");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Middle pu = new Middle(textBox1.Text, Convert.ToInt16(textBox2.Text), Convert.ToDouble(textBox3.Text), Convert.ToDouble(textBox4.Text), Convert.ToDouble(textBox5.Text));
                richTextBox1.Text += pu.getInfo();
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";
            }
            catch
            {
                MessageBox.Show("请输入完善的信息!");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                College pu = new College(textBox1.Text, Convert.ToInt16(textBox2.Text), Convert.ToDouble(textBox3.Text), Convert.ToDouble(textBox4.Text));
                richTextBox1.Text += pu.getInfo();
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";
            }
            catch
            {
                MessageBox.Show("请输入完善的信息!");
            }
        }
    }
    public abstract class Student
    {
        protected string name;
        protected int age;
        public static int number;
        public Student(string name, int age)
        {
            this.name = name;
            this.age = age;
            number++;
        }
        public string Name
        {
            get { return name; }
        }
        public virtual string type
        {
            get { return "学生"; }
        }
        public abstract double total();
        public string getInfo()
        {
            string result = string.Format("总人数:{0},姓名:{1},{2},{3}岁", number, Name, type, age);
            if (type == "小学生")
                result += string.Format(",平均成绩:{0:N2}:\n", total() / 2);
            else if (type == "中学生")
                result += string.Format(",平均成绩:{0:N2}:\n", total() / 3);
            else
                result += string.Format(",总学分为{0:N2}:\n", total());
            return result;
        }
    }
    public class Pupil : Student //派生小学生类
    {
        protected double chinese;
        protected double math;
        public Pupil(string name, int age, double chinese, double math) : base(name, age)
        {
            this.chinese = chinese;
            this.math = math;
        }
        public override string type
        {
            get { return "小学生"; }           
        }
        public override double total()
        {
            return chinese + math;
        }
    }
    public class Middle : Student //派生中学生类
    {
        protected double chinese;
        protected double math;
        protected double english;
        public Middle(string name, int age, double chinese, double math, double english) : base(name, age)
        {
            this.chinese = chinese;
            this.math = math;
            this.english = english;
        }
        public override string type
        {
            get { return "中学生"; }           
        }
        public override double total()
        {
            return chinese + math + english;
        }
    }
    public class College : Student  //派生大学生类
    {
        protected double obligatory;
        protected double elective;
        public College(string name, int age, double obligatory, double elective)
            : base(name, age)
        {
            this.obligatory = obligatory;
            this.elective = elective;
        }
        public override string type
        {
            get {return "大学生";}
        }
        public override double total()
        {
            return obligatory + elective;
        }
    }
}

 

3.运行结果如下:

依次输入不同年级学生的基本信息和各科成绩或者学分

 

 最终的三条记录展示如下:

 

 

我是小关,关注我,带你从初级入门编程
希望能帮到大家,问你们要一个赞,你们会给吗,谢谢大家
版权声明:本文版权归作者(@攻城狮小关)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~
交流加Q:1909561302
CSDN地址https://blog.csdn.net/Mumaren6/

posted @ 2021-01-06 16:04  攻城狮小关  阅读(1181)  评论(0编辑  收藏  举报