资源描述
项目二 成绩计算器
【能力目标】
能在C#控制台应用程序和Windows窗体应用程序中,实现数据的输入与输出程序设计。
【促成目标】
1.学会变量声明、变量命名、变量类型之间的转换;
2.掌握Button按钮、TextBox文本框和Label标签控件的使用;
3.会使用ToString()、ToDouble()、WriteLine()和ReadLine()方法。
【案例引入】
一、任务3 创建第二个C#的控制台应用程序——英语成绩计算
【任务要求】
某班级进行了一次英语考试,考试成绩由学生的平时成绩和卷面成绩按4:6得到。现要设计一个控制台应用程序求出学生的英语考试成绩。
【做中学】
1.启动Visual Studio 2008
2.新建项目
在Visual Studio 2008集成开发环境中,选择“文件”→“新建”→“项目”菜单命令,弹出【新建项目】对话框,如下图所示。
还可以单击集成开发环境左边的创建项目图标,来打开【新建项目】对话框。
(1)选择C#的模板
在Visual C#的模板中选择【控制台应用程序】,作为项目类型。
(2)确定项目的名称
项目的名称修改为“EnglishCJcount”(也可以采用默认名称)。
(3)确定项目存放的位置
通过“浏览”按钮选择项目存放的位置,最后单击“确定”即可。
3.编写代码
打开C#的代码编辑器,在代码编辑器中输入英语成绩计算源代码,如下图所示。
在Main()方法中添加如下代码:
static void Main(string[] args)
{
string name; //学生姓名
double x, y, z; //x为平时成绩,y为卷面成绩,z为考试成绩
Console.WriteLine("请输入学生姓名:");
name = Console.ReadLine();
Console.WriteLine("请输入平时成绩X:");
x = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入卷面成绩y:");
y = Convert.ToDouble(Console.ReadLine());
z = x * 0.4 + y * 0.6;
Console.WriteLine("{0}英语考试成绩为:{1}", name, z);
Console.ReadLine();
}
4.运行与调试
通过“调试” →“启动调试”菜单命令运行程序,也可以通过快捷按钮F5或快捷工具栏的图标运行程序。运行结果如下图所示。
【知识讨论】
主要讨论如何使用Console类的ReadLine()和WriteLine()方法输入数据和输出数据,以及变量定义和数据转换。
1.ReadLine()和WriteLine()方法
(1)WriteLine()方法
观察运行结果图(上图),执行“Console.WriteLine("请输入学生姓名:");”这条语句后,Console类的WriteLine()方法会把字符串“请输入学生姓名:”输出到屏幕上,并换了一行。
格式如下:
Console.WriteLine(输出项);
功能:把输出项在控制台上输出。
如:
Console.WriteLine("{0}英语考试成绩为:{1}", name, z);
说明:
l {0},{1}分别表示第一个和第二个参数,这里代表name和z;
l Console.WriteLine()是Console类的一个方法重载,输入输出格式是方法来定义的。又如:Console.WriteLine("请输入学生姓名:");;
l WriteLine()方法与C语言的printf()函数功能类似。
(2)ReadLine()方法
执行“x = Convert.ToDouble(Console.ReadLine());”这条语句后,Console类的ReadLine()方法就等待键盘输入成绩,成绩输入后,经过数据转换赋给变量,然后换行,运行结果如上图所示。
格式如下:
Console.ReadLine();
功能:从键盘上读取一行以Enter键为结束符的数据,并把读取的数据返回。
如:
name = Console.ReadLine();
说明:ReadLine()方法与C语言的scan()函数功能类似。
2.变量定义
在这里,定义了4个变量,分别表示学生的姓名、平时成绩、卷面成绩和考试成绩。定义变量语句是:
string name;
double x, y, z;
3.数据转换
由于键盘输入的是string类型的数据,而x和y是double类型的数据,它们的数据类型不一样,所以需要先进行数据类型转换,然后赋值。
在这里,使用了Convert类的ToDouble方法将输入的数据转换为double类型。数据转换语句是:
x = Convert.ToDouble(Console.ReadLine());
y = Convert.ToDouble(Console.ReadLine());
【技能训练2-1】
设计一个控制台应用程序求出学生的C#考试成绩,考试成绩由学生的平时成绩、上机成绩和卷面成绩按3:3:4得到。
二、变量与数据类型
1.变量与常量
(1)变量代表存储单元,变量名就是地址,通过变量名可以方便地找到内存中存储的数据;
(2)每个变量都有一个类型,这决定了变量可以用来存储什么样的数据类型值。也就是说数据是各式各样,首先根据数据的类型为它在内存中分配一块空间,然后数据就可以放进这块空间里了;
(3)在程序执行过程中,可以改变变量的值,而常量的值是始终不变的;
(4)常量在程序执行过程中,其值是始终不变的。
2.变量命名规则
变量命名规则如下表所示表。
例如,以下变量名是正确的:
intX
_myFile
而下面的变量命名则是错误的:
863com
string
Str-Login
注意:C#对于大小写字母是敏感的,所以在声明变量时一定要注意,例如beer、Beer和BEER是三个不同的变量名。
3.变量的分类
在C#中,变量分成七种类型:静态变量、实例变量、数组变量、局部变量、值参数、引用参数、输出参数。下面我们看一个例子:
分析一下在下面代码中类内定义的变量。
class Program
{
public static int x;
int y;
int[] a=new int[4];
void MyMethod()
{
int i=6;
a[0]=i;
}
}
在上面的变量声明中,x是静态变量,y是实例变量,a是数组变量,i是局部变量。
1)静态变量
带有“static”修饰符声明的变量称为静态变量。一旦静态变量所属的类被装载,直到包含该类的程序运行结束时它将一直存在。静态变量的初始值就是该变量类型的默认值。
2)实例变量(非静态变量)
不带有“static”修饰符声明的变量称为实例变量。例如:
int x=0;
针对类中的实例变量而言,一旦一个类的新的实例被创建,直到该实例不再被应用而被释放所占空间为止,该实例变量将一直存在。
3)数组变量
数组元素也是一种变量,该变量随着数组实例的存在而存在。每一个数组元素的初始值是该数组元素类型的默认值。
4)局部变量
局部变量是指在一个独立的程序块(如方法)、if语句、switch语句、for语句等中声明的变量,它只在该范围中有效。当程序运行到这一范围时,该变量即开始生效,程序离开时变量就失效了。
在局部变量的有效范围内,变量未定义或未赋值就使用是不合法的,例如下面的程序段:
int x=y; //非法,因为局部变量y没有定义
int y;
int x=y; //非法,因为局部变量y没有赋值
y=5;
x=y; //合法
4..NET 常用数据类型
所有变量都具有数据类型,变量的数据类型决定了如何将其值存储到计算机的内存中。.NET 常用数据类型如下表所示。
表 .NET 常用数据类型
数据类型
说明
例子
int
整型
学生人数、手机的待机时间
Double
浮点型
商品价格、员工工资 、分数
String
字符串型
姓名、产品型号、产品介绍
Char
字符型
‘优’ 、‘良’ 、‘差’
bool
布尔型
True、false
(1)int
整型,有符号32位整数,取值范围:-2,147,483,648~2,147,483,647。
(2)double
浮点型,即存储小数的类型,64位实数,取值范围:5.0*10-324~1.7*10308。在C#中实数还有float、decimal二种类型,它们的差别仅仅在于取值范围和精度不同。
默认情况下,赋值运算符右侧的实数被视为double类型。
(3)char
字符型,存储单个字符。
除了数字以外,计算机处理的信息,主要就是字符了,字符包括数字字符、英文字母、表达符号等。可以按以下方法给一个字符变量赋值,如:
char c='A';
在C#中可以把字符类型当作整数类型来操作。例如:
int i='A'+5; //i的值为70
和C、C++中一样,在C#中仍然存在着转义符,以反斜杠(\)开头,将其后的字符转变为另外的含义,如下表所示。
表 转义字符及其含义
转义字符
字符名
\'
单引号
\"
双引号
\\
反斜杠
\0
空
\a
警告
\b
退格
\f
换页
\n
换行
\r
回车
\t
水平制表符
\v
垂直制表符
\x
使用1~4位十六进制数所表示的字符,如\x66
\u
使用4位十六进制数所表示的字符,如\u0061
例如:
char c = '\x41'; //字符’A’
char c = '\u0041'; //字符’A’
(4)bool
布尔型,存储相反的两种状态,布尔型有true和false两个布尔值。如:
bool b = (85 > 100);
与C和C++相比,在C#中,true值不再为任何非零值。
(5)String
字符串型,字符串型的数据在程序中都用双引号引起来,而字符型使用单引号。
【案例引入】
三、任务4 创建第二个C#的Windows窗体应用程序——C#成绩计算
【任务要求】
设计一个Windows窗体台应用程序,具有能输入C#的平时成绩、课程设计成绩和卷面成绩,并且能按3:3:4比例得到最终成绩。
【做中学】
1.启动Visual Studio 2008
2.新建项目
在Visual Studio 2008集成开发环境中,选择“文件”→“新建”→“项目”菜单命令,弹出【新建项目】对话框,如下图所示。
(1)选择C#的模板
在Visual C#的模板中选择【Windows窗体应用程序】,作为项目类型。
(2)确定项目的名称
项目的名称修改为“CSharpCJcount”(也可以采用默认名称)。
(3)确定项目存放的位置
通过“浏览”按钮选择项目存放的位置,最后单击“确定”即可。
3.界面设计
(1)添加控件(按要求拖动需要的控件到窗体)
添加一个按钮、四个标签和四个文本框控件。在工具箱的公共控件中,分别选中Button(按钮)控件、Label(标签)、TextBox(文本框)控件拖放到窗体上,并放置好相应位置,如下图所示。
(2)属性设置
1)设置Label1~ Label4控件的属性
在窗体中,分别选中Label1控件,然后在属性窗口中把Label1~ Label4的Text属性修改为“平时成绩:”、“课程设计:”、“卷面成绩:”和“最终成绩:”。
2)设置Button1控件的Text属性为“C#成绩计算”;
3)设置窗体的Text属性为“CSharpCJcount”。
属性设置完成如下图所示。
4.编写代码
打开C#的代码编辑器,在代码编辑器中输入和修改用于创建应用程序的C#源代码。
添加“C#成绩计算”按钮单击事件处理代码:
private void button1_Click(object sender, EventArgs e)
{
double pscj, kcsjcj, qmcj, cj;
pscj = Convert.ToDouble(textBox1.Text);
kcsjcj = Convert.ToDouble(textBox2.Text);
qmcj =Convert.ToDouble(textBox3.Text);
cj = pscj * 0.3 + kcsjcj * 0.3 + qmcj * 0.4;
textBox4.Text =cj.ToString();
}
完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CSharpCJcount
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double pscj, kcsjcj, qmcj, cj;
pscj = Convert.ToDouble(textBox1.Text);
kcsjcj = Convert.ToDouble(textBox2.Text);
qmcj =Convert.ToDouble(textBox3.Text);
cj = pscj * 0.3 + kcsjcj * 0.3 + qmcj * 0.4;
textBox4.Text =cj.ToString();
}
}
}
5.运行与调试
通过“调试” →“启动调试”菜单命令运行程序,也可以通过快捷按钮F5或快捷工具栏的图标运行程序,运行结果如下图所示。
【知识讨论】
主要通过本任务进一步讨论关于变量的使用以及数据类型的转换。
1.变量的使用
使用变量的一条重要原则是:变量必须先定义后使用。变量的使用,必须强调先后顺序,先声明,再赋值。
变量的声明同时规定了变量的类型和变量的名称。变量的声明采用以下的格式:
数据类型 变量名;
(1)变量声明和赋值有两种方式
1)先声明后赋值
在本任务的button1_Click()中声明了如下4个变量,就是采用先声明后赋值方式。
double pscj, kcsjcj, qmcj, cj;
那么,这4个变量是属于哪种类型的变量呢?以及它们的数据类型?
2)声明的同时赋值
可以在声明的同时对变量进行初始化,如:
int x = 1; //给变量x 赋值 1
(2)变量赋的值有三种类型;
1)常数,比如:Int i=1;string str=“test”;
2)变量,比如:Int i=0 ;int j=i;
3)表达式,比如:int total=score1+score2;
2.分析本任务的数据类型转换
为什么需要数据类型转换?
先结合生活案例讲解为什么要进行类型转换:比如2个客人先住了一个2人间的房间,后来想换个四人间的,他们需要到前台办手续换房。
不同类型的变量之间不能直接赋值,如果把一个不同类型的变量赋给另外一个变量同样需要某种手续,这就是调用类型转换方法。
下面结合本任务的代码讲解怎样进行数据类型转换的。
本任务的代码声明了4个浮点型变量:
double pscj, kcsjcj, qmcj, cj;
(1)使用ToDouble()方法把字符串型转换为浮点型
pscj = Convert.ToDouble(textBox1.Text);
kcsjcj = Convert.ToDouble(textBox2.Text);
qmcj =Convert.ToDouble(textBox3.Text);
由于在TextBox(文本框)控件上输入的数字是字符串型的,既TextBox.Text是String格式,所以在赋给浮点型变量之前,必须先进行数据类型转换。
(2)使用ToString() 方法把浮点型转换为字符串型。
cj = pscj * 0.3 + kcsjcj * 0.3 + qmcj * 0.4;
textBox4.Text =cj.ToString();//将浮点型变量转换为字符串型变量
注意这个方法是不带参数的,前面说的方法是有参数列表的。
3.常见的数据类型转换
常见的数据类型转换如下表所示。
由于 C#变量在声明后就无法再次声明,也就是说无法用于存储其他类型的值。除非该类型可以转换为其他的类型。但是,在多数情况下都是不能进行强制转换的,如:
int i;
i = "Hello"; //错误,不能把类型 'string' 转换为 'int'"
(1)隐式转换
由于该转换是一种安全类型的转换,不会导致数据丢失,因此不需要任何特殊的语法。
int num = 2147483647;
long bigNum = num; //执行了隐式转换
(2)显式转换(强制转换):
显式转换需要强制转换运算符。源变量和目标变量兼容,但由于目标变量的类型大小比源变量小(或者目标变量是源变量的一个基类),因此存在数据丢失的风险。
double x = 1234.7;
int a;
a = (int)x; //强制转换double 为 int.
System.Console.WriteLine(a);
//输出: 1234
4.控件与变量
(1)控件是一种变量
控件是一种复杂类型的变量,一般在往窗体中拖入一个控件,就相当于给控件声明并赋值了,这样控件在程序中可当作变量使用。下表是前面学过的控件。
类型
用途
Label
标签,用来显示文本
TextBox
输入框,用来输入或显示文本
Button
按钮,用在窗体上提交数据
(2)控件的属性与变量
属性也是一种变量,可当作变量来使用,可看作已定义好的变量。Label 和TextBox(文本框)控件的部分属性如下表所示。
属性名称
类型
说明
Text
string
文本
Visible
bool
是否可见
BackColor
Color
背景色
回顾前面的代码:
任务2中的代码:
label1.Visible = false;
label1.Visible = true;
技能训练1-2中的代码:
Label1.text="你好,你单击了Button按钮!";
任务4中的代码:
textBox4.Text =cj.ToString();
四、TextBox(文本框)控件
TextBox(文本框)控件主要用于获取用户输入或显示文本,通常用于可编辑文本,也可以设定其成为只读控件。文本框能够显示多行数据,并添加基本的格式设置。
1.TextBox控件的常用属性
2.Text属性
Text属性是TextBox(文本框)控件最重要的属性,要显示的文本就包含在Text属性中。
Text属性可以在设计时通过属性窗口设置,也可以在运行时用代码设置或者通过用户输入设置,同样也可以在运行时通过读取Text属性来获得文本框的当前内容。
3.Text属性的读写操作
在这里主要介绍项目在运行时,如何用代码对TextBox控件的Text属性进行读写操作。
(1)对Text属性进行写操作
1)在运行时,用代码设置Text属性,既对Text属性进行写操作,格式如下:
控件名.属性名=属性值;
如:
任务2中设置Text属性的代码:
label1.Visible = false;
label1.Visible = true;
技能训练1-2中设置Text属性的代码:
Label1.text="你好,你单击了Button按钮!";
任务4中设置Text属性的代码:
textBox4.Text =cj.ToString();
2)在运行时,通过用户输入来设置Text属性。例如:在任务4中通过用户输入成绩来设置TextBox控件的Text属性,如下图所示。
(2)对Text属性进行读操作
在运行时,用代码读取Text属性,既对Text属性进行读操作,格式如下:
变量名=控件名.属性名;
如:
任务4中读取Text属性的代码:
pscj = Convert.ToDouble(textBox1.Text);
kcsjcj = Convert.ToDouble(textBox2.Text);
qmcj =Convert.ToDouble(textBox3.Text);
综上所述,具有Text属性的所有控件,都可以在程序运行中直接访问Text属性,用来获取和设置Text的值,这样就可以实现在程序运行过程中修改标题的名称,获取用户输入的数据等功能。同样,其他属性也可以进行读写操作。
【技能训练2-2】
在窗体中添加一个Button按钮、一个TextBox文本框和一个Label标签,通过属性窗口设置按钮的Text属性为“显示”、标签和文本框的Text属性为空。然后运行程序,在文本框中输入信息(用户自己随意输入),然后单击按钮,在标签上显示用户输入在文本框中的信息。
参考代码如下:
private void btn_Example_Click(object sender, EventArgs e)
{
Label1.text= Text1.text;
}
【项目小结】
本项目通过控制台应用程序《英语成绩计算》、Windows窗体应用程序《C#成绩计算》两个任务的完成,学会了变量声明、变量命名规则、变量类型之间的转换,掌握了Button按钮、TextBox文本框和Label标签控件的使用,并会使用ToString()、ToDouble()、WriteLine()和ReadLine()方法。能在C#控制台应用程序和Windows窗体应用程序中,实现数据的输入与输出程序设计。
展开阅读全文