65.9K
CodeProject 正在变化。 阅读更多。
Home

FlashCard101

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.43/5 (7投票s)

2003年10月23日

1分钟阅读

viewsIcon

41264

downloadIcon

801

一个简单的教育性抽认卡程序,使用 xml 文件作为其单词来源

引言

去年我参加了一个会话式西班牙语课程和一个需要大量记忆的微软课程,并决定学习 C# 的最佳方法是创建一个抽认卡程序。大多数抽认卡程序的问题在于你被限制在它们的词典中,并且无法调整学习速度。

背景

首先要考虑的是如何存储数据,以便尽可能多的人可以使用该程序,并且所需的软件量最少(即 Access 和 SQL Server),所以我决定在代码中构建数据模式,然后将 DataSet 保存和打开为 XML 文件。

该程序演示了在 System.Data 命名空间中使用以及滑块控件和 Timer 的几种有用技术。

使用代码

有三个窗体:frmAbout 包含版本信息和版权声明,frmEditDict 用于编辑词典,以及 frmFlash,它是主窗体,显示单词和定义。

为了创建词典的 DataSet,我使用了以下代码。

static void initDS()
    {
      //create our schema/table 
      ds=new DataSet("DataSet");
      DataTable dt=ds.Tables.Add("Dictionary");

      DataColumn dc=dt.Columns.Add("ID",typeof(Int32));
      dc.AutoIncrement=true;
      dc.AllowDBNull=false;
      dc.AutoIncrementStep=1;

      //create the primary key
      DataColumn[] keys=new DataColumn[1];
      keys[0]=dc;
      dt.PrimaryKey=keys;
      
      dc=dt.Columns.Add("Word",typeof( String));
      dc.AllowDBNull=false;
      
      dc=dt.Columns.Add("Def",typeof( String));
      dc.AllowDBNull=false;
      
    }

每次 Timer 的 tick 事件触发时,我们检查一个 booleanbDisplayWord,如果它是 true,那么我们就从词典中选择另一个随机单词并显示它。然后我们将 bDisplayWord 切换为 false,并在 Timer 再次触发时显示定义。

private void timer1_Tick(object sender, System.EventArgs e)
    {
      
      if(bDisplayWord)
      {// display word
        DataTable dt=ds.Tables[0];
        System.Random rnd=new System.Random();
        currentIndex=(Int32) (rnd.NextDouble()*dt.Rows.Count);
        txtWord.Text=currentIndex.ToString();
        DataRow dr;
        dr=dt.Rows[currentIndex];
        txtWord.Text=dr.ItemArray[1].ToString();
        txtDefinition.Text="";
      }
      else
      {//else display Definition
        txtDefinition.Text = 
           ds.Tables[0].Rows[currentIndex].ItemArray[2].ToString();
      }

      //switch display component
      bDisplayWord = !bDisplayWord;
      
    }

为了保存和加载 DataSet,我只是简单地使用保存和打开对话框,结合 System.Data.DataSet 类的 ReadXmlWriteXml 方法。

关注点

这段代码是我用 C# 编写的第一个功能性实用程序之一。它演示了 .NET 框架的几个对象:DataSet、网格、滑块、XML 文件、Timer 和窗体。

© . All rights reserved.