看你需要什么类型的家谱:
1、纸质家谱:书籍形式,正式规范,需要采集资料、编辑排版、印刷装订,过程较繁琐,成 本 较高。
2、网络家谱:通过网站或APP修谱,过程简单,甚至不用钱, *** 作简单或有使用说明。
家谱是记载家族人文的核心载体,写家谱要明确采用哪种格式。
比如欧阳修式、苏洵式、宝塔式、牒记式、图文对照式、横排图表式、竖排图文式、表记式、图记式等。
示例:使用 找你家谱 编修 宝塔式 家谱,形象直观,简洁易用。
手机修谱·网络寻根
>看下Binarytreeh是否和当前引入该文件的文件是否在同一文件夹下。 追问: 不太懂,我把程序发给你,帮忙调试一下吧,谢谢啦,万分紧急 追问: #include "Binarytreeh" #include <ctypeh> #include <stdlibh> void menu() { cout<<endl; cout<<" 欢迎使用家谱管理系统"<<endl; cout<<" "<<endl; cout<<" &文件 *** 作功能&"<<" &家谱 *** 作功能& "<<endl; cout<<" "<<endl; cout<<" 家谱记录输入-----------1 "<<" 查找某人记录---------------8 "<<endl; cout<<" 读取存盘记录-----------2 "<<" 查找某人的孩子-------------9 "<<endl; cout<<" 清除家谱存盘记录-------3 "<<" 查找某人的祖先-------------c "<<endl; cout<<" 添加成员---------------4 "<<" 用括号表示法输出家谱-------k "<<endl; cout<<" 存盘-------------------5 "<<" 用凹入表示法输出家谱-------n "<<endl; cout<<" 修改家谱成员信息-------6 "<<" "<<endl; cout<<" 删除家谱成员-----------7 "<<" "<<endl; cout<<" "<<endl; cout<<" 显示菜单-----------------------------------------------m"<<endl; cout<<" 退出---------------------------------------------------0"<<endl; cout<<endl; } void main() { char s; menu(); //显示菜单 string name,str,name2; Binarytree tree; //建立一个 二叉树 对象 node f; //建立一个 单链表 while(1) { cout<<"请选择相应功能的序号按enter进入 *** 作:"<<endl; cin>>str; if(strsize()!=1)s='m'; else s=str[0]; //用于判断用户是否有 错误 *** 作 switch(s) { case '1' : cout<<"输入姓名:"; treeoutroot()=treebulid(NULL,1);break;//输入家谱 case '2' : if(fread()==NULL) cout<<"文件内容为空!无法读取数据!"<<endl;//判断单链表是否为空 else { treeoutroot()=treeload(fread()); cout<<"家谱已载入!"<<endl; }break; //将文件中内容还原为二叉树 case '8' : cout<<"请输入要查找的姓名:"; cin>>name; Binarytnode p; p=treesearchRecord(name); if(p!=NULL)cout<<p->Getname()<<endl;break;//查找某人的信息 case '9' : cout<<"请输入要查找的姓名:"; cin>>name; treesearchChild(name);break;//查找某人孩子的信息 case 'c' : cout<<"请输入要查找的姓名:"; cin>>name; treesearchParent(name);break;//查找某人祖 先信息 case 'k' : treedisplaytree1(treeoutroot());cout<<endl;break;//用括号法表示 case 'n' : treedisplaytree2(treeoutroot(),0);break;//用凹入法表示 case '5' : if(treeoutroot()==NULL) cout<<"你没有输入家谱记录!无法保存家谱记录!"<<endl; else treesave(treeoutroot());break;//家谱保存 case '3' : treeclear(); cout<<"家谱记录清除成功!"<<endl; break;//删除记录文件 case 'm' : menu();break; case '4' : if(treeoutroot()!=NULL) { cout<<"请输入要添加成员的姓字:"<<endl; cin>>name; cout<<"请输入该成员 双亲 的姓名:"<<endl; cin>>name2; treeaddRecord(name2,name); } else cout<<"家谱记录为空!无法完成添加 *** 作!"<<endl;break; case '6' : if(treeoutroot()!=NULL) { cout<<"输入要修改成员的姓名:"<<endl; cin>>name; treechange(name);//调用 } else cout<<"家谱记录为空!无法完成修改 *** 作!"<<endl;break; case '7' : if(treeoutroot()!=NULL) { cout<<"输入要 删除成员 的姓名:"<<endl; cin>>name; treedel(name);//调用删除函数 } else cout<<"家谱记录为空!无法完成删除 *** 作!"<<endl;break; case '0' : exit(0); //退出 default: cout<<"错误 *** 作!"<<endl; menu(); //错误 *** 作后直接显示菜单 } } } 2)家谱记录输入: 主要实现代码: Binarytnode Binarytree::bulid(Binarytnode p,int num) //输入家谱,用 递归 来建立二叉树(功能1的主要实现函数) { char n; Binarytnode m;//定义m指针 m=new Binarytnode; //分配内存,建立一个二叉树结点 string name; cin>>name; //输入姓名 m->Getname()=name; m->parent()=p; //存放双亲结点的地址 m->Getnumber()=num; //获取节点的编号 cout<<m->Getname()<<"是否有左孩子(Y/N):"; cin>>n; if(n=='Y'||n=='y') //判断是否有右子树 { cout<<"输入他左孩子的姓名:"<<endl; m->left()=bulid(m,2num);// 递归调用 建立左子树 } else { m->left()=NULL;//无左子树则左孩子指针赋为空 } cout<<m->Getname()<<"是否有右孩子(Y/N):"<<endl; cin>>n; if(n=='Y'||n=='y')//判断是否有左子树 { cout<<"输入他右孩子的姓名:"<<endl; m->right()=bulid(m,2num+1);//递归调用建立右子树 } else { m->right()=NULL;//无左子树则左孩子指针赋为空 } return m; } 3) 添加成员 主要实现代码 void Binarytree::addRecord(string parent,string name)//(功能4的主要实现函数) //插入家族成员记录, 形参 parent为要插入的家族成员的双亲姓名,形参name为要插入家族成员的姓名 { Binarytnode q; q=searchRecord(parent); if(q!=NULL) { Binarytnode p;//定义指针 p=new Binarytnode; if(q->left()==NULL)//左子树 { q->left()=p; p->Getname()=name;//新加结点的值 p->Getnumber()=2(q->Getnumber());//新加结点编号 p->parent()=q; cout<<"添加成功!"<<endl; } else { if(q->right()==NULL)//右子树 *** 作 { q->right()=p; p->Getname()=name; p->Getnumber()=2(q->Getnumber())+1; p->parent()=q; cout<<"添加成功!"<<endl; } else { if(q->right()!=NULL&&q->left()!=NULL)//左子树不等于空值 { cout<<"无法添加成员!"<<endl; } } } } } 4) 存盘 主要实现代码: void Binarytree::save(Binarytnode root)//以层次 遍历 的顺序保存二叉树各结点(功能5的主要实现函数) { fstream outfile;//定义文件 outfileopen("jiaputxt",ios::out); outfileclose(); system("del jiaputxt");//清空文件内容 queue<Binarytnode>Q;//Q为 队列 ,队列元素是二叉树结点指针 Binarytnode p; if(root!=NULL) { Qpush(root);// 根结点 入队列 while(!Qempty())//判断文件 { p=Qfront();//取队头元素 outfileopen("jiaputxt",ios::app|ios::out); if(!outfile) { cout<<"文件不能打开!"<<endl; abort(); } outfile<<p->Getname()<<" "<<p->Getnumber()<<'\n';//将队头节点信息写入文件 outfileclose(); Qpop();//删除队头元素 if(p->left()!=NULL) Qpush(p->left());//左孩 子结点 入队列 if(p->right()!=NULL) Qpush(p->right());//右孩子节点入队列 } } cout<<"已保 存到文件 !"<<endl; } 5) 修改家谱成员信息 主要实现代码: void Binarytree::change(string name)//修改家谱成员的姓名(功能6的主要实现函数) { string str; Binarytnode p; p=searchRecord(name); if(p!=NULL) { cout<<"请输入修改后的姓名:"<<endl; cin>>str; p->Getname()=str; cout<<"记录修改成功!"<<endl; } } 6) 删除家谱成员的信息 主要实现代码: void Binarytree::del(string name)//删除家谱成员的信息(功能7的主要实现函数) { Binarytnode p,q; p=searchRecord(name); if(p!=NULL) { if(p->left()==NULL&&p->right()==NULL) { q=p->parent(); if(q->left()==p) { q->left()=NULL; } else { q->right()=NULL; } delete p; cout<<"记录已删除!"<<endl; } } } 7)读取存盘记录 主要实现代码: Binarytnode Binarytree::load(node head,Binarytnode parent)//将单链表还原为二叉树(功能2的主要实现函数) { Binarytnode p; p=new Binarytnode; node m; m=head->Getnext(); p->Getname()=head->Getname(); p->Getnumber()=head->Getnumber(); p->parent()=parent; while(m!=NULL&&m->Getnumber()!=2(head->Getnumber())) { m=m->Getnext(); } if(m!=NULL) { p->left()=load(m,p);//用递归建立左子树 } else { p->left()=NULL; } m=head->Getnext(); while(m!=NULL&&m->Getnumber()!=2(head->Getnumber())+1) { m=m->Getnext(); } if(m!=NULL) { p->right()=load(m,p);//用递归建立右子树 } else { p->right()=NULL; } return p; } 8)查找某人记录 主要实现代码: Binarytnode Binarytree::searchRecord(string name)//用层次遍历来查找某个记录(功能8的主要实现函数) { queue<Binarytnode>Q; //Q为队列,队列元素是二叉树结点指针 Binarytnode p; if(this->outroot()!=NULL) { Qpush(this->outroot());//根结点入队列 while(!Qempty()) { p=Qfront();//取队头元素 if(p->Getname()compare(name)==0)//判断是否找到结点的值相同 { return p; } Qpop();//删除队头元素 if(p->left()!=NULL) Qpush(p->left());//左孩子结点入队列 if(p->right()!=NULL) Qpush(p->right());//右孩子节点入队列 } cout<<"未找到相匹的姓名!"<<endl; } return NULL; } 9)查找某人的孩子 主要实现代码: void Binarytree::searchChild(string name)//(功能9的主要实现函数) //形参name要查找的姓名,按姓名查找某人的孩子,若找到记录则显示该节点孩子的姓名,反之,则提示未找到信息 { Binarytnode p; p=searchRecord(name); //查找节点 if(p!=NULL) { if(p->left()!=NULL) { cout<<p->Getname()<<"的左孩子的姓名为:"<<endl; cout<<p->left()->Getname()<<endl;//显示它的左孩子 } else { cout<<p->Getname()<<"无左孩子!"<<endl; } if(p->right()!=NULL) { cout<<p->Getname()<<"的右孩子的姓名为:"<<endl; cout<<p->right()->Getname()<<endl;//显示它的右孩子 } else { cout<<p->Getname()<<"无右孩子!"<<endl; } } } 10)查找某人的祖先 主要实现代码: void Binarytree::searchParent(string name)//(功能c的主要实现函数) //形参name要查找的姓名,按姓名查找某人的祖先,若找到记录则按 辈份 从小到 大显 示该节点的祖先,反之,则提示未找到信息。 { Binarytnode p; p=searchRecord(name);//查找结点 if(p!=NULL) { if(p->parent()==NULL)cout<<"此人没有双亲!"<<endl; else { cout<<"此人的祖先按辈份从小到大排序为:"<<endl; p=p->parent(); while(p!=NULL) { cout<<p->Getname()<<" ";//显示它的双亲 p=p->parent();//指针移动到它的双亲节点 } cout<<endl; } } } 11)括号输出法 主要实现代码: void Binarytree::displaytree1(Binarytnode root) //用递归来实现括号法表示(功能k的主要实现函数) { if(root!=NULL) { cout<<root->Getname();//输出根结点 if(root->right()!=NULL||root->left()!=NULL)//判断左子树或者右子树是否为空 { cout<<"("; displaytree1(root->left()); cout<<","; displaytree1(root->right()); cout<<")"; } } } 12)用凹入法输出家谱 主要实现代码: void Binarytree::displaytree2(Binarytnode root,int n)//用递归来实现凹入法表示(功能n的主要实现函数) { if(root!=NULL) { cout<<setw(3n)<<root->Getname()<<endl; displaytree2(root->left(),n+3); displaytree2(root->right(),n+3); } } 13)清除存盘记录 主要实现代码: void Binarytree::clear()//(功能3的主要实现函数) { fstream file; fileopen("jiaputxt",ios::out);//防止用户删除jiaputxt,造成删除jiaputxt时造 成文 件不存在 fileclose(); system("del jiaputxt"); fileopen("jiaputxt",ios::out); fileclose(); //清空文件内容(删除文件再建立一个空文件) } 回答: 可以,724455494
先排完版后,再执行这个vba宏即可。
选择,“工具/visual basic/执行宏”
下拉选单“Macros in”选“All Standard Projects”
上面“Macros Name”选“Corel macros,PageNumbering”
接着按“执行 ”
接下来的窗口就依你需要而自行设定
"#"表示该页页码
""表示总页数
如果你输入all ;this#
页码即显示all8;this1,(假设文件有8页,在第1页之页码)
注意:版面好像只能设定在 a4 ,其它尺寸好像要自己设定位置!!
“linsong”提供适合Coreldraw12:打开vba编辑器删掉以下这几句,即可适合各尺寸,可以试试看!
dUnit = CoreldrawrInch
dDrawingOriginX = -425
dDrawingOriginY = -55
Coreldraw 9中插入页码
先把整本书排完,页码暂不理。排完后选菜单:工具-visual basic-执行巨集-下拉选单Macros in:选All Standard Projects上面Macros Name:选Corel macros,PageNumbering接著按执行。接下来的d出窗口设置好文字的一些基本属性再确定就可以了。
Coreldraw9中没有此插件,需要自定义SCRIPT。代码如下:
DIM TXT$(10)
DIM ETXT$(10)
For i=1 TO 10
FOR j=1 TO 50
TXT$(i)=RIGHT("00" & j+(i-1)50,3)
ETXT$(i)=ETXT$(i) +CHR(13) + TXT$(i)
NEXT j
WITHOBJECT "CoreldrawAutomation9"
x&=-873448+(i-1)150000
y&=1280406
CreateArtisticText CHR(64+i)+ETXT(i) ,x&, y&
RecorderEditTextCharAtbributes 0, 0, "Arial", 7, 160, 0, 0, 0, 0, 0, 0, 1000, 800, 0, 0
END WITHOBJECT
Next i
1、电脑打开Word文档。
2、打开Word文档后,点击工具栏中的插入,然后选择智能图形。
3、进入选择图形页面,选择图形后,点击确定。
4、Word正文添加构造图之后,就可以输入名字世谱了。
5、如果表格不够,可以选中一个图标,点击右上角的添加,可以选中在上方或者下方添加项目。
1、先进行内容搜集;
家谱的内容是包括:谱名、谱序、谱例、谱论、恩荣录、遗像、姓氏起源、家训、祠堂、五服图、世系表、家传、谱系本记、族产、契据文约、坟茔、名迹录、仕宦记、年谱、艺文著述、字辈谱、领谱字号、续后篇、捐资人名等共计二十四项内容。
一般来说,家谱的前半部分要交代家族的一些起源、修谱的原因,传承的情况,姓氏的起源,家族的荣光,家族祖先的图像,家族传承下来的家训、祠堂文化等,然后在进行世系表的编排,这是家谱成书后的顺序。
但家谱内容不一定会搜集全部,所以只需把搜集到的内容进行编撰即可,没有办法搜集到资料的内容,可以不出现在的家谱上,尽力而为即可。
2、确定家谱目录;
一般来说,所修家谱都无法把全部内容都编写在家谱上,这是因为每个阶段的家谱都有着自己的时代特点。这就导致现代家谱比较注重内容,而把目录的作用忽视。
其实,家谱是要根据内容来进行资料搜集,这是大方向,在这个基础上可以加入一些自己家族的一些特有内容:家族的风土人情等,当然这种情况是比较少见的。最常见的方式是要根据自己家族所搜集的资料,整理之后,再确定家谱目录。
3、分工撰写;
搜集完内容,确定目录之后,就可以进行编排工作了。一般家谱编修委员会职责划分的比较明确,人员配置有编委会主任、副主任、主编、副主编、编辑等。可以先进行谱序、凡例、艺文、名人传、后记的撰写。
谱序是写在家谱最前面的内容,主要讲述的是修谱的背景,家族的历史,修谱的过程,一般来说谱序是可以找知名人物代为写序的。
凡例就是编修家谱中所制定的修谱规矩。主要介绍的是家谱编修的指导思想,家谱编修的原则,家谱的体载结构,家谱行文规则,和入谱人员要求等内容。
扩展资料:
家谱编辑注意事项:
校对名字是否正确。调查中经常会同这个人叫什么名字,但对这个人的名字具体是哪个字,往往无人注意。因此,特别注意同音字以及字形相似的字。比如清和青,有和友,主和玉,全和金。
校对内容是否完整。修谱时间往往是几十年到几百年不等,是否存在缺代或者断代的现象。对于上次家谱中登记的人,是否还在世。如果已经去世,就要补完亡者死亡时间和舞地。对于未详及失考的部分,要尽可能的去核实,以免后人更难考证。
核对出生年月。旧谱常常以农历纪年、现在公历农历并用。因此,在相互转换的同时,二是要核对其是否准确。一定要问清到底是衣历还是公历。如果家谱中有干支,可以核对年月表,还有结合生肖核实生年的准确性,一般生肖是不会错的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)