回精華區
作者BioStar.bbs@micro.bio.ncue.edu.tw (澎湖小雲雀(Skyl 看板: plan
標題[文件] 經濟概況 economy.c
時間擎天崗 (2004/01/23 Fri 10:43:40) Updated: 2004/01/23
只想知道現在金銀幣一些資訊......

: src/util/Makefile

EXE =   .... economy

: util/economy.c 新增此程式

/*-------------------------------------------------------*/
/* util/economy         ( NTHU CS MapleBBS Ver 3.10 )    */
/*-------------------------------------------------------*/
/* target : 經濟概況                                     */
/* create : 04/01/23                                     */
/* update :   /  /                                       */
/* author : BioStar.bbs@micro.bio.ncue.edu.tw            */
/*-------------------------------------------------------*/


#include "bbs.h"


#define OUTFILE_ECONOMY "gem/@/@-economy"
#define FN_ECONOMY      "run/economy"


typedef struct
{
  long long int totalgold;
  long long int totalmoney;
  time_t last_time;
} ECONOMY;


/*-------------------------------------------------------*/
/* 主程式                                                */
/*-------------------------------------------------------*/


int
main()
{
  char c;
  int usernum = 0, avgmoney = 0, avggold = 0;
  long long int totalmoney = 0, totalgold = 0;
  FILE *fp;
  ECONOMY economy;
  long long int golddiff = 0, moneydiff = 0;
  double avggolddiff, avgmoneydiff, days;
  time_t now_time, interval;

  chdir(BBSHOME);

  /* 第一次統計 */
  if (rec_get(FN_ECONOMY, &economy, sizeof(ECONOMY), 0))
    memset(&economy, 0, sizeof(ECONOMY));

  for (c = 'a'; c <= 'z'; c++)
  {
    char buf[64];
    struct dirent *de;
    DIR *dirp;

    sprintf(buf, BBSHOME "/usr/%c", c);
    chdir(buf);

    if (!(dirp = opendir(".")))
      continue;

    while (de = readdir(dirp))
    {
      ACCT acct;
      int fd;
      char *fname;

      fname = de->d_name;
      if (*fname <= ' ' || *fname == '.')
        continue;

      sprintf(buf, "%s/.ACCT", fname);
      if ((fd = open(buf, O_RDONLY)) < 0)
        continue;

      read(fd, &acct, sizeof(ACCT));
      close(fd);

      totalmoney += acct.money;
      totalgold += acct.gold;
      usernum++;
    }

    closedir(dirp);
  }

  chdir(BBSHOME);

  avgmoney = totalmoney / usernum;
  avggold = totalgold / usernum;

  now_time = time(0);
  interval = now_time - economy.last_time;
  days = (double) interval / (double) 86400;

  golddiff = totalgold - economy.totalgold;
  moneydiff = totalmoney - economy.totalmoney;
  avggolddiff = ((double) golddiff / (double) usernum) / days;
  avgmoneydiff = ((double) moneydiff / (double) usernum) / days;

  if (fp = fopen(OUTFILE_ECONOMY, "w"))
  {
    fprintf(fp, "\n\n\t\t\t\t\t本站經濟概況\n");
    fprintf(fp, "\n\t\t╭─┤\033[1;32;41m %s  \033[m├─╮\n", Now());
    fprintf(fp, "\t\t│本站目前總人口:%14d 人 │\n", usernum);
    fprintf(fp, "\t\t│\033[1;33m本站人民總金幣:%14lld 元\033[m │\n", totalgold);
    fprintf(fp, "\t\t│\033[1;33m平均每人有金幣:%14d 元\033[m │\n", avggold);
    fprintf(fp, "\t\t│\033[1;33m金幣日生產毛額:%14lld 元\033[m │\n", golddiff);
    fprintf(fp, "\t\t│\033[1;33m平均金幣日產額:%14.3f 元\033[m │\n", avggolddiff);
    fprintf(fp, "\t\t│\033[1m本站人民總銀幣:%14lld 元\033[m │\n", totalmoney);
    fprintf(fp, "\t\t│\033[1m平均每人有銀幣:%14d 元\033[m │\n", avgmoney);
    fprintf(fp, "\t\t│\033[1m銀幣日生產毛額:%14lld 元\033[m │\n", moneydiff);
    fprintf(fp, "\t\t│\033[1m平均銀幣日產額:%14.3f 元\033[m │\n", avgmoneydiff);
    fprintf(fp, "\t\t╰─────────────────╯\n");

    fclose(fp);
  }

  economy.totalgold = totalgold;
  economy.totalmoney = totalmoney;
  economy.last_time = now_time;
  rec_put(FN_ECONOMY, &economy, sizeof(ECONOMY), 0, NULL);
}


--
  Origin:  彰化師大生物系˙吟風‧眺月‧擎天崗  micro.bio.ncue.edu.tw 
  Author: BioStar 61-219-111-196.HINET-IP.hinet.net 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻