FlashCard101






2.43/5 (7投票s)
2003年10月23日
1分钟阅读

41264

801
一个简单的教育性抽认卡程序,
引言
去年我参加了一个会话式西班牙语课程和一个需要大量记忆的微软课程,并决定学习 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 事件触发时,我们检查一个 boolean
值 bDisplayWord
,如果它是 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
类的 ReadXml
和 WriteXml
方法。
关注点
这段代码是我用 C# 编写的第一个功能性实用程序之一。它演示了 .NET 框架的几个对象:DataSet
、网格、滑块、XML 文件、Timer 和窗体。