DotNet 作业

07.6.7

1. 判断题
    (1) 从HTML代码来看,所有的Web服务器控件都有“runat="server"”标记。(    )
    (2) LinkButton控件与Hyperlink控件的用法和功能完全相同。(    )
    (3) CheckBoxList控件中的选项不能同时选中多个。(    )
    (4) 若要将Web服务器控件的实例作为Table服务器控件某单元格的内容,则只能使用其Controls属性以编程方式在代码设置。(    )
    (5) 所有的数据显示控件都可以利用数据源控件的操作命令来编辑数据。(    )
    (6) 在DataList控件中,当单击某个已设置CommandName属性值,但在代码中没有对应事件的按钮控件,都将会触发ItemCommand事件。(    )
    (7) 验证控件与被验证的输入控件是一一对应的。(    )
    (8) RangeValidator控件对空输入也能验证。(    )
    (9) 使用Menu服务器控件可以生成静态菜单、动态菜单以及部分动态菜单三种类型。(    )

2. 填空题
    (1) 若希望每次修改TextBox服务器控件文本内容后都能立刻被服务器处理,则应将(    )属性值更改为true。
    (2) 若不采用任何容器控件,要将页面中的若干个RadioButton服务器控件分为两组进行单选,则应该设置的属性是(    )。
    (3) SqlDataSource组件的数据操作命令可以是单条SQL语句,也可以是(     )。
    (4) SqlDataSource组件的DataSourceMode属性值为(    )时,才可以使用筛选功能。
    (5) 若要在GridView控件中添加编辑命令按钮,则需添加(    )类型的列字段,或将属性(    )的属性值设置为true。
    (6) (    )控件用于验证用户是否进行了有效的输入。
    (7) CompareValidator控件经常用于(    )、验证一个控件输入值与某个常数值的大小关系和(    )。
    (8) 站点地图就是一个用于描述站点逻辑结构的(    ),一般以Web.sitemap文件的形式保存在Web应用程序的根目录下,以辅助导航控件完成站点导航。

3. 母版页的作用是什么?

4. 网页制作中有哪几种样式设置方法?各有何特点?

5. 采用GridView控件、DataList控件、DetailsView控件来显示数据各有何特点?

6. 在画线处填上合适的内容,使程序变得正确完整。
//这是一个用户窗体的代码,用户控件名为WebUserControl1.ascx
public DateTime newdate=DateTime.Now;
private bool Tag=true;
protected void Page_Load(object sender, System.EventArgs e)
{
    if ((!Page.IsPostBack) && Tag)
    {
        //初始化表示年月日的三个下拉框列表
        DropDownListYear.SelectedValue=newdate.Year.ToString();
        DropDownListMonth.SelectedValue=newdate.Month.ToString() ;
        DropDownListDay.SelectedValue=newdate.Day.ToString() ;
    }
}
public void init(DateTime DT)
{
    //将下拉框列表表示为初始化的时间
    DropDownListYear.SelectedValue=DT.Year.ToString();
    DropDownListMonth.SelectedValue=DT.Month.ToString();
    DropDownListDay.SelectedValue=DT.Day.ToString();
    Tag=false;
}
//这是一个页面的代码,页面名字为WebForm1.aspx
protected void Page_Load(object sender, System.EventArgs e)
{
    Response.Write("将一个日期值输入文本框中");
}
protected void Button1_Click(object sender, System.EventArgs e)
{
    try
    {
        DateTime dt =DateTime.Parse(TextBox1.Text);
        Response.Redirect(string.Format("WebForm2.aspx?time={0}&timetext={1}",
            dt,this.TextBox1.Text));
        Session["datetime"]= TextBox1.Text;
    }
    catch
    {
        Response.Write("<script>alert('"+ "输入了无效的日期,请重新输

入!"+"');</script>");
    }
}
//这是另一个页面的代码,页面名字为WebForm2.aspx
protected WebUserControl1 WebUserControl11;
protected void Page_Load(object sender, System.EventArgs e)
{
    Response.Write("通过在Url后直接加入参数的方法传递的用户输入的时间为:<br>");
    Response.Write( _____________________________________ );
    Response.Write("通过Session对象传递的方法传递的用户输入的时间为:<br>");
    Response.Write( _____________________________________ );
    Response.Write("WebUserControl11接收到的用户输入的时间为:<br>");
    //在用户控件中显示时间
    ____________________________________________ ;
}

7. 编写一个ASP.NET Web应用程序来模拟聊天室程序,使用Application与Session对象来保存用户的发言,登录名,使用定时刷新页面的方法来定时刷新,从Application对象读取所有用户的发言。

答案:

1. 判断题
    (1) 从HTML代码来看,所有的Web服务器控件都有“runat="server"”标记。( 对 )
    (2) LinkButton控件与Hyperlink控件的用法和功能完全相同。( 错 )
    (3) CheckBoxList控件中的选项不能同时选中多个。( 错 )
    (4) 若要将Web服务器控件的实例作为Table服务器控件某单元格的内容,则只能使用其Controls属性以编程方式在代码设置。( 对 )
    (5) 所有的数据显示控件都可以利用数据源控件的操作命令来编辑数据。( 错 )
    (6) 在DataList控件中,当单击某个已设置CommandName属性值,但在代码中没有对应事件的按钮控件,都将会触发ItemCommand事件。( 对 )
    (7) 验证控件与被验证的输入控件是一一对应的。( 错 )
    (8) RangeValidator控件对空输入也能验证。( 对 )
    (9) 使用Menu服务器控件可以生成静态菜单、动态菜单以及部分动态菜单三种类型。( 错 )

2. 填空题
    (1) 若希望每次修改TextBox服务器控件文本内容后都能立刻被服务器处理,则应将(AutoPostBack)属性值更改为true。
    (2) 若不采用任何容器控件,要将页面中的若干个RadioButton服务器控件分为两组进行单选,则应该设置的属性是(GroupName)。
    (3) SqlDataSource组件的数据操作命令可以是单条SQL语句,也可以是(存储过程 )。
    (4) SqlDataSource组件的DataSourceMode属性值为(DataSet)时,才可以使用筛选功能。
    (5) 若要在GridView控件中添加编辑命令按钮,则需添加(CommandField)类型的列字段,或将属性(AutoGenerateEditButton)的属性值设置为true。
    (6) (RequiredFieldValidator)控件用于验证用户是否进行了有效的输入。
    (7) CompareValidator控件经常用于(验证两个控件输入值的大小关系)、验证一个控件输入值与某个常数值的大小关系和(确定一个控件中的输入值是否可以转换到特定的数据类型)。
    (8) 站点地图就是一个用于描述站点逻辑结构的(XML文件),一般以Web.sitemap文件的形式保存在Web应用程序的根目录下,以辅助导航控件完成站点导航。

3. 母版页的作用是什么?
【解答】
    母版页(Master Page)的扩展名为“.master”,它相当于网页的模板。在其他网页中,只要引用了母版页,母版页的页面就可以自动显示出来,设计者可以修改引用的母版页中预留的部分,其它部分保持不变,这样就可以使多个页面的风格保持一致,给网页设计带来了很大的方便。

4. 网页制作中有哪几种样式设置方法?各有何特点?
【解答】
    网页制作中有:内联式样式设置、直接嵌入式样式设置和外部链接式样式设置三种方式。
    1) 内联式样式设置:
    设置方法:直接在要设置样式的各标记元素中修改style属性;
    优点:直观、方便;
    缺点:不易于维护和修改;
    适用于:网页中个别需要修改的元素的样式定义;
    2) 直接嵌入式样式设置:
    设置方法:在HTML文档的<head></head>之间添加<style></style>定义,<style></style>部分是所有需要设置样式的元素的属性定义。
    优点:对当前页面内的所有元素的样式修改、维护比较方便;
    缺点:对于网站建设,要采用相同的样式设置则比较麻烦;
    适用于:单独网页的样式定义;
    3) 外部链接式样式设置:
    设置方法:把所有样式定义放在一个独立的文件中,凡是需要使用该文件中规定样式的网页,只要在其<head>与</head>之间添加一个对该样式文件的链接:<link  type="text/css"  href="MyStyle1.css"  rel="Stylesheet" />即可;
    适用于:需要统一显示样式的网站建设。

5. 采用GridView控件、DataList控件、DetailsView控件来显示数据各有何特点?
【解答】GridView控件、DataList控件、DetailsView控件都可以利用SqlDataSource控件绑定SQL数据源自动显示数据。就显示数据的能力来说,GridView控件、DataList控件一次可以显示数据表中的多条记录,而DetailsView控件每次只能显示数据表中的一条记录;就操作数据的能力来说,GridView控件、DetailsView控件都可以自动利用SqlDataSource控件的数据操作命令来编辑所显示的数据,而DataList控件则需要编写自身的相应事件才可以完成编辑数据的操作。

6. 在画线处填上合适的内容,使程序变得正确完整。
//这是一个用户窗体的代码,用户控件名为WebUserControl1.ascx
public DateTime newdate=DateTime.Now;
private bool Tag=true;
protected void Page_Load(object sender, System.EventArgs e)
{
    if ((!Page.IsPostBack) && Tag)
    {
        //初始化表示年月日的三个下拉框列表
        DropDownListYear.SelectedValue=newdate.Year.ToString();
        DropDownListMonth.SelectedValue=newdate.Month.ToString() ;
        DropDownListDay.SelectedValue=newdate.Day.ToString() ;
    }
}
public void init(DateTime DT)
{
    //将下拉框列表表示为初始化的时间
    DropDownListYear.SelectedValue=DT.Year.ToString();
    DropDownListMonth.SelectedValue=DT.Month.ToString();
    DropDownListDay.SelectedValue=DT.Day.ToString();
    Tag=false;
}
//这是一个页面的代码,页面名字为WebForm1.aspx
protected void Page_Load(object sender, System.EventArgs e)
{
    Response.Write("将一个日期值输入文本框中");
}
protected void Button1_Click(object sender, System.EventArgs e)
{
    try
    {
        DateTime dt =DateTime.Parse(TextBox1.Text);
        Response.Redirect(string.Format("WebForm2.aspx?time={0}&timetext={1}",
            dt,this.TextBox1.Text));
        Session["datetime"]= TextBox1.Text;
    }
    catch
    {
        Response.Write("<script>alert('"+ "输入了无效的日期,请重新输入!"+"');</script>");
    }
}
//这是另一个页面的代码,页面名字为WebForm2.aspx
protected WebUserControl1 WebUserControl11;
protected void Page_Load(object sender, System.EventArgs e)
{
    Response.Write("通过在Url后直接加入参数的方法传递的用户输入的时间为:<br>");
    Response.Write( _____________________________________ );
    Response.Write("通过Session对象传递的方法传递的用户输入的时间为:<br>");
    Response.Write( _____________________________________ );
    Response.Write("WebUserControl11接收到的用户输入的时间为:<br>");
    //在用户控件中显示时间
    ____________________________________________ ;
}
【解答】
Request.QueryString["timetext"]
Session["datetime"].ToString()
WebUserControl11.init(DateTime.Parse(Request.QueryString["time"].ToString()))

7. 编写一个ASP.NET Web应用程序来模拟聊天室程序,使用Application与Session对象来保存用户的发言,登录名,使用定时刷新页面的方法来定时刷新,从Application对象读取所有用户的发言。
【解答】
    1) 创建一个名为Chat的ASP.NET Web应用程序,修改Default.aspx页面的名字为Chat.aspx。
    2) 打开Global.asax,在下列事件中加入代码:
protected void Application_Start(Object sender, EventArgs e)
{
    Application["Msg1"]="";
    Application["Msg2"]="";
    Application["Msg3"]="";
    Application["Msg4"]="";
    Application["Msg5"]="";
    //保存聊天人数
    Application["UserNo"]=0;
}
//有新用户登录,聊天人数加一
protected void Session_Start(Object sender, EventArgs e)
{
    Application.Lock();
    Application["UserNo"]=(int)Application["UserNo"]+1;
    Application.UnLock();
}
//每个用户离开时,使聊天人数减一
protected void Session_End(Object sender, EventArgs e)
{
    Application.Lock();
    Application["UserNo"]=(int)Application["UserNo"]-1;
    Application.UnLock();
}
    3) 打开Chat.aspx,添加三个文本框和一个按钮,一个Label标签,分别命名为TextBoxUser,TextBoxChat,TextBoxmsg,ButtonSend,LabelUserNo。把TextBoxmsg的属性改为多行显示。
    4) 在Chat.aspx中添加如下代码。
private void Page_Load(object sender, System.EventArgs e)
{
    // 在此处放置用户代码以初始化页面
    if (TextBoxUser.Text!="")
    {
        Session["name"]=TextBoxUser.Text ;
    }
    else
    {
        Session["name"]="陌生人" ;
    }
    if (TextBoxChat.Text!="")
    {
        Application["Msg5"]=Application["Msg4"];
        Application["Msg4"]=Application["Msg3"];
        Application["Msg3"]=Application["Msg2"];
        Application["Msg2"]=Application["Msg1"];
        Application["Msg1"]=Session["name"]+":"+ TextBoxChat.Text;
    }
    LabelUserNo.Text="现在共有"+Application["UserNo"].ToString()+"人聊天";
    TextBoxmsg.Text=Application["Msg1"].ToString()+"/n";
    TextBoxmsg.Text+=Application["Msg2"].ToString()+"/n";
    TextBoxmsg.Text+=Application["Msg3"].ToString()+"/n";
    TextBoxmsg.Text+=Application["Msg4"].ToString()+"/n";
    TextBoxmsg.Text+=Application["Msg5"].ToString()+"/n";
}

07.6.6

1. 写出符合下列要求的正则表达式:
1) 要求4-8个英文字母。
2) 不能包含字母,至少1个字符。
3) 至少3个数字。
4) 至少3个字符。
5) 至少3个英文字母。
6) 任意字符。
7) 3个字母或数字,如123,r3a等。
8) 3个点。
9) @前至少有1个字符,@后至少有3个字符。
10) 必须输入左括号。

2. 使用保持连接的方式编写程序,计算各年级平均成绩(年级取自学号字段的前两个字符),并显示结果。

3. 使用保持连接的方式编写程序,查询MyTable2中不及格学生的学号,姓名,性别,成绩。并将结果在ListBox中显示出来。

4. 在画线处填上合适的内容,使程序变得正确完整。
string connString="server=localhost;Integrated Security=SSPI;database=pubs";
SqlConnection conn=____________________________
string strsql="select * from MyTable2";
SqlDataAdapter adapter=new SqlDataAdapter(_____________);
dataset=new DataSet();
adapter.Fill(________________,"MyTable2");
this.dataGridView1.DataSource=dataset.Tables["MyTable2"];

5. 已知数据库中定义了一张person表,表的数据结构如下:
字段名称   字段类型   字段含义
id             数字          编号
xm           文本          姓名
xb           文本           性别
nl            数字           年龄
zip          文本           邮政编码
用编写代码的方法在DataGridView中显示该数据表中年龄大于18的所有纪录,显示时以编号的升
序排序,要求禁止用户编辑数据。

答案:

1. 写出符合下列要求的正则表达式:
1) 要求4-8个英文字母。
2) 不能包含字母,至少1个字符。
3) 至少3个数字。
4) 至少3个字符。
5) 至少3个英文字母。
6) 任意字符。
7) 3个字母或数字,如123,r3a等。
8) 3个点。
9) @前至少有1个字符,@后至少有3个字符。
10) 必须输入左括号。

【解答】
    1) [a-zA-Z]{4,8}
    2) [^a-zA-Z]{1,}
    3) [0-9]{3,}
    4) {3,}
    5) [a-zA-Z]{3,}
    6) .{0,}
    7) [A-Za-z0-9]{3}
    8) /.{3}
    9) .{1,}@ .{3,}
    10) /(

2. 使用保持连接的方式编写程序,计算各年级平均成绩(年级取自学号字段的前两个字符),并显示结果。
【解答】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 习题8_6_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
//添加Button按钮在ListBox中显示结果
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add("年级         平均成绩");
            string connectionString = Properties.Settings.Default.MyDatabaseConnectionString;
            //根据连接字符串创建SqlConnection实例
            SqlConnection conn = new SqlConnection(connectionString);
            //创建SqlCommand实例,并设置SQL语句和使用的连接实例
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select substring(学号,1,2) as 年级,avg(成绩) as 平均成绩 from MyTable2 group by substring(学号,1,2)";
            cmd.Connection = conn;
            try
            {
                conn.Open();
                SqlDataReader r = cmd.ExecuteReader();
                while (r.Read() == true)
                {
                    listBox1.Items.Add(string.Format("{0}级           {1}", r[0], r[1]));
                }
                r.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "计算成绩失败");
            }
            finally
            {
                conn.Close();
            }
        }
    }
}

3. 使用保持连接的方式编写程序,查询MyTable2中不及格学生的学号,姓名,性别,成绩。并将结果在ListBox中显示出来。
【解答】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 习题8_6_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();           
        }
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add("  学号        姓名     性别     成绩");
            string connectionString = Properties.Settings.Default.MyDatabaseConnectionString;
            //根据连接字符串创建SqlConnection实例
            SqlConnection conn = new SqlConnection(connectionString);
            //创建SqlCommand实例,并设置SQL语句和使用的连接实例
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText =
                "Select 学号,姓名,性别, 成绩 From MyTable2 Where (成绩<60)";
            cmd.Connection = conn;
            try
            {
                conn.Open();
                SqlDataReader r = cmd.ExecuteReader();
                while (r.Read() == true)
                {
       listBox1.Items.Add( string.Format("{0}     {1}     {2}       {3}", r[0], r[1], r[2], r[3]));
                }
                r.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "查询成绩失败");
            }
            finally
            {
                conn.Close();
            }
       }
    }
}

4. 在画线处填上合适的内容,使程序变得正确完整。
string connString="server=localhost;Integrated Security=SSPI;database=pubs";
SqlConnection conn=____________________________
string strsql="select * from MyTable2";
SqlDataAdapter adapter=new SqlDataAdapter(_____________);
dataset=new DataSet();
adapter.Fill(________________,"MyTable2");
this.dataGridView1.DataSource=dataset.Tables["MyTable2"];
【解答】
string connString="server=localhost;Integrated Security=SSPI;database=pubs";
SqlConnection conn= new SqlConnection(Properties.Settings.Default.MyDatabaseConnectionString);
string strsql="select * from MyTable2";
SqlDataAdapter adapter=new SqlDataAdapter(conn);
dataset=new DataSet();
adapter.Fill(dataset,"MyTable2");
this.dataGridView1.DataSource=dataset.Tables["MyTable2"];


5. 已知数据库中定义了一张person表,表的数据结构如下:
字段名称 字段类型 字段含义
id  数字  编号
xm  文本  姓名
xb  文本  性别
nl  数字  年龄
zip  文本  邮政编码
用编写代码的方法在DataGridView中显示该数据表中年龄大于18的所有纪录,显示时以编号的升序排序,要求禁止用户编辑数据。
【解答】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 习题8_6_5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string connectionstring = Properties.Settings.Default.MyDatabaseConnectionString ;
            SqlConnection conn = new SqlConnection(connectionstring);
            try
            {
                conn.Open();
                SqlDataAdapter adapter = new SqlDataAdapter(
                    "select  id,xm,xb,nl from person where nl > 18  order by id", conn);
                DataSet dataset = new DataSet();
                //如果不指定表名,则系统自动生成一个默认的表名
                adapter.Fill(dataset, "person");
                //可以使用索引引用生成的表              
                dataGridView1.DataSource = dataset.Tables["person"];
                adapter.Dispose();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //不允许用户直接在最下面的行添加新行
            dataGridView1.AllowUserToAddRows = false;
            //不允许用户直接按Delete键删除行
            dataGridView1.AllowUserToDeleteRows = false;
        }
    }
}

07.4.27
1. 填空题
    1) 使控件是否可以对用户交互作出响应的属性是__________。
    2) 控制控件是否显示的属性是____________。
    3) 若要在文本框中输入密码,常指定___________属性。
    4) 若某复选框某时刻CheckState属性的值为Indeterminate,则其属性Checked的值为__________。
    5) 使用_____________控件可以将多个RadioButton控件分为两个单选组。
    6) 若不希望用户在ComboBox控件中编辑文本,则应将属性_______________的属性值设置为DropDownList。
    7) 用于设置MenuStrip控件中某菜单项快捷键的属性是_________________。
    8) 用于控制ListView控件中的各项显示方式的属性是________________。

2. 判断题
    1) 控件就是属性、方法和事件的集合封装体。       (  )
    2) TextBox控件只能用于单行文本的输入。        (  )
    3) 通过RichTextBox控件只能够与RTF文件进行交互操作。    (  )
    4) CheckBox控件的Checked属性与CheckState属性的值始终是相同的。  (  )
    5) ToolTip组件用于显示某指定控件的自定义提示信息的。     (  )

3. 区别TextBox控件、MaskedTextBox控件、RichTextBox控件的使用场合。

4. 简要说明CheckBox控件和RadioButton控件的区别。

5. 设计一个Windows应用程序,窗体上有一个TextBox控件、一个Button控件。要求,每当用户单击按钮时,文本框都会增加一行文字来反映单击的次数,例如“第3次单击按钮”。

6. 编写一段程序,向ListBox控件listBox1中,自动添加10个数,每个数占一项。

7. 参照Windows系统“附件”中的“计算器”,自行编写一个简易的计算器。要求:可以实现由0~4构成的整数的加减运算。

答案:

1. 填空题
    1) 使控件是否可以对用户交互作出响应的属性是 Enabled 。
    2) 控制控件是否显示的属性是 Visible 。
    3) 若要在文本框中输入密码,常指定 PasswordChar 属性。
    4) 若某复选框某时刻CheckState属性的值为Indeterminate,则其属性Checked的值为 Unchecked 。
    5) 使用 Panel 或 GroupBox 控件可以将多个RadioButton控件分为两个单选组。
    6) 若不希望用户在ComboBox控件中编辑文本,则应将属性 DropDownStyle 的属性值设置为DropDownList。
    7) 用于设置MenuStrip控件中某菜单项快捷键的属性是 ShortcutKeys 。
    8) 用于控制ListView控件中的各项显示方式的属性是 View 。

2. 判断题
    1) 控件就是属性、方法和事件的集合封装体。       ( 对 )
    2) TextBox控件只能用于单行文本的输入。        ( 错 )
    3) 通过RichTextBox控件只能够与RTF文件进行交互操作。    ( 错 )
    4) CheckBox控件的Checked属性与CheckState属性的值始终是相同的。  ( 错 )
    5) ToolTip组件用于显示某指定控件的自定义提示信息的。     ( 对 )

3. 区别TextBox控件、MaskedTextBox控件、RichTextBox控件的使用场合。
【解答】
TextBox控件一般用于单段文本的编辑,可以设置为单行或多行的输入模式,也可以用作密码的输入;MaskedTextBox控件主要用于特定格式的单段文本编辑,在输入文本不符合格式要求的将会触发其MaskInputRejected事件;RichTextBox控件除了具有TextBox的一般文本编辑功能外,还可以进行多段文本的高级编辑功能,如改变文本、段落的显示格式、在文本中查找特定字符和字符串以及与Rtf文件的交互等。

4. 简要说明CheckBox控件和RadioButton控件的区别。
【解答】
CheckBox控件可为用户提供选择功能,常用的是二选一的选择,如“真/假”或“是/否”;但该控件也可以通过属性的设置作三选一的选择。每一个CheckBox所代表的选择都是独立的,若有多个CheckBox控件构成一组选项时,则可以多个同时被选中,相互之间不影响,即复选。RadioButton控件,它与CheckBox控件功能类似,也是用于接收用户的选择,但它是以单项选择的形式出现,即一组RadioButton按钮中只能有一个处于选中状态。一旦某一项被选中,则同组中其他RadioButton按钮的选中状态自动清除。

5. 设计一个Windows应用程序,窗体上有一个TextBox控件、一个Button控件。要求,每当用户单击按钮时,文本框都会增加一行文字来反映单击的次数,例如“第3次单击按钮”。
【解答】
    1) 窗体界面如图所示;
    2) 窗体中主要控件属性设置如表Ex5-5-1;
表Ex5-5-1 

窗体中的主要控件属性
控件 Name属性 功能 其它属性
TextBox控件 textBox1 显示信息 ScrollBars=Vertical; Multiline=True
Button控件 Button1 触发添加信息事件 
 Button2 触发结束添加事件 
    3) 主要事件代码。
……
int i = 1;
bool Add = true;
……private void button1_Click(object sender, EventArgs e)
{
    if(Add) textBox1.Text += "第" + i + "次单击按钮/r/n";
    i++;
}
private void button2_Click(object sender, EventArgs e)
{
    Add = false;
}

6. 编写一段程序,向ListBox控件listBox1中,自动添加10个数,每个数占一项。
【解答】
    主要代码如下。
public partial class Form1 : Form
    {
        int m = 1;
        ……
        private void button1_Click(object sender, EventArgs e)
        { 
            for (int i = m ; i < m+10; i++)
            {
                listBox1.Items.Add(i);
            }
            m = m + 10;
        } 
}

7. 参照Windows系统“附件”中的“计算器”,自行编写一个简易的计算器。要求:可以实现由0~4构成的整数的加减运算。
【解答】
    1) 窗体界面如图所示;
   2) 将InputNumber事件作为button0、button1、button2、button3、button4的Click事件。
    完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Exer2
{
    public partial class FormCalculator : Form
    {
        enum calculateType { none, add, sub };
        calculateType myCal = calculateType.none;
        int x, y;
        bool isY = false;
        public FormCalculator()
        {
            InitializeComponent();
            textBox.TextAlign = HorizontalAlignment.Right;
        }
        private void InputNumber(object sender, EventArgs e)
        {
            Button num = (Button)sender;
            if (isY)
            {
                textBox.Clear();
                isY = false;
            }
            textBox.Text += num.Text;
        }
        private void buttonEqual_Click(object sender, EventArgs e)
        {
            y = Convert.ToInt32(textBox.Text);
            if (myCal == calculateType.add)
            {
                textBox.Text = Convert.ToString(x + y);
                myCal = calculateType.none;
            }
            if (myCal == calculateType.sub)
            {
                textBox.Text = Convert.ToString(x - y);
                myCal = calculateType.none;
            }
            isY = true;
        }
       
        private void addButton_Click(object sender, EventArgs e)
        {
            myCal = calculateType.add;
            x = Convert.ToInt32(textBox.Text);
            isY = true;
        }
        private void buttonSub_Click(object sender, EventArgs e)
        {
            myCal = calculateType.sub;
            x = Convert.ToInt32(textBox.Text);
            isY = true;
        }
        private void buttonClear_Click(object sender, EventArgs e)
        {
            textBox.Text = "";
            myCal = calculateType.none;
            isY = false;
        }  
    }
}

07.3.29

1. 分别写出下列语句执行的结果。
1) Console.WriteLine("{0}--{0:p}good",12.34F);
2) Console.WriteLine("{0}--{0:####}good",0);
3) Console.WriteLine("{0}--{0:00000}good",456);
2. 编写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能
   1) 输出字符串的长度。
   2) 输出字符串中第一个出现字母a的位置。
   3) 在字符串的第3个字符后面插入子串“hello”,输出新字符串。
   4) 将字符串“hello”替换为“me”,输出新字符串。
   5) 以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。
3. 使用委托的优点是什么?委托和事件有什么区别和联系?

答案:

1. 分别写出下列语句执行的结果。
1) Console.WriteLine("{0}--{0:p}good",12.34F);
2) Console.WriteLine("{0}--{0:####}good",0);
3) Console.WriteLine("{0}--{0:00000}good",456);
12.34--1,234.00%good
0--good
456--00456good

2. 编写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能
   1) 输出字符串的长度。
   2) 输出字符串中第一个出现字母a的位置。
   3) 在字符串的第3个字符后面插入子串“hello”,输出新字符串。
   4) 将字符串“hello”替换为“me”,输出新字符串。
   5) 以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。
using System;
class Test6
{
    public static void Main()
    {
        string str = "";
        while (str.Length <= 3)
        {
            Console.Write("请输入一个长度大于3的字符串:");
            str = Console.ReadLine();
        }
        //(1)
        Console.WriteLine("字符串的长度为:{0}", str.Length);
        //(2)
        int i = str.IndexOf('a');
        if (i > -1)
        {
            Console.WriteLine("第一个出现字母a的位置是:{0}", i);
        }
        else
        {
            Console.WriteLine("字符串中不包含字母a。");
        }
        //(3)
        string str1 = str.Insert(3, "hello");  //在第3个(初始序号为)字符前插入hello
        Console.WriteLine("插入hello后的结果为:{0}", str1);
        //(4)
        string str2 = str1.Replace("hello", "me");
        Console.WriteLine("将hello替换为me后的结果为:{0}", str2);
        //(5)
        string[] arr = str2.Split('m');
        Console.WriteLine("以m为分隔符分离后的字符串有:");
        for (int j = 0; j < arr.Length; j++)
        {
            Console.WriteLine(arr[j]);
        }
    }
}

3. 使用委托的优点是什么?委托和事件有什么区别和联系?
    C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
    C#中的“事件”是当对象发生某些事情时,类向该类的客户提供通知的一种方法。事件最常见的用途是用于图形用户界面;通常,表示界面中的控件的类具有一些事件,当用户对控件进行某些操作(如单击某个按钮)时,将通知这些事件。
    使用委托来声明事件。委托对象封装一个方法,以便可以匿名调用该方法。事件是类允许客户为其提供方法(事件发生时应调用这些方法)的委托的一种方法。事件发生时,将调用其客户提供给它的委托。

07.3.15

1. 什么是命名空间?命名空间和类库的关系是什么?
2. C#语言中,值类型和引用类型有何不同?
3. 结构和类的区别是什么?
4. C#中的数组类型有何特点?
5. 下列写法哪些是错误的?为什么?
1) if (nMyValue1=5) i=1;
2) if(nMyValue2==1)i=1;
3) int[] myInt={1,2,3};
   foreach(int test in myInt)
   {
     test++;
     Console.WriteLine(temp);
   }
4) int[] myInt1={1,2,3};
   foreach(int test in myInt1)
   {
      Console>WriteLine(test);
   }
6. 编写一个控制台应用程序,要求用户输入5个大写字母,如果用户输入的信息不满足要求,提示帮助信息并要求重新输入。 

答案:

1. 什么是命名空间?命名空间和类库的关系是什么?
    1) 名称空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的名称空间下。
    2) 名称空间又可以包含其它的名称空间,例如System.Windows.Forms,是指System名称空间下有Windows名称空间,Windows名称空间下有Forms名称空间。
    3) 所有类库都在规定的名称空间下。

2. C#语言中,值类型和引用类型有何不同?
    值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
    值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。

3. 结构和类的区别是什么?
    1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。
    2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。
    3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。

4. C#中的数组类型有何特点?
    1) 数组一般用于存储同一种类型的数据,包括Object类型。
    2) 数组是一种引用类型,而不是值类型。
    3) C#中除了可以有一维数组、多维数组外,还有交错型数组。

5. 下列写法哪些是错误的?为什么?
1) if (nMyValue1=5) i=1;
2) if(nMyValue2==1)i=1;
3) int[] myInt={1,2,3};
   foreach(int test in myInt)
   {
     test++;
     Console.WriteLine(temp);
   }
4) int[] myInt1={1,2,3};
   foreach(int test in myInt1)
   {
      Console>WriteLine(test);
   }
【解答】
1) 错误。if中的条件表达式结果不是布尔型。
2) 正确。
3) 错误一:temp没有定义。
   错误二:在foreach块内,test作为枚举成员是只读的,不能使用test++修改其值。
4) 错误。Console后应该是点,而不应该是大于号。

6. 编写一个控制台应用程序,要求用户输入5个大写字母,如果用户输入的信息不满足要求,提示帮助信息并要求重新输入。
using System;
using System.Collections.Generic;
using System.Text;
namespace inputCapitalLetter
{
    class Program
    {
        static void Main()
        {
            bool ok = false;
            while (ok == false)
            {
                Console.Write("请输入5个大写字母:");
                string str = Console.ReadLine();
                if (str.Length != 5)
                {
                    Console.WriteLine("你输入的字符个数不是5个,请重新输入。");
                }
                else
                {
                    ok = true;
                    for (int i = 0; i < 5; i++)
                    {
                        char c = str[i];
                        if (c < 'A' || c > 'Z')
                        {
                            Console.WriteLine("第{0}个字符“{1}”不是大写字母,请重新输入。", i + 1, c);
                            ok = false;
                            break;
                        }
                    }
                }
            }
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值