Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре
Шрифт:
Интервал:
Закладка:
//---------------------------------------
//Создает и наполняет данными базу данных
//---------------------------------------
static public void CreateAndFillDatabase() {
//Удалить базу данных, если она уже существует
if (System.IO.File.Exists(DATABASE_NAME)) {
System.IO.File.Delete(DATABASE_NAME);
}
//Создать новую базу данных
System.Data.SqlServerCe.SqlCeEngine sqlCeEngine;
sqlCeEngine = new System.Data.SqlServerCe.SqlCeEngine(CONNECT_STRING);
sqlCeEngine.CreateDatabase();
//-------------------------------------
//Попытаться подключиться к базе данных
//и наполнить ее данными
//-------------------------------------
System.Data.SqlServerCe.SqlCeConnection conn = null;
try {
conn = new System.Data.SqlServerCe.SqlCeConnection(CONNECT_STRING);
conn.Open();
System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand();
//Создает таблицу перевода
//Поля:
// 1. Слова на английском языке (English)
// 2. Слова на немецком языке (German)
// 3. Грамматический род (Gender)
// 4. Тип слова
cmd.CommandText = "CREATE TABLE " + TRANSLATIONTABLE_NAME + " (" +
TRANSLATIONTABLE_ENGLISH_COLUMN + " ntext" + ", " +
TRANSLATIONTABLE_GERMAN_COLUMN + " ntext" + ", " +
TRANSLATIONTABLE_GERMANGENDER_COLUMN + " int" + ", " +
TRANSLATIONTABLE_WORDFUNCTION_COLUMN + " int" + ")";
cmd.ExecuteNonQuery();
//Наполнить базу данных словами
FillDictionary(cmd);
} catch (System.Exception eTableCreate) {
System.Windows.Forms.MessageBox.Show("Error occurred adding table :" + eTableCreate.ToString());
} finally {
//Всегда закрывать базу данных по окончании работы
conn.Close();
}
//Информировать пользователя о создании базы данных
System.Windows.Forms.MessageBox.Show("Created langauge database!");
}
static private void FillDictionary(System.Data.SqlServerCe.SqlCeCommand cmd) {
//Глаголы
InsertEnglishGermanWordPair(cmd, "to pay", "zahlen",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Verb);
InsertEnglishGermanWordPair(cmd, "to catch", "fangen",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Verb);
//Добавить другие слова...
//Местоимения
InsertEnglishGermanWordPair(cmd, "What", "was",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Pronoun);
//Добавить другие слова...
//Наречия
InsertEnglishGermanWordPair(cmd, "where", "wo",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adverb);
InsertEnglishGermanWordPair(cmd, "never", "nie",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adverb);
//Добавить другие слова...
//Предлоги
InsertEnglishGermanWordPair(cmd, "at the", "am",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Preposition);
//Имена прилагательные
InsertEnglishGermanWordPair(cmd, "invited", "eingeladen",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Verb);
InsertEnglishGermanWordPair(cmd, "yellow", "gelbe",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adjective);
InsertEnglishGermanWordPair(cmd, "one", "eins",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adjective);
InsertEnglishGermanWordPair(cmd, "two", "zwei",
VocabularyWord.WordGender.notApplicable, VocabularyWord.WordFunction.Adjective);
//Имена существительные мужского рода
InsertEnglishGermanWordPair(cmd, "Man", "Mann",
VocabularyWord.WordGender.Masculine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Marketplace", "Marktplatz",
VocabularyWord.WordGender.Masculine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Spoon", "Löffel",
VocabularyWord.WordGender.Masculine, VocabularyWord.WordFunction.Noun);
//Имена существительные женского рода
InsertEnglishGermanWordPair(cmd, "Woman", "Frau",
VocabularyWord.WordGender.Feminine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Clock", "Uhr",
VocabularyWord.WordGender.Feminine, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Cat", "Katze",
VocabularyWord.WordGender.Feminine, VocabularyWord.WordFunction.Noun);
//Имена существительные среднего рода
InsertEnglishGermanWordPair(cmd, "Car", "Auto",
VocabularyWord.WordGender.Neuter, VocabularyWord.WordFunction.Noun);
InsertEnglishGermanWordPair(cmd, "Book", "Buch",
VocabularyWord.WordGender.Neuter, VocabularyWord.WordFunction.Noun);
}
//----------------------------
//Помещает слово в базу данных
//----------------------------
static private void InsertEnglishGermanWordPair(
System.Data.SqlServerCe.SqlCeCommand cmd,
string englishWord, string germanWord,
VocabularyWord.WordGender germanWordGender,
VocabularyWord.WordFunction wordFunction) {
cmd.CommandText = "INSERT INTO " + TRANSLATIONTABLE_NAME + "(" +
TRANSLATIONTABLE ENGLISH_COLUMN + ", " +
TRANSLATIONTABLE_GERMAN_COLUMN + ", " +
TRANSLATIONTABLE_GERMANGENDER_COLUMN + ", " +
TRANSLATIONTABLE_WORDFUNCTION_COLUMN + ") VALUES ('" +
englishWord + "', '" + germanWord + "', '" +
System.Convert.ToString(((int) germanWordGender))+ "', '" +
System.Convert.ToString(((int) wordFunction)) + "' )";
cmd.ExecuteNonQuery();
}
} //Конец класса
Листинг 14.7. Пример кода управления данными для GameData.cs//-----------------------------------------------------------------
//Код управления данными в памяти
//
//Этот код предназначен для управления представлением кода в памяти
//-----------------------------------------------------------------
using System;
internal class GameData {
//Массив списков для сохранения загружаемых данных
private static System.Collections.ArrayList m_vocabularyWords All;
private static System.Collections.ArrayList m_vocabularyWords_Nouns;
private static System.Collections.ArrayList m_vocabularyWords_Verbs;
private static System.Collections.ArrayList m_vocabularyWords_Adjectives;
private static System.Collections.ArrayList m_vocabularyWords_Adverbs;
private static System.Collections.ArrayList m_vocabularyWords_Prepositions;
public static bool isGameDataInitialized {
//Инициализация данных игры, если слова загружены
get {
return (m_vocabularyWords_All != null);
}
}
//Возвращает коллекцию всех имеющихся слов
public static System.Collections.ArrayList AllWords {
get {
//Загрузить данные, если они не были инициализированы
if (m_vocabularyWords_All == null) {
InitializeGameVocabulary();
}
return m_vocabularyWords_All;
}
}
//Возвращает коллекцию всех имеющихся имен существительных
public static System.Collections.ArrayList Nouns {
get {
//Загрузить данные, если они не были инициализированы
if (m_vocabularyWords_Nouns == null) {
InitializeGameVocabulary();
}
return m_vocabularyWords_Nouns;
}
}
//==========================================================
//Загружает данные из нашей базы данных
//==========================================================
static public void InitializeGameVocabulary() {
//Создать новый массив списков для хранения наших слов
m_vocabularyWords_All = new System.Collections.ArrayList();
m_vocabularyWords_Nouns = new System.Collections.ArrayList();
m_vocabularyWords Verbs = new System.Collections.ArrayList();
m_vocabularyWords_Adjectives = new System.Collections.ArrayList();
m_vocabularyWords_Adverbs = new System.Collections.ArrayList();
m_vocabularyWords_Prepositions = new System.Collections.ArrayList();
System.Data.IDataReader dataReader;
dataReader = DatabaseAccess.GetListOfWords();
VocabularyWord newWord;
//Обойти все записи
while (dataReader.Read()) {
//Поместить данные для только что считанного слова в класс
newWord = new VocabularyWord(
dataReader.GetString(DatabaseAccess.DS_WORDS_COLUMNINDEX_ENGLISHWORD),
dataReader.GetString(DatabaseAccess.DS_WORDS COLUMNINDEX_GERMANWORD),
(VocabularyWord.WordGender)dataReader.GetInt32(DatabaseAccess.DS_WORDS_COLUMNINDEX_GERMANGENDER),
(VocabularyWord.WordFunction)dataReader.GetInt32(DatabaseAccess.DS_WORDS_COLUMNINDEX_WORDFUNCTION));
//Добавить новое слово в массив списков
m_vocabularyWords_All.Add(newWord);
//Слова могут принадлежать нескольким группам, поэтому необходимо
//выполнить проверку с использованием операции логического И
//для проверки того, что слово относится к данной категории
if ((newWord.getWordFunction & VocabularyWord.WordFunction.Noun) ! = 0) {
m_vocabularyWords_Nouns.Add(newWord);
}
if ((newWord.getWordFunction & VocabularyWord.WordFunction.Verb) != 0) {
m_vocabularyWords_Verbs.Add(newWord);
}
if ((newWord.getWordFunction & VocabularyWord.WordFunction.Adjective) != 0) {
m_vocabularyWords Adjectives.Add(newWord);
}
if ((newWord.getWordFunction & VocabularyWord.WordFunction.Adverb) != 0) {
m_vocabularyWords Adverbs.Add(newWord);
}
if ((newWord.getWordFunction & VocabularyWord.WordFunction.Preposition) != 0) {