ASP.NET在线英语自学系统—课程及自测管理的设计

摘  要

高新科技和计算机的飞速发展,给人们带来了更多的便利。电脑普及时代即将到来,网络技术也在逐渐完善,人们的生活已经开始发生重要的变革。信息时代对人才素质的结构提出了更新,更高的要求,开展网络教学已成为学校教育面临信息时代的必然选择。

在线英语自学系统将英语学习和网络联系在一起,具备课程学习和自测两个大的功能。课程学习主要是学习课文,词汇;自测主要对单选题和阅读题进行针对性的练习。通过在线英语自学系统的建设,为学生和学校建立了B/S结构的网络教学体系。

本文共分5章,主要介绍了系统的背景和意义、所用的理论基础、系统需求分析、系统设计流程、系统测试。

关键词:自学自检;网络教学;英语学习;模拟考试

4.1  系统总体架构

该系统主要完成用户方面的功能,根据用户的需求可以分为:身份验证,课程自学和在线自测3个功能模块。

身份验证模块:当用户登录系统后,要求身份验证,系统会根据在数据库中有无此人和密码是否正确分别给予错误提示。

课程自学模块:当选择课程自学后,系统会显示可用的课程编号和课程名,当用户选择了一个课程,系统会从数据库中调出课程名、课文、课后词汇信息。

在线自测模块:用户可以选择单独对单选,阅读进行强化训练,或者做一个题型混合的模拟测试。其中在强化训练单选和阅读时,系统随机产生试题,不会限定完成时间,做完试题交卷后系统会计算成绩并显示出来。在做模拟测试时,系统随机产生题型混合的试题,可以根据需求设定测试时间,时间到时会自动交卷,在交卷后系统会计算并显示出分数。

4.3  系统功能模块分析

4.3.1 登录模块

主要实现当用户登录时,如果没有该用户名,则提示“不存在用户”;如果有该用户名,但输入密码时输入了错误的密码,则提示“密码错误”。图如下所示:

图2 “登录用户不存在”提示图

例如,在用户ID栏里输入名为“aaa”的用户,但是这个用户名在数据库中并不存在,则系统提示“不存在名为aaa的用户”。

图3 “登录密码错误”提示图

当用户在用户ID栏里填写了正确的用户名,但密码错误,则系统会提示“密码错误,请重试”。相关代码如下:

string name = textName.Value.Trim();

string password = textPassword.Value.Trim();

       IDataService ds = new DataService();

       int result = ds.StudentLogin(name, password);

       switch (result)

    {

      case 0: //登录成功

         Session["name"] = name;

         FormsAuthentication.RedirectFromLoginPage(name, true);

         break;

      case 1: //密码错误

         errorMessage.InnerText = "密码错误,请重试。";

         break;

      case 2: //不存在用户

         errorMessage.InnerText = "不存在名为\"" + name + "\"的用户";

         break;

     }

调用了ds.StudentLogin()存储过程,具体为:

CREATE PROCEDURE dbo.studentLogin

         @name varchar(20),

         @password varchar(20)

AS

IF EXISTS

(   SELECT id

         FROM student

         WHERE name=@name

         AND password=@password

)

BEGIN

         SELECT 0 --验证成功

END

ELSE IF EXISTS

(   SELECT id

          FROM student

          WHERE name=@name

)

BEGIN

         SELECT 1 --密码错误

END

ELSE

BEGIN

         SELECT 2 --用户不存在

END

RETURN

GO

4.3.2 获取课文列表

图4 选择模块图

当合法用户通过系统身份验证,会进入到欢迎画面,这时可以选择“课程自学”和“在线自测”。当用户选择了“课程自学”后,出现课程列表,如下图:

图5 可用课程列表图

当用户登录后选择课文学习后,显示可以阅读的课文列表,用户可以选择想要学习的课程。相关代码如下:

protected void Page_Load(object sender, EventArgs e)

{

  IDataService ds = new DataService();

  ArrayList lessonList = ds.GetLessonList();

  this.lessonListRepeater.DataSource = lessonList;

  this.lessonListRepeater.DataBind();

 }

其中调用了ds.GetLessonList()存储过程,具体为:

CREATE PROCEDURE dbo.getLessonList

AS

         SELECT id,title

         FROM lesson

         RETURN

GO

4.3.3 课程自学模块

当用户选择了一篇课文,则调用该课文内容:课程名,课文,课后词汇。如下图:

图6 显示课程信息图

相关代码如下:

protected Lesson lesson = new Lesson();

protected void Page_Load(object sender, EventArgs e)

    {int lessonId = Convert.ToInt32(Request["id"]);

      IDataService ds = new DataService();

      lesson = ds.GetOneLesson(lessonId);

      //课后词汇

      this.vocabulary.DataSource = lesson.Vocabulary;

      this.vocabulary.DataBind();

     }

其中调用了ds.GetOneLesson()和getVocabulary(),分别从数据库中调用课文和与课文相关的词汇。

getOneLesson()://调用课文

CREATE PROCEDURE dbo.getOneLesson

         @id int

AS

         SELECT id,title,content

         FROM lesson

         WHERE id = @id

         RETURN

GO

getVocabulary()://调用词汇

CREATE PROCEDURE dbo.getVocabulary

         @lessonId int

AS

         SELECT id,lessonId,word,[translation]

         FROM vocabulary

         WHERE lessonId = @lessonId

         RETURN

GO

4.3.4 在线自测模块

当用户选择了“在线自测”后,出现如下图,用户可以选择“强化阅读训练”,“强化单选训练”和“模拟测试”。

图7 选择自测功能图

当选择了“强化单选训练”,系统则随机调出单选题,如下图所示:

图8 随机产生的单选界面图

当选择了“强化阅读训练”,系统则随机调出阅读题,如下图所示:

图9 随机产生的阅读界面图

当选择了“模拟测试”,系统则按比例随机调出单选和阅读题,测试有时间限制,到时间会自动交卷,如下图所示:

图10 随机产生的试卷界面图

当用户完成题后,点最下面的“我做完了!”按钮,完成测试。系统会根据用户所选答案算出成绩,显示在页面上。

图11 交卷按钮界面图

图12 得到分数图

完成后显示成绩“32”。

相关代码如下:

protected void Page_Load(object sender, EventArgs e)

{if (!IsPostBack)

            {   //根据请求的测试类型生成试卷,并放入Session

                string testType = Request["testType"];

                TestPaper tp = SwitchPaper(testType);

                Session["testPaper"] = tp;

}

//页面生成单选

TestPaper testPaper = (TestPaper)Session["testPaper"];

for (int i = 1; i <= testPaper.ChoicetestList.Count; i++)

   {Choicetest c = (Choicetest)testPaper.ChoicetestList[i-1];

      Literal question = new Literal();

      question.Text = "<p>"+i+"."+c.Question+"</p>";

      RadioButtonList radioList = new RadioButtonList();

      radioList.ID = "choicetest" + i;

      radioList.Items.Add(new ListItem("A." + c.A, "a"));

      radioList.Items.Add(new ListItem("B." + c.B, "B"));

      radioList.Items.Add(new ListItem("C." + c.C, "C"));

      radioList.Items.Add(new ListItem("D." + c.D, "D"));

      choicetestPanel.Controls.Add(question);

      choicetestPanel.Controls.Add(radioList);

}                                                                                    

//单选,随机产生10个,每个10分

private TestPaper Choicetest()

     {IDataService ds = new DataService();

     TestPaper testPaper = new TestPaper(ds.GetRandomChoicetest(10), 10, new ArrayList(), 0, 0);

     return testPaper;

    }

//页面生成阅读

for (int i = 1; i <= testPaper.ReadingList.Count;i++)

   {Reading r = (Reading)testPaper.ReadingList[i-1];

      Literal readingContent = new Literal();

      readingContent.Text = r.Content;

      readingPanel.Controls.Add(readingContent);

      for (int j = 1; j <= r.ChoicetestList.Count; j++)

       {Choicetest c = (Choicetest)r.ChoicetestList[j - 1];

        Literal choicetestQuestion = new Literal();

        choicetestQuestion.Text = "<p>" + j.ToString() + "." + c.Question + "</p>";

        RadioButtonList radioList = new RadioButtonList();

        radioList.ID = "reading" + ((i - 1) * r.ChoicetestList.Count + j);

        radioList.Items.Add(new ListItem("A." + c.A, "a"));

        radioList.Items.Add(new ListItem("B." + c.B, "B"));

        radioList.Items.Add(new ListItem("C." + c.C, "C"));

        radioList.Items.Add(new ListItem("D." + c.D, "D"));

        readingPanel.Controls.Add(choicetestQuestion);

        readingPanel.Controls.Add(radioList);

       } }

// 阅读,随机产生2篇,每篇5题,每题10分

private TestPaper Readingtest()

    {IDataService ds = new DataService();

    TestPaper testPaper = new TestPaper(new ArrayList(), 0, ds.GetRandomReading(2), 10, 0);

     return testPaper;

    }

//页面生成试卷

private TestPaper Paper()

    {IDataService ds = new DataService();

     TestPaper testPaper = new TestPaper(ds.GetRandomChoicetest(6), 10, ds.GetRandomReading(2), 4, 1);

     return testPaper;

// 显示得分

protected void submit_ServerClick(object sender, EventArgs e)

    {int score = CaculateScore();

     this.scoreLabel.Text = "你的得分为:"+score.ToString();

     this.button.Visible = false;

     this.totalMin.InnerText = "0";

    }

// 计算得分

private int CaculateScore()

    { int score = 0;

      TestPaper testPaper = (TestPaper)Session["testPaper"];

//单选题得分

for (int i = 1; i <= testPaper.ChoicetestList.Count; i++)

  { Choicetest c = (Choicetest)testPaper.ChoicetestList[i - 1]; ;

    char answer = c.Answer;

    if (Request.Form["choicetest" + i] != null)

      {if (Request.Form["choicetest" + i].Equals(answer.ToString()))

        {score += testPaper.ChoicetestValue;

        }

      }

   }

//阅读得分

for (int i = 1; i <= testPaper.ReadingList.Count; i++)

  {Reading r = (Reading)testPaper.ReadingList[i - 1];

   for (int j = 1; j <= r.ChoicetestList.Count; j++)

     {Choicetest c = (Choicetest)r.ChoicetestList[j - 1];

      char answer = c.Answer;

      if (Request.Form["reading" + ((i - 1) * r.ChoicetestList.Count + j)] != null)

        {if (Request.Form["reading" + ((i - 1) * r.ChoicetestList.Count + j)].Equals(answer.ToString()))

           {score += testPaper.ReadingValue;

           }

        }

     }

  }

return score;

}

其中调用ds.GetRandomChoicetest()//获得随机单选题,ds.GetRandomReading()//获得随机阅读题,具体为:

ds.GetRandomChoicetest()//获得随机单选题

CREATE PROCEDURE dbo.getRandomChoicetest

@n int

AS

         DECLARE @s varchar(200)

         SELECT @s = 'SELECT TOP ' + cast(@n as varchar(10)) + ' * FROM choicetest WHERE readingId = 0  ORDER BY NEWID()'

         EXEC(@s)

         RETURN

GO

ds.GetRandomReading()//获得随机阅读题

CREATE PROCEDURE dbo.getRandomReading

         @n int

AS

         DECLARE @s varchar(200)

         SELECT @s = 'SELECT TOP ' + cast(@n as varchar(10)) + ' * FROM reading ORDER BY NEWID()'

         EXEC(@s)

         RETURN

GO

  • 32
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值