版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计- 计算机科学与工程学院课程设计报告题目全称: 基于java语言的五子棋游戏设计 学生学号: 姓名: 指导老师: 全 职称: 指导老师评语: 签字: 课程设计成绩:设计过程表现设计报告质量总分目 录第1章 课程设计的目的与要求31.1 课程设计目的31.2 课程设计的实验环境31.3 课程设计的预备知识31.4 课程设计要求3第2章 课程设计内容42.1课程设计题目42.2课程设计整体设计说明42.2.1课程设计内容52.2.2程序中所用类说明52.2.3程序中使用方法的说明52.2.4异常处理说明62.2.5程序运行效果及存在的问题72.3课程设计详细说明92.4程序代码和注释17第
2、3章 课程设计总结28第1章 课程设计的目的与要求1.1 课程设计目的java程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。java程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。1.2 课程设计的实验环境硬件要求能运行windows 9.x操作系统的微机系统。java程序设计语言及相应的集成开发环境,j2sdk和eclipse开发工具。1.3 课程设计的预备知识熟悉java语言
3、及eclipse开发工具。熟悉swing编程,以及jframe类学会image io,以及在内存中保存图片背景图片的绘制1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握java程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过
4、程的观察、理解和归纳能力的提高。第2章 课程设计内容2.1课程设计题目基于java语言的五子棋游戏设计2.2课程设计整体设计说明 这次设计的是一个五子棋游戏,能实现的功能为1.黑白双方轮流落子,点击鼠标时在棋盘上显示棋子2.在黑白双方某一方获得胜利的时候会有获胜提示3.可设置每个人的走棋时间,在窗体下方显示倒计时,并可判超时判负4.有认输选项5.可以自动判断游戏是否结束 在游戏的过程中我们要测试程序是否能够真正达到五子棋的标准,那么我们就要根据下面的五子棋规则进行参照:1.五子棋专用盘为 19条横线×19条坚线组成,交叉的每个点都可以行棋。 2.游戏分黑白两方,每局由规定黑方先行。黑
5、方玩家移动鼠标在棋盘中点击行棋。 3.当黑方行棋完毕,转由白方行棋。游戏结束后黑白方互换颜色。 胜负判定:某一方玩家最先在棋盘上形成横、竖、斜连成五连或长连。将获得胜利。 这次我使用的编程语言是java语言。我采用的编译环境是windows xp中文版+j2sdk1.6.0中文版+eclipse3.2.1+ eclipse.1课程设计内容(一)安装编译环境(1)安装jdk1.6.0 运行j2sdk1.6.0.exe程序,并设置相应的环境变量classpath以及path (2)安装eclipse 将下载的eclipse压缩包eclipse-sdk-3.2.1-win32.zip
6、解压到指定目录下(3)打开eclipse,新建一个java project,名称为fivechessproject,同时在src中新建一个类class,package:org.liky.game.test,name:text.再创建一个类fivechessframe,用于保存五子棋窗体,设置继承类superclass:javax.swing.jframe,add:java.awt.event.mouselistener(4)编写程序 (5)调试并运行2.2.2程序中所用类说明test类,主要写了main()方法。fivechessframe为主体程序,实现了五子棋的游戏各个功能模块。2.2.3
7、程序中使用方法的说明jframe:用于创建窗体,并设置窗体的大小以及位置setvisible():设置窗体是否显示,布尔类型true则为显示settitle():设置窗体名称,本程序中为“五子棋”setlocation():设置窗体在屏幕中的显示位置setsize():设置窗体的长宽setresizable():设置其大小可否改变setdefaultcloseoperation(jframe.exit_on_close):设置点击关闭按钮后程序是否也跟着结束joptionpane:弹出信息框,确认框showmessagedialogue():显示消息对话框,主要用来提示信息showconfir
8、mdialogue():显示确认对话框,主要用来确认信息showinputdialogue():显示输入对话框,主要用来输入信息mouselistener:取得用户点击鼠标的坐标,即鼠标监听器mouseclicked(): 监听鼠标点击事件mouseentered():监听鼠标进入事件操作,只要鼠标一进入窗体范围内就会提示mouseexited():监听鼠标离开事件mousepressed():监听鼠标点下事件mouserelased():监听鼠标松开事件mouseevent中:getx():获得鼠标横向位置坐标gety(): 获得鼠标纵向坐标graphics:绘制文字和图像drawstrin
9、g():绘制字符串drawoval():绘制一个圆形(椭圆形)filloval():绘制一个实心圆drawline():绘制一条线drawrect():绘制一个矩形fillrect():绘制一个实心矩形drawimage():绘制一个已经存在的背景图片setcolor():设置颜色setfont():设置绘制文字的字体2.2.4异常处理说明异常是异常事件的简称,它定义为在执行程序过程中出现了不正常的事件,破坏了正常的指令流。java语言如果出现异常就要进行异常处理。在进行bufferedimage时我们会用到io操作,需要进行异常处理,因为在读取内存的时候会存在读写不到文件的情况this.re
10、paint();string imagepath = "" ;try imagepath = system.getproperty("user.dir")+"/src/background1.jpg" ;bgimage = imageio.read(new file(imagepath.replaceall("", "/"); catch (ioexception e) e.printstacktrace();2.2.5 游戏运行的效果和不足横向可以判定游戏胜利:斜向可以判定游戏胜负:不足之处:
11、此游戏各功能模块运行良好,但是由于精确度不够,落子略有偏差,但不影响整体游戏的运行。2.3课程设计详细设计说明开发游戏界面以及游戏功能的实现:1. 新建一个类fivechessframe用于保存五子棋窗体2. 获取屏幕宽度并设置窗体的标题,大小,出现位置,大小不可变,关闭即结束程序,并显示窗体3. 加入背景图片,并要进行异常处理4. 将窗体显示在图片上5. 通过paint显示字符串:游戏信息以及剩余时间6. 画棋盘:通过鼠标监听取得四个角的横纵坐标,再通过drawline()进行画线,即棋盘,画出19*19的棋盘,每一个小格的宽度为20像素。在需要的位置画出黑色的定位点,通过点击鼠标取得坐标,
12、并通过filloval()进行绘制小圆点7. 黑子:一个实心黑圆8. 白子:一个空心黑圆加一个实心白圆9. 为了不导致重复落点,会进行提示此处已落点10. 在未精确点击到横纵线交替的时候,需要判断距离哪个交点最近,此方法有特定算法 if (x >= 10 && x <= 370 && y >= 70 && y <= 430) x = (x - 10) / 20;y = (y - 70) / 20;11. 为了提示当前的下棋方,需要用布尔变量int allchess = new int1919;boolean isblack
13、 = true;12. 判断游戏胜负:横向连续5个棋子,特点:纵坐标相同,用二维数组allchess,并要保存共有多少棋子相连 int count = 1; int color = allchessxy;/* * if (color = allchessx+1y) count+; if (color = * allchessx+2y) count+; if (color = allchessx+3y) * count+; */同理:纵向连续5个棋子,特点:横坐标相同,用二维数组allchessxy,并要保存共有多少棋子相连斜向连续5个棋子,其中方向可以归纳为 右上和左下 以及 左上和右下 两个
14、方向: 特点是在右上的时候:横坐标+1,纵坐标1 在左下的时候:横坐标1,纵坐标+1 在左上的时候:横坐标1,纵坐标+1 在右下的时候:横坐标+1,纵坐标1 但是,考虑到代码的效率,我们将其改为通过循环来做棋子相连的判断/* * int i = 1; while (color = allchessx + iy + 0) count+; i+; * i = 1; while (color = allchessx - iy - 0) count+; i+; if * (count >= 5) flag = true; / 纵向的判断 int i2 = 1 ; int count2 = 1 ;
15、 * while (color = allchessx + 0y + i2) count2+; i2+; i2 = 1; * while (color = allchessx - 0y - i2) count2+; i2+; if * (count2 >= 5) flag = true ; / 斜方向的判断(右上 + 左下) int i3 = 1 ; int * count3 = 1 ; while (color = allchessx + i3y - i3) count3+; * i3+; i3 = 1; while (color = allchessx - i3y + i3) cou
16、nt3+; * i3+; if (count3 >= 5) flag = true ; / 斜方向的判断(右下 + 左上) int i4 = * 1 ; int count4 = 1 ; while (color = allchessx + i4y + i4) * count4+; i4+; i4 = 1; while (color = allchessx - i4y - i4) * count4+; i4+; if (count4 >= 5) flag = true ; */ 判断横向count = this.checkcount(1, 0, color);if (count &
17、gt;= 5) flag = true; else / 判断纵向count = this.checkcount(0, 1, color);if (count >= 5) flag = true; else / 判断右上、左下count = this.checkcount(1, -1, color);if (count >= 5) flag = true; else / 判断右下、左上count = this.checkcount(1, 1, color);if (count >= 5) flag = true;return flag;13. 提示信息设置:drawstring
18、():初始为黑方14. 处理屏幕闪烁:即双缓冲技术 该方法在手机游戏用较多,原因是手机游戏的内存相对较小,屏幕闪烁问题明显 通过bufferedimage类进行屏幕闪烁处理,在内存中创建bufferedimage类,并再创建一个画笔,将所有图片先缓冲到一个内存图片上再统一显示 public void paint(graphics g) bufferedimage bi = new bufferedimage(500, 500,bufferedimage.type_int_rgb);15.对控制功能的实现:开始游戏:重新开始新的游戏重新开始所要做 的操作: 把棋盘清空,allchess这个数组中
19、全部数据归0.将游戏信息: 的显示改回到开始位置, 将下一步下棋的改为黑方 游戏设置:设置倒计时 int maxtime = 0; thread t = new thread(this); int blacktime = 0; int whitetime = 0; string blackmessage = "无限制"string whitemessage = "无限制" 并会有超时判定游戏说明:说明游戏规则和操作 if (e.getx() >= 400 && e.getx() <= 470 && e.gety
20、() >= 170&& e.gety() <= 200) joptionpane.showmessagedialog(this,"这个一个五子棋游戏程序,黑白双方轮流下棋,当某一方连到五子时,游戏结束。");认输:某一方放弃游戏,对方获胜 if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 270&& e.gety() <= 300) int result = joptionpane.showconfirmdialog(
21、this, "是否确认认输?"); if (result = 0) if (isblack) joptionpane.showmessagedialog(this, "黑方已经认输,游戏结束!"); else joptionpane.showmessagedialog(this, "白方已经认输,游戏结束!");canplay = false;关于:显示程序的作者尚可 if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 320&a
22、mp;& e.gety() <= 350) joptionpane.showmessagedialog(this,"作者尚可,学号为2606006029")退出:结束程序 if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 370&& e.gety() <= 400) joptionpane.showmessagedialog(this, "游戏结束");system.exit(0);备注:游戏的背景初始界面为:2
23、.4程序代码和注释package .uestc.fivechess.frame;import java.awt.color;import java.awt.font;import java.awt.graphics;import java.awt.toolkit;import java.awt.event.mouseevent;import java.awt.event.mouselistener;import java.awt.image.bufferedimage;import java.io.file;import java.io.ioexception;import jav
24、ax.imageio.imageio;import javax.swing.jframe;import javax.swing.joptionpane;public class fivechessframe extends jframe implements mouselistener,runnable /* * */ 取得屏幕的宽度int width = toolkit.getdefaulttoolkit().getscreensize().width;/ 取得屏幕的高度int height = toolkit.getdefaulttoolkit().getscreensize().heig
25、ht;/ 背景图片bufferedimage bgimage = null;/ 保存棋子的坐标int x = 0;int y = 0;/ 保存之前下过的全部棋子的坐标/ 其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个点是白子int allchess = new int1919;/ 标识当前应该黑棋还是白棋下下一步boolean isblack = true;/ 标识当前游戏是否可以继续boolean canplay = true;/ 保存显示的提示信息string message = "黑方先行"/ 保存最多拥有多少时间(秒)int ma
26、xtime = 0;/ 做倒计时的线程类thread t = new thread(this);/ 保存黑方与白方的剩余时间int blacktime = 0;int whitetime = 0;/ 保存双方剩余时间的显示信息string blackmessage = "无限制"string whitemessage = "无限制"public fivechessframe()/ 设置标题this.settitle("五子棋");/ 设置窗体大小this.setsize(500, 500);/ 设置窗体出现位置this.setloca
27、tion(width - 500) / 2, (height - 500) / 2);/ 将窗体设置为大小不可改变this.setresizable(false);/ 将窗体的关闭方式设置为默认关闭后程序结束this.setdefaultcloseoperation(jframe.exit_on_close);/ 为窗体加入监听器this.addmouselistener(this);/ 将窗体显示出来this.setvisible(true);t.start();t.suspend();/ 刷新屏幕,防止开始游戏时出现无法显示的情况.this.repaint();string imagepa
28、th = "" ;try imagepath = system.getproperty("user.dir")+"/src/background1.jpg" ;bgimage = imageio.read(new file(imagepath.replaceall("", "/"); catch (ioexception e) e.printstacktrace();public void mouseclicked(mouseevent arg0) public void mouseentere
29、d(mouseevent arg0) public void mouseexited(mouseevent arg0) public void mousepressed(mouseevent e) if (canplay = true) x = e.getx();y = e.gety();if (x >= 10 && x <= 370 && y >= 70 && y <= 430) x = (x - 10) / 20;y = (y - 70) / 20;if (allchessxy = 0) / 判断当前要下的是什么颜色的
30、棋子if (isblack = true) allchessxy = 1;isblack = false;message = "轮到白方" else allchessxy = 2;isblack = true;message = "轮到黑方"/ 判断这个棋子是否和其他的棋子连成5连,即判断游戏是否结束boolean winflag = this.checkwin();if (winflag = true) joptionpane.showmessagedialog(this, "游戏结束,"+ (allchessxy = 1 ? &q
31、uot;黑方" : "白方") + "获胜!");canplay = false; else joptionpane.showmessagedialog(this, "当前位置已经有棋子,请重新落子!");this.repaint();/ 点击 开始游戏 按钮if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 70&& e.gety() <= 100) int result = joptionpan
32、e.showconfirmdialog(this, "是否重新开始游戏?");if (result = 0) / 现在重新开始游戏/ 重新开始所要做的操作: 1)把棋盘清空,allchess这个数组中全部数据归0./ 2) 将 游戏信息: 的显示改回到开始位置/ 3) 将下一步下棋的改为黑方for (int i = 0; i < 19; i+) for (int j = 0; j < 19; j+) allchessij = 0;message = "黑方先行"isblack = true;blacktime = maxtime;whitet
33、ime = maxtime;if (maxtime > 0) blackmessage = maxtime / 3600 + ":"+ (maxtime / 60 - maxtime / 3600 * 60) + ":"+ (maxtime - maxtime / 60 * 60);whitemessage = maxtime / 3600 + ":"+ (maxtime / 60 - maxtime / 3600 * 60) + ":"+ (maxtime - maxtime / 60 * 60);t.re
34、sume(); else blackmessage = "无限制"whitemessage = "无限制"this.canplay = true; this.repaint();/ 点击 游戏设置 按钮if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 120&& e.gety() <= 150) string input = joptionpane.showinputdialog("请输入游戏的最大时间(单位:分钟)
35、,如果输入0,表示没有时间限制:");try maxtime = integer.parseint(input) * 60;if (maxtime < 0) joptionpane.showmessagedialog(this, "请输入正确信息,不允许输入负数!");if (maxtime = 0) int result = joptionpane.showconfirmdialog(this,"设置完成,是否重新开始游戏?");if (result = 0) for (int i = 0; i < 19; i+) for (in
36、t j = 0; j < 19; j+) allchessij = 0;message = "黑方先行"isblack = true;blacktime = maxtime;whitetime = maxtime;blackmessage = "无限制"whitemessage = "无限制"this.canplay = true; this.repaint();if (maxtime > 0) int result = joptionpane.showconfirmdialog(this,"设置完成,是否重新开
37、始游戏?");if (result = 0) for (int i = 0; i < 19; i+) for (int j = 0; j < 19; j+) allchessij = 0;message = "黑方先行"isblack = true;blacktime = maxtime;whitetime = maxtime;blackmessage = maxtime / 3600 + ":"+ (maxtime / 60 - maxtime / 3600 * 60) + ":"+ (maxtime - ma
38、xtime / 60 * 60);whitemessage = maxtime / 3600 + ":"+ (maxtime / 60 - maxtime / 3600 * 60) + ":"+ (maxtime - maxtime / 60 * 60);t.resume();this.canplay = true; this.repaint(); catch (numberformatexception e1) joptionpane.showmessagedialog(this, "请正确输入信息!");/ 点击 游戏说明 按钮i
39、f (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 170&& e.gety() <= 200) joptionpane.showmessagedialog(this,"这个一个五子棋游戏程序,黑白双方轮流下棋,当某一方连到五子时,游戏结束。");/ 点击 认输 按钮if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 270&&
40、e.gety() <= 300) int result = joptionpane.showconfirmdialog(this, "是否确认认输?");if (result = 0) if (isblack) joptionpane.showmessagedialog(this, "黑方已经认输,游戏结束!"); else joptionpane.showmessagedialog(this, "白方已经认输,游戏结束!");canplay = false;/ 点击 关于 按钮if (e.getx() >= 400 &a
41、mp;& e.getx() <= 470 && e.gety() >= 320&& e.gety() <= 350) joptionpane.showmessagedialog(this,"作者尚可,学号2606006029");/ 点击 退出 按钮if (e.getx() >= 400 && e.getx() <= 470 && e.gety() >= 370&& e.gety() <= 400) joptionpane.showmessage
42、dialog(this, "游戏结束");system.exit(0);public void mousereleased(mouseevent arg0) public void paint(graphics g) / 双缓冲技术防止屏幕闪烁bufferedimage bi = new bufferedimage(500, 500,bufferedimage.type_int_rgb);graphics g2 = bi.creategraphics();g2.setcolor(color.black);/ 绘制背景g2.drawimage(bgimage, 1, 20,
43、this);/ 输出标题信息g2.setfont(new font("黑体", font.bold, 20);g2.drawstring("游戏信息:" + message, 130, 60);/ 输出时间信息g2.setfont(new font("宋体", 0, 14);g2.drawstring("黑方时间:" + blackmessage, 30, 470);g2.drawstring("白方时间:" + whitemessage, 260, 470);/ 绘制棋盘for (int i
44、= 0; i < 19; i+) g2.drawline(10, 70 + 20 * i, 370, 70 + 20 * i);g2.drawline(10 + 20 * i, 70, 10 + 20 * i, 430);/ 标注点位g2.filloval(68, 128, 4, 4);g2.filloval(308, 128, 4, 4);g2.filloval(308, 368, 4, 4);g2.filloval(68, 368, 4, 4);g2.filloval(308, 248, 4, 4);g2.filloval(188, 128, 4, 4);g2.filloval(68
45、, 248, 4, 4);g2.filloval(188, 368, 4, 4);g2.filloval(188, 248, 4, 4);/ 绘制全部棋子for (int i = 0; i < 19; i+) for (int j = 0; j < 19; j+) if (allchessij = 1) / 黑子int tempx = i * 20 + 10;int tempy = j * 20 + 70;g2.filloval(tempx - 7, tempy - 7, 14, 14);if (allchessij = 2) / 白子int tempx = i * 20 + 10
46、;int tempy = j * 20 + 70;g2.setcolor(color.white);g2.filloval(tempx - 7, tempy - 7, 14, 14);g2.setcolor(color.black);g2.drawoval(tempx - 7, tempy - 7, 14, 14);g.drawimage(bi, 0, 0, this);private boolean checkwin() boolean flag = false;/ 保存共有相同颜色多少棋子相连int count = 1;/ 判断横向是否有5个棋子相连,特点 纵坐标 是相同, 即allche
47、ssxy中y值是相同int color = allchessxy;/ 判断横向count = this.checkcount(1, 0, color);if (count >= 5) flag = true; else / 判断纵向count = this.checkcount(0, 1, color);if (count >= 5) flag = true; else / 判断右上、左下count = this.checkcount(1, -1, color);if (count >= 5) flag = true; else / 判断右下、左上count = this.c
48、heckcount(1, 1, color);if (count >= 5) flag = true;return flag;/ 判断棋子连接的数量private int checkcount(int xchange, int ychange, int color) int count = 1;int tempx = xchange;int tempy = ychange;while (x + xchange >= 0 && x + xchange <= 18 && y + ychange >= 0&& y + ychan
49、ge <= 18&& color = allchessx + xchangey + ychange) count+;if (xchange != 0)xchange+;if (ychange != 0) if (ychange > 0)ychange+;else ychange-;xchange = tempx;ychange = tempy;while (x - xchange >= 0 && x - xchange <= 18 && y - ychange >= 0&& y - ychange &
50、lt;= 18&& color = allchessx - xchangey - ychange) count+;if (xchange != 0)xchange+;if (ychange != 0) if (ychange > 0)ychange+;else ychange-;return count;public void run() / 判断是否有时间限制if (maxtime > 0) while (true) if (isblack) blacktime-;if (blacktime = 0) joptionpane.showmessagedialog(this, "黑方超时,游戏结束!"); else whitetime-;if (whitetime = 0) joptionpan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宫腔镜下胎盘残留切除术后护理查房
- 高血压防治健康教育
- 社交媒体内容营销策划与执行模板
- 酒店宴会餐饮服务规范与礼仪指导书
- 2026年重庆綦江南川巴县初三5月第二次联考英语试题文试卷含解析
- 福建省三明建宁县联考2026年初三摸底联考英语试题文试题含解析
- 北京市昌平区2026届初三考前热身英语试题解析含解析
- 业务流程标准化管理工具集
- 共享模式经济服务平台安全维护承诺书6篇
- 危机公关处理与形象修复策略方案
- 2025秋季湖南能源集团社会招聘51人笔试历年参考题库附带答案详解
- 成立营销专班工作方案
- 2026年及未来5年市场数据中国剧本杀行业市场调查研究及投资前景展望报告
- 3.1《数数、数的组成》课件 人教版数学一年级下册
- 2026年安庆医药高等专科学校单招综合素质考试题库附答案详解(a卷)
- 2026年安徽卫生健康职业学院单招综合素质考试题库带答案详解ab卷
- 浙江强基联盟高一下学期2026年3月开学联考英语试卷
- (新教材)2026年人音版二年级下册音乐全册教案
- 2025-2026学年冀人版(新教材) 小学科学二年级下学期教学计划及进度表
- 艾昆纬-释放生物仿制药潜力 Unlocking Biosimilar Potential 2026
- 医院医保内部考核制度
评论
0/150
提交评论