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

C/C++

  1. /********************************************************************
  2. 挊嶌尃強桳幰 丗 WangHongjun@neusoft.com
  3. 僜乕僗僼傽僀儖柤 丗 telsrc_filesrc.c
  4. 撪梕 丗 Tel No. search(File search IF)
  5. 嶌惉擔丒幰 丗 2005.07.08 Wang Hongjun
  6. 廋惓擔丒幰 丗
  7. *********************************************************************/
  8. /*------------------------------------------------------------------*/
  9. /* */
  10. /* 僀儞僋儖乕僪僼傽僀儖晹暘 */
  11. /* */
  12. /*------------------------------------------------------------------*/
  13. #include "telsrc_in.h"
  14. /*------------------------------------------------------------------*/
  15. /* */
  16. /* 娭悢掕媊晹暘 */
  17. /* */
  18. /*------------------------------------------------------------------*/
  19. /********************************************************************/
  20. /* telsrc_crehandle_file娭悢(Tel Search handle create) */
  21. /* ----------------------------------------------------------------*/
  22. /* Input: */
  23. /* int : Search condition[IN] */
  24. /* */
  25. /* ----------------------------------------------------------------*/
  26. /* Output: */
  27. /* RETURN : 乮惓忢乯Telphone search handle */
  28. /* 乮堎忢乯NULL */
  29. /* */
  30. /* ----------------------------------------------------------------*/
  31. /* Outline: */
  32. /* Create telphone search handle (Data saved in file). */
  33. /* ----------------------------------------------------------------*/
  34. /* Others: */
  35. /* */
  36. /********************************************************************/
  37. H_TELSRC telsrc_crehandle_file(
  38. S_TELSRC_COND* pstTelSrcCond /* I/ Search condition */
  39. )
  40. {
  41. int iReadItem = 0;
  42. /* Result of read file */
  43. S_TELSRC* pstTelSrc = NULL;
  44. /* Telsearch struct */
  45. H_TELSRC hTelSrc = NULL;
  46. /* Telsearch class handle */
  47. FILE* pFile = NULL;
  48. /* File handle */
  49. S_TELSRC_DATA stTelSrcData;
  50. /* Exception prevention */
  51. if( NULL == pstTelSrcCond )
  52. {
  53. return (H_TELSRC)NULL;
  54. }
  55. /* Initialization */
  56. memset( &stTelSrcData, 0, (WORD)sizeof(stTelSrcData) );
  57. /* Search class handle area allocation */
  58. pstTelSrc = (S_TELSRC*)malloc( (WORD)sizeof(S_TELSRC) );
  59. if( NULL == pstTelSrc )
  60. {
  61. return (H_TELSRC)NULL;
  62. }
  63. /* Initialization */
  64. memset( pstTelSrc, 0, (WORD)sizeof(S_TELSRC) );
  65. /* Search condition copy */
  66. memcpy( &pstTelSrc->stTelSrcCond, pstTelSrcCond, 
  67. (WORD)sizeof(S_TELSRC_COND) );
  68. /* Tel search data area allocation */
  69. pstTelSrc->pstTelSrcData
  70. = (S_TELSRC_DATA*)malloc( (WORD)sizeof(S_TELSRC_DATA) );
  71. if( NULL == pstTelSrc->pstTelSrcData )
  72. {
  73. return (H_TELSRC)NULL;
  74. }
  75. /* File teldat.dat open */
  76. pFile = fopen( "teldat.dat", "a+" );
  77. /* Exception prevention */
  78. if( NULL == pFile )
  79. {
  80. return (H_TELSRC)NULL;
  81. }
  82. /* Current data number get */
  83. while( 0 == feof( pFile ) )
  84. {
  85. /* Read 1 item from file */
  86. iReadItem = fread( 
  87. &stTelSrcData, (WORD)sizeof(S_TELSRC_DATA), 1, pFile );
  88. if( iReadItem <= 0 )
  89. {
  90. pstTelSrc->iDataNum++;
  91. }
  92. }
  93. /* Tel No. search handle set */
  94. hTelSrc = (H_TELSRC)pstTelSrc;
  95. return hTelSrc;
  96. }
  97. /********************************************************************/
  98. /* telsrc_datareg_file娭悢(New data regist) */
  99. /* ----------------------------------------------------------------*/
  100. /* Input: */
  101. /* S_TELSRC* : Telphone search data area[IN] */
  102. /* S_TELSRC_DATA* : The Tel No. Data for searching[IN] */
  103. /* */
  104. /* ----------------------------------------------------------------*/
  105. /* Output: */
  106. /* RETURN : 乮惓忢乯RET_SUCCESS */
  107. /* 乮堎忢乯RET_FAILED */
  108. /* */
  109. /* ----------------------------------------------------------------*/
  110. /* Outline: */
  111. /* Regist new Tel No. */
  112. /* ----------------------------------------------------------------*/
  113. /* Others: */
  114. /* */
  115. /********************************************************************/
  116. int telsrc_datareg_file(
  117. S_TELSRC* pstTelSrc, /* I/ Telphone search data area */
  118. S_TELSRC_DATA* pstSrcData /* I/ The Tel No. Data for searching*/
  119. )
  120. {
  121. int iFWrite = 0;
  122. /* Data save result */
  123. FILE* pFile = NULL;
  124. /* File handle */
  125. /* Exception prevention */
  126. if( (NULL == pstSrcData) || (NULL == pstTelSrc) )
  127. {
  128. return RET_FAILED;
  129. }
  130. /* File teldat.dat open */
  131. pFile = fopen( "teldat.dat", "a+" );
  132. /* Exception prevention */
  133. if( NULL == pFile )
  134. {
  135. return RET_FAILED;
  136. }
  137. /* Current data ID set */
  138. pstSrcData->iNo = pstTelSrc->iDataNum;
  139. /* Write into file teldat.dat */
  140. iFWrite = fwrite( pstSrcData, sizeof(S_TELSRC_DATA), 1, pFile );
  141. if( 0 < iFWrite )
  142. {
  143. (pstTelSrc->iDataNum)++;
  144. }
  145. /* File close */
  146. fclose( pFile );
  147. return RET_SUCCESS;
  148. }
  149. /********************************************************************/
  150. /* telsrc_datasrc_file */
  151. /* ----------------------------------------------------------------*/
  152. /* Input: */
  153. /* S_TELSRC* : Telphone search data area[IN] */
  154. /* char* : The Tel No. for searching[IN] */
  155. /* */
  156. /* ----------------------------------------------------------------*/
  157. /* Output: */
  158. /* RETURN : 乮惓忢乯RET_SUCCESS */
  159. /* 乮堎忢乯RET_FAILED */
  160. /* */
  161. /* ----------------------------------------------------------------*/
  162. /* Outline: */
  163. /* Tel No. search. */
  164. /* ----------------------------------------------------------------*/
  165. /* Others: */
  166. /* */
  167. /********************************************************************/
  168. int telsrc_datasrc_file(
  169. S_TELSRC* pstTelSrc, /* I/ Telphone search data area */
  170. char* pcTelNo /* I/ The Tel No. for searching */
  171. )
  172. {
  173. int iReadItem = 0; /* Result of read file */
  174. int iSrcRslt= TELSRC_RESULT_NG; /* Search result */
  175. int iRet = TELSRC_RESULT_NG; /* Return value */
  176. int iCmpCnt = 0; /* Times for compare*/
  177. int iCurPos = 0; /* Current char pos */
  178. FILE* pFile = NULL; /* File handle */
  179. S_TELSRC_DATA stTelSrcData; /* Tel No. data info*/
  180. /* Exception prevention */
  181. if( NULL == pstTelSrc )
  182. {
  183. return TELSRC_RESULT_NG;
  184. }
  185. /* Initialization */
  186. memset( &stTelSrcData, 0, (WORD)sizeof(stTelSrcData) );
  187. /* File open */
  188. pFile = fopen( "teldat.dat", "r" );
  189. if( NULL == pFile )
  190. {
  191. printf( "nFailed to open file teldat.dat.n" );
  192. return TELSRC_RESULT_NG;
  193. }
  194. /* Searching */
  195. while( 0 == feof( pFile ) )
  196. {
  197. /* Read 1 item from file */
  198. iReadItem = 
  199. fread( &stTelSrcData, sizeof(S_TELSRC_DATA), 1, pFile );
  200. if( iReadItem <= 0 )
  201. {
  202. /* File close */
  203. fclose( pFile );
  204. return TELSRC_RESULT_NG;
  205. }
  206. /* Compare, output the result */
  207. iCmpCnt = strlen( stTelSrcData.acTelNo ) - strlen(pcTelNo);
  208. for( iCurPos = 0; iCurPos <= iCmpCnt; iCurPos++ )
  209. {
  210. iSrcRslt = strncmp( 
  211. stTelSrcData.acTelNo, pcTelNo, strlen(pcTelNo) );
  212. if( TELSRC_RESULT_OK == iSrcRslt )
  213. {
  214. if( (0 == iCurPos) && (0 == iCmpCnt) )
  215. {
  216. printf( "nSearch OK(Complete match)!n" ); 
  217. printf( "Tel  No: %sn", stTelSrcData.acTelNo );
  218. printf( "Address: %sn", stTelSrcData.acName );
  219. iRet = iSrcRslt;
  220. }
  221. else
  222. {
  223. printf( "nSearch OK(Part match)!n" );
  224. printf( "Tel  No: %sn", stTelSrcData.acTelNo );
  225. printf( "Address: %sn", stTelSrcData.acName );
  226. iRet = iSrcRslt;
  227. }
  228. break;
  229. }
  230. }
  231. }
  232. /* File close */
  233. fclose( pFile );
  234. /* Search NG, ouput the result */
  235. if( TELSRC_RESULT_NG == iRet )
  236. {
  237. printf( "nSearch NG! No corresponding Tel No.n" );
  238. }
  239. return iRet;
  240. }
  241. /********************************************************************/
  242. /* telsrc_datasrc_file */
  243. /* ----------------------------------------------------------------*/
  244. /* Input: */
  245. /* S_TELSRC* : Telphone search data area[IN] */
  246. /* char* : The Tel No. for searching[IN] */
  247. /* */
  248. /* ----------------------------------------------------------------*/
  249. /* Output: */
  250. /* RETURN : RET_SUCCESS */
  251. /* */
  252. /* ----------------------------------------------------------------*/
  253. /* Outline: */
  254. /* Tel No. search class handle free. */
  255. /* ----------------------------------------------------------------*/
  256. /* Others: */
  257. /* */
  258. /********************************************************************/
  259. int telsrc_freehandle_file(
  260. S_TELSRC* pstTelSrc /* I/ Telphone search data area */
  261. )
  262. {
  263. /* Exception prevention */
  264. if( NULL == pstTelSrc )
  265. {
  266. return RET_SUCCESS;
  267. }
  268. /* Tel No. search class handle area free */
  269. free( pstTelSrc );
  270. pstTelSrc = NULL;
  271. return RET_SUCCESS;
  272. }
  273. /* End of file-----------------------------------------------------*/