实验08《训练功能的业务逻辑编程》实验指导书V07-2初稿

实验08《训练功能的业务逻辑编程》实验指导书

文/尚小卫

 

本实验为业务逻辑编程实验,

【工作目标】

1 完成期限4小时。

2 工作成果:实现一个游戏、训练业务流程的业务逻辑部分

根据原始版整理完成全部UI

       根据原始版完成全部UI界面。

实现一个完整的业务流程,包括:

       游戏界面、题目管理逻辑、标准题目数据访问等,重点完成题目管理的编程。

       题目的管理模块(出题的算法、题目的管理、标准接口等)

       题库管理和出题策略(入库策略、选题策略、出题策略)

完成一个继承的标准题目管理模块

       在父类的基础上扩展新的功能,而且随着标准模块的升级而升级。掌握:

       -标准BT组件 btSHFQuestion btSHFQuestions

3 验收要求:接口规范,程序运行稳定,信息入库。

根据原始版验收更新版的业务流程:

       验收内容:全部业务流程。

       验收要求:实现到业务环节。

              1 UI组装到应用程序中。

              2 将未实现的部分使用土黄色显示,已实现的功能用新颜色标识出来。

              3 对照原始版可以逐项显示对应的功能和功能点。

没有原始版的需要补充一个用户需求列表:

       角色:功能。

       物体:功能。

功能和实现:至少实现一个题目管理业务模块。

       验收内容:

              完成一个扩展的题目业务逻辑模块。

              实现一个题目业务逻辑的编辑显示窗口。

              可以将数据库中题目内容显示在窗口中。

              可以将编辑窗口中的内容填写到业务对象中,写入数据库。

              在实验窗体中添加题目编辑和显示的实验业务流程。

       验收要求:

              本次完成的业务逻辑可以取代实验07中用户窗体中的业务功能。

              业务逻辑通过题目测试窗口。

业务模块设计:模块结构清晰,流程完整:

       验收内容:扩展的方法和业务流程。

       验收要求:

              1 扩展的功能能够正确运行;

              2 方法说明用XML标注方法中文名称和功能;

              3 算法说明,用注释行切分算法步骤;

              4 数据说明,说明每个变量的含义;

              5 物理结构-层次清楚,代码组合,(模块常数、模块字段、构造函数、方法过程、事件过程等);

              6 逻辑结构-业务流程各环节划分清楚,接口明确(初始化、启动、处理、结束、退出、异常处理等)。

 

需求列表:V07-2.08版,完善应用程序部分。

       原始版核心业务内容。

       继承标准组件扩展部分功能。

程序列表:V07-2.08版,内容与作业源程序一一对应。

工作日志:与模板一致,Word文档实现。

       1 日志内容:工作项目名称、开始时间、结束时间。完成那些具体工作。

       2 验收要求:Word 文档,格式与模板相同。

实验报告:

       1 报告内容:图示纪录实际操作步骤,重点是编程实验部分的各个步骤。

       2 验收要求:其他同学可以按照提交的实验报告重复实现相同的实验。

项目验收:符合下列全部条件的同学可以申请结题。

       1 已经完成全部原始版和升级版业务流程。

       2 已经完成8个的实验全部通过审核。

       3 对分数不敏感。

       4 对编程没有兴趣。

 

【实验目的】

       本实验为架构实验的业务层编程实验,学生需要掌握对象编程,实现一个业务功能程序模块。

1 学生通过创建或扩展题目管理业务逻辑模块,进一步建立程序基本结构单位--程序模块的概念;

2 学生通过继承已有业务类,建立继承概念,掌握继承的编程方法,重点如何应用这些方法编程。

3 本次实验不再给出可重复的实验步骤,而只给出方法,学生需要独立完成设计和编程。

【实验环境与工具】

Microsoft Visual Studio .NET 2008

C#编程语言

《尚府教学》实验工具,标准组件V07-2.03

-标准BT组件 btSHFQuestionbtSHFQuestions

题目类btSHFQuestion说明

       属性:详见数据字典 btSHFQuestions表的说明

              public TimeSpan AverageTime { get; set; }

              public int ProgramID { get; }

              public string Question { get; set; }

              public string QuestionAnswer { get; set; }

              public string QuestionCode { get; set; }

              public int QuestionDiff { get; set; }

              public int QuestionID { get; set; }

              public string QuestionNote { get; set; }

              public string QuestionNumber { get; set; }

              public int QuestionScore { get; set; }

              public string QuestionSolution { get; set; }

              public string QuestionSubject { get; set; }

              public string QuestionTag { get; set; }

              public int QuestionType { get; set; }

       构造函数

              public btSHFQuestion();

              public btSHFQuestion(int id);

              public btSHFQuestion(int id, string unm, string ucd, int qtp);

              public btSHFQuestion(int pid, int id, string qnm, string qcd, string qtg, int qtp, int qdf, int qsc, TimeSpan atm, string qsb, string qtn, string qsl, string qa, string qnt);

       方法:

              public void CopyToMe(btSHFQuestion us);

      

       简易加法扩展数据和方法

              public struct sppQuestionstruct

                     {

                            public int aNumber;

                            public int fNumber;

                            public string oPerator;

                            public int sNumber;

                     }

              public btSHFQuestion.sppQuestionstruct sppQuestion;

              public btSHFQuestion GetQuestion(btSHFQuestion q);

              public void MakeQuestion(ref btSHFQuestion mq);

      

             

题目管理类btSHFQuestions说明

public btSHFQuestions();

public btSHFQuestions(string callStr);

 

public int CheckOne(string itemSubj);

public int AddOne(btSHFQuestion myItem);

public int UpdateOne(btSHFQuestion myItem);

public int DeleteOne(int itemId);

public ArrayList GetAll();

public btSHFQuestion GetByID(int itemId);

public btSHFQuestion GetOne(int itemId);

public void ReadOne(int itemId);

 

public string ToSqlSelectString();

 

             

【实验过程与步骤】

准备工作:存档、升级、创建第8版作业文件夹。
编程实验
业务说明

       本次业务层编程是一个简易加法的业务逻辑层,出题业务要求:

              1 题目从题库中选取。

              2 如果题库中没有,就随机出题,新题写入数据库。

              3 其他要求见实例的注释代码。

             

             

完善全部业务流程到业务环节:

       UI项目

              补齐窗体:按照原始版或用户需求列表检查业务环节,用继承标准组件方式补齐所有窗体。

              补齐功能:按照原始版或用户需求列表检查各个窗体上的各个功能是否具备,补齐所有不足的功能(本节课不要求全部实现)。

              调整形式:调整界面功能的表现形式与原始版一致。

              演示功能:编写简单演示程序,演示原始版业务流程和业务功能。

              组装应用:按照原始版业务功能,组装应用程序的V07-2.08版应用程序。

              注:

                     1 如果业务功能已经实现,可以跳过演示部分直接运行已经完成的业务功能。

                     2 未实现的功能背景设置为土黄色,实现演示功能的功能背景设置为橙色,已经完成的业务功能背景设置为蓝色,通过审核的业务功能背景设置为绿色。

       实验程序项目

              在实验窗体上完善各个业务流程,用规定色彩标识各个业务环节的启动按钮。

UI项目添加业务模块

       添加一个题目编辑测试窗体,上部显示标准题目类(btSHFQuestion)各项信息和说明信息,以及方法按钮,下部显示扩展内容的各项信息和说明信息,以及扩展的方法按钮。

BT项目添加扩展题目类 btSHFXXXQuestion

       用继承标准题目类(btSHFQuestion)的方法添加一个btSHFXXXQuestion类,在其中添加扩展的题目处理逻辑和题型处理算法。

       继承方式添加类:

       扩展题型处理算法: 实现具体应用程序不同题型的处理功能。

BT项目添加扩展题目管理类 btSHFXXXQuestions

       BT项目中,用继承标准题目集类(btSHFQuestions)方式添加题库管理业务类,在其中添加扩展的题库管理逻辑和出题策略算法。重点:(出题的算法、题目的管理、标准接口、不同题型处理逻辑)。

       继承方式添加管理类:

       扩展题库管理方法:  查询本程序和单元相关题目。

       扩展出题算法:题库添加题目算法;选题算法(随机、顺序、时间间隔--扩展用户题目关系表、熟练程度-根据单项成绩表)

BT项目中添加其他类:根据具体应用而定。

       添加业务流程类--如:按顺序依次运行各个业务环节。

实验项目编程实例:题目类btSHFQuestion编程
       属性:详见数据字典 btSHFQuestions表的说明

              public TimeSpan AverageTime { get; set; }

              public int ProgramID { get; }

              public string Question { get; set; }

              public string QuestionAnswer { get; set; }

              public string QuestionCode { get; set; }

              public int QuestionDiff { get; set; }

              public int QuestionID { get; set; }

              public string QuestionNote { get; set; }

              public string QuestionNumber { get; set; }

              public int QuestionScore { get; set; }

              public string QuestionSolution { get; set; }

              public string QuestionSubject { get; set; }

              public string QuestionTag { get; set; }

              public int QuestionType { get; set; }

       构造函数

              public btSHFQuestion();

              public btSHFQuestion(int id);

              public btSHFQuestion(int id, string unm, string ucd, int qtp);

              public btSHFQuestion(int pid, int id, string qnm, string qcd, string qtg, int qtp, int qdf, int qsc, TimeSpan atm, string qsb, string qtn, string qsl, string qa, string qnt);

       方法:

              public void CopyToMe(btSHFQuestion us);

      

       简易加法扩展数据和方法

              public struct sppQuestionstruct

                     {

                            public int aNumber;

                            public int fNumber;

                            public string oPerator;

                            public int sNumber;

                     }

              public btSHFQuestion.sppQuestionstruct sppQuestion;

              public btSHFQuestion GetQuestion(btSHFQuestion q);

              public void MakeQuestion(ref btSHFQuestion mq);

      

       #region sppQuestion 字段说明

              /// <summary>

              /// V05-2.08 发布版:尚    2008.08.15.

              /// </summary>

              ///Random rNumber = new Random();//实例化一个随机数对象

              ///rNumber.Next(1,10);//产生一个110之间的任意一个数

              ///rNumber.Next(1,1000);//产生一个11000之间的任意一个数

              private Random rnmb = new Random();

              public struct sppQuestionstruct

              {

                     public int fNumber;

                     public int sNumber;

                     public string oPerator;

                     public int aNumber;

              }

              public sppQuestionstruct sppQuestion = new sppQuestionstruct();

       #endregion

      

       #region sppQuestion  SPP与标准的转换方法

             

              /// <summary> 生成训练题

              ///

              /// </summary>

              /// <param name="qt"> 问题类型 </param>

              /// <param name="qd"> 问题难度 </param>

              /// <param name="sc"> 此题分值 </param>

              /// <param name="q">  问题对象 </param>

              private void sppMakeQuestion(int qt, int qd, int sc, btSHFQuestion q)

              {

                     int i;

                     switch (qt)

                     {

                            case 1: sppQuestion.oPerator = "";break;

                            case 2: sppQuestion.oPerator = "";break;

                            case 3: sppQuestion.oPerator = "×";break;

                            case 4: sppQuestion.oPerator = "÷";break;

                            default: sppQuestion.oPerator = "";break;

                     }

                    

                     switch (qd)

                     {

                            case 1:

                                   sppQuestion.fNumber = rnmb.Next(1, 9);

                                   i = 9 - sppQuestion.fNumber;

                                   sppQuestion.sNumber = rnmb.Next(1, i);

                                   q.QuestionNumber = "2008-02-04-01-03-01";

                                   q.QuestionCode = "DIAMOND";

                                   break;

                            case 2:

                                   sppQuestion.fNumber = rnmb.Next(5, 10);

                                   i = 19 - sppQuestion.fNumber;

                                   sppQuestion.sNumber = rnmb.Next(5, i);

                                   q.QuestionNumber = "2008-02-04-01-03-02";

                                   q.QuestionCode = "APPLE";

                                   break;

                            case 3:

                                   sppQuestion.fNumber = rnmb.Next(10, 25);

                                   i = 50 - sppQuestion.fNumber;

                                   sppQuestion.sNumber = rnmb.Next(10, i);

                                   q.QuestionNumber = "2008-02-04-01-03-03";

                                   q.QuestionCode = "ABACUS";

                                   break;

                            default:

                                   sppQuestion.fNumber = -1;

                                   sppQuestion.sNumber = -1;

                                   q.QuestionNumber = "";

                                   q.QuestionCode = "";

                                   break;

                     }

                     q = sppQuestionToSHFQuestion(q, sppQuestion);

                     q.QstnScr = sc;

                     //q.QstnSbjct = sppQuestion.fNumber.ToString() + "," + sppQuestion.oPerator + "," + sppQuestion.sNumber.ToString();// 题干

                     //q.QstnSltn;// 解答

                     //q.QstnAnswr = sppQuestion.aNumber.ToString();// 答案

              }

             

              /// 文本->>对象 题目文本转换对象20080606转换算法

              private sppQuestionstruct SHFQuesitonTosppQuestion(btSHFQuestion shfQ)

              {

                     //SWF.MessageBox.Show("StartReceive " + strUC);

                     string s = shfQ.QuestionSubject;

                     sppQuestionstruct q = new sppQuestionstruct();

                     try

                     {

                            //检查 s 的有效性

                            if (s.Length > 1 && s.IndexOf(",") > 0)

                            {

                                   //数据 5

                                   q.fNumber = System.Convert.ToInt32(s.Substring(0, s.IndexOf(","))); s = s.Remove(0, s.IndexOf(",") + 1);//r.UsrIDI =0;

                                   q.oPerator = s.Substring(0, s.IndexOf(",")); s = s.Remove(0, s.IndexOf(",") + 1);

                                   q.sNumber = System.Convert.ToInt32(s);

                                   q.aNumber = System.Convert.ToInt32(shfQ.QuestionAnswer);

                            }

                     }

                     catch (Exception ex)

                     {

                            throw new System.ApplicationException("sppQuestionstruct " + ex.ToString());

                     }

                    

                     return q;

                    

              }//sppQuestionToSHFQuestion

             

              /// 对象->>文本 题目对象值转换文本20080606转换算法

              private btSHFQuestion sppQuestionToSHFQuestion(btSHFQuestion q, sppQuestionstruct sppQ)

              {

                     q.QuestionSubject = sppQ.fNumber.ToString() + "," + sppQ.oPerator + "," + sppQ.sNumber.ToString();

                     q.Qstn = "=";// 提问

                     sppQ.aNumber = sppQ.fNumber + sppQ.sNumber;

                     q.QuestionAnswer = sppQ.aNumber.ToString();

                     return q;

              }//SHFQuesitonTosppQuestion

             

       #endregion

      

       #region 外部开放 出题方法

              public void MakeQuestion(ref btSHFQuestion mq)

              {

                     int i = 0;

                     //btSHFQuestion mq = new btSHFQuestion();

                     //sppMakeQuestion(QstnTp, QstnDff, 5, q);

                     mq.QuestionScore = 5;

                     i = NewQuestion(ref mq);//

              }

             

              /// <summary> 出新题

              /// 根据题目设置,出一道新题,更新题目内容。

              /// </summary>

              btSHFQuestions myItems = new btSHFQuestions();

              public btSHFQuestion GetQuestion(btSHFQuestion q)

              {

                     throw new Exception("The method or operation is not implemented.");

                     //q.QuestionSubject = "The method or operation is not implemented.";

                     //return q;

              }

       #endregion

      

       #region 内部实现 出题方法

              private int NewQuestion(ref btSHFQuestion q)//

              {

                     int i, id = -1;

                    

                     //

                     try

                     {

                            // 生成新题

                            sppMakeQuestion(q.QuestionType, q.QuestionDiff, q.QuestionScore, q);

                            // 新题入库

                            i = myItems.CheckOne(q.QuestionSubject);

                           

                            if (i == 0)

                            {

                                   myItems.AddOne(q);

                            }

                                   id = q.GetQuestionID(q);

                                   q = q.GetOne(id);

                                   if (q.QuestionID <= 0)

                                   {

                                          throw new Exception("btSHFQuestion NewQuestion 生成新题异常!");

                                   }

                                   return id;

                     }

                     catch

                     {

                            throw new Exception("btSHFQuestion NewQuestion 生成新题异常!");

                            //return -1;

                     }

                    

                     //return q;

                     // 库里读题 GetQuestion

                     // 出新题   NewQuestion

                     // 添加到题库

              }

             

              // 获取题目

              private btSHFQuestion GetOne(int qID)

              {

                     btSHFQuestion q = new btSHFQuestion();

                     btSHFQuestions qs = new btSHFQuestions();

                     q = qs.GetByID(qID);

                     q.sppQuestion = this.SHFQuesitonTosppQuestion(q);

                     return q;

                     //throw new Exception("The method or operation is not implemented.");

              }

              private int GetQuestionID(btSHFQuestion q)

              {

                     btSHFQuestions qs = new btSHFQuestions();

                     int i = qs.GetQuestionID(q);

                     return i;

                     //throw new Exception("The method or operation is not implemented.");

              }

       #endregion

             

 

冒烟试验

       启动应用程序--对照原始版和用户需求,检查到业务功能实现程度,在需求列表中用色彩标识出来。

       启动作业程序--选择实验程序,检查题目编辑、显示窗体,检查题目环节。

 

编写技术文档

需求列表

       修改日期和版本编号;V07-2.08

       应用程序部分--核心业务部分完成的教学业务流程到产品功能点。

       作业程序部分--添加升级版实验窗体新增加的核心业务窗体和功能。

程序列表

修改日期和版本编号;V07-2.08

根据升级版实验窗体新增核心业务流程及实验功能后实现的V07-2.08版程序完善程序列表:

       UIBT项目--新增的业务模块。

       UI项目--uiSHFXXX_AppMain应用程序新增的功能。

       教学实验项目--SHFXXX_TestV072.新增的核心业务流程,检查每个核心业务环节。

数据字典

修改日期和版本编号;V07-2.08

扩展的题目类和题目管理类。

完成工作文件

工作日志1 实际工作日日期:开始时间、结束时间、工作项目名称和内容。

 

实验报告

1 报告内容:图示纪录实际操作步骤,重点是编程实验部分的各个步骤。

 

准备提交作业

程序代码1:选定解决方案-右键-清理解决方案-关闭VS2008

技术文档3:将项目需求列表、程序列表、数据字典添加到源程序文件夹。

工作文档2:将工作日志、实验报告添加到源程序文件夹。

 

小组提交1:选定源程序文件夹-右键-压缩打包-完成V07-2.08版源程序-保存-提交组长审核。

邮件提交2技术文档、工作文档发送到作业邮箱,分别独立发送,要求作业发送格式正确。

 

截至时间:20100526 23:50

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值