大数值金额大写转换(C语言)

news2024/9/23 13:26:07

关于大数值金额大写转换,在财务管理的应用方面没什么意义。一般来说,千亿级,万亿级的数值就够了。因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿。在企业层面数值金额转换设置到千亿、万亿就行了。大的集团级企业扩大到万万亿也就行了。做企业应用软件的可根据需要设置。至于再大的数值就是天文数字,有另外的表达方法。

本人喜欢探索各种算法。前些天写了15位数值的金额大写转换。今再尝试写一个更多位数值的换算大写转换。提供给需要的同道参考。

金额大写应用在很多方面,如支票、发票、各种单据,各种财务凭证,合同文本金额部分。财务方面制定了一套标准的表达法。财务上金额大写是没有负数的,财务上分借方和贷方,负数就是借方红字和贷方红字,也就是赤字。大写转换的算法要按财务管理的标准来设置。本文详细介绍算法的要点。

算法的要点:
简单地讲就是字串转换处理。若输入是数值型则转为字串型。
将输入的金额分成整数部分和小数部分,整数部分分段为4位数的万级段,再按金额数值逐位转换成中文,拼成大写字串,然后输出。
对于不含零的情况,直接就转换好了。然而对于含零和连续多个零的情况就要消除多余的零。本文介绍的算法就是 ”截数值位消零法”,或称 ”截位消零法” 。

要处理的是整数部分,分四步:
一是  将整数部分分成整数的前几位字段和后面的4位万级数字段,
二是  按字段先换成2个字符的数字和单位的中文表达,
三是  按2个字符截取字段, 将含零的字段消去单位,
四是  处理多余的零,然后拼接整数和小数,输出大写。

22250029c4f04fff8620469a9d38af12.png

54bde07e3ee3481390e1e3a4bb26037c.png  

转换的算法就一个函数:
Function   convert (){   //传入 snum $ 输出金额大写 put$
// M$="零元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟" ;
M$="零元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万拾佰仟" ;
 string pn$[50] ;
 string dn[8] ;   //中国式以每万为段,4位一段         
//对输入字串截取整数部分和小数部分,
//小数部分直接转换,整数部分按万级分段,
//先处理整数的前几位,后处理后续的4位万级数,
//最后拼接字串输出金额大写
   //snum="10020005600205" ;     //test

   g$= subString (snum, 0 ,1 ) ; 
  //输入 "0.56"     format >  " .56" 
    if(g$=="0") snum= subString (snum,1, 3)  ; 
         nlen=len(snum) ;
         n=nlen ;
    for (i=0; i<nlen ; i++){
         g$= subString (snum, i,1 ) ;
         if(g$==".") n= i ;    }
    if (nlen-n>2) sn$=subString (snum,n+1,2) ;
    if (nlen-n==2) sn$=subString (snum,n+1,1)+"0" ;
    if (nlen-n==0) sn$="00" ;    //无小数
    fn$=subString (snum,0,n) ;    //截取整数部分
         print "输入金额 snum = ", snum ;
        // print "整数部分 fn = ", fn$ ;       //test
        // print "小数角分 sn = ", sn$ ;

 //开始转换,先处理整数 fn$ ******
       chb$=""  ;   chs$=""  ;    chsd$=""  ;
//角分小数部分 ******
      d1$=subString(sn$,0,1) ;
      d2$=subString(sn$,1,1) ;
        // print d1$ +"   "+d2$ ;     //test
   if (d1$=="0" ){
      c$="零" ; }else{
       a$=d1$ ;
       snToD ();  
       c$=c$+"角" ;      }
       d$ =c$ ;     
  
  if (d2$=="0" ){
       c$="整" ; }else{
       a$=d2$ ;
       snToD ();    
       c$=c$+"分" ;      }
       d$ =d$+c$ ;    
       chs$=d$  ;     //小数chs$已转换
       // print "chs$ = "+chs$ ;   //test
  if (d1$=="0"&&d2$=="0" ){   chs$="整"  ;   }
 
 //开始转换,处理整数 fn$ ******
 //4位段整数转换
        nlen=len (fn$) ;    //字串长度
        n=nlen/4 ;            //整数后4字数段位数
        k=nlen-nlen/4*4 ;     //mod 整数前几位
            // print "Input fn$ = " + fn$ ;   //test
            // print "长串前面几位  k = " , k ;
            // print "长串后 4 字段 n = " , n ;
       d1$=subString (fn$, 0, k) ;
       d2$=subString (fn$, k, nlen) ;
            // print "d1$ = " + d1$ ;    //test
            // print "d2$ = " + d2$ ;
   //整数前几位转换
   for (i=0; i<k ; i++){   //
         a$= subString (d1$, i, 1 ) ;
         snToD () ;      //数字转大写 得c$
          b$=subString (M$, k - i+n*4,1) ;
          p$=subString (N$, n*4+i, 1) ;
          chsd$=chsd$+c$+b$ ;    }    //整数前几位 
         // print "chsd$ = " + chsd$  ;   //test
//**** 整数前几位完成 chsd$
           p$="" ;
     for (i=0; i<n ; i++){   //整数后4数段位截串
           dn[i]= subString (d2$, i*4 , 4 ) ;   
           p$=p$+ dn[i] +"" ;        }
           // print "p$ = "+p$ ;       //test

int du ;    // 4 位数段
        for (du=0; du<n ; du++){  //按整数4数段位转换
          p$="" ;
      for (i=0; i<4 ; i++){   //
         a$= subString (dn[du], i, 1 ) ;
         snToD () ;      //数字转大写 得c$
         b$=subString (M$, n*4-du*4 - i ,1) ;   //单位
         p$=p$+c$+b$ ; 
         pn$[i]=c$+b$ ;     }    //整数后4字数段
          chb$=chb$+p$ ;       }    //du
     chb$=chsd$+chb$ ;  
     //   print "chb$ = "+chb$ ;   //含零整数完成test

  //***************
   p$=" " ;
      nlen=len (chb$)/2 ;   //按中文二字组字串
      // for (i=0; i<30 ; i++){  pn$[i]=" " ;  }
   for (i=0; i<nlen ; i++){
          pn$[i]=subString(chb$, i*2, 2) ;   }
  //按位数转换成大写 format 消单位 **********
           p1$="" ;    p2$="" ;
           p$="" ;
    for (k=0; k<nlen ; k++){
           p1$=pn$[k] ;
        if (p1$=="零仟") { pn$[k]="零" ;    }
        if (p1$=="零佰") { pn$[k]="零" ;    }
        if (p1$=="零拾") { pn$[k]="零" ;    }
        if (p1$=="零元") { pn$[k]="元" ;    }
        if (p1$=="零万") { pn$[k]="万" ;    }
        if (p1$=="零亿") { pn$[k]="亿" ;    }
                 }  //format

          p$="" ;
   for (m=0; m<nlen ; m++){  //重组整数部分>去零
          p$=p$+pn$[m] ;    }
         // print p$ ;    //test
          nlen= len (p$) ;
  for (i=0; i<nlen ; i++){    //renew p$
          pn$[i]=subString(p$, i, 1) ;   }

  for (m=0; m<nlen ; m++){   //去多余 ”零”
            p1$=pn$[m] ;
       if (p1$=="零"&&pn$[m+1]=="零" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="元" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="万" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="亿" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="兆" ) {  pn$[m]="" ;  }       
             }
      //   print p1$ ;    //test

    chb$=" " ;
    for (i=0; i<nlen ; i++){   //去零后重组整数部分
            chb$=chb$+pn$[i] ;      } 
//特殊情况100000902  大写: 壹亿万零玖佰零贰元整
//测试时碰到此例 ”壹亿万零... ”  要消 "万" ****
//用京兆需要下列代码,用万亿、万万亿不需要
         nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”  ”亿”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="亿"&&b$=="万") { 
           a$=subString (chb$, 1, i) ;  
           b$=subString (chb$, i+2, nlen-i ) ;                  
           chb$= a$+b$ ;   }   
      if (a$=="兆"&&b$=="亿") { 
           a$=subString (chb$, 1, i) ;  
           b$=subString (chb$, i+2, nlen-i ) ;                  
           chb$=chb$+a$+b$ ;   }   }

       nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="兆"&&b$=="万") { 
           a$=subString (chb$, 1, i) ;  
           b$=subString (chb$, i+2, nlen-i ) ;                  
           chb$=chb$+a$+b$ ;   }     } 

    chb$=chb$+chs$ ;     //整数小数拼接,完成转换
      if (snum=="."||snum==".0"||snum==".00"||snum=="0."||snum==" ") {
            chb$= " 零元整" ;      }     
//输出结果 ****** 
       print " 大写输出:" ;     
           put$=chb$ ;
       print  put$ ;        //转换完成输出
       print "...................................." ;

}//convert ()

7ab52e2e1f6d40b3a33ef923c187f9ac.png

 //以下是完整的设计测试源码:
// ****  财务金额大写显示  **************
// 本代码是用简单的 C 语言写的,用 MySpringC
//  v2.7 编译调试通过。可以 VB6, C++, Java 改写。
// 编译人:张纯叔(micelu@126.com )
//*******************************************
 string sBarDes[10];
 int nBarId[10];
 string snum, put$ ;    //传入金额,输出大写
 int n, i, j, k, m ;
 string N$ , M$, D$ ;   //预设置大写字符
 string a$, c$;     //转换 传入a$ 输出c$
 string d$, d1$, d2$ ;    //计算小数角分
 string fn$, sn$ ;    //整数字串,小数字串
 string chs$, chb$, chsd$ ; //小写,大写,整数首段
 int nlen ;             //Len 字数
 string b$, g$, p$, p1$, p2$ ;    //计算

main(){
setDisplay (0);
   sBarDes[0]="输入金额";
   nBarId[0]=100;
   sBarDes[1]=" 测  试 ";
   nBarId[1]=101;
   sBarDes[2]=" 示  例 ";
   nBarId[2]=102;
   sBarDes[3]="  ";
   nBarId[3]=103;
   sBarDes[4]="退出程序 ";
   nBarId[4]=104;
   setToolBarHeight(10);
   setButtonTextSize(15);
  setToolBarBackgroundColor(255,220,220,220);
   setButtonColor(255,240,240,240);
   setButtonTextColor(255,0,0,200);
   setToolBar(100,myToolBarProc,sBarDes,nBarId,6);
    setTitle("金额大写转换"); 
 while (){}
}//main ()


 convert (){   //传入 snum $ 输出金额大写 put$
// M$="零元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟" ;
M$="零元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万拾佰仟" ;
 string pn$[50] ;
 string dn[8] ;   //中国式以每万为段,4位一段         
//对输入字串截取整数部分和小数部分,
//小数部分直接转换,整数部分按万级分段,
//先处理整数的前几位,后处理后续的4位万级数,
//最后拼接字串输出金额大写
   //snum="10020005600205" ;     //test

   g$= subString (snum, 0 ,1 ) ; 
  //输入 "0.56"     format >  " .56" 
    if(g$=="0") snum= subString (snum,1, 3)  ; 
         nlen=len(snum) ;
         n=nlen ;
    for (i=0; i<nlen ; i++){
         g$= subString (snum, i,1 ) ;
         if(g$==".") n= i ;    }
    if (nlen-n>2) sn$=subString (snum,n+1,2) ;
    if (nlen-n==2) sn$=subString (snum,n+1,1)+"0" ;
    if (nlen-n==0) sn$="00" ;    //无小数
    fn$=subString (snum,0,n) ;    //截取整数部分
         print "输入金额 snum = ", snum ;
        // print "整数部分 fn = ", fn$ ;       //test
        // print "小数角分 sn = ", sn$ ;

 //开始转换,先处理整数 fn$ ******
       chb$=""  ;   chs$=""  ;    chsd$=""  ;
//角分小数部分 ******
      d1$=subString(sn$,0,1) ;
      d2$=subString(sn$,1,1) ;
        // print d1$ +"   "+d2$ ;     //test
   if (d1$=="0" ){
      c$="零" ; }else{
       a$=d1$ ;
       snToD ();  
       c$=c$+"角" ;      }
       d$ =c$ ;     
  
  if (d2$=="0" ){
       c$="整" ; }else{
       a$=d2$ ;
       snToD ();    
       c$=c$+"分" ;      }
       d$ =d$+c$ ;    
       chs$=d$  ;     //小数chs$已转换
       // print "chs$ = "+chs$ ;   //test
  if (d1$=="0"&&d2$=="0" ){   chs$="整"  ;   }
 
 //开始转换,处理整数 fn$ ******
 //4位段整数转换
        nlen=len (fn$) ;    //字串长度
        n=nlen/4 ;            //整数后4字数段位数
        k=nlen-nlen/4*4 ;     //mod 整数前几位
            // print "Input fn$ = " + fn$ ;   //test
            // print "长串前面几位  k = " , k ;
            // print "长串后 4 字段 n = " , n ;
       d1$=subString (fn$, 0, k) ;
       d2$=subString (fn$, k, nlen) ;
            // print "d1$ = " + d1$ ;    //test
            // print "d2$ = " + d2$ ;
   //整数前几位转换
   for (i=0; i<k ; i++){   //
         a$= subString (d1$, i, 1 ) ;
         snToD () ;      //数字转大写 得c$
          b$=subString (M$, k - i+n*4,1) ;
          p$=subString (N$, n*4+i, 1) ;
          chsd$=chsd$+c$+b$ ;    }    //整数前几位 
         // print "chsd$ = " + chsd$  ;   //test
//**** 整数前几位完成 chsd$
           p$="" ;
     for (i=0; i<n ; i++){   //整数后4数段位截串
           dn[i]= subString (d2$, i*4 , 4 ) ;   
           p$=p$+ dn[i] +"" ;        }
           // print "p$ = "+p$ ;       //test

int du ;    // 4 位数段
        for (du=0; du<n ; du++){  //按整数4数段位转换
          p$="" ;
      for (i=0; i<4 ; i++){   //
         a$= subString (dn[du], i, 1 ) ;
         snToD () ;      //数字转大写 得c$
         b$=subString (M$, n*4-du*4 - i ,1) ;   //单位
         p$=p$+c$+b$ ; 
         pn$[i]=c$+b$ ;     }    //整数后4字数段
          chb$=chb$+p$ ;       }    //du
     chb$=chsd$+chb$ ;  
     //   print "chb$ = "+chb$ ;   //含零整数完成test

  //***************
   p$=" " ;
      nlen=len (chb$)/2 ;   //按中文二字组字串
      // for (i=0; i<30 ; i++){  pn$[i]=" " ;  }
   for (i=0; i<nlen ; i++){
          pn$[i]=subString(chb$, i*2, 2) ;   }
  //按位数转换成大写 format 消单位 **********
           p1$="" ;    p2$="" ;
           p$="" ;
    for (k=0; k<nlen ; k++){
           p1$=pn$[k] ;
        if (p1$=="零仟") { pn$[k]="零" ;    }
        if (p1$=="零佰") { pn$[k]="零" ;    }
        if (p1$=="零拾") { pn$[k]="零" ;    }
        if (p1$=="零元") { pn$[k]="元" ;    }
        if (p1$=="零万") { pn$[k]="万" ;    }
        if (p1$=="零亿") { pn$[k]="亿" ;    }
                 }  //format

          p$="" ;
   for (m=0; m<nlen ; m++){  //重组整数部分>去零
          p$=p$+pn$[m] ;    }
         // print p$ ;    //test
          nlen= len (p$) ;
  for (i=0; i<nlen ; i++){    //renew p$
          pn$[i]=subString(p$, i, 1) ;   }

  for (m=0; m<nlen ; m++){   //去多余 ”零”
            p1$=pn$[m] ;
       if (p1$=="零"&&pn$[m+1]=="零" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="元" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="万" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="亿" ) {  pn$[m]="" ;  }       
       if (p1$=="零"&&pn$[m+1]=="兆" ) {  pn$[m]="" ;  }       
             }
      //   print p1$ ;    //test

    chb$=" " ;
    for (i=0; i<nlen ; i++){   //去零后重组整数部分
            chb$=chb$+pn$[i] ;      } 
//特殊情况100000902  大写: 壹亿万零玖佰零贰元整
//测试时碰到此例 ”壹亿万零... ”  要消 "万" ****
//用京兆需要下列代码,用万亿、万万亿不需要
         nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”  ”亿”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="亿"&&b$=="万") { 
           a$=subString (chb$, 1, i) ;  
           b$=subString (chb$, i+2, nlen-i ) ;                  
           chb$= a$+b$ ;   }   
      if (a$=="兆"&&b$=="亿") { 
           a$=subString (chb$, 1, i) ;  
           b$=subString (chb$, i+2, nlen-i ) ;                  
           chb$=chb$+a$+b$ ;   }   }

       nlen= len (chb$) ;
   for (i=0; i<nlen ; i++){   //特殊情况,消”万”
         a$=subString (chb$, i, 1 )  ;
         b$=subString (chb$, i+1, 1 )  ;
     if (a$=="兆"&&b$=="万") { 
           a$=subString (chb$, 1, i) ;  
           b$=subString (chb$, i+2, nlen-i ) ;                  
           chb$=chb$+a$+b$ ;   }     } 

    chb$=chb$+chs$ ;     //整数小数拼接,完成转换
      if (snum=="."||snum==".0"||snum==".00"||snum=="0."||snum==" ") {
            chb$= " 零元整" ;      }     
//输出结果 ****** 
       print " 大写输出:" ;     
           put$=chb$ ;
       print  put$ ;        //转换完成输出
       print "...................................." ;

}//convert ()

4ca5ef5037914921881fb340e461e46e.png

 

test (){  //数值含零空位算法测试
       clearOutput ();
   print "特殊数值检测检验:" ;
   snum="20000100300000000" ;
        convert () ;
   snum="100000902" ;
        convert () ;
   snum="20005600205" ;
        convert () ;
   snum="3060002065" ;
        convert () ;
  snum="10508005.75" ;
        convert () ;
  snum="50700650.5" ;
        convert () ;
  snum="1802065.06" ;
        convert () ;
}//test ()

caad423b486b4907baa7589a3edc260d.png 

sample (){
   clearOutput ();
   print "输出示例:" ;
   snum="30600702" ;
       convert () ;
   snum="1500903.08" ;
        convert () ;
   snum="1020697.00" ;
        convert () ;
   snum="159533.65" ;
        convert () ;
   snum="282581697.50" ;
        convert () ;
   snum="520967.56248" ;
        convert () ;
  snum="2801697.00" ;
        convert () ;
 }//sample() 

snToD (){   //传入a$  返回c$
  N$="零壹贰叁肆伍陆柒捌玖" ;
        if (a$=="0") c$=subString (N$,0,1) ;
        if (a$=="1") c$=subString (N$,1,1) ;
        if (a$=="2") c$=subString (N$,2,1) ;
        if (a$=="3") c$=subString (N$,3,1) ;
        if (a$=="4") c$=subString (N$,4,1) ;
        if (a$=="5") c$=subString (N$,5,1) ;
        if (a$=="6") c$=subString (N$,6,1) ;
        if (a$=="7") c$=subString (N$,7,1) ;
        if (a$=="8") c$=subString (N$,8,1) ;
        if (a$=="9") c$=subString (N$,9,1) ;
}//snToD ()

input (){//输入
string m;
    snum=stringInput (" 输入金额转大写 ","   输入金额小写   例: 3572689.36  \n        ( 输出金额大写  )\n    输入 [ 空 ]  退出 " ) ;
          clearOutput ();
         print "Input  金额 = ",snum ;
    if (snum=="") {  snum=".00"  ;  
         print "输入为空,请重新输入。 "  ;     }
     convert () ;
}//input ()

myToolBarProc(int nBtn,int nContext) {
      if(nBtn==100){//输入金额
            input ();           }
      if(nBtn==101){  //test 测试       
             test () ;           }
       if(nBtn==102){//示例
            sample ();           }
      if(nBtn==103){//算法测试
             // convert () ;    
                    }
      if(nBtn==104){//退出程序
          clearOutput();
          exit (0);            }
}//myToolbar ()

 

//**** End ****

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ 入门到应用 ( 四 ) 与SpringBoot整合

5.与SpringBoot整合 5.1.SpringBoot项目中配置环境 5.1.1.pom.xml配置依赖 在 pom.xml 配置文件中声明依赖, 通过Maven导入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> &l…

天津数据得出的权重

目标层&#xff1a;评价光污染准则层为四个大类&#xff1a;道路、商业、住宅、绿化方案层为25个小类指标但每个大类只和自己下面的几个小类指标相关&#xff0c;不是图示的下面两层全有关联或许考虑把25个小指标提取公共部分&#xff0c;比如路灯亮度、高度、和外墙的距离、光…

RocketMQ 2m-2s-async搭建

本文档是RocketMQ4.8两主两从异步复制的搭建过程&#xff08;也可单机部署&#xff0c;更简单一点&#xff09;,包括监控台界面. 写在前面&#xff1a;本文档适用于4.8版本&#xff0c;其它版本的坑没有踩过不清楚。我是用VMware启了两台虚拟机&#xff0c;环境&#xff1a;Ce…

10 OpenCV图像识别之人脸追踪

文章目录1 级联分类器2 人脸跟踪2.1 相关方法2.2 代码示例CV2中内置了人脸识别等常用的算法&#xff0c;这类算法是通过级联分类器实现的。 1 级联分类器 级联分类器的核心思想是使用多个分类器级联&#xff0c;每个分类器负责检测不同的特征&#xff0c;逐步排除不可能是目标…

Prometheus离线tar.gz包安装

Prometheus离线tar.gz包安装实验环境一、部署前操作二、Master2.1下载2.2解压2.3更改服务目录名称2.4创建系统服务启动文件2.5配置修改2.6启动并设置开机自启2.7访问2.8添加node节点2.8.1 添加方法2.8.2修改Prometheus配置&#xff08;Master&#xff09;实验环境节点ipcpu内存…

数据结构:归并排序和堆排序

归并排序 归并排序(merge sort)是利用“归并”操作的一种排序方法。从有序表的讨论中得知,将两个有序表“归并”为一个有序表,无论是顺序表还是链表,归并操作都可以在线性时间复杂度内实现。归并排序的基本操作是将两个位置相邻的有序记录子序列R[i…m]R[m1…n]归并为一个有序…

已解决zipfile.BadZipFile: File is not a zip file

已解决Python openpyxl 读取Excel文件&#xff0c;抛出异常zipfile.BadZipFile: File is not a zip file的正确解决&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 一个小伙伴遇到问题跑…

python基于django+vue微信小程序的校园二手闲置物品交易

在大学校园里,存在着很多的二手商品,但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙,导致了很多仍然具有一定价值或者具有非常价值的二手商品的囤积,乃至被当作废弃物处理。现在通过微信小程序的校园二手交易平台,可以方便快捷的发布和交流任何二手商品的信息,并…

【CS224W】(task2)传统图机器学习和特征工程

note 和CS224W课程对应&#xff0c;将图的基本表示写在task1笔记中了&#xff1b;传统图特征工程&#xff1a;将节点、边、图转为d维emb&#xff0c;将emb送入ML模型训练Traditional ML Pipeline Hand-crafted feature ML model Hand-crafted features for graph data Node-l…

被滥用的Slack服务:APT29针对意大利的攻击活动分析

背景 APT29&#xff0c;又名CozyBear, Nobelium, TheDukes&#xff0c;奇安信内部编号APT-Q-77&#xff0c;被认为是与东欧某国政府有关的APT组织。该组织攻击活动可追溯至2008年&#xff0c;主要攻击目标包括西方政府组织机构、智囊团。APT29曾多次实施大规模鱼叉攻击&#x…

linux高级命令之进程的注意点

进程的注意点学习目标能够说出进程的注意点1. 进程的注意点介绍进程之间不共享全局变量主进程会等待所有的子进程执行结束再结束2. 进程之间不共享全局变量import multiprocessing import time# 定义全局变量 g_list list()# 添加数据的任务defadd_data():for i in range(5):g…

snakeyaml自定义pojo写入yml文件时属性字段排序问题

snakeyaml采用LinkedHashMap保存对象&#xff0c;最后写入yml文件的时候&#xff0c;可以按照存入的顺序写入yml&#xff0c;如果采用自定义pojo&#xff0c;虽然可以写入yml&#xff0c;但是属性默认是按照字母顺序进行写入的。 如下所示&#xff0c;定义一个User实体&#xf…

kafka生产者事务踩坑记录

1. 背景 公司需要迁移一个老 spark 项目&#xff0c;之前是消费阿里 LogStore 中的实时数据&#xff0c;处理之后将结果落库。使用的是 spark streaming&#xff0c;batch 时间为 2 分钟。迁移后&#xff0c;需要将 LogStore 切换为 kafka&#xff0c;涉及到了对代码的改动。公…

常见的数据结构

栈&#xff08;stack&#xff09; 栈&#xff08; stack&#xff09;是限制插入和删除只能在一个位置上进行的表&#xff0c;该位置是表的末端&#xff0c;叫做栈顶&#xff08;top&#xff09;。它是后进先出&#xff08;LIFO&#xff09;的。对栈的基本操作只有 push&#x…

linux高级命令之线程

线程学习目标能够知道线程的作用1. 线程的介绍在Python中&#xff0c;想要实现多任务除了使用进程&#xff0c;还可以使用线程来完成&#xff0c;线程是实现多任务的另外一种方式。2. 线程的概念线程是进程中执行代码的一个分支&#xff0c;每个执行分支&#xff08;线程&#…

macos 下载 macOS 系统安装程序及安装U盘制作方法

01 下载 macOS 系统安装程序的方法 本文来自: https://discussionschinese.apple.com/docs/DOC-250004259 简介 Mac 用户时不时会需要下载 macOS 的安装程序&#xff0c;目的不同&#xff0c;或者升级或者降级&#xff0c;或者研究或者收藏。为了方便不同用户&#xff0c;除…

设计模式之委派模式与模板模式详解和应用

目录1 委派模式1.1 目标1.2 内容定位1.3 定义1.4 委派模式的应用场景1.5 委派模式在业务场景中的应用1.6 委派模式在源码中的体现1.6.1 双亲委派模型1.6.2 常用代理执行方法 invoke1.6.3 Spring loC中 在调用 doRegisterBeanDefinitions()1.6.4 SpringMVC 的DispatcherServlet1…

python基于vue微信小程序的校园闲置二手跳蚤商城的设计与实现

在当今社会的高速发展过程中,产生的劳动力越来越大,提高人们的生活水平和质量,尤其计算机科技的进步,数据和信息以人兴化为本的目的,给人们提供优质的服务,其中网上购买二手商品尤其突出,使我们的购物方式发生巨大的改变。而线上购物,不仅需要在硬件上为人们提供服务网上购物,而…

尚医通 (十七)手机登录

目录一、登录需求分析二、搭建service-user模块三、登录接口实现1、添加service接口与实现2、添加Mapper接口3、添加Controller方法四、手机验证码登录&#xff08;生成token&#xff09;1、使用JWT进行跨域身份验证1.1 传统用户身份验证1.2 解决方案2、JWT介绍3、整合JWT4、单…

Minecraft服务端配置

✨✨前言 ✨✨ 我的世界大家肯定都不陌生&#xff0c;在网易拿下中国区的代理后&#xff0c;很多小伙伴也是都转向了网易版我的世界&#xff0c;网易版我的世界可以说已经做是的十分全面了&#xff0c;使用起来也十分方便&#xff0c;一部分小伙伴也是看重了网易庞大的玩家数量…