Repository 32bit  Forum
Repository 64bit  Wiki

Conto

Da Slacky.eu.
Versione delle 17:41, 21 ott 2007, autore: Slacky (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Descrizione

Conto.sh e' un scrip di shell per tenere una semplice contabilità entrate ed uscite (versamenti e prelevamenti). L'elaborazione consente di ottenere i saldi mensili. E' possibile plottare i grafici degli ultimi 240 movimenti e dei saldi degli ultimi 24 mesi.

Download

http://www.slacky.eu/misto/concorso/mimmoforlug/conto.sh

Script

#!/bin/sh

######################################################################
#                                                                    #
#                  conto.sh (13/09/2007)                             #
#                                                                    #
#  conto.sh e' un scrip di shell per tenere una semplice             #
#  contabilita' entrate ed uscite (versamenti e prelevamenti).        #
#  L'elaborazione consente di ottenere i saldi mensili.              #
#  E' possibile plottare i grafici degli ultimi 240 movimenti        #
#  e dei saldi degli ultimi 24 mesi.                                 #
#                                                                    #
#  Dipendenze: bash, sed, awk, gnuplot                               #
#                                                                    #
#  Per la portabilita' e' necessario verificare le impostazioni di   #
#  awk riguardo all'uso del saparatore decimale (virgola o punto)    #
#  ed eventualmente modificare le righe dalla 209 alla 226.          #
#                                                                    #
#  Testato su sistema GNU/Linux Slackware 12                         #
#  e su familiar linux per PocketPC.                                 #
#                                                                    #
#  Autore: Domenico Suppa                                            #
#                                                                    #
######################################################################

intestazioni_conto="OP	DATA      	PRELIEVI	VERSAMENTI	DISPONIBILE"

dati=Conto.txt
saldi_mensili="mesi_"$dati



############ Se il file di dati non esiste viene creato ##############
if [ ! -e $dati ]; then
d=`date +%d/%m/%Y`
echo $intestazioni_conto > $dati
echo "CON	$d	    0.00	 0.00	   0.00" >> $dati
fi

############ I comandi awk necessari per l'elaborazione ##############
echo "" > elaboraconto-awk.awk
echo ' BEGIN {' >> elaboraconto-awk.awk
echo ' FS="\t+";' >> elaboraconto-awk.awk
echo ' OFS="\t";' >> elaboraconto-awk.awk
echo ' CONVFMT="%10.2f";' >> elaboraconto-awk.awk
echo ' OFMT="%10.2f";' >> elaboraconto-awk.awk
echo ' saldo=0;' >> elaboraconto-awk.awk
echo ' sm=0;' >> elaboraconto-awk.awk
echo ' da="";' >> elaboraconto-awk.awk
echo ' de="";' >> elaboraconto-awk.awk
echo ' spm=0;' >> elaboraconto-awk.awk
echo ' svm=0;' >> elaboraconto-awk.awk
echo ' i=0;' >> elaboraconto-awk.awk
echo ' j=0;' >> elaboraconto-awk.awk
echo ' }' >> elaboraconto-awk.awk
echo ' {' >> elaboraconto-awk.awk
echo ' 	if(j==0){' >> elaboraconto-awk.awk
echo ' 	j++;' >> elaboraconto-awk.awk
echo ' 	print $0;' >> elaboraconto-awk.awk
echo ' 	}' >> elaboraconto-awk.awk
echo ' 	else{' >> elaboraconto-awk.awk
echo ' 		sp += $3;' >> elaboraconto-awk.awk
echo ' 		sv += $4;' >> elaboraconto-awk.awk
echo ' 		de=substr($2, length($2)-6);' >> elaboraconto-awk.awk
echo ' 		if(da==de){' >> elaboraconto-awk.awk
echo ' 			spm += $3;' >> elaboraconto-awk.awk
echo ' 			svm += $4;' >> elaboraconto-awk.awk
echo ' 			sm=svm-spm;' >> elaboraconto-awk.awk
echo ' 			i++;' >> elaboraconto-awk.awk
echo ' 			' >> elaboraconto-awk.awk
echo ' 		}' >> elaboraconto-awk.awk
echo ' 		else{' >> elaboraconto-awk.awk
echo ' 			if(j>1)printf("%s\t00/%s\t%8.2f\t%8.2f\t%10.2f\t%10.2f\t%i\n", "SLM", da, spm, svm, sm, saldo, i);' >> elaboraconto-awk.awk
echo ' 			spm = $3;' >> elaboraconto-awk.awk
echo ' 			svm = $4;' >> elaboraconto-awk.awk
echo ' 			sm = svm-spm;' >> elaboraconto-awk.awk
echo ' 			i=1;' >> elaboraconto-awk.awk
echo ' 			da=de;' >> elaboraconto-awk.awk
echo ' 		}' >> elaboraconto-awk.awk
echo ' 		saldo=sv-sp;' >> elaboraconto-awk.awk
echo ' 		sp1 = $3; sv1 = $4;' >> elaboraconto-awk.awk
echo ' 		printf("%s\t%s\t%8.2f\t%8.2f\t%10.2f\n", $1, $2, sp1, sv1, saldo);' >> elaboraconto-awk.awk
echo ' 		j++;' >> elaboraconto-awk.awk
echo ' 	}' >> elaboraconto-awk.awk
echo ' }' >> elaboraconto-awk.awk
echo ' END {' >> elaboraconto-awk.awk
echo '    printf("%s\t00/%s\t%8.2f\t%8.2f\t%10.2f\t%10.2f\t%i\n", "SLM", da, spm, svm, sm, saldo, i);' >> elaboraconto-awk.awk
echo ' }' >> elaboraconto-awk.awk


################## ripuliamo il terminale ############################
clear
echo

########## loop principale per l'immissione dei comandi ##############
while :
do

########################## menu principale ###########################
echo " n) nuovo movimento"
echo " l) lista ultimi 20 movimenti"
echo " e) elaborazione saldi"
echo " d) elimina ultimo movimento"
echo " m) lista saldi mensili"
echo " g) grafici"
echo " q) uscita"
echo
echo "Scegliere una opzione"
read a > /dev/null
d=`date +%d/%m/%Y`
t="CON"
case "$a" in
 N|n)

################# loop per l'immissione dei dati ####################
  while :
  do

########################## menu immissione dati #####################
   echo "c) CONTANTI"
   echo "o) ONLINE"
   echo "a) CARTA"
   echo "s) ASSEGNO"
   echo "x) ACCREDITO-ADDEBBITO"
   echo "q) ESCI"

   read s > /dev/null
   case "$s" in

    C|c)
     t="CON"
    ;;
    O|o)
     t="ONL"
    ;;
    A|a)
     t="CAR"
    ;;
    S|s)
     t="ASS"
    ;;
    X|x)
     t="ACS"
    ;;
    Q|q)
     break
    ;;
    *)
     continue
    ;;
   esac
   echo
   echo "La data corrente : "$d
   echo "immettere la data oppure invio"
   read s > /dev/null
   if [ "$s" != "" ]
   then
    d=$s
   fi
   echo
   echo "V) Versamento"
   echo "P) Prelevamento"
   echo 
   echo "Scegliere una opzione"
   read s
   case "$s" in
    V|v)
     p="    0.00"
     echo
     echo "Immettere importo"
     read v
    ;;
    P|p)
     v="    0.00"
     echo
     echo "Immettere importo"
     read p
    ;;
   esac
   echo
   echo "Tipo         : "$t
   echo "Data         : "$d
   echo "Prelevamento : "$p
   echo "Versamento   : "$v
   echo
   echo "Salvare i dati?[Si,No]"
   read s > /dev/null
   if [ "$s" != "s" ]
   then
    continue
   fi
    echo "$t $d $p $v 0.00" | awk '{ print $1"\t"$2"\t"$3"\t"$4"\t"$5}' >> $dati
  done

 ;;

 L|l) clear; head -1 $dati; tail +2 $dati | tail -20;;

 M|m) cat $saldi_mensili;;

 E|e)

  echo "elaborazione in corso ... attendere"

  echo "copio $dati in $dati.bk"

  cp $dati $dati".bk"

  #nel caso awk riconosca il punto come separatore decimale decommentare

  #cp $dati Conto.vir

  #e commentare il comando seguente

  sed -e 's/\./,/g' $dati > Conto.vir
  echo "awk su Conto.vir --> Conto2.vir"
  awk -f elaboraconto-awk.awk Conto.vir > Conto2.vir
  echo "fine awk"

  # nel caso awk riconosca il punto come separatore decimale commentare

  sed -e 's/,/\./g' Conto2.vir > Conto.pun;

  # e decommentare la seguente riga

  #mv Conto2.vir Conto.pun

  echo 'OP 	DATA      	PRELEVAM	VERSAMENTI	SALDO_MESE	   SALDO	NOP' > $saldi_mensili

  sed -n /SLM/p Conto.pun >> $saldi_mensili

  sed /SLM/d Conto.pun > $dati

  rm Conto.pun Conto.vir Conto2.vir

  echo;echo "elaborazione terminata"
 ;;
 D|d)
  echo
  echo `tail -1 $dati`
  echo "Cancellare la riga?[Si,No]"
  read s > /dev/null
  if [ "$s" != "s" ]
  then
   continue
  fi
   echo "cancellazione del'ultima riga in corso ..."
   s=`wc -l $dati | sed -e 's/^\ *//' | sed -e 's/\ .*$//'`
   sed ${s}d $dati > $dati".bk"
   cp $dati".bk" $dati
 ;;
 G|g)
   # comandi per il tracciamento dei grafici
   cut -f5 $dati | sed /[A-z].*/d | tail -240 > gcbp
   cut -f6 $saldi_mensili | sed /[A-z].*/d | tail -24 > mcbp
   echo "Saldi degli ultimi 240 movimenti e saldi mensili"
   echo "Fare click sul grafico per continuare"
   echo 'plot "gcbp" title "Conto" with linesp lt 0 lw 2 pt 3' > plot
   echo 'pause mouse' >> plot
   echo 'plot "mcbp" title "saldo mensile" with impulses lt 2 lw 5' >> plot
   echo 'pause mouse' >> plot
   gnuplot plot
   rm mcbp gcbp plot
 ;;
 Q|q)
      rm elaboraconto-awk.awk;
      exit;;
   *) continue;;
esac

echo "Premere invio per continuare"
read a > /dev/null
done

############################## Fine ##################################
  • Dipendenze: bash, sed, awk, gnuplot
  • Data: 21/10/2007
  • Autore: Mimmoforlug
Strumenti personali
Namespace

Varianti