版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、仲恺农业工程学院仲 恺 农 业 工 程 学 院课 程 设 计 报 告(题目)员工管理系统课程名称: 数据结构与算法 院 (系): 信息科学与技术学院 专业班级: 学 号: 姓 名: 目 录综合设计题目5一、问题所需要处理的数据的逻辑结构5二、问题所需要处理的数据的存储结构设计6三、主要算法设计(程序流程图)10四、调试分析12五、课程设计总结17附录:详细设计(关键代码)27 题目:员工管理程序一、问题分析和任务定义1、要求和任务:解决这个问题,要编写一个员工管理系统程序。要求每个员工信息包括:编号、姓名、性别、年龄、生日、工龄、学历、职务、电话、住址。系统能够完成员工信息的查询、更新、插入、
2、删除、排序功能。要求:(1) 排序:按其关键字,对所有员工的信息进行排序。(2) 查询:按指定条件查找员工。(3) 修改:按编号对某个员工的某项信息进行修改。(4) 插入:加入新员工的信息。(5) 删除:按编号删除已离职的员工的信息。2、原始数据的输入及输出格式:原始数据要求输入员工的个人信息情况,包括编号、姓名、性别、年龄、生日、工龄、学历、职务、电话及住址。编号、年龄的输入为整型,其它输入均为字符数组。输出的是对员工信息进行的排序、查询、更新、插入、删除等的具体情况。 员工信息如表一 编号姓名性别年龄生日工龄学历职务电话住址1李永男2108061年本科程序员1593广州2王浩男240406
3、3年研究生管理员1882深圳3淑琳女2211542年博士开发1353茂名4江凌女2109210年本科调试1821广州将上述信息全都保存到employee.txt文件中,然后在从文件中读取信息进行相应操作并将操作结果存放于employee1.txt文件中。 3、设计算法的测试用例 (1)输入四名员工信息。显示四名员工的八种信息如下:(2)查询:按编号查询:输入要查找员工编号为1,输出员工信息为 1 李永 男 21 0806 1年 本科 程序员 1593 广州按姓名查询:输入员工姓名为王浩,输出员工信息为2 王浩 男 24 0406 3年 研究生 管理员 1882 深圳输入员工姓名李三,输出没有此
4、员工。按电话查询:输入员工电话为1353,输出为(3 淑琳 女 22 1154 2年 博士 开发 1353 茂名 (3)排序:按编号排序;按姓名排序;按年龄排序。 (4)按编号修改员工信息,输入修改编号4,输入修改信息4 黄凌 女 21 0921 0年 调试 调试 1821 茂名(5)按编号删除员工信息:输入要删除员工的编号2002 ,输出删除成功。 (6)输入新员工的信息:输入员工信息为4 阿妹 女 21 0804 2年 调试 调试 1821 茂名 (7)退出员工管理系统,将链表信息保存到文件中。 二、数据结构的选择和概要设计 1、数据结构 员工管理系统要求实现许多功能,要求要循环可遵循结构
5、化程序设计思想来进行本系统的设计自顶向下,逐步细化,也就是将软件设计任务划分成许多容易解决的小的子任务,即分解出许多子功能模块进行设计。 (1)链表:链表存储是最常用的存储方法之一,它用一组任意的存储单元来存放组成数据 的数据元素。当用若干个任意的存储单元来分别存放若干个同类型的数据、便保持它们之间线性逻辑关系时,就构成链表。本程序员工信息都是同种类型。只要确定链表的首结点地址,其它员工信息可以通过首结点查找到,然后进行相关操作。 (2)链表算法: A、查找:从链表的首结点元素出发,顺着链表逐个地将结点的值与给定的值x进行比较。若有结点值等于给定值x,则输出首次找到的其值为x的结点的存储位置。
6、 B、删除:从链表的首结点元素出发,以本程序为例:头结点p=head;首结点 q=head-next,用q作while循环的判断条件,判断q是否为真(判断链表是否为空),然后按编号查找到要删除的员工信息p-next=q-next;break;跳出while循环;员工信息指针后移p=p-next;q=q-next;若找不到则输出没有该员工。 C、排序:本程序是链表的排序,用两层循环进行比较,第一次比较的首结点与链表的后续结点一一进行比较,将最大的值(或最小的值)放在首结点位置,第二次比较链表首结点后的第一个结点与后续结点一一进行比较,将最大的值(或最小的值)放在首结点后的第一个结点。依此类推直到
7、成为有序序列为止。 以本程序中按编号排序为例:定义结构体指针Workman *r,*p,*q,头结点head; 将r=head-next;用两层循环进行排序:外层循环while(r),将p,q赋值,p=r;q=r-next;内层循环while(q),若q-nump-num,则交换员工信息;内层信息指针q=q-next; 外层信息指针后移r=r-next;该函数具体实现如下: void Arrangebynumber() /按编号进行排序 Workman exchange,*r,*p,*q; r=head-next; if(r=NULL) printf(现在还没有员工信息,请先输入员工信息n);
8、 return; while(r) p=r; q=r-next; while(q) /q所指结点不为空 if(q-numnum) /前者编号比后者大时,两节点的信息进行交换 exchange.num=q-num; strcpy(,q-name); strcpy(exchange.sex,q-sex); exchange.age=q-age; strcpy(p-worktime,p-worktime);strcpy(p-birthday,p-birthday); strcpy(,q-edu); strcpy(exchange.pos,q-pos)
9、; strcpy(exchange.tel,q-tel); strcpy(exchange.address,q-address); q-num=p-num; strcpy(q-name,p-name); strcpy(q-sex,p-sex); q-age=p-age; strcpy(p-worktime,p-worktime);strcpy(p-birthday,p-birthday);strcpy(q-edu,p-edu); strcpy(q-pos,p-pos); strcpy(q-tel,p-tel); strcpy(q-address,p-address); p-num=exchan
10、ge.num; strcpy(p-name,);strcpy(p-sex,exchange.sex); p-age=exchange.age; strcpy(p-worktime,p-worktime);strcpy(p-birthday,p-birthday);strcpy(p-edu,); strcpy(p-pos,exchange.pos); strcpy(p-tel,exchange.tel); strcpy(p-address,exchange.address); q=q-next; /前者比后者小,q指针后移 r=r-next; /
11、r指针后移 Display(p); /输出信息 printf(继续查找输入请按“Y”,返回选择菜单请按“N” );scanf(%s,&ch);if(ch=y|ch=Y)Sort();printf(n);elsenemu();4)结构体类型定义如下:typedef struct node/以单链表节点类型定义int num;/编号char name15;/名字char sex15;/性别int age;/年龄char birthday15;/生日char worktime15;/工龄char edu15;/学历char pos15;/职务char address15;/地址char tel15;
12、/电话struct node *next;/指针域Workman;员工编号、年龄定义为整型数据类型,在后续的排序功能操作时,可以更直观的以员工编号、年龄的大小进行排序。其他信息定义成字符数组类型,员工信息排序比较时,比较数组元素中的ASC码值,排序出来的结果却不容易被看出来。 3)文件:文件是系统定义和实现的抽象数据类型,利用这一结构可方便员工信息的存储和管理。把链表中的员工信息保存到文件中。把文件中员工信息重新用链表存储,然后对链表进行相应的操作。 2、概要设计 (1)为实现上述员工信息系统的功能,首先要创建文件,把链表中的信息写到文件中。本程序设计了以下函数: 1) 主函数 main( )
13、本程序在主函数中操作的比较少都在子函数中操作。 2)创建头结点void CreatheadLink();全局变量head有很大作用,无论进行任何操作都首先要找到头结点。 3)插入一个结点void Insert(Link *T);将创建链表细化,每次创建一个结点连接到前一个结点,每次插入到链表的表尾,即尾插法建立链表。 4)申请结点空间Link *Mallocnode()。 5)输入信息函数void Getinformation(Link *L),只进行员工信息输入操作。 6)输出一个结点信息void Displaynode(Link *L)。 7)输出链表中所有员工的信息void outinf
14、ormation()。 8)从文件中读取信息 void Read(),如果文件存在,读取文件中信息,进行相关操作。 9)链表信息保存到文件中void Savelist(),注意用fprinf输入时,元素之间的空格。 10)按编号查询函数void Displaybynumber()。 11)按姓名查询函数void Displaybyname(),利用字符数组进行比较,只需字符数组首地址strcmp(L-name,name)= =0。 12)按电话查询函数void Displaybyphone() 13)按编号删除函数 void Delete (),首先查找要删除员工的编号,在按链表的删除的操作进
15、行。 13)按编号修改函数void Change(),不能修改员工的编号,只能修改其它信息。 14)按编号排序函数void Arrangebynumber(),利用双重循环进行操作。 15)按姓名排序函数void Arrangebyname() 16)按年龄排序函数void Arrangebyage() 17)排序菜单函数void paixu(),将所有的相关操作函数都放在这个函数中。减轻主菜单函数的负担。 18)查找菜单函数void chaxun()。 19)主菜单函数void menu()。 (2)流程图: 员工管理系统的结构功能如下图1所示:通过该功能图我们可以很快了解系统的功能,以便我
16、们能熟练的使用该员工信息管理系统的各项功能对数据进行处理,从而达到我们所期望的效果。三、主要算法设计(程序流程图)职工信息管理系统的结构设计职工信息管理系统员工信息查询系统员工信息排序系统员工信息修改系统员工信息删除系统员工信息录入系统按姓名排序按姓名查询按年龄排序按编号排序按号码查询按编号查询四、测试结果及其分析 1、运行程序出现主菜单如下: 2、选择序号6显示文件中四名的员工信息: 3、选择序号5进入排序菜单如下: 4、输入序号1按编号排序: 按T键返回排序菜单5输入序列2按姓名排序I按T键返回排序菜单6、输入序号3按年龄排序: 5输入序列3按姓名排序 6、输入序号N返回到主菜单,然后选择
17、序号3进入查询菜单: 7、输入1按编号查找: 按T键返回排序菜单8、输入2按姓名查找: 按T键返回排序菜单9、输入3按电话查找: 10、输入N返回主菜单,再选择序号1插入新员工信息: 11、输入6显示所有员工信息如下: 12、输入4对员工信息进行修改,再选择6显示修改后的结果: 13、输入序号5按编号删除员工信息,再选择6显示结果: 14、最后输入序号0退出本系统: 五、课程设计总结这一次课程设计是运用我们这学期学习的数据结构制作课程设计,把所学到的知识运用于实践中。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从选题目到完成整个编程,从理论到实践,在整整两个星期的日子里,可以学到很多很多的
18、东西,同时不仅可以巩固了以前所学过的知识,特别是上一学期的C语言知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这学期很忙,打代码并没有以前那么勤奋,调试的次数也不多,加上很少做课程设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处(以前的知识忘记了很多,新学的没有完全掌握,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如
19、说结构体,指针,链表通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。我做的是职工信息管理系统的课程设计,虽然这是一个比较简单的程序,但对我来说,我想增加许多功能,发现这设计也遇到很多困难。忘记了以前的很多知识,程序设计开始之前不得不找上学期的书出来看一遍,把以前这的课程设计出来折磨折磨。上学期我制作一个航空信息管理系统,跟这一次的职工系统有一些类似,不过这一次既要运用以前的知识,又用上新学的数据结构的知识。编程是是一件很有趣的事情,但如果没有把程序调试出来,会非常不甘心。我在制作的过程中,出现不少错误,经常是熬夜调试;遇到不懂的就查阅资料和百度。这一次就遇到了这样的问题,调试了整
20、整一天都没有找到问题的所在;我由于思维混乱,我在员工录入系统在的一个指针知错,我花了一天半的时间才找到这错误。一次次的调试,看着不断的弹出“内存不能read”我一句话,我还差一点就崩溃了。编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!附录:详细设计(关键代码
21、)#include #include #include #include #include #include #define DATA p-num,p-name,p-sex,p-age,p-birthday,p-worktime,p-tel,p-edu,p-pos,p-address#define SEARCHDATA L-num,L-name,L-sex,L-age,L-birthday,L-worktime,L-tel,L-edu,L-pos,L-address#define FORMAT %dt%st%st%dt%st%st%st%st%st%sn#define Max 100typed
22、ef struct node/以单链表节点类型定义int num;/编号char name15;/名字char sex15;/性别int age;/年龄char birthday15;/生日char worktime15;/工龄char edu15;/学历char pos15;/职务char address15;/地址char tel15;/电话struct node *next;/指针域Workman;void nemu();void Creathead();Workman *Mallocnode();void Getinformation(Workman *L);/bool Input()
23、;void Display(Workman *L);void Displaynode(Workman *L);void Outinformation();void Insert(Workman *T);void Delete();void Search();void change();void Sort();void Savelist();void Read();Workman * head;/定义一个全局变量的链表头指针int t=0; char ch; /定义一个全局变量的int型变量void main()Creathead(); /创建带头结点的单链表Read();/读取文件nemu()
24、;/进入主菜单void nemu()/表单Workman *L;char ch;int n;time_t T;struct tm * timenow;time(&T);timenow=localtime(&T);for(;)system(cls);printf(n); printf(当前时间:%s,asctime(timenow);printf(n);printf(-简单职工管理系统-n);printf(退出信息系统请按 0n);printf(录入信息系统请按 1n);/printf(新增职工信息请按 2n);printf(删除职工信息请按 2n);printf(查询职工信息请按 3n);pr
25、intf(修改职工信息请按 4n);printf(职工信息排序请按 5n);printf(职工信息展示请按 6n);printf(-n);printf(n);printf(请输入你的选择(数字0-6): );scanf(%d,&n);printf(nn);switch(n)case 0:printf(退出职工信息系统n);Savelist();free(head);break;case 1:printf(录入职工信息系统n);L=Mallocnode();Getinformation(L);Insert(L);Savelist();break;case 2:printf(删除职工信息系统n);
26、Delete();Savelist();break;case 3:printf(查询职工信息系统n);Search();break;case 4:printf(修改职工信息系统n);change();Savelist();break;case 5:printf(职工信息排序系统n);Sort();break;case 6:printf(职工信息展示系统n);Outinformation();printf(输入Y返回主菜单n);scanf(%s,&ch);break;default:printf(输入有误,重新返回选择菜选择,单请按“Y” );break;void Creathead()/头结点
27、为空 Workman *L;L=(Workman *)malloc(sizeof(Workman); /申请存储空间 head=L;L-next=NULL; /节点的指针域为空 void Insert(Workman *T)/尾插法插一个节点Workman *p;p=head;while(p-next)p=p-next; /p指针后移p-next=T; /尾插法插入结点 Workman *Mallocnode()/申请结点空间 Workman *p; int i; p=(Workman *)malloc(sizeof(Workman); /申请存储空间 if(p=NULL) return NU
28、LL; /若结点为空,则返回NULL p-num=0; /初始化 for(i=0;inamei=0; for(i=0;isexi=0; p-age=0;for(i=0;ibirthdayi=0; for(i=0;iworktimei=0; for(i=0;iedui=0; for(i=0;iposi=0; for(i=0;iteli=0; for(i=0;iaddressi=0; p-next=NULL;return p; void Getinformation(Workman *L) /输入员工信息函数 printf(n输入员工的编号:); scanf(%d,&L-num); printf(
29、输入员工的姓名:); scanf(%s,L-name); printf(输入员工的性别:); scanf(%s,L-sex); printf(输入员工的年龄:); scanf(%d,&L-age); printf(输入员工的生日:); scanf(%s,L-birthday); printf(输入员工的工龄:); scanf(%s,L-worktime); printf(输入员工的学历:); scanf(%s,L-edu); printf(输入员工的职位:); scanf(%s,L-pos); printf(输入员工的电话:); scanf(%s,L-tel); printf(输入员工的地址:
30、); scanf(%s,L-address); printf(n输入成功!n); void Display(Workman *p)printf(编号t姓名t性别t年龄t生日t工龄t电话t学历t职务t住址:n); printf(FORMAT,DATA);printf(nn);void SEARCHDisplay(Workman *L)printf(编号t姓名t性别t年龄t生日t工龄t电话t学历t职务t住址:n); printf(FORMAT,SEARCHDATA);void Displaynode(Workman *L) /输出一个员工的信息 printf(%dt,L-num); printf(
31、%st,L-name); printf(%st,L-sex); printf(%dt,L-age);printf(%st,L-birthday); printf(%st,L-worktime); printf(%st,L-edu); printf(%st,L-pos); printf(%st,L-tel); printf(%stn,L-address); void Outinformation() /输出链表中所有员工信息 Workman *L; L=head-next; /指针L指向首节点 if(L=NULL) printf(n现在没有员工信息,请输入员工信息!nn); return; pr
32、intf(n编号t姓名t性别t年龄t生日t工龄t学历t职位t电话t地址n); while(L) /若节点不为空,进入循环 Displaynode(L); /输出一个节点信息 L=L-next; /指针后移 void Read() /从文件中读取信息 FILE *fp; Workman *L; fp=fopen(employee.txt,r); /打开文件,读取信息 if(!fp) printf(n文件不存在!n); return; L=Mallocnode(); /申请空间while(fscanf(fp,%d%s%s%d%s%s%s%s%s%s,&L-num,&L-name,&L-sex,&L
33、-age,&L-birthday,&L-worktime,&L-edu,&L-pos,&L-tel,&L-address)0) Insert(L); /插入节点L=Mallocnode(); /申请空间 fclose(fp); /关闭文件void Savelist() /保存信息 FILE *fp; Workman *L; L=head-next; if(L=NULL) printf(n现在没有员工信息,请输入员工信息n); return; if(fp=fopen(employee.txt,w)=NULL) printf(n文件不存在n); return; while(L) fprintf(f
34、p,%4d%10s%10s%6d%10s%10s%10s%10s%10s%10sn,L-num,L-name,L-sex,L-age,L-birthday,L-worktime,L-edu,L-pos,L-tel,L-address); L=L-next; fclose(fp); void Displaybynumber() / 按编号查找员工信息 Workman *L; int num,flag=0; L=head-next; printf(n请输入员工编号:); scanf(%d,&num); while(L) if(L-num=num) SEARCHDisplay(L); /输出结点信息
35、 flag=1; /标识符置1 L=L-next; if(!flag) printf(n不存在编号为%d的员工n,num); printf(继续查找输入请按“Y”,返回主菜单按“N” );scanf(%s,&ch);if(ch=y|ch=Y)Displaybynumber();printf(n);void Displaybyname() /按姓名查找员工信息 Workman *L; char name20; int flag=0; L=head-next; printf(n请输入员工姓名:); scanf(%s,name); while(L) if(strcmp(L-name,name)=0)
36、 /两个字符串相等 SEARCHDisplay(L); flag=1; L=L-next; if(!flag) printf(n不存在姓名为%s的员工n,name); printf(继续查找输入请按“Y”,返回主菜单按“N” );scanf(%s,&ch);if(ch=y|ch=Y)Displaybyname();printf(n);void Displaybyphone() /按电话查找员工信息 Workman *L; char phone20; char flag=0; L=head-next; printf(n请输入员工电话:); scanf(%s,phone); while(L) if
37、(strcmp(L-tel,phone)=0) SEARCHDisplay(L); flag=1; break; L=L-next; if(!flag) printf(n不存在电话为%s的员工n,phone); printf(继续查找输入请按“Y”,返回主菜单按“N” );scanf(%s,&ch);if(ch=y|ch=Y)Displaybyphone();printf(n); void Search() int i; system(cls); printf(ntt*-1、按编号查找-*n); printf(tt*-2、按姓名查找-*n); printf(tt*-3、按电话查找-*n); p
38、rintf(tt*-0、返回主菜单-*n); for(;) printf(n输入序号:); scanf(%d,&i); printf(n); switch(i) case 1:Displaybynumber();break; case 2:Displaybyname();break; case 3:Displaybyphone();break; case 0:return; if(i3) printf(输入有误,继续输入!n); void Delete() /按编号删除员工信息 int num; Workman *p,*q; int flag=0; printf(n请输入要删除员工的编号:);
39、 scanf(%d,&num); p=head; q=head-next; while(q) /q所指结点不为空 if(q-num=num) p-next=q-next; free(q); /释放空间flag=1; break; p=p-next; /指针p后移 q=q-next; /指针q后移 if(!flag) printf(n不存在该员工编号!n); return; printf(n删除成功n); void change() /按编号修改员工信息Workman *p,t; int number,flag=0; p=head-next; printf(n请输入员工编号:); scanf(%
40、d,&number); while(p) if(p-num=number)printf(输入员工的姓名:); scanf(%s,&); printf(输入员工的性别:); scanf(%s,&t.sex); printf(输入员工的年龄:); scanf(%d,&t.age); printf(输入员工的生日:); scanf(%s,&t.birthday); printf(输入员工的工龄:); scanf(%s,&t.worktime); printf(输入员工的学历:); scanf(%s,&); printf(输入员工的职位:);scanf(%s,&t.pos); p
41、rintf(输入员工的地址:); scanf(%s,&t.address); printf(输入员工的电话:);scanf(%s,&t.tel); strcpy(p-name,); /字符串覆盖进行修改 strcpy(p-sex,t.sex); p-age=t.age; strcpy(p-worktime,t.worktime);strcpy(p-birthday,t.birthday); strcpy(p-edu,); strcpy(p-pos,t.pos); strcpy(p-tel,t.tel); strcpy(p-address,t.address); flag=1; printf(n修改成功!n); break; p=p-next; /指针后移 if(!flag) printf(n对不起,不存在编号为%d的员工n,number); void Arrangebynumber() /按编号进行排序 Workman exchange,*r,*p,*q; r=head-next; if(r=NULL) printf(现在还没有员工信息,请先输入员工信息n); return; while(r) p=r; q=r-next; while(q) /q所指结点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年保险公司招聘笔试模拟题
- 2026年高等职业教育理论基础知识
- 2026年初级银行从业资格高频考点题集
- 物联网技术课程设计
- 2026年村卫生室知识讲座计划书
- 2026年经济师考试仿真题及解析
- 2026年大学辅导员基础知识
- 2026年网络工程师考试题库
- 2026年焊接质量控制模拟题
- 2026年校园急救知识宣讲活动方案
- 化学社团课课件
- 航空运输地面服务员(民航货运员)职业技能鉴定经典试题含答案
- 2025年广东中山大学孙逸仙纪念医院基础与转化医学研究中心实验岗位招聘2人笔试历年专业考点(难、易错点)附带答案详解
- 校长三年任期述职汇报:五维聚力守初心 奋楫笃行育新篇
- DB42T 1713-2021 城市道路路面维修养护技术规程
- 外国公司绩效管理制度
- T/CI 477-2024石油化工企业数字化碳排放管理体系建设指南
- 2025届北京市中学国人民大附属中学数学八下期末质量检测试题含解析
- 25春国家开放大学《园艺植物栽培学总论》形考任务1-3+实验实习参考答案
- 家庭档案培训课件
- 创新高职英语 基础教程 综合课件U2
评论
0/150
提交评论