08-9月

  1. 2008-9-16
  2. 读取一行
  3. void main()
  4. {
  5.     char buf[255];
  6.     FILE* file = fopen("D://to//filename.txt","rb");
  7.     while (fgets(buf,255,file))
  8.     {
  9. //        int x = 1;
  10. //        x*=1;
  11.     }
  12.     fclose(file);
  13.     cout << buf << endl;
  14. }
  15. 读取全部内容
  16. #include <string.h>
  17. void main()
  18. {
  19.     char buf[255];
  20.     char txt[255] = "";
  21.     FILE* file = fopen("D://to//filename.txt","rb");
  22.     while (fgets(buf,255,file))
  23.     {
  24.         strcat(txt, buf);
  25.     }
  26.     fclose(file);
  27.     cout << buf << endl;
  28.     cout << txt << endl;
  29. }
  30. 指针的问题
  31. void main()
  32. {
  33.     char* p;
  34.     if (p != NULL)
  35.     {
  36.         cout << "p != NULL" << endl;
  37.     }
  38. }
  39. 结果为
  40. p != NULL
  41. 所以在定义指针时要注意,进行指针的初始化
  42. char* p = NULL;
  43. //
  44. 这里返回的指针没有指向临时变量,所以是可以的
  45. char* get_char(char* p)
  46. {
  47.     char* t = p;
  48.     return t;
  49. }
  50. void main()
  51. {
  52.     char* t = "NanJing";
  53.     cout << get_char(t) << endl;
  54. }
  55. ///
  56.  /**
  57.    * 返回当前游标的数据
  58.    * @return 当前游标的数据
  59.    */
  60.   inline TYPE* Current()
  61.   {
  62.     if (m_pCur == NULL) return NULL;
  63.     TYPE* pReturn = m_pCur->pItem;
  64.     return pReturn;
  65.   };
  66.   /**
  67.    * 返回当前游标
  68.    * @return 当前游标
  69.    */
  70.   inline T_NODE* Position()
  71.   {
  72.     return m_pCur;
  73.   };
  74. /
  75.     db_student.ConvToTable(t_student, stru_student);
  76.     cout << t_student.SNO.Char() << "   ";
  77.     cout << t_student.SNAME.Char() << endl;
  78. /
  79.   //--------------------------------------------------------------------------
  80.   //
  81.   //  content:  根据索引和值插入节点。以后可以根据这个索引把值取出来
  82.   //
  83.   //  input:
  84.   //  p_index  ->  索引。
  85.   //               必须全部是'0' ~ '9'之间的字符构成的字符串。
  86.   //               不能为空
  87.   //               不能含其他字符
  88.   //               该索引必须是唯一性索引
  89.   //
  90.   //  pData    ->  要检索的数据。可以是任意类型。
  91.   //
  92.   //  return:
  93.   //               正常返回1,索引异常返回-1,已有节点数据返回0
  94.   //
  95.   //  注意:数据pData传入以后,List并不申请空间,而是直接引用,因此
  96.   //        不能在外面删除
  97.   //--------------------------------------------------------------------------
  98.   inline short Insert( const char* p_index, TYPE* pData )
  99.   {
  100.     T_NODE10 *m_pcursor = m_proot;
  101.     T_NODE10 *p_temp= NULL;
  102.     short j = 1;
  103.     char c = '/0';
  104.     for( unsigned i = 0 ; i < strlen( p_index ) ; i ++ )
  105.     {
  106.       c = p_index[ i ] ;
  107.       if( c < '0' || c > '9' )
  108.       {
  109.         g_cLogFile.Error(0, "索引错误,存在字符!" ) ;
  110.         return -1 ;
  111.       }
  112.       if( m_pcursor -> p_pointer[ c-'0' ] == NULL )
  113.       {//节点还没建立
  114.         p_temp = NULL;
  115.         p_temp = new T_NODE10;
  116.         
  117.         if (p_temp == NULL) //Add by Rose 2004-1-30
  118.         {
  119.           g_cLogFile.Error(0, "申请内存失败!" );
  120.           return -1 ;
  121.         }
  122.         m_lnodecount ++ ;
  123.         m_pcursor -> p_pointer[ c-'0' ] = p_temp ;
  124.       }
  125.       m_pcursor = m_pcursor -> p_pointer[ c-'0' ] ;
  126.     };
  127.     //在尾节点要插入数据
  128.     //验证
  129.     if(  m_pcursor -> p_data == NULL )
  130.     {//唯一性索引尾节点应该没有数据
  131.       m_pcursor -> p_data = pData ;
  132.       m_lcount ++ ;
  133.     }
  134.     else
  135.     {    
  136.       g_cLogFile.Error(0, "索引不唯一,不能插入" ) ;
  137.       j = 0 ;
  138.     }
  139.     #ifdef MYDEB
  140.      ExportAll();
  141.     #endif
  142.     return j ;
  143.   };
  144.     t_Delete(t_table, 3);
  145.     t_Delete(t_table, 2);
  146. int t_Delete(T_ACCT_BALANCE table, int ACCT_BALANCE_ID)
  147. {
  148.     T_ACCT_BALANCE tableDelete;
  149.     tableDelete.SetConn(DefaultConnect);
  150.     tableDelete.SetBatSize(5);//这里为5时,要加上tableDelete.Flush();
  151.     tableDelete.SetTableName("ACCT_BALANCE_A");
  152.     tableDelete = table;//
  153.     tableDelete.ACCT_BALANCE_ID = ACCT_BALANCE_ID;
  154.     long j = tableDelete.Delete();
  155.     if (j > 0)
  156.     {
  157.         //tableDelete.Flush();
  158.         DefaultConnect.Commit();
  159.     }
  160.     else
  161.     {
  162.         j = -1;
  163.         DefaultConnect.Rollback();
  164.         cout << DefaultConnect.GetMsg();
  165.     }
  166.     return j;
  167. }
  168. 加上tableDelete.Flush();可以强制执行提交
  169. ///
  170. 9-17
  171. 程序问题
  172. 1. 命名
  173. 2.初始化
  174. 3.strcpy
  175.     Logout();
  176.     DefaultConnect.Commit();
  177.     DefaultConnect.Rollback();
  178. DefaultConnect.Commit();
  179.     DefaultConnect.Rollback();
  180. 这两句是互斥的.
  181. Logout应该放在最后
  182. /
  183.     char buf[255] = "";
  184.     FILE* file = fopen("D://to//station_name.txt","rb");
  185.     if (file == NULL)
  186.     {
  187.         return;
  188.     }
  189.     int i = 0;
  190.     int lenth = 0;
  191.     while ( i < stationNum )
  192.     {
  193.         fgets(buf,255,file);
  194.         strcpy(stationName[i], buf);
  195.         lenth = strlen(stationName[i]);
  196.         stationName[i][lenth - 2] = '/0';
  197.         i++;
  198.     }
  199.     fclose(file);
  200. 这样得到的字符串结尾为13,10,0'';
  201. ///
  202. 9-18
  203. 对内存数据的Update,Insert,在save的时候才开始从标记链表中执行,调用表类的相应操作
  204.   long Save(Connection &conn)
  205.   {
  206.     long j = 1;
  207.     T_STUDENT table_insert(conn, n_batch_size);
  208.     T_STUDENT table_update(conn, n_batch_size);
  209.     SetTable(table_insert);
  210.     SetTable(table_update);
  211.     if (!insert_list.IsEmpty())
  212.     {
  213.       insert_list.GoHead();
  214.       while (j > 0 && insert_list.Position())
  215.       {
  216.         ConvToTable(table_insert, insert_list.Current());
  217.         insert_list.Current()->MODIFY_FLAG = NORMAL_STATE;
  218.         j = Report(conn, table_insert.Insert());
  219.         if (j > 0)
  220.         {
  221.           insert_list.Next();
  222.         }
  223.       }
  224.       insert_list.EmptyList();
  225.       if (j > 0)
  226.       {
  227.         j = Report(conn, table_insert.Flush());
  228.       }
  229.     }
  230.     if (!update_list.IsEmpty())
  231.     {
  232.       update_list.GoHead();
  233.       while (j > 0 && update_list.Position())
  234.       {
  235.         ConvToTable(table_update, update_list.Current());
  236.         update_list.Current()->MODIFY_FLAG = NORMAL_STATE;
  237.         j = Report(conn, table_update.Update());
  238.         if (j > 0)
  239.         {
  240.           update_list.Next();
  241.         }
  242.       }
  243.       update_list.EmptyList();
  244.       if (j > 0)
  245.       {
  246.         j = Report(conn, table_update.Flush());
  247.       }
  248.     }
  249.     return j;
  250.   }
  251. ///
  252. 9-19
  253. X.SERV_ID PRODUCT_INSTANCE_ID  为查询结果设置名称
  254. 观察SQL语句
  255.     sprintf(szSql, 
  256.         " SELECT /*+rule*/ "
  257.         "        X.ACCT_ID, "
  258.         "        X.SERV_ID PRODUCT_INSTANCE_ID, "
  259.         "        Y.BILL_ITEM ACCT_ITEM_TYPE_ID, "
  260.         "        %d BILLING_CYCLE_ID, " 
  261.         "        Y.PRIMAL_FEE ORIGINAL_AMOUNT, "
  262.         "        Y.CDR_DISCOUNT, "
  263.         "        Y.BILL_DISCOUNT ACCT_DISCOUNT, "
  264.         "        Y.ADJ_FEE ADJUST_AMOUNT, "
  265.         "        0 REAL_AMOUNT, "
  266.         //Modify By June 20080722 根据帐务处理的要求做了修改
  267.         //"        Y.PRIMAL_FEE - Y.CDR_DISCOUNT - Y.BILL_DISCOUNT + Y.ADJ_FEE RECE_AMOUNT, " 
  268.         "        Y.PRIMAL_FEE - Y.BILL_DISCOUNT + Y.ADJ_FEE RECE_AMOUNT, "
  269.         "        TO_CHAR(sysdate, 'YYYYMMDDHH24MISS') CREATED_DATE, "
  270.         "        '%s' REGION_ID, "      
  271.         "        X.PLAN_ID PRODUCT_PRICE_ID, "
  272.         "        TO_CHAR(sysdate, 'YYYYMMDDHH24MISS') OPT_DATE, '' KEY_NUM "
  273.         "   FROM USER_BILL_%s%06d X, USER_BILL_DTL_%s%06d Y "
  274.         "  WHERE X.BILL_ID = Y.BILL_ID AND X.SERV_ID != X.ACCT_ID "
  275.         "  ORDER BY X.ACCT_ID ,X.SERV_ID",
  276.         pstruBillingCycle->BILLING_CYCLE_ID, g_struGlobalParam.szRegion, 
  277.         g_struGlobalParam.szAreaCode + 1, pstruBillingCycle->BILLING_CYCLE_ID, 
  278.         g_struGlobalParam.szAreaCode + 1, pstruBillingCycle->BILLING_CYCLE_ID);
  279. //
  280. 多表查询的实现, 注意,语句一定要正确
  281.       long j = 0;
  282.   char str[1024];
  283.   char str1[1024];
  284.   j = Login("oracle");
  285.   
  286.   CRecords c_Records(DefaultConnect, 1024);
  287. //  strcpy(str, "select person.name, age from person, student where student.sno = '002' and student.name = person.name;");
  288.     strcpy(str, "select COUNAMME from student,course where student.SNO = course.SNO and student.SNAME = 'Jam'");
  289. //  strcpy(str, "select * from student");
  290. //  strcpy(str, "select * from course");
  291.   j = c_Records.Query(str);
  292.     if (j <= 0)
  293.     {
  294.         cout << GetMsg();
  295.         return 1;
  296.     }
  297. //  j = DefaultConnect.ExecSql(str);
  298.   while (j > 0 )
  299.   {
  300.       cout << c_Records.Field(0).Char() << "    ";
  301. //    cout << c_Records.Field(1).Float() << endl;
  302.       j = c_Records.Next();
  303.   }
  304.   Logout();
  305.   return 0;
  306. }
  307. //
  308. 可以采用加""的方式,把一个长字符串分行写
  309.     strcpy(str, "select COUNAMME from student,"
  310.         "course where student.SNO = course.SNO and student.SNAME = 'Jam'");
  311. /
  312. File在使用的时候可以直接写字段的名称,便于理解,要注意大小写
  313.       cout << c_Records.Field("COUNAMME").Char() << "   ";
  314. //
  315. cvs的Update
  316. 有修改的文件如果直接Update,不会执行,系统会认为这个修改的版本是最新的,
  317. 如果没有修改过,就会Update;
  318. ///
  319. long CDbFactory::GetConnection(const char *szDbIndex, char *szCenter, Connection *&conn)
  320. 函数中通过
  321.   String strDbIndex("");
  322.   strDbIndex += szDbIndex;
  323.   strDbIndex += szCenter;
  324.     itMapConnString = mapConnString.find(strDbIndex);
  325.     if (itMapConnString == mapConnString.end())
  326.     {
  327.         g_cLogFile.Error(0, "查找不到数据库[%s]配置!", (const char*)strDbIndex);
  328.         return -1;      
  329.     }
  330.     
  331.   conn = new Connection;
  332.     j = conn->Login(*((STRU_CONNECT_STRING*)itMapConnString->second));
  333.   //sem_post(&sem);
  334.   pthread_mutex_unlock(&t_mutex);
  335.     return j;   
  336. 得到配置信息
  337. //
  338. 9-20
  339. 使用Dbfaltory的时候,不能忘记
  340.     long j = Login("oracle");
  341.     if (j <= 0)
  342.     {
  343.         cout << "连接失败" << endl;
  344.         return 1;
  345.     }
  346. 9-21
  347. F:/work/products/HABOSS/haboss_acct/project/test
  348. 中的配置文件
  349. [oracle]
  350. ConnectString = hadev
  351. PassWord = base
  352. UserName = base
  353. [orac]
  354. ConnectString = 
  355. PassWord = 
  356. UserName = 
  357. 要改为base
  358.     long j = Login("oracle");
  359.     if (j <= 0)
  360.     {
  361.         cout << "连接失败" << endl;
  362.         return 1;
  363.     }
  364.     Connection *BaseConn = NULL;
  365.     
  366.     j = DbFactory.Initial();
  367.     if (j <= 0)
  368.     { 
  369.         cout << "Initial failed" << endl;
  370.         return 1;
  371.     }
  372.     char str[1024];
  373.     DbFactory.GetConnection("ams1""", BaseConn);//edit
  374.     CRecords c_Records;
  375.     c_Records.SetBatSize(1);//++
  376.     c_Records.SetConnect(*BaseConn);//++
  377.     strcpy(str, "select * from student");
  378. //  strcpy(str, "select * from course");
  379.     j = c_Records.Query(str);
  380.     if (j <= 0)
  381.     {
  382.         cout << GetMsg();
  383.         return 1;
  384.     }
  385. //  j = DefaultConnect.ExecSql(str);
  386.   while (j > 0 )
  387.   {
  388.       cout << c_Records.Field("SNAME").Char() << "  ";
  389. //    cout << c_Records.Field(1).Float() << endl;
  390.       j = c_Records.Next();
  391.   }
  392.     DbFactory.FreeConnection(BaseConn);
  393.     
  394.     Logout();
  395.     return 0;
  396. 其中
  397.     DbFactory.GetConnection("ams1""", BaseConn);//edit
  398. 很关键,根据得到的数据库名进行连接
  399. 更新后出现错误,要添加文件
  400. 添加cpp,hpp,不能有遗漏
  401. sprintf
  402.     char a[10];
  403.     sprintf(a, "%d%02d", 123, 5);
  404.     cout << a << endl;
  405. ///
  406. 调用main文件夹中的#include "ILLNUM_RESULT.h"时,提示找不到
  407. 要进行路径设置
  408. 先要在Tools 中的options中的directories中进行设置,把各个文件加入;
  409. v//
  410. 随意赋值出现错误
  411.     char tmp[] = "20080820160123";
  412.     strcpy(tmp, ymonth);
  413.     tmp[6] = '0';这时日期为00,内部检查时会出错
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值