Professional Applications Programmers/Consultants برمجة واستشارات تطبيقات الإنترنت
Skip Navigation LinksHome » Code Library » Russian

Public general use code classes and xml files that we've compiled and used over the years:

Russian class

   1:  using System;
   2:  using System.Xml.Linq;
   3:  using System.Linq;
   4:  using System.IO;
   5:  using System.Data;
   6:  using System.Collections;
   7:  using System.Collections.Generic;
   8:  using System.Reflection;
   9:   
  10:  namespace Ia.TentPlay.Cl.Model.Memorise
  11:  {
  12:      ////////////////////////////////////////////////////////////////////////////
  13:   
  14:      /// <summary publish="true">
  15:      /// Russian class
  16:      /// </summary>
  17:      /// <value>
  18:      /// https://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx
  19:      /// </value>
  20:      /// <remarks> 
  21:      /// Copyright © 2008-2018 Jasem Y. Al-Shamlan (info@ia.com.kw), Internet Applications - Kuwait. All Rights Reserved.
  22:      ///
  23:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  24:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  25:      ///
  26:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  27:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  28:      /// 
  29:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  30:      /// 
  31:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  32:      /// </remarks> 
  33:      public class Russian : Test
  34:      {
  35:          private XDocument xDocument;
  36:          protected override TestTopic testTopic
  37:          {
  38:              get
  39:              {
  40:                  return Ia.TentPlay.Cl.Model.Memorise.Test.TestTopic.Russian;
  41:              }
  42:          }
  43:   
  44:          ////////////////////////////////////////////////////////////////////////////
  45:   
  46:          /// <summary>
  47:          ///
  48:          /// </summary>
  49:          public enum WordType { Verb = 1, Noun, Adjective, Adverb, Unspecified };
  50:   
  51:          ////////////////////////////////////////////////////////////////////////////
  52:   
  53:          /// <summary>
  54:          ///
  55:          /// </summary>
  56:          public struct Word
  57:          {
  58:              public WordType Type;
  59:              public string English;
  60:              public string Russian;
  61:   
  62:              /// <summary/>
  63:              public Word(string english, string russian, WordType type)
  64:              {
  65:                  this.Type = type;
  66:                  this.English = english;
  67:                  this.Russian = russian;
  68:              }
  69:   
  70:              /// <summary/>
  71:              public override string ToString()
  72:              {
  73:                  return this.Russian + ":" + this.English + ":" + this.Type;
  74:              }
  75:          }
  76:   
  77:          ////////////////////////////////////////////////////////////////////////////
  78:   
  79:          /// <summary>
  80:          ///
  81:          /// </summary>
  82:          public Russian() { }
  83:   
  84:          ////////////////////////////////////////////////////////////////////////////
  85:   
  86:          /// <summary>
  87:          /// Read all tests
  88:          /// </summary>
  89:          public List<Word> ReadList()
  90:          {
  91:              WordType wordType;
  92:              Word word;
  93:              List<Word> wordList;
  94:   
  95:              wordList = new List<Word>(10000);
  96:   
  97:              foreach (XElement xe in XDocument.Elements("russian").Elements())
  98:              {
  99:                  switch (xe.Name.LocalName)
 100:                  {
 101:                      case "verb": wordType = WordType.Verb; break;
 102:                      case "noun": wordType = WordType.Noun; break;
 103:                      case "adjective": wordType = WordType.Adjective; break;
 104:                      case "adverb": wordType = WordType.Adverb; break;
 105:                      default: wordType = WordType.Unspecified; break;
 106:                  }
 107:   
 108:                  word = new Word(xe.Attribute("english").Value, xe.Attribute("russian").Value, wordType);
 109:   
 110:                  wordList.Add(word);
 111:              }
 112:   
 113:              return wordList;
 114:          }
 115:   
 116:          ////////////////////////////////////////////////////////////////////////////
 117:   
 118:          /// <summary>
 119:          ///
 120:          /// </summary>
 121:          public override void PopulateTestDatabaseTableWithInitialQuestionsIfEmpty(string userId)
 122:          {
 123:              int count;
 124:              string question, answer;
 125:              XDocument xDocument;
 126:              WordType wordType;
 127:              Ia.TentPlay.Cl.Model.Memorise.Score score;
 128:              List<Ia.TentPlay.Cl.Model.Memorise.Score> scoreList;
 129:   
 130:              xDocument = XDocument;
 131:   
 132:              // below: synch database words with XML list
 133:              using (var db = new Ia.TentPlay.Db.Memorise())
 134:              {
 135:                  count = (from s in db.Scores where s.TestId == (int)Ia.TentPlay.Cl.Model.Memorise.Test.TestTopic.Russian select s).Count();
 136:   
 137:                  if (count == 0)
 138:                  {
 139:                      scoreList = Ia.TentPlay.Cl.Model.Memorise.Score.RussianScoreList(userId);
 140:   
 141:                      foreach (XElement xe in xDocument.Elements("russian").Elements())
 142:                      {
 143:                          switch (xe.Name.LocalName)
 144:                          {
 145:                              case "verb": wordType = WordType.Verb; break;
 146:                              case "noun": wordType = WordType.Noun; break;
 147:                              case "adjective": wordType = WordType.Adjective; break;
 148:                              case "adverb": wordType = WordType.Adverb; break;
 149:                              default: wordType = WordType.Unspecified; break;
 150:                          }
 151:   
 152:                          question = xe.Attribute("russian").Value;
 153:                          answer = xe.Attribute("english").Value;
 154:   
 155:                          score = (from s in scoreList where s.TestId == (int)testTopic && s.Question == question && s.Answer == answer && s.TypeId == (int)wordType select s).FirstOrDefault();
 156:   
 157:                          if (score == null)
 158:                          {
 159:                              score = new Ia.TentPlay.Cl.Model.Memorise.Score();
 160:   
 161:                              score.Question = question;
 162:                              score.Answer = answer;
 163:                              score.TestId = (int)testTopic;
 164:                              score.TypeId = 0; //(int)wordType;
 165:                              score.Created = score.Updated = score.Viewed = DateTime.UtcNow.AddHours(3);
 166:                              //score.User.Id = identityUserId;
 167:   
 168:                              db.Scores.Add(score);
 169:                          }
 170:                      }
 171:   
 172:                      db.SaveChanges();
 173:                  }
 174:              }
 175:          }
 176:   
 177:          ////////////////////////////////////////////////////////////////////////////
 178:   
 179:          /// <summary>
 180:          ///
 181:          /// </summary>
 182:          public override int WeightedRandomTypeIdAccordingTypeDistribution(string userId)
 183:          {
 184:              /*
 185:              int countOfAllTypes, countOfTypeId1, countOfTypeId2, countOfTypeId3, countOfTypeId4, countOfTypeId5, typeId;
 186:              ArrayList countArrayList;
 187:  
 188:              // public enum WordType { Verb = 1, Noun, Adjective, Adverb, Unspecified };
 189:  
 190:              using (var db = new Ia.TentPlay.Db.Memorise())
 191:              {
 192:                  countOfAllTypes = (from s in db.Scores where s.TestId == (int)testTopic select s).Count();
 193:                  countOfTypeId1 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Verb select s).Count();
 194:                  countOfTypeId2 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Noun select s).Count();
 195:                  countOfTypeId3 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Adjective select s).Count();
 196:                  countOfTypeId4 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Adverb select s).Count();
 197:                  countOfTypeId5 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Unspecified select s).Count();
 198:  
 199:                  countArrayList = new ArrayList(countOfAllTypes);
 200:  
 201:                  // below: populate ArrayList with TypeId keys a number of times equal to its count
 202:                  for (int i = 0; i < countOfTypeId1; i++) countArrayList.Add((int)WordType.Verb);
 203:                  for (int i = 0; i < countOfTypeId2; i++) countArrayList.Add((int)WordType.Noun);
 204:                  for (int i = 0; i < countOfTypeId3; i++) countArrayList.Add((int)WordType.Adjective);
 205:                  for (int i = 0; i < countOfTypeId4; i++) countArrayList.Add((int)WordType.Adverb);
 206:                  for (int i = 0; i < countOfTypeId5; i++) countArrayList.Add((int)WordType.Unspecified);
 207:  
 208:                  typeId = (int)countArrayList[random.Next(countOfAllTypes)];
 209:              }
 210:              */
 211:   
 212:              return 0; // typeId;
 213:          }
 214:   
 215:          ////////////////////////////////////////////////////////////////////////////
 216:          ////////////////////////////////////////////////////////////////////////////
 217:   
 218:          /// <summary>
 219:          /// 
 220:          /// How to embed and access resources by using Visual C# http://support.microsoft.com/kb/319292/en-us
 221:          /// 
 222:          /// 1. Change the "Build Action" property of your XML file from "Content" to "Embedded Resource".
 223:          /// 2. Add "using System.Reflection".
 224:          /// 3. See sample below.
 225:          /// 
 226:          /// </summary>
 227:          public XDocument XDocument
 228:          {
 229:              get
 230:              {
 231:                  if (xDocument == null)
 232:                  {
 233:                      Assembly _assembly;
 234:                      StreamReader streamReader;
 235:   
 236:                      _assembly = Assembly.GetExecutingAssembly();
 237:                      streamReader = new StreamReader(_assembly.GetManifestResourceStream("Ia.TentPlay.Cl.model.data.memorise.russian.xml"));
 238:   
 239:                      try
 240:                      {
 241:                          if (streamReader.Peek() != -1)
 242:                          {
 243:                              xDocument = System.Xml.Linq.XDocument.Load(streamReader);
 244:                          }
 245:                      }
 246:                      catch (Exception)
 247:                      {
 248:                      }
 249:                      finally
 250:                      {
 251:                      }
 252:                  }
 253:   
 254:                  return xDocument;
 255:              }
 256:          }
 257:   
 258:          ////////////////////////////////////////////////////////////////////////////
 259:          ////////////////////////////////////////////////////////////////////////////    
 260:      }
 261:   
 262:      ////////////////////////////////////////////////////////////////////////////
 263:      ////////////////////////////////////////////////////////////////////////////   
 264:  }