




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一:设计任务说明21.1项目的目的21. 2项忖体系结构及开发环境2-:需求分析22. 1系统功能简述32. 2系统功能模块设计4三:设计方案53.1数据库设计53.2数据库中表的关系图7四:测试分析74.1公共类84.2登录模块104.3主窗体设计124.4系统管理模块134.5专业管理模块144.6研究生管理模块184. 7成绩管理模块20五:总结23六:参考文献23、设计任务说明1.1项目的目的研究生信息管理是一项非常重要的工作,它关系到整个学校的工作效率。一个好的 信息管理系统能够方便系统管理人员对学校的基木数据进行维护,包括信息的增加,修 改以及对各项信息的变动等操作。采用研究生
2、信息管理系统不仅可以节省人力物力,而 且可以增强学校资料的安全性,提高学校的管理能力。整个系统的管理员可以根据学校 情况添加、删除、修改、角色的权限,很方便管理。12项目体系结构及开发环境1. 木系统采用client/server体系结构。2. 系统开发环境1)开发平台:microsoft visual studio 20052)开发语言:c#3)数据库:acccss20033. 系统运行环境客户端:操作系统:windows 2000、windows xp服务器端:数据库:access2003二、需求分析2. 1系统功能简述研究生信息管理涉及专业、课程、成绩、个人信息等的管理,需要处理大量数据
3、和 信息,而且对这些数据和信息的准确性、及时性都要求非常高,任何的错误和遗漏都会 造成学校管理的混乱:若采用纯人工的方法进行管理有一定难度,因此,目前人多数学 校都开始采用计算机技术来实现研究生信息的管理。该系统的功能主耍包括系统管理、专业管理、课程管理、研究生管理、成绩管理和 用户管理等主要模块,还有一些其他模块如帮助模块以及登录模块上的功能。系统管理员添加年级信息、班级信息、所开设的课程信息和系统用户信息,对用户 进行权限设置并对其进行维护;新生入学时,普通管理员录入研究生的基本信息,并在以后的教学中对研究生信息 进行基本维护;考试结束后,由任课老师对研究生的成绩进行录入,并对成绩进行分析
4、;学期之初,导师给每位研究生选择课程,并可以对研究生的信息和成绩进行查询;每位研究生可以根据口己的需要对以上录入的信息进行适当的查询。图2-1主文件架构图22系统功能模块设计木研究生信息管理系统的功能由登录界面和主窗体界面两部分的功能组成。其中主 窗体界面的功能由系统管理、专业管理、课程管理、研究生管理、成绩管理、用户管理 等模块组成。具体如下:登录模块:通过登录模块,用户可以进入木系统进行和关操作。同时用户通过“忘 记密码”链接,可以找回密码。用户还可以通过友情链接,浏览研究生的一些相关消息。系统管理:通过本模块,用户可以注册新用户,删除用户和清空系统访问量。专业管理模块:通过木模块,用户可
5、以添加,浏览专业信息,浏览过程中可以进行 修改、删除和更新。课程管理模块:通过本模块,用户可以添加,浏览课程信息,浏览过程中可以进行 修改、删除和更新。研究生管理模块:通过本模块,用户可以添加,浏览学生信息,浏览过程中可以进 行修改、删除和更新。成绩管理模块:通过本模块,用户可以添加,浏览学生成绩,浏览过程屮可以进行 修改、删除和更新。用户管理模块:通过本模块,用户可以修改密码和密保,也可以进行重新登录。 帮助模块:本模块分为操作引导和关于两功能。操作引导告诉用户如何使用本系统。 而关于则是本系统的一些其他的信息。研究生管理信息系统系统管理专业管理课程管理研究生管理成绩管理用户管理注 酒 册
6、空 新 访 用 问 户 fi添 加 专浣 览 专 、|"够 改、|卜i删除专业添 加 课 程桃 览 课修 改 课删除课程添 加 学 生览 学 生够 改 学i删除学生添 加 成 绩览 成 绩修 改 成 绩mil除 成 绩修修重 改改新 密密登 偲保录设计方案根据研究生管理信息系统的功能要求,我们设计该系统需要整理研究牛:信息、教师 信息、课程信息、专业信息、成绩信息、用户信息、角色信息。这样我们运行系统时, 根据需要执行便可看到预想的信息。根据所学的数据库知识知道我们可以给该系统建立 数据库,并在建立的数据库中创建所需信息的表以及各表间的关系图。3.1数据库设计该系统的数据库命名为ma
7、stermis,数据库中共包括七张表,如表3-广3-8所示: 用户信息表(userinfo),包含用户的名称,密码,角色,密保问题以及答案; 角色信息表(roles),包含角色名称和与该角色相关的权限;专业信息表(majorinfo),包含学校所开专业的名称及其详细介绍;课程信息表(courscinfo),包含学校所开设课程的名称及其详细介绍;研究生基本信息表(studentinfo),包含研究生的学号、姓名、性别等信息; 成绩信息表(scoreinfo),包含研究生的学号、课程、成绩等信息; 教师信息表(teacherinfo),包括教师的姓名等信息。访问信息表(visted),记录系统的访
8、问量。下面列出了各个表的数据结构,如表3-广表3-8所示。表3-1用户信息表(userinfo)字段名数据类型描述un amevarchar用户名(主键)pwdvarchar密码rolenamevarchar角色名questionvarchar密保问题answervarchar密保问题答案表3-2角色信息表(roles)字段名数据类型描述rolenamevarchar角色名(主键)systemmanagebit系统管理majormanagebit专业管理courscmanagcbit课程管理scoremanagebit成绩管理表3-3专业信息表(majorinfo)字段名数据类型描述midin
9、t专业编号mnamev arch ar专业名称(主键)mrcmarkvarchar专业描述表3-4 课程信息表(courseinfo)字段名数据类型描述cidint课程编号(主键)cnamevarchar课程名称cdatcvarchar学时cnumvarchar学分mnamevarchar专业名称cremarkvarchar课程描述表3-5研究生基本信息表(studentinfo)字段名数据类型描述sidint研究生学号(主键)snamevarchar研究生姓名sse.xvarchar性别spidvarchar身份证号sbirthvctrchar出生日期tidint老师编号mnamevarch
10、ar专业名称sremarkvarchar备注表3-6成绩信息表(scoreinfo)字段名数据类型描述ridint成绩编号(主键)sidint学号cnamevarchar课程名称scorevarvhar分数表3-7 教师信息表(teacherinfo)字段名数据类型描述tidint教师编号(主键)tnamevarchar用八名表3-8系统访问信息表(visted)字段名数据类型描述vistedcountint系统访问量3.2数据库中表的关系一般情况下,数据库屮所包含的表都不是独立存在的,而是表与表z间有一定的关 系,称为关联。如果数据库中的信息不能满足正常的依赖关系,就会破坏数据的完整性 和一
11、致性。根据本实例的特点,需要设置课程信息表、专业信息表、研究生信息表、成 绩信息表和教师信息表z间的关系,如图3-1所示。设置用户信息表与角色信息表z的图3-1数据库关系图图3-2用户角色关系图四、测试分析4.1公共类考虑到系统的各个模块都需要访问数据库,因此最好的方法是编写一些访问数据库 的方法,如返回数据集的公共查询方法,执行数据操作的公共方法,并把它们放在一个 公共的类(database)中,然后在各模块中调用这些方法来实现对数据库的访问。同样,在用户登录时,可能需要记录一些关于用户的信息,例如用户名、用户权限 等,因此也需要使用到一些公共的静态变量,把这些变量放置在一个名为“class
12、shared” 的类中。4. 1. 1添加database公共类并编写公共方法首先为系统添加一个名为“database"的公共类,用于存放访问数据库的公共方法。 然后在此类中编写公共方法。因为在这些方法中需要使用到oledbconnection. oledbdataadapter、dataset和messagebox,所以首先应当引入以下命名空间:using system.data;using system.data.oledb;using system.windows.forms;然后为“database"类声明几个公共变量:public oledbconnection
13、dataconnection = new oledbconnection();public oledbdataadapter dataadapter;public dataset dataset = new dataset();public oledbcommand command;定义数据库连接字符串,随具体环境而定,应根据内容自行调整string connstr = hprovider = microsoft.jet.oledb.4.0;n + "data source=e:selectcourse.mdb"1.公共查询方法getdatafromdbgetdatafro
14、nidb是一个返回数据集的公共查询方法,如果正常访问则返回查询结 果;否则返回mill。在方法屮添加代码如下:dataconnection.connectionstring = connstr;dataadapter = new oledbdataadapter(sqlstr, dataconnection);dataset.clear();dataadapter.fill(dataset); 填充数据集 dataconnecti on.cl ose();关闭连接 if (dataset.tables0.rows.count != 0)return dataset; 若找到相应的数据,则返回数
15、据集elsereturn null;/若没有找到相应的数据,返回空值4. 1.2.公共数据操作方法updatedb公共数据操作方法updatedb用于对数据进行添加、修改和删除操作,若操作成功 则返0 true;否则返回false。在方法屮添加代码如下:dataconnection.connectionstring = connstr;dataconnection.open();command = dataconnection.createcommand();command.commandtext = sqlstr;command.executenonqueryo;dataconnection
16、.close();/ 关闭连接return true;3.随机生成验证码的方法随机生成验证码,参数codelength是验证码的长度,本系统统一是4个字符。在方 法中添加代码如下:string str = "h;string codechars =nabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyzm;intj;random rnd = new random();for (int i = 0; i < codelength; i+)j = rnd.next(codechars.length);str +=
17、 codecharsfj;return str;/str即为随机生成的验证码4. 1.3 添加 classshared 公共类类似于添加database公共类那样,为项目添加一个名为“classshared”的公共类, 用来存放一些公共的静态变量,以在窗体之间传递数据。4. 2登录模块登录是每一个成功项冃中不可缺少的模块,好的登录模块可以保证系统的可靠性和安全性。本节首先制作一个登录模块,登录成功后,即可进入系统的功能界面。4.2.1登录界面设计新建一个 windows 应用程序,使用 label、textbox、blit ton > linklab le> combobox等控件
18、并修改各控件的属性,设计成如图4-1所示。图4-1登录界面4. 2. 2登录模块代码接下来编写登录模块的代码。【登录】按钮用于验证输入的用户名和用户密码,若 正确则进入系统主界面;否则弹出错误提示,并等待用户的重新输入。登录时,需要记录登录的用户名和用户权限,因此在"classshared"公共类中声 明公共静态成员,并在“classshared”公共类添加如下代码:public static string userlnfo = new string2;下面编写登录按钮的代码,由于用户登录时的类别有系统管理员、普通管理员、教 师、学生四种,每种身份类别的代码相似,下面就不详
19、细书写。/双击【登录】按钮,编写其单击事件的代码如下:dataset ds = new dataset();database db = new database();string sqlstr = "select pwd,rolename from userinfo where uname="' + txtusername.text.trim() +ds = db.getdatafromdb(sqlstr);if (ds.tablcs0.rowsfo.itcmarray.toslring() = txtuscrpassword.tcxt.trim() &&a
20、mp; ds.tables0.rows0.itemarrayl.tostring() = cmbtype.selectedltem.tostringo) if (cmbtype.selecteditem.tostring().trim()="系统管理员")fnnmain myfrmmain = new frmmain();classshared.userinfooj = txtusername.text.trim();classsharcd.uscrlnfof 1 = ds.t ables 0. rows0 .item array 1 .t ostri ng(); stri
21、ng str = "update visted set vistedcount=vistedcount+1 db.updatedb(str);myfiinmain.show();this.hide();1else if (cmbtype.selecteditem.tostring().trim()="普通管理员")/如上,显示普通管理员主窗体界面else if (cmbtype.selecteditem.tostring().trim()= ”教师”)/如上,显示教师主窗体界而) else如上,显示学牛主窗体界面elsemessagebox.show(”用八名或密
22、码错误,请重新输入! ”); txtusername.focus();有时候,用户希望在输入完密码或用户名后直接按下【enter键便进入系统主界 面,这就需要编写文本框txtuscrpassword和txtuscrnamc的kcydown事件代码,以txtuserpassword为例,添加代码如下: if (e. key code = keys.enter)btnok_click(sender, e);4. 3主窗体设计以系统管理员主窗体为例,当主窗体载入时,将前而用公共静态数组“userjlnfo” 保存的用户登录信息作为其标题显示在标题栏中;进入主窗体后,用户单击上面的按钮 可以进入相应的
23、子系统;并且,当用户单击主窗体的退出按钮时,应当终止应用程序的 运行。添加代码如下:在主窗体的load事件屮添加如下代码:lalname.text =classshared.userinfo 1 +""+ classshared.userinfo0;database db = new database();dataset ds;string sql = "select vistedcount from visted"ds = db .getdatafromdb (sql);lalcount.text = ds.tableso ,rows0 0 .tost
24、ringo;/ 显示访问量timer2.enabled = !timer2.enabled;在timer 1的tick事件111添加如下代码:laltime.text = datetime.now.tolongtimestringo;/ 显示当前时间在ti mer2的ti ck事件中添加如下代码制作动态欢迎标语,讦(lblwelcome.left < -500)iblwelcome 丄 eft = 680;else lblwelcome.left -= 3;点击系统管理时,显示系统管理窗体,并隐藏本窗体(其它模块按钮代码相似)this.hide();frmsystem mysystem
25、= new frmsystem();mysystem.show();备注:窗体载入事件代码的功能是将登录的用户名"userinfo0 ”与用户的权限"userinfotl ”连接起来,中间用“一一”隔开,并作为下标显示。载入窗体事件中 还添加了 timer控件用来辅助显示当前吋间和动态欢迎,同时还显示出系统的访问量。4. 4系统管理模块系统管理模块主要有添加用户、删除用户和清空访问量三个功能,仅对系统管理员 开放。下面介绍该模块实现的方法和步骤。4.4.1用户界面设计添加windows窗体,使用label、textbox、button> linklable、combo
26、box等控件,修改各控件的属性,设计成如图4-8所示。当前用尸登录:浆统首理员edmin 当話时问:23:04:02 已访问母:22vt究生依息昔理系统图4-8系统管理模块界面4.4.2编写代码本小节介绍系统管理模块,本模块采用父子窗体设计,系统管理界面为父窗体,注 册新用户和删除用户分别为两个子窗体。【注册新用户】和【删除用户】,当点击这两个按钮时会弹出注册或删除用户窗体, 并关闭其它窗体,以注册用户为例,在按钮的事件中添加代码如下:myadd = new adduser();for (int x = 0; x < this.mdichildren.length; x+)form te
27、mpchild = (form)this.mdichildrenx;tempchild.close();myadd.windowstate = formwindowstate.normal;myadd.show();myadd.mdiparent = this;【清空系统访问量】,当用户点击该按钮时系统会与数据库连接,如果用户确定清空,系统就会清空数据库中表visted中的记录。出于代码实现比较简单,这里就不再一一赘述。4. 5专业管理模块专业管理模块主要用于对研究生专业的管理,主要包拾添加专业和浏览专业两功 能,其中在浏览专业界面中可对所有专业进行修改、删除等操作。本模块仅对系统管理 员开放
28、。4. 5. 1用户界面设计图4-9专业管理-浏览专业界面图4-10专业管理-添加专业界面图4-11修改专业界面4.5.2编写代码本小节介绍专业管理模块,本模块采用父子窗体设计,专业管理界面为父窗体,浏 览专业和添加专业分别为两个子窗体。【添加专业】,当用户单击该按钮时会弹岀添加专业的界面,在该界面屮,如果用 户信息填写完整,当点击【提交】时,系统会判断该专业是否已经存在,如果存在则添 加成功,否则会提示该专业已存在。所以在提交按钮的事件中添加如下代码:string str = "select * from majorinfo where mname='"+txtm
29、ajor.text.trim()+"'"database db = new database();dataset ds = db .getdatafromdb (str); if (ds != null)messagebox.show("该专业已存在”,”提示”);elseif (messagebox.show(”确认提交吗? ”,”增设新专业“,messageboxbuttons.yesno, messageboxicon.question,messageboxdefaultbutton.button2) = dialogresult.yes)strin
30、g sql = "insert into majorinfo (mname,mremark) values("r + txtmaj or.text.t ri m() + txtma j orremark .t ext .t ri m() +db.updatedb(sql);messagebox.show(h提交成功! n);txtmaj or.text =txtmaj orremark .t ext =下面介绍浏览专业界面的功能实现。曲于在浏览专业了窗体打开时就需要将耍查询的信息显示到datagridview控件中,这可以通过与数据库中的数据连接实现。【修改】,当单击该按钮
31、时系统会弹出修改专业窗体界面,并月专业信息会自动填 充到该窗体中。由于代码实现比较简单,这里不再详细叙述。【删除】,当用户选中某一条记录时,单击该按钮,就会删除该记录,在按钮事件 中添加代码如卞:int n = dgrdmajor.currentcell.rowindex;if (messagebox.show(”确认删除吗? “, ”删除删除专业”,messageboxbuttons.yesno,messageboxicon.question,messageboxdefaultbutton .button2) = dialogresult.yes) string sqlstr = hdele
32、te from majorinfo where mname=,n + dgrdmajor0, n.value.tostring() +database db = new database();bool b = db.updatedb(sql str);if (b = true)messagebox.show("删除专业成功”,"提示”);majorshow_load(this, e);【更新】按钮,当用户单击该按钮时,系统会及时更新dgrdmajor表中的数据,可 以通过再次查询数据床屮的数据,实现该功能。下面介绍修改专业的功能实现。当单击修改专业窗体中【提交】按钮时,如果
33、用户 信息填写完整,系统会判断该专业是否存在,不存在则修改成功,存在的话则会提示专 业发生重复,在提交按钮的事件添加如下代码:database db = new database();dataset ds;string str = "select * from majorinfo where mname="' + txtmname.text.trim() + "'andmidv>” + txtmid.text.trim();ds = db.getdatafromdb(str);if (ds != null)messagebox.showc专业
34、名称发生重复! “,”提示”);elseif (messagebox.show("确认修改吗?","修改专业”,messageboxbuttons.yesno, messageboxicon.question,messageboxdefaultbutton.button2)= dialogresult.yes)string sql = "update majorinfo set mname=,n + txtmnanie.text.trim() +n',mremark='n + txtremark.text.trim() + where m
35、id=" + convert.toint64(txtmid.text) +bool b = db.updatedb(sql);if (b = true)messagebox.show(h修改成功!”提示”);this.closeq;4. 6研究生管理模块研究生管理模块主要用于对所有研究生各种在校信息的管理,包括研究生信息浏览 和添加信息两大功能,其中研究生信息浏览界面内可对所有信息进行修改、删除等操作。4.6.1用户界面设计图4-14研究生管理-添加学生界面当前用尸登录:研究生偌息甘理糸歩31图4-15研究生管理-浏览学生界面硏究生台理糸统甘理员-admin当对时间:20:08:01
36、已访问呈:硏究生台理4.6.2编写代码木小节介绍研究生管理浏览信息模块,木模块采用父子窗体设计,研究生管理界面 为父窗体,浏览信息和添加信息分别为两个子窗体。【添加学生信息】,当用户单击该按钮时会弹出添加学生信息的界面,在该界面中, 如果用户信息填写完整,当点击【提交】时,系统会判断该生是否已经存在,如果存在 则添加成功,否则会提示该生已存在。此部分的功能代码与专业管理中相似,不再详细 叙述。【浏览信息】,当用户点击该按钮时会弹出浏览信息窗体,并且窗体载入时所有专 业将以树的形式显示在treeview控件中,所以在窗体load事件中添加如下代码:string str = "selec
37、t mname from majorinfo"ds = db.getdatafromdb(str);for (int i = 0; i < ds.tables0.rows.count; i+)string s = ds.tables0.rowsi.itemarray0.tostringo;tremajor.n odes.add(s);由于当单击树中的专业后会在表格中显示和应专业的学生,在树的afterselect 的事件屮添加代码如下:db = new database();string sql = "select sid as 学号,sname as 姓名,ssex
38、 as 性别,snum as 身份证号, mname as专业名称,sbirth as出生日期,” +''(select tname from teacherinfo where studentinfo.tid = teacherinfo.tid) as导师姓名,sremark as备注” +"from studentinfo where mname=n' + e.node.text.tostring() +ds = db.getdatafromdb(sql);dgrdstudent.datasource = db.dataset.tableso;【修改】,当
39、单击该按钮时系统会弹出修改学生窗体界面,并冃学生信息会自动填充到该窗体中,然后用户可以在该窗体进行修改信息。【删除】,当用户选屮某一条记录时,单击该按钮,就会删除该记录,此按钮的事件代码与专业管理中删除按钮的代码相似,不再详细叙述。【更新】,当用户单击该按钮时,系统会及时更新dgrdstudent表中的数据,可以 通过再次查询数据咋屮的数据,实现该功能。4. 7成绩管理模块成绩管理模块用于对所有学生成绩的管理,包括成绩浏览和添加成绩两大功能。4. 7. 1用户界面设计咸绩皆理忝加成绩 >4m冷占 yr人.jh当茄用尸登录:系统甘理员当质时问:20:25:45已访冋:32碩究生信©
40、;甘理系统图4t6成绩管理-添加成绩界面i腳成發甘理i添加成绩叫览成纟责 w后烬当前用尸登录:系鋭莒理员odmin 当翫时冋:20:26:59 已访问母:33硏究生信层莒连系统图4-17成绩管理-浏览成绩界面4.7.2编写代码【添加成绩】,当用户单击该按钮时会弹出添加学生成绩的界面,在该界面中,如 呆用户信息填写完整,当点击【提交】时,系统会判断学生的这科成绩是否己经存在, 如果不存在则添加成功,否则会提示。在提交按钮的事件中添加如下代码:string str = "select * from scoreinfo where sld=,n +cmbname.selectedvalue
41、.tostring().trim() + f" and cname='" + cmbcourse.text.trim() +database db = new database。;dataset ds= db.getdatafromdb (str);if (ds != null)messagebox.showc该学生的该科成绩已存在,请核对! ”,”提示”);elseif (messagebox.showc'确认添加吗?","添加成绩",messageboxbuttons.yesno,messageboxicon.questio
42、n, messageboxdefaultbutton.button2)= dialogresult.yes)str = "insert into scoreinfo (sid,cname,score) values ('" + cmbname.selectedvalue.tostring().trim() + n','n + cmbcourse.t ext .t rim() + txtmark.text.trim() +bool b = db.updatedb(str);if (b = true)messagebox.show(”成绩添加成功! ”,”提示”);txtmark.text =【浏览成绩】,当用户点击该按钮时会弹出浏览成绩窗体,并且窗体载入时所有专 业和课程将以树的形式显示在treeview控件屮,所以在窗体load事件屮添加如下代码: database dbl = new database();database db2 = new database();oledbdatareader rdl, rd2;string sql;sql = hselect mname from majorinfo”;string connstr = ”pfovidei=microsoft.jet.oledb.4.0;”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年药士试题及答案
- 2024-2025学年江苏省淮安市淮安区苏教版三年级下册期末考试数学试卷(含答案)
- 面试难忘的题目及答案
- 会泽进城考试试题及答案
- 抗台安全培训课件
- 旅行社运营实务(第二版)习题及答案 项目一习题
- 扫地车安全培训内容记录课件
- 2025年唐山协警考试试题及答案
- 2025年营房工作考试题目及答案
- 2025年心脏内科考试题及答案
- 2025年部编版语文四年级上册全册单元、期中、期末测试题及答案(共10套)
- 村级妇联半年工作总结
- 托育园一日常规流程规范
- 收费员考试题库及答案
- 棒针编织教学课件
- 护士关爱活动方案
- 职业健康:放射卫生知识培训计划
- 数控安全培训课件
- 口腔团队的管理与建设
- 台球俱乐部工作管理制度
- 肉毒素中毒的治疗讲课件
评论
0/150
提交评论