)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » German (Ia.TentPlay.Cl.Models.Memorise)

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

German class

    1: using System.Xml.Linq;
    2: using System.Data;
    3: using System.Collections;
    4: using System.Reflection;
    5: using System;
    6: using System.Linq;
    7: using System.Collections.Generic;
    8: using System.IO;
    9:  
   10: namespace Ia.TentPlay.Cl.Models.Memorise
   11: {
   12:     ////////////////////////////////////////////////////////////////////////////
   13:  
   14:     /// <summary publish="true">
   15:     /// German 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), Integrated 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 German : Test
   34:     {
   35:         private XDocument xDocument;
   36:         protected override TestTopic testTopic
   37:         {
   38:             get
   39:             {
   40:                 return Ia.TentPlay.Cl.Models.Memorise.Test.TestTopic.German;
   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 German;
   61:  
   62:             /// <summary/>
   63:             public Word(string english, string german, WordType type)
   64:             {
   65:                 this.Type = type;
   66:                 this.English = english;
   67:                 this.German = german;
   68:             }
   69:  
   70:             /// <summary/>
   71:             public override string ToString()
   72:             {
   73:                 return this.German + ":" + this.English + ":" + this.Type;
   74:             }
   75:         }
   76:  
   77:         ////////////////////////////////////////////////////////////////////////////
   78:  
   79:         /// <summary>
   80:         ///
   81:         /// </summary>
   82:         public German() { }
   83:  
   84:         ////////////////////////////////////////////////////////////////////////////
   85:  
   86:         /// <summary>
   87:         ///
   88:         /// </summary>
   89:         public override void PopulateTestDatabaseTableWithInitialQuestionsIfEmpty(Guid userId)
   90:         {
   91:             int count;
   92:             string question, answer;
   93:             XDocument xDocument;
   94:             WordType wordType;
   95:             Ia.TentPlay.Cl.Models.Memorise.Score score;
   96:             List<Ia.TentPlay.Cl.Models.Memorise.Score> scoreList;
   97:  
   98:             xDocument = XDocument;
   99:  
  100:             // below: synch database words with XML list
  101:             using (var db = new Ia.TentPlay.Db())
  102:             {
  103:                 count = (from s in db.Scores where s.TestId == (int)Ia.TentPlay.Cl.Models.Memorise.Test.TestTopic.German select s).Count();
  104:  
  105:                 if (count == 0)
  106:                 {
  107:                     scoreList = Ia.TentPlay.Cl.Models.Memorise.Score.GermanScoreList(userId);
  108:  
  109:                     foreach (XElement xe in xDocument.Elements("german").Elements())
  110:                     {
  111:                         switch (xe.Name.LocalName)
  112:                         {
  113:                             case "verb": wordType = WordType.Verb; break;
  114:                             case "noun": wordType = WordType.Noun; break;
  115:                             case "adjective": wordType = WordType.Adjective; break;
  116:                             case "adverb": wordType = WordType.Adverb; break;
  117:                             default: wordType = WordType.Unspecified; break;
  118:                         }
  119:  
  120:                         question = xe.Attribute("german").Value;
  121:                         answer = xe.Attribute("english").Value;
  122:  
  123:                         score = (from s in scoreList where s.TestId == (int)testTopic && s.Question == question && s.Answer == answer && s.TypeId == (int)wordType select s).FirstOrDefault();
  124:  
  125:                         if (score == null)
  126:                         {
  127:                             score = new Ia.TentPlay.Cl.Models.Memorise.Score();
  128:  
  129:                             score.Question = question;
  130:                             score.Answer = answer;
  131:                             score.TestId = (int)testTopic;
  132:                             score.TypeId = (int)wordType;
  133:                             score.Created = score.Updated = score.Viewed = DateTime.UtcNow.AddHours(3);
  134:                             score.UserId = userId;
  135:  
  136:                             db.Scores.Add(score);
  137:                         }
  138:                     }
  139:  
  140:                     db.SaveChanges();
  141:                 }
  142:             }
  143:         }
  144:  
  145:         ////////////////////////////////////////////////////////////////////////////
  146:  
  147:         /// <summary>
  148:         ///
  149:         /// </summary>
  150:         public override int WeightedRandomTypeIdAccordingTypeDistribution(Guid userId)
  151:         {
  152:             int countOfAllTypes, countOfTypeId1, countOfTypeId2, countOfTypeId3, countOfTypeId4, countOfTypeId5, typeId;
  153:             ArrayList countArrayList;
  154:  
  155:             // public enum WordType { Verb = 1, Noun, Adjective, Adverb, Unspecified };
  156:  
  157:             using (var db = new Ia.TentPlay.Db())
  158:             {
  159:                 countOfAllTypes = (from s in db.Scores where s.TestId == (int)testTopic select s).Count();
  160:                 countOfTypeId1 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Verb select s).Count();
  161:                 countOfTypeId2 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Noun select s).Count();
  162:                 countOfTypeId3 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Adjective select s).Count();
  163:                 countOfTypeId4 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Adverb select s).Count();
  164:                 countOfTypeId5 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Unspecified select s).Count();
  165:  
  166:                 countArrayList = new ArrayList(countOfAllTypes);
  167:  
  168:                 // below: populate ArrayList with TypeId keys a number of times equal to its count
  169:                 for (int i = 0; i < countOfTypeId1; i++) countArrayList.Add((int)WordType.Verb);
  170:                 for (int i = 0; i < countOfTypeId2; i++) countArrayList.Add((int)WordType.Noun);
  171:                 for (int i = 0; i < countOfTypeId3; i++) countArrayList.Add((int)WordType.Adjective);
  172:                 for (int i = 0; i < countOfTypeId4; i++) countArrayList.Add((int)WordType.Adverb);
  173:                 for (int i = 0; i < countOfTypeId5; i++) countArrayList.Add((int)WordType.Unspecified);
  174:  
  175:                 typeId = (int)countArrayList[random.Next(countOfAllTypes)];
  176:             }
  177:  
  178:             return typeId;
  179:         }
  180:  
  181:         /*
  182:         ////////////////////////////////////////////////////////////////////////////
  183: 
  184:         /// <summary>
  185:         /// 
  186:         /// </summary>        
  187:         [Obsolete("", true)]
  188:         public static void CheckAndMergeGermanXmlEntries()
  189:         {
  190:             StringBuilder sb;
  191:             Word final;
  192:             List<Word> firstList, middleList, tempList, lastList;
  193: 
  194:             firstList = ReadList();
  195:             middleList = ReadList();
  196: 
  197:             sb = new StringBuilder(firstList.Count * 100);
  198: 
  199:             tempList = new List<Word>(10);
  200: 
  201: 
  202:             // below: examine and handle exact (English, German, and type) redundant entries
  203: 
  204:             lastList = new List<Word>(firstList.Count);
  205: 
  206:             foreach (Word word in firstList)
  207:             {
  208:                 if (!lastList.Contains(word))
  209:                 {
  210:                     tempList = (from q in middleList where q.German == word.German && q.English == word.English && q.Type == word.Type select q).ToList<Word>();
  211: 
  212:                     if (tempList.Count > 0)
  213:                     {
  214:                         final = new Word();
  215: 
  216:                         final.German = word.German;
  217:                         final.English = word.English;
  218:                         final.Type = word.Type;
  219: 
  220:                         lastList.Add(final);
  221: 
  222:                         middleList.Remove(final);
  223:                     }
  224:                     else
  225:                     {
  226:                     }
  227:                 }
  228:             }
  229: 
  230: 
  231:             // below: examine and handle redundant (English, German) entries but keep the one with a word type
  232: 
  233:             firstList = lastList;
  234:             middleList.Clear();
  235:             lastList.ForEach(i => middleList.Add(i));
  236: 
  237:             lastList = new List<Word>(firstList.Count);
  238: 
  239:             foreach (Word word in firstList)
  240:             {
  241:                 if (!lastList.Contains(word))
  242:                 {
  243:                     tempList = (from q in middleList where q.German == word.German && q.English == word.English select q).ToList<Word>();
  244: 
  245:                     if (tempList.Count == 1 || tempList.Count == 2)
  246:                     {
  247:                         final = new Word();
  248: 
  249:                         final.German = word.German;
  250:                         final.English = word.English;
  251: 
  252:                         if (tempList.Count == 1)
  253:                         {
  254:                             final.Type = word.Type;
  255:                             lastList.Add(final);
  256:                             middleList.Remove(final);
  257:                         }
  258:                         else if (tempList.Count == 2)
  259:                         {
  260:                             if (tempList[0].Type != WordType.Unspecified && tempList[1].Type == WordType.Unspecified)
  261:                             {
  262:                                 final.Type = tempList[0].Type;
  263:                                 lastList.Add(final);
  264: 
  265:                                 middleList.Remove(tempList[0]);
  266:                                 middleList.Remove(tempList[1]);
  267:                             }
  268:                             else if (tempList[0].Type == WordType.Unspecified && tempList[1].Type != WordType.Unspecified)
  269:                             {
  270:                                 final.Type = tempList[1].Type;
  271:                                 lastList.Add(final);
  272: 
  273:                                 middleList.Remove(tempList[0]);
  274:                                 middleList.Remove(tempList[1]);
  275:                             }
  276:                             else
  277:                             {
  278:                                 // below: a word is both adverb and adjective
  279:                                 final.Type = tempList[0].Type;
  280:                                 lastList.Add(final);
  281:                                 middleList.Remove(final);
  282: 
  283:                                 final.Type = tempList[1].Type;
  284:                                 lastList.Add(final);
  285:                                 middleList.Remove(final);
  286:                             }
  287:                         }
  288:                     }
  289:                     else
  290:                     {
  291:                         // below: manually fix XML
  292:                     }
  293:                 }
  294:             }
  295: 
  296: 
  297:             // below: remove exact redundant entries (German only)
  298: 
  299:             firstList = lastList;
  300:             middleList.Clear();
  301:             lastList.ForEach(i => middleList.Add(i));
  302: 
  303:             lastList = new List<Word>(firstList.Count);
  304: 
  305:             foreach (Word word in firstList)
  306:             {
  307:                 if (!lastList.Contains(word))
  308:                 {
  309:                     tempList = (from q in middleList where q.German == word.German select q).ToList<Word>();
  310: 
  311:                     if (tempList.Count > 0)
  312:                     {
  313:                         if (tempList.Count == 1 || tempList.Count == 2)
  314:                         {
  315:                             final = new Word();
  316: 
  317:                             final.German = word.German;
  318: 
  319:                             if (tempList.Count == 1)
  320:                             {
  321:                                 final.Type = word.Type;
  322:                                 final.English = word.English;
  323:                                 lastList.Add(final);
  324:                                 middleList.Remove(final);
  325:                             }
  326:                             else if (tempList.Count == 2)
  327:                             {
  328:                                 if (tempList[0].English.Contains(tempList[1].English))
  329:                                 {
  330:                                     final.Type = tempList[0].Type;
  331:                                     final.English = tempList[0].English;
  332:                                     lastList.Add(final);
  333: 
  334:                                     middleList.Remove(tempList[0]);
  335:                                     middleList.Remove(tempList[1]);
  336:                                 }
  337:                                 else if (tempList[1].English.Contains(tempList[0].English))
  338:                                 {
  339:                                     final.Type = tempList[1].Type;
  340:                                     final.English = tempList[1].English;
  341:                                     lastList.Add(final);
  342: 
  343:                                     middleList.Remove(tempList[0]);
  344:                                     middleList.Remove(tempList[1]);
  345:                                 }
  346:                                 else
  347:                                 {
  348:                                     final.Type = tempList[0].Type;
  349:                                     final.English = tempList[0].English;
  350:                                     lastList.Add(final);
  351:                                     middleList.Remove(tempList[0]);
  352: 
  353:                                     final.Type = tempList[1].Type;
  354:                                     final.English = tempList[1].English;
  355:                                     lastList.Add(final);
  356:                                     middleList.Remove(tempList[1]);
  357: 
  358:                                     //sb.AppendLine(tempList[0].ToString());
  359:                                     //sb.AppendLine(tempList[1].ToString());
  360:                                 }
  361:                             }
  362:                         }
  363:                         else
  364:                         {
  365:                             // below: manually fix XML
  366: 
  367:                             sb.AppendLine(word.ToString());
  368:                         }
  369:                     }
  370:                 }
  371:             }
  372: 
  373:             // below: create new XML file
  374:             foreach (Word word in lastList)
  375:             {
  376:                 sb.AppendLine(@"<" + word.Type.ToString().ToLower() + @" german=""" + word.German + @""" english=""" + word.English + @"""/>");
  377:             }
  378: 
  379:         }
  380:         */
  381:  
  382:         ////////////////////////////////////////////////////////////////////////////
  383:         ////////////////////////////////////////////////////////////////////////////
  384:  
  385:         /// <summary>
  386:         /// 
  387:         /// How to embed and access resources by using Visual C# http://support.microsoft.com/kb/319292/en-us
  388:         /// 
  389:         /// 1. Change the "Build Action" property of your XML file from "Content" to "Embedded Resource".
  390:         /// 2. Add "using System.Reflection".
  391:         /// 3. Manifest resource stream will start with the project namespace, the location of XML file.
  392:         /// 
  393:         /// </summary>
  394:         public XDocument XDocument
  395:         {
  396:             get
  397:             {
  398:                 if (xDocument == null)
  399:                 {
  400:                     Assembly assembly;
  401:                     StreamReader streamReader;
  402:  
  403:                     assembly = Assembly.GetExecutingAssembly();
  404:                     streamReader = new StreamReader(assembly.GetManifestResourceStream("Ia.TentPlay.Cl.model.data.memorise.german.xml"));
  405:  
  406:                     try
  407:                     {
  408:                         if (streamReader.Peek() != -1)
  409:                         {
  410:                             xDocument = System.Xml.Linq.XDocument.Load(streamReader);
  411:                         }
  412:                     }
  413:                     catch (Exception)
  414:                     {
  415:                     }
  416:                     finally
  417:                     {
  418:                     }
  419:                 }
  420:  
  421:                 return xDocument;
  422:             }
  423:         }
  424:  
  425:         ////////////////////////////////////////////////////////////////////////////
  426:         ////////////////////////////////////////////////////////////////////////////    
  427:     }
  428:  
  429:     ////////////////////////////////////////////////////////////////////////////
  430:     ////////////////////////////////////////////////////////////////////////////   
  431: }