ARTICLE · 1294122
族谱软件开发日志 (登录)11.11
老闫的族谱软件开发日志
先激活,再进谱:给族谱软件加一道门
第 16 篇 · 2026-11-01
◆软件可以离线,规矩不能离线。
预计阅读时间:10 分钟
上一篇写的是排版,给这份连载做了一套能长期用的模板,软件本身没有动。
停了几天,再回到代码,先做的不是新功能,而是一道“门”。
原因很简单:软件以前是自己用,打开就是族谱,谁都能改。现在准备分享给其他电脑、其他家族试用,就不能再这样了。族人信息是家里的东西,不能谁捡到电脑都能翻,更不能让试用的人一不留神把示例数据改成正式谱。
所以这一轮,我把三件事放在一起做:登录、激活、只读试用。做完之后,软件终于像一件“可以交到别人手里”的东西了。
● ✅ 登录窗口:手机号 + 密码 + 激活码,首次运行创建管理员
● ✅ 试用模式:独立示例库,李氏家族 255 人,只能看不能改
● ✅ 李氏示例 B6 宝塔图改为 4 幅;3D 第一世只剩李承宗和赵氏
● ✅ 修复招赘、外嫁后代的世代计算,B6 正文与 3D 口径统一
● ✅ 10 套测试全绿,版本 1.4.3 归档
● ⏳ 下一步:打包给其他电脑、更新正式版
登录这件事,听起来简单,真做起来先要回答几个问题:账号放哪、激活怎么算、试用给什么数据、试用能改到什么程度。
老闫思考
这几个选择背后是同一个原则:软件可以离线,规矩不能离线。
族谱数据不上云,账号和激活也不该依赖网络。激活码用机器码算出来,管理员在另一台电脑生成,用户抄回来输入,一次激活,永久可用。虽然不如联网授权严密,但对一个给家里人用的离线软件来说,够了。
试用数据更不能用真的。我让程序生成了一套李氏家族:255 人、三大支、过继、多配偶、女儿、1~5 个儿子、双生、招赘、外嫁、迁居、失考都有。它看起来像一本真的谱,但没有一个真实族人。

图 1|登录页:激活码显示前 4 位和后 4 位,中间 8 个黑点;注册成功后密码框自动保留

图 2|李氏示例第 1~2 世总塔:李承宗与守仁、守义、守礼,第二世起分三支
▍坑 1:登录时数据库被锁
◆ 踩坑记录
这个是真正吓一跳的。试用模式生成世系 MD 时,原来的默认路径优先用 e:\ZP\族谱源文件。结果有一次生成李氏示例,直接把正式的 族人世系谱.generated.md 覆盖成了李氏内容。发现后先恢复了正式闫氏文件,然后改 genealogy_sync.default_out_path():只要处于试用模式,或者库里带着示例标记,就只写自己的数据目录。正式库才走原来的源文件目录。现在再跑十套测试,正式文件的时间戳都不动。
▍坑 2:3D 第一世多出 5 个人
▍坑 3:宝塔图从 15 幅变成 4 幅
▍坑 4:26 位的激活码,怎么显示成 16 个位置
▍收获
01 离线软件也要有边界。登录、激活、只读,不是为了防高手,而是为了让普通用户不误操作,让家里人放心把谱交出来。
02 数据隔离要写进代码,不能靠“我记得”。试用库、正式库、生成文件,三条路径都要有自己的规则;一次写错,真实文件就可能被覆盖。
03 同一套数据,口径必须统一。B6、3D、世系文字以前各算各的世代,招赘一多就打架;抽出 lineage_graph 之后,三处终于说同一种话。
04 测试要写“用户能感知的结果”。不是只测函数返回 True,而是测“第一世只剩两个人”“保存按钮不见了”“正式文件没被改”。
▍不足与下一步
● 注册后的密码只在当前窗口保留,关掉软件不记忆;如果用户需要,可再做系统加密保存
● 二支、三支的宝塔图按实际男丁止于第 8、7 世,没有硬画到第 10 世;要补齐得先补示例成员
● 1.4.3 已归档,但还没有打包给其他电脑;正式版仍由我手动更新
● 分享包和正式 exe 的打包,下一轮再做
CLOSING
谱是给后人看的,软件是给自家人用的。
以前我觉得,族谱软件最重要的是“能记”。这一轮做完,才发现“能放心地交给别人看”同样重要。
谱是给后人看的,软件是给自家人用的。门要锁好,钥匙要留在自家人手里;试用的人可以进来看看,但不能把家里的谱改成他的。
这一版,算是把门装上了。
下一轮,把门后的东西打包好,送到另一台电脑上试试。
老闫思考
这一版没有加很多功能,但它让软件第一次有了“交给别人”的样子。
E N D
◆
我是老闫,用代码整理族谱,也用文字记录过程。
如果这篇对你有用,欢迎点赞、分享、在看、留言。
我们下篇见。
THANKS FOR READING
往期回顾
点击上方蓝字 · 老闫开发笔记 · 关注我















































































