荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: jjk (Welcome to InstallBBS,Linux!), 信区: InstallBBS
标 题: [转载] Re: 谁有十大按 id 数统计的源码,贴出来的说(转寄)
发信站: 荔园晨风BBS站 (Wed Dec 19 23:15:24 2001), 转信
【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: HbBdByXc.bbs@bbs.dqpi.edu.cn (奋斗无止境·爱拼才会赢), 信区: BBSMan_Dev
标 题: Re: 谁有十大按 id 数统计的源码,贴出来的说
发信站: PolarisBBS (Sun Dec 16 10:07:29 2001)
转信站: SMTH!thunews.dhs.org!zixia.net!PolarisBBS
发信人: 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中的'篇'改成'人', 更准确一点.
--
zhch.bbs@bbs.nju.edu.cn
※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: dsl.nju.edu.cn]
你的www也要改一下
【 在 chy.bbs@bbs.ysu.edu.cn (pillar) 的大作中提到: 】
: rt
--
http://bbs.dqpi.edu.cn/~jieer/images/zhanbiao3.gif
※ 来源:·北极星BBS站 bbs.dqpi.edu.cn·[FROM: 210.46.137.178]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店