版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目实训二项目名称 _ 家谱管理系统_姓名 班 级学 号 指导教师 问题描述:家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料 管理系统,实现对一个家族所有的资料进行收集整理。实现对家庭成员 信息的建立、查找、插入、修改、增加、删除、更新、统计等等功能。目的和要求:目的:1、能根据具体问题的具体情况,结合数据结构课程中的基本理论和基本算 法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并 能设计出解决问题的有效算法。2、提高程序设计和调试能力。通过上机学习,验证自己设计的算法的正确 性。学会有效利用基本调试方法。3、初步掌握软件开发过程中问题分析、系统设计、程序编码、
2、测试等基本 方法和技能。4、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。要求:用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理系统,实现对一个家族所有的资料进行收集整理。支持对家谱的增加, 删除,更新,统计等。软件环境:Microsoft Visual Studio 2010流程设计:开始Creat函数Case 1Case 2SetNode 函数Menu函数递归调用PreOrder 函数Generation 函数NumberOfPeople 函数LifeNum 函数PrintMessage 函数Case 4Case 5AddNewPeopI函 数PreFindBroth
3、er 函数Message函数_PreFindFather 函数Case 6Case 7Case 8FindChild 函数PreFindFather 函数DeletePeople 函数PreFindBrother 函数SetNewNam函数 PrintMessage 函数Case 9SaveToFile 函数FileToFamilyTree 函数结束模块划分:1、统计模块(1) 统计家族总人数、健在人数、几代人(2) 主要函数:int Ge neratio n(Node *root); /这个家族共有几代人int NumberOfPeople( ); /家族的总人数int LifeNum( )
4、; /健在人数(3) 实现方法:静态成员变量(4) 实现结果:2、更新模块(1) 创建家谱、增加成员、删除成员、成员改名(2) 主要函数:Node* Creat( ); / 构造函数调用void AddNewPeople(Node *root,stringFatherName,stringNAme); /增加新的家族成员intDeletePeople(Node *root,stri ngFatherName,stri ngDeletepeople); / 删除家族成员int SetNewName(NodSroot,stringNAme,string NewName); II更改姓名(3) 实现
5、方法:创建家谱和成员改名主要通过递归调用;增加成员和删除成员主要通过栈的非递归调用(4)实现结果:3、查询模块(1)查询成员详细信息、查询成员的孩子以及孩子的详细信息(2)主要函数:int Message(Node *root,stri ng Name); /显示该成员的基本信息int Fin dChild(Node *root,stri ng NAme); /显示孩子信息(3)实现方法:通过递归调用,找到成员,输出相应的信息(4)实现结果:4、显示模块(1)前序、中序、后序遍历家谱(2)主要函数:void PreOrder(Node *root); II前序递归遍历输出家谱void In O
6、rder(Node *root); II中序递归遍历输出家谱void PostOrder(Node *root); II后序递归遍历输出家谱(3)实现方法:递归遍历5、(4)实现结果:文件模块(1) 保存到文件、从文件读取保存到文件/从文件中读取(2) 主要函数:void SaveToFile(Node *root); IIvoid FileToFamilyTree( Node *root);(3) 实现方法:文件流(4) 实现结果:数据结构实现:1、生日结构体struct BirthDayint year;int mon th;int day;friend istream& oper
7、ator>>(istream &is,BirthDay &b);friend ostream& operator<<(ostream &os,c onst BirthDay &b);2、信息结构体(家族成员的基本信息)struct In formatio nstri ng n ame; /姓名stri ng birthPlace; /出生地BirthDay birthDay; /生日stri ng sex; /性另 Ustring education; /学历stri ng job; /工作stri ng father; /父亲s
8、tri ng spouse; / 配偶char life; /是否健在;3、二叉树结点结构体struct NodeIn formatio n data; / 个人信息Node* child; /第一个孩子Node* brother; / 兄弟;4、家谱类(二叉树结构、左孩子,右兄弟)class FamilyTree private:Node* root;Node* Creat( ); / 构造函数调用void Release(Node *root); /析构函数调用static int Numberofpeople; /计算总人数,NumberOfPeople ()调用static int L
9、ifePeopele; /计算健在人数,LifeNum ()调用public:FamilyTree(); /构造函数,初始化一棵树,其前序序列由键盘输入FamilyTree(); II 析构函数,释放链表中各结点的存储空间void SetNode(Node *root); II 设置结点信息Node* Getroot(); II 获取根结点前序递归遍历输出家谱中序递归遍历输出家谱后序递归遍历输出家谱这个家族共有几代人void PreOrder(Node *root); II void In Order(Node *root); II void PostOrder(Node *root); II
10、 int Gen erati on(N ode *root); IIint NumberOfPeople( ); II家族的总人数int LifeNum( ); II健在人数void Prin tMessage(Node *root ); II输出基本信息int Message(Node *root,stri ng Name); II显示该成员的基本信息Node* PreFi ndFather(Node *root,stri ng FatherName); II给定元素值查找父亲结点指针位置并返回其指针,此方法采用的先序遍历Node* PreF in dBrother(Node *root,s
11、tri ng FatherName); II给定元素值查找兄弟结点指针位置并返回其指针,此方法采用的先序遍历void AddNewPeople(Node *root,string FatherName,string NAme); II增加新的家族成员int DeletePeople(Node *root,stri ngFatherName,stri ngDeletepeople); II删除家族成员int SetNewName(Node *root,stri ng NAme,stri ng NewName); II 更改姓显示孩子信息int Fi ndChild(Node *root,stri
12、 ng NAme); IIvoid SaveToFile(Node *root); /保存到文件从文件中读取void FileToFamilyTree( Node *root) ; /;调试分析:1、问题:在创建家谱时,询问用户是否需要继续添加成员,只要用户不输 入” #”就继续添加。解决方案:增加if语句判断条件,只要输入的不是” Y” , ” y” , ” #”, 就请用户重新输入。2、问题:计算总人数和健在人数,因为存在增加和删除函数,多次调用计算函数。解决方案:在家谱类中使用静态成员变量3、问题:在输入和输出成员信息中的生日,生日使用的是生日结构体变量, 输入输出包括年、月、日。解决方
13、案:使用友元输入输出重载4、问题:在输入生日时,输入数字程序正常运行,输入其他字符,程序会 出现死循环。解决方案:()判断输入是否正确,()为了使输入错误能重新输入,将错 误标识符改为0,()清空流。5、问题:在输入一些信息是,询问用户是否确认一些信息时,请用户输入y、n'但是用户有时会输入大写。解决方案:使用toupper()函数,将用户输入的确认信息转换成大写字 母。6、问题:在增加孩子时,只能添加长子,添加第二个孩子、第三个等等, 会出现错误。解决方案:添加一个寻找兄弟指针的函数,如果要添加孩子的成员,已 经有了孩子,则通过调用兄弟指针函数来增加孩子。7、问题:保存到文件和读取文
14、件时,会出现输入路径错误的情况。解决方案:通过调用_access()函数,判断输入路径是否正确。8 问题:读取文件时,cin的重载会跳过空白字符,包括回车符。 解决问题:使用()函数接收回车。9、问题:删除成员时,删除能够成功,但会出现空指针错误。 解决方案:在delete该成员时,需要将指向该成员的指针置空。10、问题:在主函数中,通过请用户输入数字,来选择相应的操作,当用户 误输入的为选择以外的字符时,会结束程序运行。解决方案:与解决方案4相同。实验结果及分析1、创建家谱2、保存到文件3、读取文件4、增加成员5、基本信息6、查询成员信息7、成员改名8遍历家谱9、查询孩子信息10、删除成员收
15、获:本次实训在我们为期两周的时间里进行,通过自己的不断学习、请教和 老师的指导,完成了关于家谱资料管理的设计。前期主要是准备阶段,运用 哪些技术,中期实践阶段,通过几天的上机编写代码,然后完成,后期完善 阶段,对一些难点和重点再细化,和做一些数据输入时的异常处理。最后进 行答辩阶段。通过这次实训的互相帮助学习的过程,自己看书学习的经验, 以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结 合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时 也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整 体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得
16、到了锻 炼,我的各方面经验都得到了极大的丰富。附录全部代码#ifndef FAMIL YTREE_H #define FAMILYTREE_H #in elude <iostream> #in elude <stri ng> #in elude <cctype>#in elude <>#i nclude <ioma nip>#in elude <fstream>usi ngn amespacestd;structBirthDay intyear;intmon th;intday;friend istream& op
17、erator >>(istream &is,BirthDay &b);friend ostream& operator <<(ostream &os, const BirthDay &b);; struct In formati onstri ng n ame;stri ng birthPlace;BirthDay birthDay;stri ng sex;string education;stri ng job;string father;stri ng spouse;char life;struct NodeIn format
18、i on data;Node* child;Node* brother;class FamilyTreeprivate :Node* root;Node* Creat();void Release(Node *root);static int Numberofpeople;static int LifePeopele;public :FamilyTree();FamilyTree();void SetNode(Node *root);Node* Getroot();void PreOrder(Node *root);void InOrder(Node *root);void PostOrder
19、(Node *root);int Generation(Node *root);int NumberOfPeople();int LifeNum();void PrintMessage(Node *root );int Message(Node *root,string Name);Node* PreF in dFather(Node *root,stri ng FatherName);Node* PreF in dBrother(Node *root,stri ng FatherName);void AddNewPeople(Node *root,string FatherName,stri
20、ng NAme);int DeletePeople(Node *root,string FatherName,string Deletepeople);int SetNewName(Node *root,string NAme,string NewName);int FindChild(Node *root,string NAme);void SaveToFile(Node *root);void FileToFamilyTree( Node *root);;#en dif#i nclude ""int FamilyTree:Numberofpeople=0;int Fam
21、ilyTree:LifePeopele=O;/生日结构体变量输入输出友元重载istrea m& operator>>(istream & is,BirthDay &b)is>>>>>>return is;ostream& operator<<(ostream &os,c onst BirthDay &b)os<<<<"-"<<<<"-"<<return os;FamilyTree:Fami
22、lyTree() /由键盘输入构造函数,初始化一棵树,其前序序列this->root=Creat();FamilyTree:FamilyTree() /析构函数,释放链表中各结点的存储空间Release(root);Node* FamilyTree:Getroot() /获取根结点return root;Node* FamilyTree:Creat()构造函数调用Node *root;stri ng ch;coutvv"请问是否创建(是:“ y”,否:“#”):cin >>ch; / 输入名字 if(ch!="y") 异常处理 if(ch!=&q
23、uot; Y")if(ch!="#")int t=1;docout<v"n输入不明确,请重新输入! "<<endl;coutvv"请问是否创建(是:“ y” ,否:“#”):cin> >ch;if(ch="y")|(ch=' 'Y ")|(ch="#")t=0;while(t=1);if (ch="#") root = NULL;elseroot=n ew Node; /申请结点内存空间root->child=Cr
24、eat( ); /该结点的孩子root->brother=Creat( ); / 该结点的兄弟return root; / 返回结点void FamilyTree:Release(Node *root) /析构函数调用if(root!=NULL)Release(root->child); /释放左孩子Release(root->brother); / 释放右兄弟 delete root;void FamilyTree:SetNode(Node *root) /设置结点信息Numberofpeople+;coutvv"请输入家庭成员的基本信息 "<&l
25、t;endl;coutvv"姓名:"cin> >root->coutvv"出生地:Hcin>> root->coutvv"生日(数字、年月日以空格或者回车间隔):";while(1)cin>> root->if()coutvv"输入有错!请重新输入生日(数字):"<<endl;();/输入错误则能重新输入();/ 清空流elsebreak;/isdigit异常处理生日输入,若参数c为阿拉伯数字09,则返回非0值,否则返回NULL/*i nt i;for(i=O
26、;root->i!=O;+i)if(isdigit(root->i)=0)op匚二U 一)(乏il.Aoo) ddnog1PI1.2OO) ddnog_AOOAAUO 厂二Knu 奚 A )w型Kn<.vxno。_AOOAAUO =pu vv:wwry>帑 > ®囲 JXFI8_AOOAAUO 厂-«vxn8 _AOOAAUO 厂-=vvoo _AOOAAUO 厂-m>vxn8 _AOOAAUO 厂-昂曲rvxno。一 A宀三 eaiq=pu vy i -V 繹茶w堆匿SKV 繹 urvxnscout«"n输入不明确,
27、请重新输入! "<<endl;coutvv"是否健在(y是,n否):"cin>> root->if(toupper(root->=' Y'川(toupper(root->='N')t=0;while(t=1);if(toupper(root->=' Y')LifePeopele+;void FamilyTree:PreOrder(Node *root) /前序递归遍历输出家谱if(root=NULL)return;elsecoutwroot-xvi't'
28、PreOrder(root->child);PreOrder(root->brother);中序递归遍历输出家谱后序递归遍历输出家谱void FamilyTree:l nO rder(Node *root) / if(root=NULL)return;elseInO rder(root->child); cout<vroot->vv't:InO rder(root->brother); void FamilyTree:PostOrder(Node *root) / if(root=NULL)return;elsePostOrder(root->
29、brother);PostOrder(root->child);coutvvroot-xv't:int FamilyTree:Ge neratio n(Node *root) /这个家族共有几代人int l; l 左孩子if(root=NULL)/这个家族为空,返回0return 0;elsel=Ge neratio n( root->child); /左孩子的return l+1;/int nu mberofpeople=0;int FamilyTree:NumberOfPeople( ) /家族的总人数if(root=NULL) /家族人数为 0return 0;/*e
30、lseif(root匸NULL)nu mberofpeople+;NumberOfPeople(root->child); NumberOfPeople(root->brother);return nu mberofpeople;*/elsereturn Numberofpeople;int coun t=0;int FamilyTree:丄ifeNum( ) /健在人数if(root=NULL) /-1表示这个家族不存在return -1;/*elseif(toupper(root->=' Y')coun t+;LifeNum(root->brothe
31、r);LifeNum(root->child);输出基本信息日coutvv"ttretur n coun t;*/ return LifePeopele; void FamilyTree:Pri ntMessage(Node *root ) / if(root=NULL)return ;elsecoutvv"姓名:"<<root->cout«"tt性别:"v<root->cout<<"tt 配偶:"vvroot->vve ndl; coutvv"出生地
32、:"vvroot->coutvv"tt生"vvroot->/;vvroot->"-"vvroot->"-"vvroot-> 亲:"vvroot->vvendl;coutvv"学历:"vvroot->coutvv"tt 工作:"vvroot->coutvv"是"<<endl;elsecoutvv"否"vvendl;int message=0; /判断是否查找成功int Famil
33、yTree:Message(Node *root,stri ng Name) /显示该成员的基本信息if(root=NULL)retur n message;elseif(root->=Name)message=1;Prin tMessage(root );elseMessage(root->child,Name);Message(root->brother,Name);return message;Node* FamilyTree:PreFindFather(Node *root,string FatherName) /给定元素值查找父亲结点指针位置并返回其指针,此方法采用
34、的先序 遍历if(root=NULL)throw"错误"Node *p;Node *tree20;int top=0;while(root!=NULL|top!=O)while(root!=NULL)if(root->=FatherName)p=root;top+;treetop=root;root=root->child;if(top!=O)root=treetop->brother; top-;return p;Node* FamilyTree:PreFi ndBrother(Node*root,stri ng FatherName)/给定元素值查找兄
35、弟结点指针位置并返回其指针,此方法采用的先序 遍历if(root=NULL)throw"错误"Node *p;Node *tree20;int top=0;while(root!=NULL|top!=0)while(root!=NULL)if(root->=FatherName) p=root;top+;treetop=root;root=root->child;if(top!=0)root=treetop->brother;top-;return p;*root,stri ngvoidFamilyTree:AddNewPeople(NodeFatherN
36、ame,stri ng NAme) /增加新的家族成员if(root=NULL)如果这个家族为空,直接把该结点置为根结点Creat();elseNode *p=new Node;p->=NAme;p->child=NULL;p->brother=NULL;Node *Brother=PreFi ndBrother(root,FatherName); /兄弟结点if(root->=FatherName) /如果与祖先(根结点)同一个父亲,则置为根结点的右兄弟Node *q=root;while(q->brother!=NULL) /寻找根结点的右兄弟结点为空的结点q
37、=q->brother;if(q->brother=NULL)q->brother=p;SetNode(p);Node *Father=PreF in dFather(root,FatherName); /父亲结点/Node *Brother=PreFindBrother(root,FatherName);/ 兄弟结占八、if(Father->child=NULL) /如果父亲结点的孩子结点为空Father->child=p;SetNode(p);else /如果父亲结点的孩子结点不为空if(Brother->brother=NULL) /最后一个兄弟结点B
38、rother->brother=p;SetNode(p);intFamilyTree:DeletePeople(Node*root,stri ngFatherName,stri ng Deletepeople) /删除家族成员int t=0;Numberofpeople-;if(root=NULL)return t;elseif(root->=Deletepeople) /如 果要删 除的为祖先,贝V调用Release。函数t=1;root->brother=NULL;root->child=NULL;Release(root);elseNode *Father=Pre
39、Fi ndFather(root,FatherName);Node *Brother=PreFi ndBrother(root,FatherName); /兄弟结点Node *p;Node *tree20;int top=0;while(root!=NULL|top!=0)while(root!=NULL)if(root->=Deletepeople)p=root;/break;top+;treetop=root;root=root->child;if(top!=0)root=treetop->brother;top-;if(toupper(p->=' Y
40、9;) /健在人数减一LifePeopele-;if(Father->child->=p->/Deletepeople)Father->child=NULL;elseBrother->brother=NULL;/p->brother=NULL;p->child=NULL;t=1;delete p;return t;int flag=0; / 标记NAme,stri ngint FamilyTree:SetNewName(Node*root,stri ngNewName) /更改姓名if(root=NULL)retur n flag;elseif(roo
41、t->=NAme)flag=1;root->=NewName;elseSetNewName(root->child,NAme,NewName);SetNewName(root->brother,NAme,NewName);retur n flag;int FamilyTree:FindChild(Node*root,string NAme) / 显示孩子信息int flag=0;if(root=NULL) retur n flag ;elseif(root->=NAme)if(root->child=NULL)retur n flag;elseflag=1;
42、cout<<root->child-><<""Node *p;Node *tree20; p=root->child;tree0=p;int top=0;while(p->brother!=NULL) p=p->brother;top+;treetop=p;coutvvp-xv""coutvv"n是否查看孩子的详细信息(是:y,否:n):"char ch;cin> >ch;if(toupper(ch)=' Y')Node *q=treetop;while
43、(top>-1)Prin tMessage(q);cout<<"n"<<e ndl;top-;q=treetop;retur n flag;保存到文件void FamilyTree:SaveToFile(Node *root) /if(root=NULL)coutvv"家谱为空"<<endl;return ;ofstream ofile;cout << "请输入要保存文件的路径:"<< endl;char c = (); /接收回车char dir40;(dir, 40
44、);(dir,ios:app);if (_access(dir, 0) = -1) /系统自带功能判断路径是否有效cout << "输入路径不存在!" << endl;return;elsed:"cout << "已经保存全部信息。"<< endl;ofile << " 姓名"<< setw(10) << " 性别"<< setw(10) << "偶"<< setw(
45、10) << " 出生地"<< setw(10) << " "学历"<< setw(7) << " 工作"<<setw(7) << " 健在"<< endl;Node *tree20;int top=0;while(root!=NULL|top!=0)while(root!=NULL)ofile<<root-><<setw(10) vvroot-xvsetw(10)v<roo
46、t-xvsetw(10)vvroot-xvsetw(9)vvroot->vvsetw(9)vvroot-xve ndl;top+;treetop;treetop=root; root=root->child;if(top!=0)root=treetop->brother;生日"vv setw(10) vv 父亲"vvsetw vv "vvroot->vvsetw(10)vvroot->vvsetw(10)vvroot->vvsetw(9)top-;();void FamilyTree:FileToFamilyTree(Node
47、*root ) /从文件中读取cout << "请输入要读取文件的路径:"<< endl;ifstream ifile;char c = (); /读入任意一个字符,包括回车符char dir40;/因为cin的>>重载会跳过空白字符,包括回车字符,所以无法使用 >>直接读入回车符(),该成员函数功能为,从 cin读入一个字符,并返回(dir, 40); /(),该成员函数功能为,从cin读入一个字符,并返回(dir); /if (_access(dir, 0) = -1)cout << "输入路径不存在
48、!" << endl;return;stri ng ch;getline(ifile, ch);cout << ch << en dl;Node *tree20;int i=0;while (!() eof文件末尾/姓名性别配偶 出生地生日 学历工作父亲健在ifile>>root->>>root->>>root->>>root->>>root->>>root->>>root->>>root->>>
49、;root->treei=root;i+;i-;for(i nt j=O;j<i;j+)cout<<treej-><<""<<treej-><<""<<treej-><<""<<treej-><<""<<treej -><<""<<treej-><<""<<treej->
50、;<<" "<<treej-><<" "<<treej-><<e ndl;#in elude <iostream>#in elude <>#i nclude "" #in elude <stri ng> using n amespace std; void Me nu();int mai n()Men u();"<<e ndl;coutvv"n创建家谱,输入顺序为前序序列,左孩子,右兄弟Famil
51、yTree ft;system("cls");Men u();Node *root=();while(1)int select;cout<<"n请输入选择操作的序号:";cin> >select;while(1)cin> >select;if()coutvv"输入有错!请重新输入选择(数字):";();/输入错误则能重新输入将错误标识符改为0();/清空数据流elsebreak;switch(select)case 1:system("cls"),Me nu ();break;c
52、ase 2:(root);cout<<"n 前序遍历"<<e ndl;cout<<"nn中序遍历"<<e ndl;cout«"查找结果:"vve ndl;这个家族共有这个家族共有"<<( )<<"这个家族健在人数为:请输入要查询的人的姓(root);cout<<"nn 后序遍历"<<e ndl;(root);cout«e ndl;break;case 3 :cout<<
53、"nn"vv(root)vv" 代人"<<e ndl;cout<<"nn人"<<e ndl;cout<<"nn"<<( )<<e ndl;break;case 4:cout<<"nn名:";stri ng Name;cin>> Name;int message=(root,Name);if(message=O)cout«"break;case 5:查找失败! !"<<e ndl;cout<<"nn亲姓名:";stri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国东盟自贸区3.0版与RCEP规则对比应用指南
- 2026年高端医疗器械向深而行培育新质生产力制造增长极
- 2026年骨与软组织肉瘤质子重离子治疗适应证解析
- 2026年气凝胶复合材料制备与应用指南
- 2026年量子传感器从实验室走向工程化规模化应用前景
- 2026年居住权与所有权分离法律实务解析
- 2026年飞秒激光FMM精细金属掩膜板异形孔加工工艺解析
- 2026年企业展陈与司志编纂:记录奋斗历程夯实文化传承载体
- 2026年生物改良药监管路径缺乏协调指南开发挑战分析
- 2026年高端轴承强国建设助力中国式现代化实践
- 助贷公司新人培训
- GB/T 46821-2025嵌入式基板测试方法
- 华为合规新管控机制
- 超星尔雅学习通《大学生国家安全教育(中国人民警察大学)》章节测试含答案
- 2025中国民生银行总行秋季校园招聘专业能力测试笔试历年典型考题及考点剖析附带答案详解
- (正式版)DB42∕T 2465-2025 《钢滑道顶升技术规程》
- 灯光音响租赁施工方案
- 科研项目伦理审批知情同意书模板
- SAP-PP模块基础培训
- CRRT和血液透析的区别
- 2026年江西单招语文应用文写作专项含答案通知启事求职信经典题
评论
0/150
提交评论