




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#.net实验报告 姓名: 王璐 学号: 日期: 2016/04/24 实验名称: 面向对象编程 成绩: 实验一 类和对象编程1、 实验目的及要求【实验目的】1.如何创建类和对象。2.如何为定义的类编写相应的方法。3.如何通过属性访问对象中的数据【实验要求】1.写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验日志和上交程序。 二、实验环境Windows 7操作系统,Visual Studio 2005及以上版本三、实验内容(题目、源代码、关键代码解释、运行结果、实验总结)【实验1-1-1】编写一个控制台应用程序,定义并使用一个时间类,该类包含时、分、秒字段与属性,具有将时间增加1秒、1分和1小时的方法,具有分别显示时、分、秒和同时显示时分秒的方法。1、 源代码:using System;public class Time /字段 private int hour; private int minite; private int second; /属性 public int Hour get return hour; set hour=value; public int Minite get return minite; set minite=value; public int Second get return second; set second=value; /方法 /加时方法 public void SAdd() second+; if(second60) minite+; second=second%60; if(minite60) hour+; minite=minite%60; if(hour24) hour=hour%24; public void MAdd() minite+; if(minite60) hour+; minite=minite%60; if(hour24) hour=hour%24; public void HAdd() hour+; if(hour24) hour=hour%24; /输出方法 public void HPrint() Console.WriteLine(现在时为:0,hour); public void MPrint() Console.WriteLine(现在分为:0,minite); public void SPrint() Console.WriteLine(现在秒为:0,second); public void TimePrint() Console.WriteLine(得出准确时间为:0时1分2秒,hour,minite,second); /主函数public class Text public static void Main() Time time=new Time(); Console.WriteLine(获取系统时间中.); time.Hour=DateTime.Now.Hour; time.Minite=DateTime.Now.Minute;/刚刚发现前面的minute全写成minute了.英语不太. time.Second=DateTime.Now.Second; time.TimePrint(); Console.WriteLine(现在加一秒功能:); time.SAdd(); time.TimePrint(); Console.WriteLine(现在加一分功能:); time.MAdd(); time.TimePrint(); Console.WriteLine(现在加一时功能:); time.HAdd(); time.TimePrint(); Console.WriteLine(现在依次调用三个方法输出时分秒:); time.HPrint(); time.MPrint(); time.SPrint(); 2、关键代码解释:1)时钟循环需要取模运算,如第25时为25%24=1,即1时;另外还要注意秒的增加带给分、时的影响等。2)加时功能直接使用time+,并注意判断对其他时间的影响3)获取时间采用了DataTime里的函数,直接获取系统时间。3、运行结果4、 实验总结 结合实践明白了属性的用法与含义,并且通过百度了解了怎么从系统中读取现在的时间。【实验1-1-2】编写一个控制台应用程序,程序中有两个类定义,一个是创建程序时系统自动创建的类Class1,一个是用户自定义的Student类,要求该类包含私有字段:学号(字符串)、姓名(字符串)和性别(字符),具有三个属性:学号(读写)、姓名(只读)、性别(读写),具有有参构造方法、具有同时显示学生个人信息的方法。在Class1中完成以下功能:1)从键盘上输入一个学生的个人信息(学号、姓名、性别)。2)修改该学生的学号和性别。3)打印修改前后该学生的个人信息。1、 源代码using System;public class Student /字段 private string num; private string name; private char sex; private string oldnum; private char oldsex; /属性 public string Num get return num; set num=value; public string Name get return name; set name=value; public char Sex get return sex; set sex=value; /方法 public Student(string c,string n,char s) num=c; name=n; sex=s; public void PrintIn() Console.WriteLine(学号); num=Console.ReadLine(); Console.WriteLine(姓名); name=Console.ReadLine(); Console.WriteLine(性别); sex=Convert.ToChar(Console.ReadLine(); public void Revise() Console.WriteLine(请对输入的学号重新进行编辑:); oldnum=num; num = Console.ReadLine(); Console.WriteLine(请对输入的性别重新进行编辑:); oldsex=sex; sex =Convert.ToChar(Console.ReadLine(); public void PrintOut() Console.WriteLine(修改前的信息为:学号:0,姓名:1,性别:2,oldnum,name,oldsex); Console.WriteLine(修改后的信息为:学号:0,姓名:1,性别:2,num,name,sex); public class class1 public static void Main() Console.WriteLine(在本信息中男为Q女为N); Student student1 = new Student(123, 王兰, N); student1.PrintIn(); student1.Revise(); student1.PrintOut(); 2、 关键代码解释 1) 为了能同时输出修改前修改后的名称,引入了字段oldnum,oldsex,将 修改前的传给这两个值,并将新值覆盖原字段num和sex。3、实验结果:4、 实验分析:虽然设置了属性,但没用实际用到,感觉可能没有编好。另外为了满足第3个实验条件,同时输出,所以引入了新字段,不知道是否符合要求。【实验1-1-3】编写一个控制台应用程序,程序中有两个类定义,一个是创建程序时系统自动创建的类Class1,一个是用户自定义的Student类,要求该类包含私有实例字段:学号(字符串)、姓名(字符串)、成绩(double)以及私有静态字段:学生人数、学生总成绩、学生平均成绩,具有有参构造方法、显示学生个人信息的公有实例方法和显示学生人数、总成绩及平均成绩的公有静态方法。在Class1类的Main方法中完成以下功能:1)从键盘上依次输入三个学生的个人信息(学号、姓名、成绩)。2)统计全部学生的人数、总成绩和平均成绩。3)打印学生们的个人信息及全部学生的人数、总成绩和平均成绩。 1、源代码using System;public class Student /字段 private string num; private string name; private double score; public static int count; public static double addscore; public static double average; /方法 public Student() count+; public void PrintIn() Console.WriteLine(请输入一位同学的信息:); Console.WriteLine(学号:); num = Console.ReadLine(); Console.WriteLine(姓名:); name = Console.ReadLine(); Console.WriteLine(成绩:); score =Convert.ToDouble(Console.ReadLine(); addscore += score; public static void Average() average = addscore / count; public void Print1() Console.WriteLine(学号:0,姓名1,成绩2,num, name, score); public static void Print2() Console.WriteLine(输入的学生总人数为:0,count); Console.WriteLine(同学们的总成绩为:0,addscore); Console.WriteLine(同学们的平均成绩为:0,average); public class class1 public static void Main() Console.WriteLine(在本信息记录中,性别男为Q,女为N); Student student1 = new Student(); student1.PrintIn(); Student student2 = new Student(); student2.PrintIn(); Student student3 = new Student(); student3.PrintIn(); Student.Average(); Console.WriteLine(同学们的信息为:); student1.Print1(); student2.Print1(); student3.Print1(); Student.Print2(); /是否可以建立类数组? 2、关键代码解释 有关关键代码的解释后面的实验都直接写在代码的/备注里了。 3、实验结果4、 实验总结: 学会了在readline里面使用类型转换。认为也许可以使用类的数组来定义这三个学生,但没有实现。实验二 继承与多态编程一、实验目的及要求【实验目的】1.理解继承的含义,掌握派生类的定义方法和实现;2.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。3.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;4.编写体现类多态性(成员方法重载,构造方法重载)的程序。【实验要求】1.写出程序,并调试程序,要给出测试数据和实验结果。2.整理上机步骤,总结经验和体会。3.完成实验日志和上交程序。 二、实验环境Windows 7操作系统,Visual Studio 2005及以上版本三、实验内容(题目、源代码、关键代码解释、运行结果、实验总结)【实验1-2-1】 创建一个描述图书信息的类并测试。类中应保存有图书的书号、标题、作者、出版社、价格等信息。1)定义图书类Book,Book类中包含isbn(书号)、title(标题)、author(作者)、press(出版社)、price(价格)等私有字段。由于对一本书来说,书号是唯一的,因此,isbn字段应声明为只读的。2)为Book类中的每个字段定义相应的属性,由于isbn字段只读的,其相应属性也应该是只读的。3)为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值,另一个构造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初始化时,价格取0,除书号的其他信息取“未知”。4)为Book类定义方法Show,Show方法用于显示图书的所有信息。5)编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建Book对象。1、 源代码using System;public class Book /定义私有字段 private readonly string isbn; private string title; private string author; private string press; private double price; /定义属性 public string Isbn get return isbn; public string Title get return title; set Title = value; public string Author get return author; set Author = value; public string Press get return press; set Press = value; public double Price get return price; set Price = value; /定义构造函数 public Book(string isbn, string title, string author, string press, double price) this.isbn = isbn; this.title = title; this.author = author; this.press = press; this.price = price; /继承第一个构造函数 public Book(string isbn):this(isbn,未知,未知,未知,0) public void Show() Console.WriteLine(这本书的信息如下:); Console.WriteLine(书号:0, isbn); Console.WriteLine(标题:0, title); Console.WriteLine(作者:0, author); Console.WriteLine(出版社:0, press); Console.WriteLine(价格:0, price); class BookTest public static void Main() Console.WriteLine(请按依次输入第一个书本信息,依次为书号,标题,作者,出版社,价格); Book book1 = new Book(Convert.ToString(Console.ReadLine(),Convert.ToString(Console.ReadLine(),Convert.ToString(Console.ReadLine(),Convert.ToString(Console.ReadLine(),Convert.ToDouble(Console.ReadLine(); book1.Show(); Console.WriteLine(请输入第二个书本的书号); Book book2 = new Book(Convert.ToString(Console.ReadLine(); book2.Show(); 2、 实验结果3、 实验总结:学会了用构造函数继承构造函数,另外经过查阅还明白了this指针可以代替对象来调用对象的字段。还实践了可以在构造函数调用时调用输入函数。【实验1-2-2】 编写一个程序计算出球、圆柱和圆锥的表面积和体积。1)定义一个基类圆,至少含有一个数据成员:半径;2)定义基类的派生类:球、圆柱、圆锥,都含有求体积函数,可以都在构造函数中实现,也可以将求体积和输出写在一个函数中,或者写在两个函数中,请比较使用。3)定义主函数,求球、圆柱、圆锥的和体积。3、设计一个图书卡片类Card,用来保存图书馆卡片分类记录。1)这个类的成员包括书名、作者、馆藏数量。2)至少提供两个方法,store书的入库处理,show显示图书信息。3)程序运行时,可以从控制台上输入需要入库图书的总量,根据这个总数创建Card对象数组,然后输入数据。4)可以选择按书名、作者、入库量进行排序。1、 源代码using System;public class Circle /定义基类圆 protected double R; public const double PI=3.14;/定义继承类球,继承圆public class Ball:Circle /定义表面积、体积字段 protected double Vol; protected double Area; /构造函数 public Ball(double r) R=r; /求表面积和体积的方法。采用先求表面积和体积再输出 public double GetArea() Area=4*PI*R*R; return Area; public double GetVol() Vol=(4.0/3.0)*PI*R*R*R; return Vol; public void Print() Console.WriteLine(球的表面积为:0,Area); Console.WriteLine(球的体积为:0,Vol); /定义继承类圆柱,继承圆,比较两种输出体积的方法(圆锥采用不继承圆,直接继承圆柱的做法)public class Cyl:Circle /定义表面积、体积字段 protected double Vol; protected double Area; protected double h; /构造函数 public Cyl() public Cyl(double r,double h) R=r; this.h=h; /采用直接输出体积和表面积 public virtual void GetArea() Area=h*2*PI*R+2*PI*R*R; Console.WriteLine(圆柱的表面积为:0,Area); public virtual void GetVol() Vol=h*PI*R*R; Console.WriteLine(圆柱的体积为:0,Vol); public class Cone:Cyl /字段已经定义,构造函数不继承 public Cone(double r,double h) R=r; this.h=h; /重写基类中的表面积、体积函数 public override void GetArea() Area=PI*R*R+0.5*2*PI*R*System.Math.Sqrt(R*R+h*h); Console.WriteLine(圆锥的表面积为:0,Area); public override void GetVol() Vol = (1.0 / 3.0) * h * PI * R * R; Console.WriteLine(圆锥的体积为:0,Vol); class Text public static void Main() Console.WriteLine(请输入球的半径:); double count = Convert.ToDouble(Console.ReadLine(); Ball ball = new Ball(count); double A=ball.GetArea(); double V=ball.GetVol(); ball.Print(); Console.WriteLine(请按行依次输入圆柱的半径、高); Cyl cyl = new Cyl(Convert.ToDouble(Console.ReadLine(), Convert.ToDouble(Console.ReadLine(); cyl.GetArea(); cyl.GetVol();/相比较两种输出方法,直接输出法更简单。 Console.WriteLine(请按行依次输入圆锥的半径、高); Cone cone = new Cone(Convert.ToDouble(Console.ReadLine(), Convert.ToDouble(Console.ReadLine(); cone.GetArea(); cone.GetVol(); 2、实验结果3、 实验总结在计算圆锥表面积时学会了System.Math.Sqrt()的使用方法没有采用0个参数的重载:说明参数不能为空,错误出在把Convert.ToDouble (Console.ReadLine()括号里和括号外的内容写反了另外很粗心在WriteLine里里面忘记加0,编译没出错但抛出了异常,又找了半天才修改好。【实验1-2-3】 设计一个图书卡片类Card,用来保存图书馆卡片分类记录。1)这个类的成员包括书名、作者、馆藏数量。2)至少提供两个方法,store书的入库处理,show显示图书信息。3)程序运行时,可以从控制台上输入需要入库图书的总量,根据这个总数创建Card对象数组,然后输入数据。4)可以选择按书名、作者、入库量进行排序。1、 源程序using System;public class Library public static int Num=0; public static void Show() Console.WriteLine(图书馆共入库了0本书, Num); public class Card private string name; public string Name get return name; private string author; public string Author get return author; private int num=0; public int Num get return num; public void Store() Console.WriteLine(输入要入库的书信息,包括书名、作者、入库量); =Convert.ToString(Console.ReadLine(); this.author = Convert.ToString(Console.ReadLine(); this.num=Convert.ToInt32(Console.ReadLine(); Library.Num+=num; public void Show() Console.WriteLine(图书信息如下:); Console.WriteLine(书名:0,作者:1,馆藏数量2,name,author,num); public class Text public static void Main() int i; Card temp; Card card = new Card3; for (i = 0; i 3; i+) cardi = new Card();/学会了定义对象的数组,应该先创建数组,再依次对里面的所有成员进行创建。 cardi.Store(); Library.Show(); Console.WriteLine(请选择按什么排序:、书名2、作者3、存库量); int a = Convert.ToInt32(Console.ReadLine(); switch (a) case 1: Console.WriteLine(按书名从小到大排序); for (i = 0; i 2; i+) for (int j = i; j 0) temp = cardi; cardi = cardi + 1; cardi + 1 = temp; for (i = 0; i 3; i+) cardi.Show(); break; case 2: Console.WriteLine(按作者从小到大排序); for (i = 0; i 2; i+) for (int j = i; j 0)/学会了比较函数的使用 temp = cardi; cardi = cardi + 1; cardi + 1 = temp; for (i = 0; i 3; i+) cardi.Show(); break; case 3: Console.WriteLine(按存库量从小到大排序); for (i = 0; i 2; i+) for (int j = i; j 0) temp = cardi; cardi = cardi + 1; cardi + 1 = temp; for (i = 0; i 3; i+) cardi.Show(); break; default: Console.WriteLine(输入错误。); break; 2、实验结果(实验结果检测时选择了用2号-按作者从小到大排序)3、 实验总结 学会了定义对象的数组,应该先创建数组,再依次对里面的所有成员进行创建。 经过查阅学会了比较函数的使用。类的多态性练习【实验1-2-4】 设计雇员系统。1)定义雇员基类,共同的属性,姓名、地址和出生日期;2)派生类:程序员,秘书,高层管理,清洁工,他们有不同的工资算法,其中高级主管和程序员采用底薪加提成的方式,高级主管和程序员的底薪分别是5000元和2000元 ,秘书和清洁工采用工资的方式,工资分别是3000和1000,以多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 醉驾教育与预防措施检讨书范文
- 春夏季传染病防控要点
- 脑出血疾病护理规范要点
- 十年(2014-2023)高考生物真题分项汇编(全国)专题03 物质运输(含答案或解析)
- 十年(2014-2023)高考化学真题分项汇编(全国)专题38 物质结构综合-以非金属元素为主体(含答案或解析)
- 副经理转正能力提升培训
- 医院消防培训课件
- 环卫行业工资支付及保障措施分析
- 六年级英语课堂活动设计计划
- 联大学堂《微机控制技术(青岛理工大学)》题库附答案
- 2025-2030中国采耳行业市场深度调研及竞争格局与投资前景研究报告
- 生物制剂的应用及护理
- 《智能网联汽车智能座舱技术》考试复习题库(含答案)
- 2025春新版四年级下册语文 【期末复习:文言文专项考查】
- 2024年上海青浦区下半年区管企业统一招聘30人笔试参考题库附带答案详解
- 2025年上海青浦区高三语文二模试题卷附答案解析
- 存款保险知识培训总结
- 2025房地产经纪人协理-《房地产经纪综合能力》考前通关必练题库-含答案
- 陪诊师考试模拟测试及试题答案
- 中国车路云一体化发展研究报告
- 超星尔雅学习通《公文写作规范(黑龙江大学)》2025章节测试附答案
评论
0/150
提交评论