作者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 發表