辽宁工业大学软件学院
《C#网络编程技术》综合实验报告一
题目: 面向对象程序设计
院(系): 软件学院
专业班级: 软件工程101
学 号: 101301011
学生姓名: 张 洋
指导教师: 翟宝峰
教师职称: 副教授
起止时间:2011.8.22-2011.9.5
面向对象程序设计
一、问题描述
本次实验是用面向对象的程序设计思想来编写一个简单的加减乘除四则运算的小计算器,本次实验是本着面向对象的思想,通过计算器这个小程序来体现面向对象的三大特性:封装,继承和多态。
虽然用c 这样的语言也能编出加减乘除的计算器功能,但在增加其功能的多样性时,往往为了为了增加几个功能,整段程序已经被改得面目全非了,试想一下,倘若还要增加取正弦,余弦等三角函数功能,那么整段程序几乎又要重写一遍,这对于程序员来说,就是一场灾难!不利于开发,不利于维护,不利于升级。所以还是要采用面向对象的程序设计。
二、问题分析
数学的本质就是对实际事物进行抽象;同样,写一段程序,我们得先想清楚,整个业务中有哪些是重复的,哪些是有相同点的,哪些是有关系的。
整个加减乘除的计算器程序可以分成以下四个模块
1、界面(提示用户输入)
2、用户输入判断
3、计算
4、输出
面向过程的思路很严格地按照这四个功能模块至顶向下写了出来。这样就造成了一个问题,它们之间的关联太大了,如果其中有一个模块出了问题,其他的模块也要进行改动。我们尝试用类(class )来封装每个模块。以下的内容就需要读者有一些面向对象的基础了。对于加减乘除这些计算方法,每个方法,我们最好都写成一个单独的类,使用户无法直接访问类中的计算方法——这就体现了封装的特性。
与此同时,这些加减乘除类都需要两个参数,区别的地方也仅仅只是两个数之间的运算符号的不同,所以,我们可以将他们之间相同的部分提取出来,让加减乘除类继承自一个计算类,实现代码的可扩展。
三、程序实现
1. 程序一般包括以下几部分:
•名称空间的引用:使用using 关键字指明引用的名称空间。
•名称空间的声明:使用namespace 关键字声明名称空间。
•类:使用class 关键字声明类。
•Main 方法:Main 方法是C# 程序的入口。
2. 类中包含了程序所要用到的数据和所要执行的方法的定义。每个类中可以有:
(1)变量声明
(2)构造函数
(3)方法
(4)属性
(5)事件
3. 一个文件中可以有1个或者多个类。
4. 所有语句都以分号";" 结束。
先调用必不可少的各种包,然后创建第一个类,有各种属性变量并有个执行加法运算的函数,创建第二个类,继承第一个类,有个执行减法运算的方法,此方法覆盖父类中执行加法运算的方法,有个比较大小的方法并创建主函数。
四、程序实现
主要代码设计如下:
using System;
namespace Account
{
class Count
{
public int a;
public int b;
public Count(int a,int b) //计算类的构造函数
{
this.a=a;
this.b=b;
}
public virtual double GetResult()
{
double result=0;
return result
}
}
class CountPlus:Count //加法类
{
public override double GetResult() //重写父类中的GetResult 函数
{
double result=0;
result=a+b;
return result;
}
}
class CountMinors:Count //减法类
{
public override double GetResult()
{
double result=0;
result=a-b;
return result;
}
}
class CountMul:Count //乘法类
{
public override double GetResult()
{
double result=0;
result=a*b;
return result;
}
}
class CountDiv:Count //除法类
{
public override double GetResult()
{
double result=0;
result=a/b;
return result;
}
}
class Program
static public void Main(string[] arg)
{
int a;
int b;
string flag;
Console.Write("请输入a");
a = Convert.ToInt32(Console.ReadLine());
Console.Write("请输入b");
b = Convert.ToInt32(Console.ReadLine());
Console.Write("请输入运算符号(+,-,*,/)");
flag=Console.ReadLine(); //C#
的读取函数,相当于C 语言的scanf()
switch(flag) //C#的switch 允许对字符串进行判断
{
case "+":
CountPlus cp = new CountPlus(a,b); //
一个对象,并且把a ,b 作为参数传递进去
result=CountPlus.GetResult(); 实例化类的
break;
case "-":
CountMinors cp = new CountMinors(a,b);
result=CountMinors.GetResult();
break;
case "*":
CountMul cp = new CountMul(a,b);
result=CountMul.GetResult();
break;
case "/":
CountDiv cp = new CountDiv(a,b);
result=CountDiv.GetResult();
break;
}
Console.Write("结果是{0}",result);
}
}
}
运行结果如下:
五、实验总结
通过本次试验我对C#有了个初步了解,C#语法简单,与web 紧密结合,面向对象,安全,灵活性和兼容性较强。本次实验,在翟老师的帮助下,我此次实验体现c#面向对象的三大特征:多态,继承,封装。在老师的帮助下,本次实验我包含了四个类,运用了重载等方法,基本上完成了老师所要求的任务。C#使我充分了解了什么叫面向对象思想,以及面向对象思想的重要性,学习好这门课程,会为以后打下好的基础,多按老师的要求做实验,会使自己的知识更丰富。