CardDlg.cpp
上传用户:lczygg
上传日期:2007-07-03
资源大小:2947k
文件大小:5k
源码类别:

语音合成与识别

开发平台:

Visual C++

  1. // CardDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "WordRecPDA.h"
  5. #include "CardDlg.h"
  6. #include "..\CommandEngine.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CCardDlg dialog
  14. CCardDlg::CCardDlg(CWnd* pParent /*=NULL*/)
  15. : CDialog(CCardDlg::IDD, pParent)
  16. {
  17. //{{AFX_DATA_INIT(CCardDlg)
  18. m_strName = _T("");
  19. m_bUpdateBook = FALSE;
  20. m_bTestBatch = FALSE;
  21. m_strPinyin = _T("");
  22. //}}AFX_DATA_INIT
  23. }
  24. void CCardDlg::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CDialog::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CCardDlg)
  28. DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
  29. DDV_MaxChars(pDX, m_strName, 11);
  30. DDX_Text(pDX, IDC_EDIT_INFO, m_strPinyin);
  31. //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(CCardDlg, CDialog)
  34. //{{AFX_MSG_MAP(CCardDlg)
  35. ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
  36. ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
  37. ON_BN_CLICKED(IDC_BUTTON_BATCH, OnButtonBatch)
  38. //}}AFX_MSG_MAP
  39. END_MESSAGE_MAP()
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CCardDlg message handlers
  42. void CCardDlg::OnButtonAdd() 
  43. {
  44. CString strMsg;
  45. UpdateData(TRUE);
  46. char strName[MAX_PATH], strPiny[MAX_PATH];
  47. strcpy(strName, m_strName);
  48. strcpy(strPiny, m_strPinyin);
  49. if (strlen(strName) == 0) return;
  50. else if (strlen(strName) > MAX_WORD_LENGTH*2){
  51. strMsg.Format("名字不能超过%d个字!", MAX_WORD_LENGTH);
  52. AfxMessageBox(strMsg);
  53. return;
  54. }
  55. for (unsigned int i=0; i < strlen(strName); i++){
  56. if (strName[i] >= 0){
  57. AfxMessageBox("请输入中文字符!", MB_OK, 0);
  58. return;
  59. }
  60. }
  61. //自动注音
  62. //if (SrAddWord(strName, NULL) == 0) {
  63. // AfxMessageBox("OK");
  64. // m_bUpdateBook = true;
  65. //}
  66. //else
  67. // AfxMessageBox("Failed");
  68. //半自动注音
  69. char* strPinyin[MAX_WORD_LENGTH];
  70. for (i=0; i < MAX_WORD_LENGTH; i++) {
  71. strPinyin[i] = new char[7];
  72. strcpy(strPinyin[i], "");
  73. }
  74. if (strcmp(strPiny, "") == 0) {
  75. if (SrAddWord(strName, strPinyin) == 0) {
  76. m_strPinyin = "";
  77. for (i=0; i < strlen(strName)/2; i++) {
  78. m_strPinyin += strPinyin[i];
  79. m_strPinyin += "  ";
  80. }
  81. UpdateData(FALSE);
  82. }
  83. }
  84. else {
  85. strcpy(strPiny, m_strPinyin);
  86. i = 0;
  87. char * pStr = strtok(strPiny, " tn");
  88. while (pStr != NULL && i < MAX_WORD_LENGTH)
  89. {
  90. if (strlen(pStr) <= 7)
  91. strcpy(strPinyin[i], pStr);
  92. else
  93. strcpy(strPinyin[i], " ");
  94. pStr = strtok(NULL, " tn");
  95. i++;
  96. }
  97. if (SrAddWord(strName, strPinyin) == 0) {
  98. AfxMessageBox("已加入!");
  99. m_bUpdateBook = TRUE;
  100. }
  101. else
  102. AfxMessageBox("加词失败!");
  103. m_strName = "";
  104. m_strPinyin = "";
  105. UpdateData(FALSE);
  106. }
  107. for (i=0; i < MAX_WORD_LENGTH; i++)
  108. delete [] strPinyin[i];
  109. }
  110. void CCardDlg::OnButtonDelete() 
  111. {
  112. char strMsg[MAX_PATH];
  113. UpdateData();
  114. char* strName = m_strName.GetBuffer(20);
  115. if( strlen(strName) == 0 ) 
  116. return;
  117. else if( strlen(strName) > MAX_WORD_LENGTH*2)
  118. {
  119. sprintf(strMsg, "名字不能超过%d个字!", MAX_WORD_LENGTH);
  120. AfxMessageBox( strMsg );
  121. return;
  122. }
  123. char csMessage[30];
  124. sprintf(csMessage, "您确认要删除吗?"); 
  125. if( AfxMessageBox(csMessage, MB_ICONEXCLAMATION  || MB_ICONWARNING )
  126. == IDOK ){
  127. if (SrDeleteWord(strName) == 0)
  128. AfxMessageBox("OK");
  129. else
  130. AfxMessageBox("Failed");
  131. m_bUpdateBook = true;
  132. }
  133. m_strName.ReleaseBuffer(20);
  134. }
  135. int CCardDlg::DoModal() 
  136. {
  137. m_bUpdateBook = FALSE;
  138. SrConvertInit();
  139. int ret =  CDialog::DoModal();
  140. SrConvertExit();
  141. return ret;
  142. }
  143. void CCardDlg::OnButtonBatch() 
  144. {
  145. char strSourceFile[MAX_PATH], strMsg[MAX_PATH];
  146. char strCommandSetName[] = "CMDST_COMMAND";
  147. CFileDialog oFileDlg(TRUE, "txt", "*.txt");
  148. if (oFileDlg.DoModal() != IDOK) return;
  149. CString str = oFileDlg.GetPathName();
  150. strcpy(strSourceFile, str.GetBuffer(MAX_PATH));
  151. int ret = SrNewCommandSet(strSourceFile, strCommandSetName);
  152. if (ret == 0) {
  153. sprintf(strMsg, "New %s has been generated!", strCommandSetName);
  154. AfxMessageBox(strMsg);
  155. }
  156. m_bTestBatch = true;
  157. /* FILE * fp = fopen(strSourceFile, "rt");
  158. if (fp)
  159. {
  160. char strTmp[260];
  161. fgets(strTmp, 260, fp);
  162. int nWrd = atoi(strTmp);
  163. char ** strWrds = new char*[nWrd];
  164. char ** strPinyin = new char*[nWrd];
  165. for (int i=0; i < nWrd; i++)
  166. {
  167. strWrds[i] = new char[MAX_WORD_LENGTH*2+1];
  168. fgets(strTmp, 260, fp);
  169. strcpy(strWrds[i], strtok(strTmp, " tn"));
  170. char * pStr;
  171. pStr = strtok(NULL, "n");
  172. if (pStr == NULL)
  173. strPinyin[i] = NULL;
  174. else
  175. {
  176. strPinyin[i] = new char[(MAX_WORD_LENGTH+1)*7];
  177. strcpy(strPinyin[i], pStr);
  178. }
  179. }
  180. int * pWrongIdx = new int[nWrd];
  181. //int ret = SrGenerateLextree(strWrds, nWrd, strCommandSetName);
  182. int ret = SrGenerateLextree(strWrds, nWrd, strCommandSetName, strPinyin, pWrongIdx);
  183. if (ret == 0) {
  184. sprintf(strMsg, "New %s has been generated!", strCommandSetName);
  185. AfxMessageBox(strMsg);
  186. }
  187. delete [] pWrongIdx;
  188. for (i=0; i < nWrd; i++)
  189. delete [] strPinyin[i];
  190. delete [] strPinyin;
  191. for (i=0; i < nWrd; i++)
  192. delete [] strWrds[i];
  193. delete [] strWrds;
  194. }
  195. fclose(fp);
  196. */
  197. }