Voici un petit programme édité sous Visual C++ 2003 mais fonctionne également sur VS 06 et VS 2005!
Il s'agit de l'apprentissage des FAUX AMIS et des VERBES IRREGULIERS en anglais.
Les données se trouvent en fait dans un fichier XML
Source / Exemple :
void CEnglish_GrammarDlg::OnBnClickedLoadxml()
{
CoInitialize(NULL);
srand(time(NULL));
CXMLDOMDocument m_xmlEnglishDoc;
CXMLDOMNode xmlWordBookNode;
CXMLDOMNodeList xmlWordBookNodeList;
CXMLDOMNode xmlWorkSheetNode1;//Faux Amis
CXMLDOMNode xmlWorkSheetNode2;//Irregular Verbs
CXMLDOMNodeList xmlRowNodeList;
CString test = "";
if (!m_xmlEnglishDoc.CreateDispatch(_T("MSXML.DOMDocument")))
return;
if(!m_xmlEnglishDoc.load(COleVariant(_T("ENGLISH (FAUX AMIS).xml"))))
{
AfxMessageBox(_T("ENGLISH (FAUX AMIS).xml NON EXISTENT\nOR ERROR INSIDE THE XML!!!!"));
return;
}
xmlWordBookNode.AttachDispatch(m_xmlEnglishDoc.get_documentElement());
xmlWordBookNodeList.AttachDispatch(xmlWordBookNode.get_childNodes());
xmlWorkSheetNode1.AttachDispatch(xmlWordBookNodeList.get_item(0));
xmlRowNodeList.AttachDispatch(xmlWorkSheetNode1.get_childNodes());
m_iFauxAmisCount = xmlRowNodeList.get_length();//101
for (int i = 0; i < xmlRowNodeList.get_length(); i++)
{
CXMLDOMNodeList xmlCellNodeList;
CXMLDOMNode xmlRowNode;
CXMLDOMNode xmlDataNode;
xmlRowNode.AttachDispatch(xmlRowNodeList.get_item(i));
if (xmlRowNode.get_baseName() == "Word")
{
xmlCellNodeList.AttachDispatch(xmlRowNode.get_childNodes());
xmlDataNode.AttachDispatch(xmlCellNodeList.get_item(0));
m_EnArray.push_back((LPCTSTR)xmlDataNode.get_text());
xmlDataNode.DetachDispatch();
xmlDataNode.AttachDispatch(xmlCellNodeList.get_item(1));
m_FrArray.push_back((LPCTSTR)xmlDataNode.get_text());
xmlDataNode.DetachDispatch();
}
xmlRowNode.DetachDispatch();
xmlCellNodeList.DetachDispatch();
}
xmlRowNodeList.DetachDispatch();
xmlWorkSheetNode2.AttachDispatch(xmlWordBookNodeList.get_item(1));
xmlRowNodeList.AttachDispatch(xmlWorkSheetNode2.get_childNodes());
m_iIrregularCount = xmlRowNodeList.get_length();//126
for (int i = 0; i < xmlRowNodeList.get_length(); i++)
{
CXMLDOMNodeList xmlCellNodeList;
CXMLDOMNode xmlRowNode;
CXMLDOMNode xmlDataNode;
xmlRowNode.AttachDispatch(xmlRowNodeList.get_item(i));
if (xmlRowNode.get_baseName() == "Verb")
{
xmlCellNodeList.AttachDispatch(xmlRowNode.get_childNodes());
xmlDataNode.AttachDispatch(xmlCellNodeList.get_item(0));
m_InfArray.push_back((LPCTSTR)xmlDataNode.get_text());
xmlDataNode.DetachDispatch();
xmlDataNode.AttachDispatch(xmlCellNodeList.get_item(1));
m_SimplePastArray.push_back((LPCTSTR)xmlDataNode.get_text());
xmlDataNode.DetachDispatch();
xmlDataNode.AttachDispatch(xmlCellNodeList.get_item(2));
m_PpArray.push_back((LPCTSTR)xmlDataNode.get_text());
xmlDataNode.DetachDispatch();
xmlDataNode.AttachDispatch(xmlCellNodeList.get_item(3));
m_TranslArray.push_back((LPCTSTR)xmlDataNode.get_text());
xmlDataNode.DetachDispatch();
}
xmlRowNode.DetachDispatch();
xmlCellNodeList.DetachDispatch();
}
xmlRowNodeList.ReleaseDispatch();
xmlWorkSheetNode1.ReleaseDispatch();
xmlWorkSheetNode2.ReleaseDispatch();
xmlWordBookNodeList.ReleaseDispatch();
xmlWordBookNode.ReleaseDispatch();
m_xmlEnglishDoc.ReleaseDispatch();
GetDlgItem(IDC_NEXTWORD)->EnableWindow(TRUE);
GetDlgItem(IDC_FAUXAMIS_TOCORRECT)->EnableWindow(TRUE);
GetDlgItem(IDC_NEXTVERB)->EnableWindow(TRUE);
GetDlgItem(IDC_IRREGULARVERB_TOCORRECT)->EnableWindow(TRUE);
GetDlgItem(IDC_LOADXML)->EnableWindow(FALSE);
m_iFauxAmisStartIndex = rand() % m_iFauxAmisCount;
m_iIrregularStartIndex = rand() % m_iIrregularCount;
CoUninitialize();
}
void CEnglish_GrammarDlg::OnBnClickedNextword()
{
GetDlgItem(IDC_LABEL_FRENCH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDITFRENCH)->SetWindowText("");
m_edEnglish.SetWindowText(m_EnArray[m_iFauxAmisStartIndex].c_str());
m_labFrench.SetWindowText(m_FrArray[m_iFauxAmisStartIndex].c_str());
m_iFauxAmisStartIndex = (++m_iFauxAmisStartIndex) % m_iFauxAmisCount;
}
void CEnglish_GrammarDlg::OnBnClickedFauxamisTocorrect()
{
GetDlgItem(IDC_LABEL_FRENCH)->ShowWindow(SW_SHOW);
CString str = m_FrArray[(m_iFauxAmisStartIndex - 1) % m_iFauxAmisCount].c_str();
UpdateData(TRUE);
if (str.CompareNoCase(m_strFrench) == 0)
AfxMessageBox(_T("CORRECT"));
}
void CEnglish_GrammarDlg::OnBnClickedIrregularverbTocorrect()
{
GetDlgItem(IDC_LABEL_INFINITIVE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LABEL_SIMPLEPAST)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LABEL_PP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_LABEL_TRANSLATION)->ShowWindow(SW_SHOW);
CString str1 = m_InfArray[(m_iIrregularStartIndex - 1) % m_iIrregularCount].c_str();
CString str2 = m_SimplePastArray[(m_iIrregularStartIndex - 1) % m_iIrregularCount].c_str();
CString str3 = m_PpArray[(m_iIrregularStartIndex - 1) % m_iIrregularCount].c_str();
CString str4 = m_TranslArray[(m_iIrregularStartIndex - 1) % m_iIrregularCount].c_str();
UpdateData(TRUE);
CString strError = "ERRORS :\n";
if (str1.CompareNoCase(m_strInfinitive) != 0)
strError += "- Infinitive\n";
if (str2.CompareNoCase(m_strSimplePast) != 0)
strError += "- Simple past\n";
if (str3.CompareNoCase(m_strPP) != 0)
strError += "- Past participle\n";
if (str4.CompareNoCase(m_strTranslation) != 0)
strError += "- Translation\n";
if (strError == "ERRORS :\n")
AfxMessageBox(_T("100% CORRECT"));
else
AfxMessageBox(strError);
}
void CEnglish_GrammarDlg::OnBnClickedNextverb()
{
GetDlgItem(IDC_LABEL_INFINITIVE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SIMPLEPAST)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_PP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_TRANSLATION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDITINFINITIVE)->SetWindowText("");
GetDlgItem(IDC_EDITSIMPLEPAST)->SetWindowText("");
GetDlgItem(IDC_EDITPP)->SetWindowText("");
GetDlgItem(IDC_EDITTRANSLATION)->SetWindowText("");
int nEdit = rand() % 4;
switch(nEdit)
{
case 0:
m_edInfinitive.SetWindowText(m_InfArray[m_iIrregularStartIndex].c_str());
break;
case 1:
m_edSimplePast.SetWindowText(m_SimplePastArray[m_iIrregularStartIndex].c_str());
break;
case 2:
m_edPP.SetWindowText(m_PpArray[m_iIrregularStartIndex].c_str());
break;
case 3:
m_edTranslation.SetWindowText(m_TranslArray[m_iIrregularStartIndex].c_str());
break;
}
m_labInfinitive.SetWindowText(m_InfArray[m_iIrregularStartIndex].c_str());
m_labSimplePast.SetWindowText(m_SimplePastArray[m_iIrregularStartIndex].c_str());
m_labPP.SetWindowText(m_PpArray[m_iIrregularStartIndex].c_str());
m_labTranslation.SetWindowText(m_TranslArray[m_iIrregularStartIndex].c_str());
m_iIrregularStartIndex = (++m_iIrregularStartIndex) % m_iIrregularCount;
}
Conclusion :
N'hésitez pas à me poser des questions
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.