作者itoc, 信區: itoc
標題[功能] reaper.c 發站務板主薪水、全站發錢
時間03/08/17
作者: itoc (:MM:) 看板: plan
標題: [功能] reaper.c 發薪水 扣所得稅
時間: Sat Feb 8 13:51:36 2003 Updated: 2005/05/08
發板主薪水、全站發錢
都可以在 reaper.c 處理
: reaper.c:reaper()
ulevel = acct.userlevel;
life = acct.lastlogin; /* 必不為 0 */
login = acct.numlogins;
+ levy_tax(&acct, fpath);
: reaper.c 新增以下這段於 reaper() 之前
static int /* 是幾個板的板主 */
how_many_bm_i_am(userid)
char *userid;
{
BRD *bhdr, *tail;
char *list;
int count, len;
count = 0;
len = strlen(userid);
bhdr = bshm->bcache;
tail = bhdr + bshm->number;
do
{
list = bhdr->BM;
if (str_has(list, userid, len))
count++;
} while (++bhdr < tail);
return count;
}
/*-------------------------------------------------------*/
/* 發信給使用者 */
/*-------------------------------------------------------*/
static void
add_mail(userid, fpath, title) /* 發文給使用者 */
char *userid; /* 欲 mail 的使用者 */
char *fpath; /* 檔案路徑 */
char *title; /* 文章標題 */
{
HDR hdr;
char folder[64];
usr_fpath(folder, userid, FN_DIR);
hdr_stamp(folder, HDR_LINK, &hdr, fpath);
strcpy(hdr.owner, STR_SYSOP);
strcpy(hdr.nick, SYSOPNICK);
strcpy(hdr.title, title);
rec_add(folder, &hdr, sizeof(HDR));
}
static void
tax_mail(acct, gold, money)
ACCT *acct;
int gold, money;
{
char fpath[64];
FILE *fp;
sprintf(fpath, "tmp/tax_mail_%s", acct->userid); /* 暫存檔 */
if (fp = fopen(fpath, "w"))
{
fprintf(fp, "\n \033[1;37;44m %s 發薪及扣稅 \033[m \n\n", acct->userid);
if (gold)
fprintf(fp, " 金幣%s額:%d\n", gold > 0 ? "增" : "減", abs(gold));
if (money)
fprintf(fp, " 銀幣%s額:%d\n", money > 0 ? "增" : "減", abs(money));
fclose(fp);
add_mail(acct->userid, fpath, "[紀錄] 薪水袋、扣繳憑單");
unlink(fpath);
}
}
/*-------------------------------------------------------*/
/* 發薪水 */
/*-------------------------------------------------------*/
static void
levy_tax(acct, userid)
ACCT *acct;
char *userid;
{
int money, gold;
time_t start;
struct tm *ptime;
time(&start);
ptime = localtime(&start);
// 以下這整段的公式隨便怎麼寫
// 若要全站發獎金,也是改這裡的公式就可以
money = gold = 0;
/* 全站發錢,每人 10 元 */
money += 10;
/* 板主發薪每板 200 元 */
if (acct->userlevel & PERM_BM)
money += how_many_bm_i_am(acct->userid) * 200;
/* 站務發薪金幣 500 元 */
if (acct->userlevel & PERM_ALLADMIN)
gold += 500;
// 以上這整段的公式隨便怎麼寫
if (money || gold) /* 有金額變動才發信、發支票 */
{
PAYCHECK paycheck;
char fpath[64];
tax_mail(acct, gold, money);
memset(&paycheck, 0, sizoef(PAYCHECK));
time(&paycheck.tissue);
paycheck.money = money;
paycheck.gold = gold;
strcpy(paycheck.reason, "系統發獎金");
usr_fpath(fpath, acct->userid, FN_PAYCHECK);
rec_add(fpath, &paycheck, sizeof(PAYCKECK));
}
}
--
╭── Origin ╮ 動力核心 processor.tfcis.org ~ δεζ ──┼
│ Modify ╯ 03/02/08 13:52:09