发信人: zhch (zhch), 信区: BBSDev
标 题: 十大改成按人数统计的一种实现方法
发信站: 南京大学小百合站 (Wed Nov 29 16:45:02 2000), 转信
十大按人数统计显然比按篇数统计科学得多, 但会增大一些额外的负荷.
下面给出一种实现方法, 折衷考虑负荷和统计的准确性, 原理也是用一
个文件记录一个id的最近发文情况, 若没找到与当前发文标题相同的才
写入.post文件. 代码如下:
bbs代码中要修改2个地方.
一是edit.c的write_posts()函数中, append_record()前加一句
if(if_exist_title(ptr)) return;
二是在bbs的src的合适的地方加入下面函数:
int if_exist_title(char *title) {
static struct {
int hash_ip;
char title[64][60];
} my_posts;
char buf1[256];
int n;
FILE *fp;
sethomefile(buf1, currentuser.userid, "my_posts");
fp=fopen(buf1, "r+");
if(fp==NULL) fp=fopen(buf1, "w+");
fread(&my_posts, sizeof(my_posts), 1, fp);
for(n=0; n<64; n++)
if(!strncmp(my_posts.title[n], title, 50)) {
fclose(fp);
return 1;
};
my_posts.hash_ip = (my_posts.hash_ip+1) & 63;
strncpy(my_posts.title[my_posts.hash_ip], title, 50);
fseek(fp, 0, SEEK_SET);
fwrite(&my_posts, sizeof(my_posts), 1, fp);
fclose(fp);
return 0;
}
这样就可以了.
其他说明:
增加负荷情况: 每个id多占4K硬盘, 发文时多一个文件操作. 负荷不算大, 基本可以忽略.
未加入版面的判断, 同一id不同版面发表相同标题的文章也不算新文章. 如果觉得这样
不好, 可以很容易自行把对同版面的判断也加上.
另外这样改好后, 可以把poststat.c中的'篇'改成'人', 更准确一点.
--
FROM 210.46.137.178