telsrc_main.c
上传用户:xqing521
上传日期:2014-11-02
资源大小:1942k
文件大小:19k
开发平台:

C/C++

  1. /********************************************************************
  2. 挊嶌尃強桳幰 丗 WangHongjun@neusoft.com
  3. 僜乕僗僼傽僀儖柤 丗 telsrc_main.c
  4. 撪梕 丗 揹榖斣崋専嶕儊僀儞IF娭悢掕媊
  5. 嶌惉擔丒幰 丗 2005.07.08 Wang Hongjun
  6. 廋惓擔丒幰 丗
  7. *********************************************************************/
  8. /*------------------------------------------------------------------*/
  9. /* */
  10. /* 僀儞僋儖乕僪僼傽僀儖晹暘 */
  11. /* */
  12. /*------------------------------------------------------------------*/
  13. #include "telsrc.h"
  14. /*------------------------------------------------------------------*/
  15. /* */
  16. /* 娭悢掕媊晹暘 */
  17. /* */
  18. /*------------------------------------------------------------------*/
  19. /********************************************************************/
  20. /* TelSrc_Main娭悢 */
  21. /* ----------------------------------------------------------------*/
  22. /* Input: */
  23. /* */
  24. /* ----------------------------------------------------------------*/
  25. /* Output: */
  26. /* RETURN : 乮惓忢乯RET_SUCCESS */
  27. /* 乮堎忢乯RET_FAILED */
  28. /* */
  29. /* ----------------------------------------------------------------*/
  30. /* Outline: */
  31. /* Tel No. search main funciton. */
  32. /* */
  33. /* ----------------------------------------------------------------*/
  34. /* Others: */
  35. /* */
  36. /********************************************************************/
  37. int TelSrc_Main()
  38. {
  39. int iRet = RET_SUCCESS;
  40.   /* Return value */
  41. int iDataSource = TELSRC_DATASRC_FILE;
  42. /* Data Source */
  43. int iReadRslt = 0;
  44. /* Result of read from key buffer */
  45. int iMaxDataNum = 0;/* Number of data for search */
  46. H_TELSRC hTelSrc  = NULL;/* Tel search handle */
  47. S_TELSRC_COND stTelSrcCond; /* Tel search conditon struct */
  48. /* Welcome information */
  49. printf( "n************************************************n" );
  50. printf( "*This is a Tel No. register and search program!*n" );
  51. printf( "************************************************n" );
  52. /* Initialization */
  53. memset( &stTelSrcCond, 0, (WORD)sizeof(stTelSrcCond) );
  54. /* Prompt user to input the number of data for searching */
  55. printf( "nHow many Tel No. can be saved!n" );
  56. iReadRslt = scanf( "%8d", iMaxDataNum );
  57. while( ( 0 >= iMaxDataNum ) || ( 0 >= iReadRslt ) )
  58. {
  59. if( 0 >= iReadRslt )
  60. {
  61. while( 10 != getchar() )
  62. {
  63. continue;
  64. }
  65. }
  66. printf( "Invalid number, please input the correct one." );
  67. printf( "nHow many Tel No. can be saved!n" );
  68. iReadRslt = scanf( "%8d", &iMaxDataNum );
  69. }
  70. /* Key buffer clear */
  71. while( 10 != getchar() )
  72. {
  73. continue;
  74. }
  75. /* Max Data num limited (1000) */
  76. if( TELSRC_MAXDATANUM < iMaxDataNum )
  77. {
  78. iMaxDataNum = TELSRC_MAXDATANUM;
  79. }
  80. /* Prompt user to select the type of set data */
  81. printf( "Please select the Type of data saved!n" );
  82. printf( "(0 : File; 1 : Memory)!n" );
  83. iReadRslt = scanf( "%8d", &iDataSource );
  84. while( ( ( TELSRC_DATASRC_FILE != iDataSource ) && 
  85.      ( TELSRC_DATASRC_MEM != iDataSource ) ) || 
  86.    ( 0 >= iReadRslt ) )
  87. {
  88. /* In the case that string is input, clear the key buffer */
  89. if( 0 >= iReadRslt )
  90. {
  91. while( 10 != getchar() )
  92. {
  93. continue;
  94. }
  95. }
  96. /* Prompt the user to select the correct type */
  97. printf( "Invalid type, please input the correct one.n" );
  98. iReadRslt = scanf( "%8d", &iDataSource );
  99. }
  100. /* Key buffer clear */
  101. while( 10 != getchar() )
  102. {
  103. continue;
  104. }
  105. /* Tel No. search condition set */
  106. stTelSrcCond.iMaxDataNum = iMaxDataNum;
  107. stTelSrcCond.iDataSource = iDataSource;
  108. /* Handle create */
  109. hTelSrc = TelSrc_CreHandle( &stTelSrcCond );
  110. if( NULL == hTelSrc )
  111. {
  112. printf( "nHandle create failed!!n" );
  113. return RET_FAILED;
  114. }
  115. /* Execute different operation by the type user specified */
  116. iRet = TelSrc_UserSel( hTelSrc );
  117. /* Handle free */
  118. iRet = TelSrc_FreeHandle( hTelSrc );
  119. return iRet;
  120. }
  121. /********************************************************************/
  122. /* TelSrc_UserSel */
  123. /* ----------------------------------------------------------------*/
  124. /* Input: */
  125. /* int : Tel No. search class handle[IN] */
  126. /* */
  127. /* ----------------------------------------------------------------*/
  128. /* Output: */
  129. /* RETURN : 乮惓忢乯RET_SUCCESS */
  130. /* 乮堎忢乯RET_FAILED */
  131. /* */
  132. /* ----------------------------------------------------------------*/
  133. /* Outline: */
  134. /* Excute the different program by user select. */
  135. /* */
  136. /* ----------------------------------------------------------------*/
  137. /* Others: */
  138. /* */
  139. /********************************************************************/
  140. int TelSrc_UserSel(
  141. H_TELSRC hTelSrc /* Tel No. search class handle */
  142. )
  143. {
  144. char cQuitConf = 'Y';
  145. /* Confirm to exit or not */
  146. char cDelConf = 'N';
  147. /* Confirm to delete or not */
  148. int iRet = RET_SUCCESS;
  149.   /* Return value */
  150. int iGetChrNum = 0;
  151. /* Number of char  from Key Buf */
  152. int iOperFlg = TELSRC_INIT;
  153. /* User operation type */
  154. S_TELSRC* pstTelSrc = NULL;
  155. /* Telsearch struct */
  156. S_TELSRC_COND* pstTelSrcCond = NULL;
  157. /* Tel search conditon struct */
  158. /* Exception prevention */
  159. if( NULL == hTelSrc )
  160. {
  161. return RET_FAILED;
  162. }
  163. /* Data area get */
  164. pstTelSrc = (S_TELSRC*)hTelSrc;
  165. pstTelSrcCond = &pstTelSrc->stTelSrcCond;
  166. /* Execute different operation by the type user specified */
  167. while( (TELSRC_INIT  <= iOperFlg) && (TELSRC_DATADEL  >= iOperFlg) )
  168. {
  169. iOperFlg = TELSRC_INIT;
  170. printf( "nPlease select your operation!n" );
  171. printf( "( 1 : Tel No. Regist.)n" );
  172. printf( "( 2 : Tel No. Search.)n" );
  173. printf( "( 3 : Tel No. Delete.)n" );
  174. printf( "( Other : Exit. )n" );
  175. /* Read user's selection */
  176. iGetChrNum = scanf( "%8d", &iOperFlg );
  177. if( 0 >= iGetChrNum )
  178. {
  179. scanf( "%8s", &iOperFlg );
  180. }
  181. /* Key buffer clear */
  182. while( 10 != getchar() )
  183. {
  184. continue;
  185. }
  186. switch( iOperFlg )
  187. {
  188. case TELSRC_DATAREG: /* New data register */
  189. if( pstTelSrc->iDataNum >= pstTelSrcCond->iMaxDataNum )
  190. {
  191. printf( "nIt cannt be registerd any more.n" );
  192. printf( "Delete part of the data?n" );
  193. printf( "Y(y): Delete; N(n): Select anothern" );
  194. scanf( "%1s", &cDelConf );
  195. if( ( 'Y' == cDelConf ) || ( 'y' == cDelConf ) )
  196. {
  197. iRet = TelSrc_DataDel( hTelSrc );
  198. }
  199. /* Key buffer clear */
  200. while( 10 != getchar() )
  201. {
  202. continue;
  203. }
  204. }
  205. else
  206. {
  207. iRet = TelSrc_DataReg( hTelSrc );
  208. }
  209. break;
  210. case TELSRC_DATASRC: /* Tel No. search */
  211. iRet = TelSrc_DataSrc( hTelSrc );
  212. break;
  213. case TELSRC_DATADEL: /* Delete an item */
  214. iRet = TelSrc_DataDel( hTelSrc );
  215. break;
  216. default: /* Quit */
  217. printf( "nAre you sure that you want to quit the program?n" );
  218. printf( "n(Y(y)/N(n))n" );
  219. scanf( "%1s", &cQuitConf );
  220. if( ( 'Y' == cQuitConf ) || ( 'y' == cQuitConf ) )
  221. {
  222. iOperFlg = TELSRC_QUIT;
  223. }
  224. else
  225. {
  226. iOperFlg = TELSRC_INIT;
  227. }
  228. /* Key buffer clear */
  229. while( 10 != getchar() )
  230. {
  231. continue;
  232. }
  233. }
  234. }
  235. return iRet;
  236. }
  237. /********************************************************************/
  238. /* TelSrc_CreHandle娭悢 */
  239. /* ----------------------------------------------------------------*/
  240. /* Input: */
  241. /* int : Search condition[IN] */
  242. /* */
  243. /* ----------------------------------------------------------------*/
  244. /* Output: */
  245. /* RETURN : 乮惓忢乯Telphone search handle */
  246. /* 乮堎忢乯NULL */
  247. /* */
  248. /* ----------------------------------------------------------------*/
  249. /* Outline: */
  250. /* Create telphone search handle. */
  251. /* ----------------------------------------------------------------*/
  252. /* Others: */
  253. /* */
  254. /********************************************************************/
  255. H_TELSRC TelSrc_CreHandle(
  256. S_TELSRC_COND* pstTelSrcCond
  257. /* I/ Search condition */
  258. )
  259. {
  260. H_TELSRC hTelSrc = NULL;
  261. /* Telsearch class handle */
  262. /* Exception prevention */
  263. if( NULL == pstTelSrcCond )
  264. {
  265. return (H_TELSRC)NULL;
  266. }
  267. /* Create TelSrc handle by conditons user specified */
  268. if( TELSRC_DATASRC_FILE == (pstTelSrcCond->iDataSource) )
  269. {
  270. hTelSrc = telsrc_crehandle_file( pstTelSrcCond );
  271. }
  272. else
  273. {
  274. hTelSrc = telsrc_crehandle_mem( pstTelSrcCond );
  275. }
  276. return hTelSrc;
  277. }
  278. /********************************************************************/
  279. /* TelSrc_DataReg娭悢 */
  280. /* ----------------------------------------------------------------*/
  281. /* Input: */
  282. /* H_TELSRC : Tel No. search handle[IN] */
  283. /* */
  284. /* ----------------------------------------------------------------*/
  285. /* Output: */
  286. /* RETURN : 乮惓忢乯RET_SUCCESS */
  287. /* 乮堎忢乯RET_FAILED */
  288. /* */
  289. /* ----------------------------------------------------------------*/
  290. /* Outline: */
  291. /* Regist new tel no. */
  292. /* ----------------------------------------------------------------*/
  293. /* Others: */
  294. /* */
  295. /********************************************************************/
  296. int TelSrc_DataReg(
  297. H_TELSRC hTelSrc /* I/ Telphone search handle */
  298. )
  299. {
  300. int iRet = RET_SUCCESS;
  301. /* Return value */
  302. int iLoopCnt = 0;
  303. /* Loop counter */
  304. int iOkFlg = TELSRC_ILLEGAL;
  305. /* The No. input illegal flag */
  306. int iTelStrLen = 0;
  307. /* The lenth of Tel No. input */
  308. int iReadBuf = 0;
  309. /* Read form key buffer */
  310. S_TELSRC* pstTelSrc = NULL;
  311. /* Tel No. search class data struct */
  312. S_TELSRC_COND* pstTelSrcCond = NULL;
  313. /* Tel No. search class condition */
  314. S_TELSRC_DATA stTelSrcData;
  315. char acTelNo[TELSRC_NO_MAXLEN];
  316. char acName[TELSRC_NAME_MAXLEN];
  317. /* Exception prevention */
  318. if( NULL == hTelSrc )
  319. {
  320. return RET_FAILED;
  321. }
  322. /* Initialization */
  323. memset( &stTelSrcData, 0, (WORD)sizeof(stTelSrcData) );
  324. /* Tel No. search class data area adress get */
  325. pstTelSrc = (S_TELSRC*)hTelSrc;
  326. pstTelSrcCond = &pstTelSrc->stTelSrcCond;
  327. /* Max number reaches on, exception prevention */
  328. if( pstTelSrcCond->iMaxDataNum <= pstTelSrc->iDataNum )
  329. {
  330. printf( "nIt cannt be registerd any more.n" );
  331. printf( "nPlease delete part of the data.n" );
  332. }
  333. /* Tel No. input prompt */
  334. printf( "nPlease input the Tel No. you want to register.n" );
  335. printf( "nNotice: Only the No. 0~9 is legal.n" );
  336. /*==============================================================*/
  337. /* Read the Tel No. input by user. */
  338. /* Notice: */
  339. /* 1.If the Tel No. input is illeagal, user must input the */
  340. /*   correct one. */
  341. /* 2.If the Tel No. input is over 11 digit, the No. after */
  342. /*   the 11st digit will be cut autometically. */
  343. /*==============================================================*/
  344. while( TELSRC_ILLEGAL == iOkFlg )
  345. {
  346. iReadBuf = getchar();
  347. while( 10 != iReadBuf )
  348. {
  349. if( strlen(acTelNo) <= (TELSRC_NO_MAXLEN -1) )
  350. {
  351. acTelNo[strlen(acTelNo)] = (char)iReadBuf;
  352. }
  353. iReadBuf = getchar();
  354. }
  355. /* Get the No. lenth input by user */
  356. iTelStrLen = strlen( acTelNo );
  357. for( iLoopCnt = 0; iLoopCnt < iTelStrLen; iLoopCnt ++ )
  358. {
  359. /* Illegal, prompt the user to correct it */
  360. if( (0x30 > acTelNo[iLoopCnt]) || (0x39 < acTelNo[iLoopCnt]) )
  361. {
  362. printf( "nIllegal No. was input. Please input the correct one.n" );
  363. iOkFlg = TELSRC_ILLEGAL;
  364. memset( acTelNo, 0, TELSRC_NO_MAXLEN );
  365. break;
  366. }
  367. /* Input complete */
  368. else
  369. {
  370. iOkFlg = TELSRC_LEGAL;
  371. }
  372. }
  373. }
  374. /* Save the new Tel No. input by user */
  375. strncpy( stTelSrcData.acTelNo, acTelNo, 
  376. ((WORD)sizeof(stTelSrcData.acTelNo) - 1) );
  377. /* Name input prompt */
  378. printf( "nPlease input the point name for the Tel No.n" );
  379. printf( "nNotice: Should be less than 64 characters.n" );
  380. /*==============================================================*/
  381. /* Read the Tel No. input by user. */
  382. /* Notice: */
  383. /*  If the Point Name input is over 64 characters, the */
  384. /*   characters after the 64th will be cut autometically. */
  385. /*==============================================================*/
  386. /* Read the Name input by user */
  387. iReadBuf = getchar();
  388. while( 10 != iReadBuf )
  389. {
  390. if( strlen(acName) <= (TELSRC_NAME_MAXLEN -1) )
  391. {
  392. acName[strlen(acName)] = (char)iReadBuf;
  393. }
  394. iReadBuf = getchar();
  395. }
  396. /* Save the name input by user */
  397. strncpy( stTelSrcData.acName, acName, 
  398. ((WORD)sizeof(stTelSrcData.acName) - 1) );
  399. /* New data regist by different data source */
  400. if( TELSRC_DATASRC_FILE == pstTelSrcCond->iDataSource )
  401. {
  402. iRet = telsrc_datareg_file( pstTelSrc, &stTelSrcData );
  403. }
  404. else
  405. {
  406. iRet = telsrc_datareg_mem( pstTelSrc, &stTelSrcData );
  407. }
  408. /* Result print */
  409. if( RET_SUCCESS == iRet )
  410. {
  411. printf( "nNew Tel No. has been registered successfully!n" );
  412. }
  413. return iRet;
  414. }
  415. /********************************************************************/
  416. /* TelSrc_DataSrc娭悢 */
  417. /* ----------------------------------------------------------------*/
  418. /* Input: */
  419. /* H_TELSRC : Telphone search handle[IN] */
  420. /* */
  421. /* ----------------------------------------------------------------*/
  422. /* Output: */
  423. /* RETURN : 乮惓忢乯RET_SUCCESS */
  424. /* 乮堎忢乯RET_FAILED */
  425. /* */
  426. /* ----------------------------------------------------------------*/
  427. /* Outline: */
  428. /* Tel No. search. */
  429. /* ----------------------------------------------------------------*/
  430. /* Others: */
  431. /* */
  432. /********************************************************************/
  433. int TelSrc_DataSrc(
  434. H_TELSRC hTelSrc /* I/ Telphone search handle */
  435. )
  436. {
  437. int iRet = RET_SUCCESS;
  438. /* Return value */
  439. S_TELSRC* pstTelSrc = NULL;
  440. /* Tel No. search class data struct */
  441. S_TELSRC_COND* pstTelSrcCond = NULL;
  442. /* Tel No. search class condition */
  443. char acTelNo[TELSRC_NO_MAXLEN];
  444. /* Exception prevention */
  445. if( NULL == hTelSrc )
  446. {
  447. return RET_FAILED;
  448. }
  449. /* Tel No. search class data area adress get */
  450. pstTelSrc = (S_TELSRC*)hTelSrc;
  451. pstTelSrcCond = &pstTelSrc->stTelSrcCond;
  452. /* Tel No. input prompt */
  453. printf( "nPlease input the Tel No. you want to search.n" );
  454. printf( "nNotice: Only the No. 0~9 is legal.n" );
  455. printf( "nPart match is possiable.n" );
  456. /*==============================================================*/
  457. /* Read the Tel No. input by user. */
  458. /* Notice: */
  459. /*  If the Tel No. input is over 11 digit, the No. after */
  460. /*   the 11st digit will be cut autometically. */
  461. /*==============================================================*/
  462. /* Read the Tel No. input by user */
  463. memset( acTelNo, 0, (WORD)sizeof(acTelNo) );
  464. scanf( "%11s", acTelNo );
  465. /* More than 11 digit was input, cut autometically */
  466. if( 0 != acTelNo[TELSRC_NO_MAXLEN -1] )
  467. {
  468. printf( "nYou have input more than 11 digit Tel No.n" );
  469. printf( "nThe No. after 11 digit will be cut.n" );
  470. acTelNo[TELSRC_NO_MAXLEN -1] = '';
  471. }
  472. /* New data regist by different data source */
  473. if( TELSRC_DATASRC_FILE == pstTelSrcCond->iDataSource )
  474. {
  475. iRet = telsrc_datasrc_file( pstTelSrc, acTelNo );
  476. }
  477. else
  478. {
  479. iRet = telsrc_datasrc_mem( pstTelSrc, acTelNo );
  480. }
  481. return iRet;
  482. }
  483. /********************************************************************/
  484. /* TelSrc_DataDel娭悢 */
  485. /* ----------------------------------------------------------------*/
  486. /* Input: */
  487. /* H_TELSRC : Telphone search handle[IN] */
  488. /* */
  489. /* ----------------------------------------------------------------*/
  490. /* Output: */
  491. /* RETURN : 乮惓忢乯RET_SUCCESS */
  492. /* 乮堎忢乯RET_FAILED */
  493. /* */
  494. /* ----------------------------------------------------------------*/
  495. /* Outline: */
  496. /* Tel No. search. */
  497. /* ----------------------------------------------------------------*/
  498. /* Others: */
  499. /* */
  500. /********************************************************************/
  501. int TelSrc_DataDel(
  502. H_TELSRC hTelSrc /* I/ Telphone search handle */
  503. )
  504. {
  505. int iRet = RET_SUCCESS;
  506. /* Return value */
  507. if( NULL == hTelSrc )
  508. {
  509. return RET_FAILED;
  510. }
  511. /* DUMMY */
  512. printf( "nDelete funciton is not completed yet!n" );
  513. return iRet;
  514. }
  515. /********************************************************************/
  516. /* TelSrc_FreeHandle娭悢 */
  517. /* ----------------------------------------------------------------*/
  518. /* Input: */
  519. /* H_TELSRC : Telphone search handle[IN] */
  520. /* */
  521. /* ----------------------------------------------------------------*/
  522. /* Output: */
  523. /* RETURN : 乮惓忢乯RET_SUCCESS */
  524. /* 乮堎忢乯RET_FAILED */
  525. /* */
  526. /* ----------------------------------------------------------------*/
  527. /* Outline: */
  528. /* Tel No. search class handle free. */
  529. /* ----------------------------------------------------------------*/
  530. /* Others: */
  531. /* */
  532. /********************************************************************/
  533. int TelSrc_FreeHandle(
  534. H_TELSRC hTelSrc /* I/ Telphone search handle */
  535. )
  536. {
  537. int iRet = RET_SUCCESS;
  538. /* Return value */
  539. S_TELSRC* pstTelSrc = NULL;
  540. /* Tel No. search class data struct */
  541. S_TELSRC_COND* pstTelSrcCond = NULL;
  542. /* Tel No. search class condition */
  543. /* Exception prevention */
  544. if( NULL == hTelSrc )
  545. {
  546. return RET_FAILED;
  547. }
  548. /* Tel No. search class data area adress get */
  549. pstTelSrc = (S_TELSRC*)hTelSrc;
  550. pstTelSrcCond = &pstTelSrc->stTelSrcCond;
  551. /* New data regist by different data source */
  552. if( TELSRC_DATASRC_FILE == pstTelSrcCond->iDataSource )
  553. {
  554. iRet = telsrc_freehandle_file( pstTelSrc );
  555. }
  556. else
  557. {
  558. iRet = telsrc_freehandle_mem( pstTelSrc );
  559. }
  560. /* Pointer NULL  */
  561. if( RET_SUCCESS == iRet )
  562. {
  563. pstTelSrc = (S_TELSRC*)NULL;
  564. hTelSrc = (H_TELSRC)NULL;
  565. }
  566. return iRet;
  567. }
  568. /* End of file-----------------------------------------------------*/