实验三 - 类的重载继承和多态

更新时间:2023-12-21 13:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验报告 课程名称 实验名称 学生学号 实验目的: 1.编写一个单一继承的C#程序 2.编写一个抽象类,并用一个类继承这个抽象类 实验要求: 1.认真阅读、掌握和本实验相关的教材内容。 2.设计并编写代码完成题目要求的任务。 3.撰写实验报告。 实验内容与步骤: 1.在学校教务管理系统中,有三种用户,一种是系统管理员,一种是学生,一种是教师,编写C#类实现该继承关系。系统管理员/学生/教师都有用户名和密码属性,并都有Login和显示自身信息的方法,另外,学生拥有班级和成绩两个特殊属性以及查询成绩这一方法,教师拥有部门和工资两个特殊属性以及查询工资这一方法,系统管理员可以添加学生和教师信息。由于教师和学生个人信息不同,所以学生和教师重载基类的DisplayInfo方法。(本例和教材一致,再次出现的目的是通过反复训练,理解继承的作用) 1)类的继承关系可以表示如下: 面向对象程序设计 实验三、类的重载继承和多态 姓名 日期 班级 2015.10.23 2)创建控制台应用程序,命名为SchoolManagement 3)创建名为User的基类,基类定义了用户名和密码属性,以及Login和DisplayInfo方法 using System; using System.Collections.Generic; using System.Text; namespace SchoolManagement { public class User { private string userName;//用户名 public string Name { get { return userName; } set { userName = value; } } private string password;//密码 public string Password { get { return password; } set { password = value; } } private string userType;//用户类型 public string UserType { get { return userType; } set { userType = value; } } public void Login() { if (userName.Equals(\) && password.Equals(\)) { DisplayPersonInfo(); } } public virtual void DisplayPersonInfo() //注意virtual关键字 { Console.WriteLine(\姓名:{0}\, userName); Console.WriteLine(\用户类型:{0}\, userType); } } } 2)创建名为Student的派生类,具备班级和成绩两个特殊属性,以及查询成绩的特殊方法,覆盖基类的显示个人信息方法 using System; using System.Collections.Generic; using System.Text; namespace SchoolManagement { public class Student : User { private string classID; public string ClassID { get { return classID; } set { classID = value; } } private float stuScore; public float StuScore { get { return stuScore; } set { stuScore = value; } } public Student() { UserType = \学生\; } public override void DisplayPersonInfo() { base.DisplayPersonInfo(); Console.WriteLine(\班级:{0}\, classID ); } public void CheckScore() { Console.WriteLine(\成绩:{0}\, this.stuScore); } } } 3)创建名为Teacher的派生类,具备部门和工资两个特殊属性,以及查询工资的特殊方法,覆盖基类的显示个人信息方法。 using System; using System.Collections.Generic; using System.Text; namespace SchoolManagement { public class Teacher : User { private string department;//部门 public string Department { get { return department; } set { department = value; } } private float salary;//工资 public float Salary { get { return salary; } set { salary = value; } } public Teacher() { UserType = \教师\; } public override void DisplayPersonInfo() { base.DisplayPersonInfo(); Console.WriteLine(\部门:\ + this.department); } public void checkSalary() { Console.WriteLine(\工资:\ + this.salary); } } } 4)创建名为SysManager的派生类,具备插入学生信息和插入教师信息两个方法 using System; using System.Collections.Generic; using System.Text; namespace SchoolManagement { public class SysManager : User { public SysManager() { UserType = \管理员\; } public Student InsertStudent() { Student stu = new Student(); stu.Name = \张郭郭\; stu.UserType = \教师\; stu.ClassID = \; stu.StuScore = 70; return stu; } public Teacher InsertTeacher() { Teacher teacher = new Teacher(); teacher.Name = \李沙沙\; teacher.Department = \计算机系\; teacher.Salary = 5000; return teacher; } } } 5)在Program.cs的Main方法中调用以上类,测试效果如下: using System; using System.Collections.Generic; using System.Text; namespace SchoolManagement { class Program { static void Main(string[] args) { //系统管理员登录 SysManager sys = new SysManager(); sys.Name = \; sys.Password = \; sys.Login(); Console.WriteLine(\); //系统管理员录入学生和教师信息 Teacher teacher = sys.InsertTeacher(); Student stu = sys.InsertStudent(); //显示教师信息,查询工资 teacher.DisplayPersonInfo();

teacher.checkSalary(); Console.WriteLine(\); //显示学生信息,查询成绩 stu.DisplayPersonInfo(); stu.CheckScore(); Console.WriteLine(\); } } } 6)最终运行效果如下 2.建立名为Shape的基类,要求是抽象类,在该类中提供一个public abstract double Area()的抽象方法,建立名为Circle的派生类,包括半径属性,实现面积计算,再建立一个名为Rectangle的派生类,包括长和宽两个属性,实现面积的计算。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GetArea { class Program { static void Main(string[] args) { Console.WriteLine(\请?输o?入¨?圆2的ì?半??径?:\); double r=double.Parse (Console.ReadLine ()); shape s = new Circle(r); Console.WriteLine(\圆2的ì?面?积y是o?:{0}\\n\,s.Area()); Console.WriteLine(\请?输o?入¨?矩?形?的ì?长?è和¨a宽¨a:\); Console.Write(\长?è:\); double a=double.Parse (Console.ReadLine ()); Console.Write(\宽¨a:\); double b=double.Parse (Console.ReadLine ()); shape f = new Rectangle(a, b); Console.WriteLine(\矩?形?的ì?面?积y是o?:{0}\,f.Area()); Console .ReadLine (); } public abstract class shape { public abstract double Area(); } public class Circle : shape { private double r; public double R { get { return r; } set { r = value; } } public Circle(double r) { this.r = r; } public override double Area() { return Math.PI * r * r; } } public class Rectangle : shape { private double side; public double Side { get { return side; } set { side = value; } } private double high; public double High { get { return high; } set { high = value; } } public Rectangle(double side, double high) { this.side = side; this.high = high; } public override double Area() { return side * high; } } } } 最终运行效果如下 实验总结(结论或问题分析): 本次实验我对基类、抽象类、派生类有了近一步的了解,知道了怎么建立这些类,还有在抽象类中创建抽象方法。所以本次实验我学会了许多。 实验成绩 任课教师签名 郭俊恩

本文来源:https://www.bwwdw.com/article/8z85.html

Top