shell程序设计 财务管理系统 linux作业

财务管理系统-shell程序说明手册

请添加图片描述

0.程序介绍

这是一个简单的财务账单管理程序,个人原创。

主要包含如下功能

  1. 账单添加
  2. 账单删除
  3. 账单修改
  4. 分类显示
  5. 账单汇总
  6. 账单排序
  7. 数据分析

1.快速开始

如果需要有数据,请确保程序目录下包含data.csv文件以及其相应数据。

请添加图片描述

data.csv文件数据内容如下:

请添加图片描述

使用命令运行程序

  • bash finacialManager.sh
  • ./finacialManager.sh

注意:使用第二种方法前请确保程序文件具有可执行权限,可以使用chmod +x finacialManager.sh赋权。

2.增删改查

添加

请添加图片描述

使用功能6账单汇总观察账单添加效果

请添加图片描述
请添加图片描述

其他基本类似操作。

3.分类查询

根据数据里面的类型进行分类显示

请添加图片描述

请添加图片描述

请添加图片描述

4.账单汇总

打印所有数据。

5.账单排序

请添加图片描述

请添加图片描述

请添加图片描述

6.账单分析

请添加图片描述

请添加图片描述

7.部分核心代码

sort_aod(){
    while [ true ]
    do
      tput clear
      tput cup 2 10;echo "账单排序模块"
      tput cup 4 10;echo "1.升序"
      tput cup 5 10;echo "2.降序"
      tput cup 6 10;echo "3.返回上级"
      tput cup 8 0
      read -p "请输入选项>_" select
      # read -p "升序或者降序?(y/n)" aod
      case $select in
        1)  # 日期排序过程,sed去除表头,sed替换-为,便于排序分隔, 对前3列进行排序使用-k  -n表示以数值排序 ,最后合并日期添加-
          echo "======================================================================="
          awk 'BEGIN{printf "%10s %10s %6s %6s %6s %-6s\n","时间","金额","大分类","二级分类","支付方式","备注"}'
          echo "-----------------------------------------------------------------------"
          if (($1 == 1)) ; then
            sed -n '2,$p' $DATA | sed -e "s/-/,/g" | sort -t "," -k 1,1n -k 2,2n -k 3,3n | awk -v FS=',' '{printf "%s-%s-%s    %-10s %-6s %-6s %-6s %-6s\n",$1,$2,$3,$4,$5,$6,$7,$8}' | nl
          elif (($1 == 2)) ; then
            sed -n '2,$p' $DATA | sort -t "," -k $1,$1 -n | awk -v FS=',' '{printf "%-10s %-10s %-6s %-6s %-6s %-6s\n",$1,$2,$3,$4,$5,$6}' | nl
          fi
          echo "======================================================================="
        ;;
        2)
          echo "======================================================================="
          awk 'BEGIN{printf "%10s %10s %6s %6s %6s %-6s\n","时间","金额","大分类","二级分类","支付方式","备注"}'
          echo "-----------------------------------------------------------------------"
          if (($1 == 1)) ; then
            sed -n '2,$p' $DATA | sed -e "s/-/,/g" | sort -t "," -k 1,1nr -k 2,2nr -k 3,3nr | awk -v FS=',' '{printf "%s-%s-%s    %-10s %-6s %-6s %-6s %-6s\n",$1,$2,$3,$4,$5,$6,$7,$8}' | nl
          elif (($1 == 2)) ; then
            sed -n '2,$p' $DATA | sort -t "," -k $1,$1 -r -n | awk -v FS=',' '{printf "%-10s %-10s %-6s %-6s %-6s %-6s\n",$1,$2,$3,$4,$5,$6}' | nl
          fi
          echo "======================================================================="
        ;;
        3) sort_data
        ;;
        *) error_chose_exception;sleep 1
        ;;
      esac
      read -p "输入任意键继续..." any
    done
}

analyze_data(){
      while [ true ]
    do
      tput clear
      tput cup 2 10;echo "账单分析模块"
      tput cup 4 10;echo "1.年度账单分析"
      tput cup 5 10;echo "2.月度账单分析"
      tput cup 6 10;echo "3.返回上级"
      tput cup 8 0
      read -p "请输入选项>_" select
      # read -p "升序或者降序?(y/n)" aod
      case $select in
        1)
        tput cup 12 0
        echo "**********年度账单分析**********"
        year=($(cat $DATA|sed -n '2,$p'|sed -e "s/-/,/g"|cut -d ',' -f 1|sort|uniq))
        yearLen=${#year[*]} ; i=0
        while (($i < $yearLen))
        do
            f_year="_year-$RANDOM$(date +%s%N | md5sum |cut -c 1-9)"
            cat $DATA|sed -e "s/-/,/g"|awk -v FS=',' -v y=${year[$i]} '(NF!=0&&$1==y){printf "%s,%s,%s,%s,%s,%s,%s,%s,\n",$1,$2,$3,$4,$5,$6,$7,$8}' > $f_year
            awk -v FS=',' -v y=${year[$i]} 'BEGIN{max=0;min=lshift(1,32)} {if ($4 > max) max = $4; fi}{if ($4 < min) min = $4; fi} {sum += $4} END {printf "%s年总计%d条账单,总计消费%.2f,年均消费%.2f元\n其中最高消费为%.2f元,最低消费为%.2f\n\n",y,NR,sum,sum/NR,max,min}' $f_year
            rm $f_year
            ((i++))
        done
        echo "*******************************"
        read -p "按任意键继续..." any
        ;;
        2)
        read -p "输入查询的年份:" y
        tput cup 12 0

        f_year="_year-$RANDOM$(date +%s%N | md5sum |cut -c 1-9)"
        cat $DATA|sed -e "s/-/,/g"|awk -v FS=',' -v y=$y '(NF!=0&&$1==y){printf "%s,%s,%s,%s,%s,%s,%s,%s,\n",$1,$2,$3,$4,$5,$6,$7,$8}' > $f_year
        mon=($(cat $f_year|sed -e "s/-/,/g"|awk -v FS=',' -v y=$y '(NF!=0&&$1==y){printf "%s\n",$2}'|sort -n|uniq))
        monlen=${#mon[*]} ; i=0
        if (($monlen == 0))
        then
          echo "该年份下没有数据!"
          rm $f_year
          read -p "按任意键继续..." any
          continue
        fi
        echo "**********${y}年月度账单分析**********"
        while (($i < $monlen))
        do
            f_mon="_mon-$RANDOM$(date +%s%N | md5sum |cut -c 1-9)"
            awk -v FS=',' -v m=${mon[$i]} '(NF!=0&&$2==m){printf "%s,%s,%s,%s,%s,%s,%s,%s,\n",$1,$2,$3,$4,$5,$6,$7,$8}' $f_year > $f_mon
            awk -v FS=',' -v m=${mon[$i]} 'BEGIN{max=0;min=lshift(1,32)} {if ($4 > max) max = $4; fi}{if ($4 < min) min = $4; fi} {sum += $4} END {printf "%s月总计%d条账单,总计消费%.2f,月均消费%.2f元\n其中最高消费为%.2f元,最低消费为%.2f\n\n",m,NR,sum,sum/NR,max,min}' $f_mon
            rm -f $f_mon
            ((i++))
        done
        rm -f $f_year
        echo "*******************************"
        read -p "按任意键继续..." any
        ;;
        3) menu
        ;;
        *) error_chose_exception;sleep 1
        ;;
      esac
    done
}


获取完整资源压缩包

联系方式在程序里面

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值