版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上课程设计(论文)任务书 软 件 学 院 学 院 软件+电子商务 专业 二 班 一、课程设计(论文)题目 java 课程设计五子棋带聊天系统 二、课程设计(论文)工作自 2010 年 12 月 20 日起至 2010 年 12 月 24 日止。三、课程设计(论文) 地点: 软 件 学 院 实 训 中 心 四、课程设计(论文)内容要求:1本课程设计的目的(1)掌握Java语言的程序设计方法; (2)理论联系实际,进一步提高学生的软件开发技术;(3)培养学生分析、解决问题的能力;(4)提高学生实践论文撰写能力。2课程设计的任务及要求1)课程设计任务:实现一个简单的多用户五子
2、棋的游戏程序,包括如下两个界面设计要求:1、五子棋游戏室界面:用户可以选择对弈桌及角色(执黑、执 白、旁观);2、游戏界面:有开始、退出、悔棋、判断胜负;发言及显示区;用户列表区;棋盘绘制区;3、使用Socket来完成服务端和客户端的通信;4、使用多线程技术支持多用户操作;5、增强功能:支持用户注册、添加和删除好友、战绩显示、发送消息、接受消息、多人聊天等功能;使用数据库保存用户信息。2)创新要求: 以上任务还未完善,悔棋、用户列表区及增强功能板块未完善。今后,参考资料书,实现五子棋网络对战及数据库的利用。3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路-工作原理、功能规划(3)
3、详细设计-数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。(4)运行调试与分析讨论-给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结-设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7)报告按规定排版打印,要求装订平整,否则要求返工;(8)课设报告的装订顺序如下:封面-任务书-中文摘要-目录-正文-附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。4)课程设计评分标准: (1)学习态度:10分;(2)系统设计:20分;(3)编程调试:
4、20分;(4)回答问题:20分;(5)论文撰写:30分。5)参考文献:(1)丁振凡. Java语言实用教程(第2版)M. 北京邮电大学出版社. 2008.1 (2)丁振凡. Java语言实用教程实验指导(第2版)M. 北京邮电大学出版社. 2008.1(3)杨树林等. Java语言最新实用案例教程(第2版)M. 清华大学出版社. 2010.76)课程设计进度安排1准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料2程序模块设计分析阶段(4学时):程序总体设计、详细设计3代码编写调试阶段(8学时):程序模块代码编写、调试、测试4撰写论文阶段(4学时):总结课程设计任务和设计内容,撰
5、写课程设计论文学生签名: 2010 年 12 月 20 日课程设计(论文)评审意见(1)学习态度(10分):优()、良()、中()、一般()、差(); (2)系统设计(20分):优( )、良()、中()、一般()、差(); (3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(30分):优()、良()、中()、一般()、差(); 评阅人: 职称: 讲师 2010 年 12 月 25 日中文摘要 五子棋源于中国。我的这个棋盘是15×15棋盘,横行、竖行都有15个交点,在交点处黑白棋子对弈。
6、在横,竖,斜四个方向若有一方连续超过5个则该方胜利。完成棋盘面板画棋盘,对鼠标注册监听扑捉下棋位,画上棋子。根据下棋位点,将棋子布局模拟成二位数组,对数组进行遍历,判断胜负。棋盘还附加了聊天功能,开启次程序后,便在ChatServer内申请账号,实现与其他户的群聊,采用了多线程技术和Socket实现通信。目录 专心-专注-专业一、课程设计任务及要求1、五子棋游戏室界面:用户可以选择对弈桌及角色(执黑、执白、旁观);2、 游戏界面:有开始、退出、悔棋、判断胜负;发言及显示区;用户列表 区;棋盘绘制区;3、使用Socket来完成服务端和客户端的通信;4、使用多线程技术支持多用户操作;5、增强功能:
7、支持用户注册、添加和删除好友、战绩显示、发送消息、接 受消息、多人聊天等功能;使用数据库保存用户信息。二、需求分析2.1 棋盘板块 画一个15×15的棋盘版面,及两个按钮组。初始化:开始、重置、 退出;角色选择:黑方、白方、旁观。2.2 聊天板块 聊天信息显示区,聊天信息输入区。2.3 ChatSever 模拟服务器:用于桥接不同用户,实现接收用户发出的信息,然后 将信息传递到每个用户的聊天窗口。2.4 编译环境 Eclipse 实验室上机 在宿舍编写2.5 参考资料 Java 语言使用教程,百度文库资料(五子棋判断胜负算法)。三、设计思路3.1 板块的显示 画棋盘 调用public
8、 void paint(Graphics g)QiPan(g);方法 画一个15×15的棋盘面版。 初始化 定义两个Panel P1、P2,在初始化板块将JButton 开始、 重置,退出加入到P1,将黑方、白方、旁观加入到P2。 聊天板块 在初始化时定义一个JTextArea 和一个JTextField 实现聊 天功能3.2 注册监听 对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型 0,白子1。 对按钮开始、重置注册ActionListener监听,如果点击开始,用户进 入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮
9、。 对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。 对JTextField注册ActionListener,用户输入聊天信息后,通过Server传递给其他用户,在对话框JTextArea内显示。3.3 ChatServerclass ServerThread implements Runnable 类监听线程,监听是否有客户端法过信息来。属性: Vector threads 向量存储线程 Socket socket 服务端口 DataInputStream in 输入流 DataOutputStream out 输出流 int nid 用户ID方法: 构造器public
10、 ServerThread(Socket socket,Vector threads) 实现信息的输入、输出实现public void run()监听客户端是否发信息过来,当客户离开时向 其他客户发信息,把客户端的信息发给其他客户。 服务器向客户端发信息public void write(String msg) 获取线程IDpublic int getID() 设置线程IDpublic void setID(int nid) 在Chatserver类内调用ServerThread 实现对所有来访客户监听,为来访者设置ID,若有离开用户,则在聊天板块广播。3.4 下棋用二维数组模拟棋盘chess
11、body1717,黑方下棋,则黑方所下棋位置的值等于旗子的颜色加一,白方类似。最后1代表下了黑棋,2表示下了白棋,0表示没下棋。从横向、纵向、斜方向判断胜负。下完一步判断一次,有一个方向上同色棋子数超过5,则胜负已判断。四、详细设计4.1 WuZiQi类 属性: int color_Qizi=0; 黑子0 白子1 int ChessBody=new int1717; 无棋子 0,黑棋 1,白棋 2; int GameStart=0; JButton start,exit,rest; JButton check=new JButton3; String chess="黑方",
12、"白方","旁观"方法: 获取下棋位点 public void mouseClicked(MouseEvent e) /Graphics g=getGraphics(); int x,y; x=e.getX();y=e.getY();/鼠标点击位置 if(x<45|y<45|x>495|y>495) return;/在棋盘之外则不下 if(x%30>15)/获取下棋点的位置 x+=30; if(y%30>15) y+=30; x=x/30*30; /x、y为棋子中心位置 y=y/30*30; PlayQizi(x,y)
13、;/下棋 下棋点击后天上棋子,每一步完了后判断胜负,从四个方向上判断 胜负,并在棋盘中间显示哪方赢了! public void PlayQizi(int x,int y) if (GameStart=0) /判断游戏未开始 return; if (ChessBodyx/30y/30!=0) return; Graphics g=getGraphics(); if (color_Qizi=1)/判断黑子还是白子 g.setColor(Color.black); color_Qizi=0; else g.setColor(Color.white); color_Qizi=1; g.fillOval
14、(x-12,y-12,24,24); ChessBodyx/30y/30=color_Qizi+1; /判断输赢/ g.setColor(Color.magenta); g.setFont(new Font("fhahf ",Font.BOLD,30);if(GameWin横(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;if(GameWin竖(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"
15、赢了!",200,200);GameStart=0; if(GameWin撇(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;if(GameWin捺(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;4.2 ChatSever类 public void run()System.out.println ("Thread is runnin
16、g");try/监听客户端是否发消息过来while(true)String receive = in.readUTF();if(receive = null)return;/当某客户离开,给其它客户端发消息if(receive.equals("leave")for(int i=0;i < threads.size();i+)ServerThread st = (ServerThread)threads.elementAt(i);st.write("*"+getID()+"leaving.*");else/把某客户端发过
17、来的发送到所有客户端for(int i=0;i < threads.size();i+)ServerThread st = (ServerThread)threads.elementAt(i);st.write("<"+getID()+">: "+receive); 4.3多用户聊天 初始化网络,并连接到服务端try /获得URLURL url = this.getCodeBase();InetAddress addr = InetAddress.getByName(url.getHost();Socket socket;System.
18、out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol();/5555 为服务器端口socket = new Socket(addr,5555);/由本套接口获得输入,输出流in = new DataInputStream(socket.getInputStream();out = new DataOutputStream(socket.getOutputStream();catch (Exception ex) ex.printStackTrace();
19、线程开始new Thread(this).start(); Run方法向服务器发送信息并接收信息 public void run() try /监视服务器所发送的信息 while(true) String receive = in.readUTF(); if(receive!=null) txtDisplay.append(receive + "n"); /将光标移动到最后一个以实现滚动条的自动置底 txtDisplay.setCaretPosition(txtDisplay.getText().length(); catch (Exception ex) txtDispl
20、ay.append("Network problem or Server down"); txtInput.setVisible(false); public void stop() try out.writeUTF("leave"); catch(Exception ex)4.4 流程图 用户1用户2用户3用户5用户3Server 图 41 网络通信 用户与服务器间的通信是双向的,用户将信息传递给Server,Server再将信息传递给每个用户。 Init()方法Paint()方法Run()方法注册监听WuZiQi类 图 42 WuZiQi类的方法 棋
21、盘继承JApplet类,注册监听,实现Init()、Run()、Paint()方法、注册监听。画棋盘,用二维数组模拟棋盘下子情况。对棋盘棋子的获取,判断胜负。与Server连接,监听,获取来自服务器的信息。五、运行调试与分析讨论 图 51 棋盘图51 棋盘图,当选择好黑白角色后点击开始,便可以下棋;点击重置时重新开始下棋;点击退出时结束游戏,并退出。 该棋盘未实现网络棋盘,只能自己跟自己下棋。还欠缺悔棋步骤,可以用Vector存储已下的棋子的信息,调用repaiant() 然后再画除最后一步的棋盘,实现悔棋操作。由于对Socket 用法还不熟悉,不能将棋盘通信与聊天通信区分开来,也就不能实现联
22、网下棋。 图52ChatServer如果用户登录则监听 listening .、accept a client使用了Socket,和多线程技术。定义了Vector 存储用户线程,实现ChatServer将信息传递给每个用户,接收每个用户的信息。图53聊天对话框用户4、5进入了聊天,对话。当对话框缩小或关闭时ChatServer都会发出用户离开的消息。此对话框可以允许多个用户群聊,但是少了一个窗口显示所有在线用户信息。即要求五,增强功能未实现。不能实现用户注册,添加好友,查看好有信息,对于数据库的使用不太熟悉。 六、设计体会与小结经过为期一周的课程设计,感觉自己所学远远不能解决做课设时的需求。在
23、熟悉课本和上网搜索后,才算马马虎虎的完成了任务。在画棋盘时,调用draw方法对于画图这块的坐标布置,在今后学画其他图画时能够得心应手。获取棋子方法的巧妙,注册鼠标,获取点击位置,除以棋盘间隔,去掉不为整数的一块,再乘以棋盘间隔便获得最临近点的下棋坐标,即所要下棋的位置。用二维数组模拟棋盘,无棋子的置为0,黑子置为1,白子置为2,以便在判断胜负时利于同色棋子的查找。整个棋盘就模拟出来了,很巧妙,不过有更好的方法用向量存储棋子信息,便于悔棋等操作。实现多用户聊天,老师后面讲的不是很多,做起来有点费力。参考网上资料,明白Socket原理。开始时照着课本上的例子,不能得出想要的效果,而且只运行了一个程
24、序看不到有通信的效果。后面在运行了Server类后,自己尝试着两个Client类,实现了通话,就像腾讯QQ里面一样的效果。里面定义了Vector 线程,实现了多线程用法。两个板块大体实现,但是后面的要求五,由于数据库的使用不是太熟悉,不能注册用户,添加好友,查找好友,还有悔棋操作未能实现。此程序最大的缺点还在于,不能实现网络两人下五子棋。由于不能将棋盘信息与聊天信息区分,不能告诉对反自己下了哪一步,所以根据自己的水平也就能做到这了,今后加以完善。感觉这次课设有点失败,平时学的不能灵活的运用,今后得多加练习,多点锻炼的机会,积累跟多的知识。还有算法这块,解决一个问题的关键,培养一个好的类的思想,
25、将问题有条有理的理清。形成一个清晰的思路后,在动手,下笔如有神。 七、参考文献1丁振凡. Java语言实用教程(第2版)M. 北京邮电大学出版社. 2008.1 2丁振凡. Java语言实用教程实验指导(第2版)M. 北京邮电大学出版社. 2008.13杨树林等. Java语言最新实用案例教程(第2版)M. 清华大学出版社. 2010.7附录package 五子棋;import java.applet.*; import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.awt.Color;
26、import java.io.*;import .*;import javax.swing.*;public class WuZiQi extends JApplet implements ActionListener,MouseListener,MouseMotionListener,ItemListener,Runnableint color_Qizi=0;/ 黑子0 白子1int ChessBody=new int1717;/无棋子 0,黑棋 1,白棋 2;int GameStart=0;JButton start,exit,rest;JButton check=new JButton3
27、;String chess="黑方","白方","旁观"JTextArea txtDisplay;JTextField txtInput;DataInputStream in; DataOutputStream out;public void init()setLayout(null); start=new JButton("开始"); rest=new JButton("重置"); exit=new JButton("退出"); Panel p1=new Panel();p
28、1.add(start); p1.add(rest);p1.add(exit);add(p1); p1.setBounds(130,510,300,50);Panel p2=new Panel();for(int i=0;i<chess.length;i+) checki=new JButton(chessi);p2.add(checki); add(p2); p2.setBounds(600,50,200,50);for(int i=0;i<chess.length;i+) checki.addActionListener(this); start.addActionListen
29、er(this);exit.addActionListener(this);rest.addActionListener(this);addMouseListener(this);txtDisplay = new JTextArea(10,50);txtDisplay.setEditable(false);txtInput = new JTextField(10); Panel chat=new Panel(); chat.setLayout(new BorderLayout();chat.add(BorderLayout.CENTER,new JScrollPane(txtDisplay);
30、chat.add(BorderLayout.SOUTH,txtInput); add(chat);chat.setBounds(900, 300, 350, 300);txtInput.addActionListener(/对输入文本框地方注册事件监听new ActionListener() public void actionPerformed(ActionEvent event) String str = txtInput.getText();txtInput.setText("");try out.writeUTF(str);catch(Exception e) );
31、in = null; out = null;初始化网络,并连接到服务端try /获得URLURL url = this.getCodeBase;InetAddress addr = InetAddress.getByName(url.getHost();Socket socket;System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol();/5555 为服务器端口socket = new Socket(addr,5555);/由本套接口获得输入
32、,输出流in = new DataInputStream(socket.getInputStream();out = new DataOutputStream(socket.getOutputStream();catch (Exception ex) ex.printStackTrace(); new Thread(this).start();/线程开始public void actionPerformed(ActionEvent e)Graphics g=getGraphics();if(e.getSource()=start)GameStart();if(e.getSource()=res
33、t)GameReSt();if(e.getSource()=exit)GameEnd();if(e.getSource()=check0) color_Qizi=0; public void mousePressed(MouseEvent e) public void mouseClicked(MouseEvent e)/获取下棋位点 int x,y; x=e.getX();y=e.getY(); if(x<45|y<45|x>495|y>495) return; if(x%30>15)/获取下棋点的位置 x+=30; if(y%30>15) y+=30;
34、x=x/30*30; y=y/30*30; PlayQizi(x,y);/下棋 public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseDragged(MouseEvent e) public void mouseMoved(MouseEvent e) public void paint(Graphics g)QiPan(g); public void PlayQizi(int x,i
35、nt y) if (GameStart=0) /判断游戏未开始 return; if (ChessBodyx/30y/30!=0) return; Graphics g=getGraphics(); if (color_Qizi=1)/判断黑子还是白子 g.setColor(Color.black); color_Qizi=0; else g.setColor(Color.white); color_Qizi=1; g.fillOval(x-12,y-12,24,24); ChessBodyx/30y/30=color_Qizi+1; /判断输赢/ g.setColor(Color.magen
36、ta); g.setFont(new Font("fhahf ",Font.BOLD,30);if(GameWin横(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;if(GameWin竖(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0;if(GameWin撇(x/30,y/30)g.drawString(GetQiziColor(c
37、olor_Qizi)+"赢了!",200,200); GameStart=0;f(GameWin捺(x/30,y/30)g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);GameStart=0; /获得赢方/ public String GetQiziColor(int x) if(x=0 )return "黑方"else return "白方" /判断输赢/ public boolean GameWin横(int x,int y) int x1,y1;int
38、 t=1; x1=x;y1=y; for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1+iy1=ChessBodyxy) t+=1; else break; for(int i=1;i<5;i+) if(x1<2)break; if(ChessBodyx1-iy1=ChessBodyxy)t+=1; else break; if(t>4) return true; else return false; public boolean GameWin竖(int x,int y) int x1,y1;int t=1;x1=
39、x;y1=y; for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1y1+i=ChessBodyxy) t+=1; else break; for(int i=1;i<5;i+) if(x1<2)break; if(ChessBodyx1y1-i=ChessBodyxy) t+=1; else break; if(t>4) return true; else return false; public boolean GameWin撇(int x,int y) int x1,y1;int t=1; x1=x;y1=y;
40、 for(int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1+iy1-i=ChessBodyxy)t+=1; else break; for(int i=1;i<5;i+) if(x1<2)break ; if(ChessBodyx1-iy1+i=ChessBodyxy) t+=1; else break; if(t>4)return true; else return false; public boolean GameWin捺(int x,int y) int x1,y1;int t=1;x1=x;y1=y; for(
41、int i=1;i<5;i+) if(x1>16)break; if(ChessBodyx1-iy1-i=ChessBodyxy) t+=1; else break; for(int i=1;i<5;i+) if(x1<2)break; if(ChessBodyx1+iy1+i=ChessBodyxy) t+=1; else break; if(t>4) turn true; else eturn false; public void GameStart()/游戏开始 GameStart=1; Game_btn_enable(false); rest.setEna
42、bled(true); public void Game_btn_enable(boolean e) start.setEnabled(e);rest.setEnabled(e); for(int i=0;i<check.length;i+) checki.setEnabled(e); public void GameStartInit()/初始化 GameStart=0; Game_btn_enable(true); start.setEnabled(true); for(int i=0;i<17;i+) for(int j=0;j<17;j+) ChessBodyij=0
43、; public void GameReSt()/重置 repaint(); GameStartInit(); public void QiPan(Graphics g)/画棋盘 g.setColor(Color.cyan); int m=45;int n=m+15;G.fillRect(m,m,450,450);g.setColor(Color.black);for(int i=0;i<15;i+)g.drawLine(n,n+i*30,n+420,n+i*30);for(int i=0;i<15;i+) g.drawLine(n+i*30,n,n+i*30,n+420);g.f
44、illRect(n+3*30-3,n+3*30-3,6,6); g.fillRect(n+3*30-3,n+11*30-3,6,6); g.fillRect(n+11*30-3,n+3*30-3,6,6); g.fillRect(n+11*30-3,n+11*30-3,6,6); g.fillRect(n+7*30-3,n+7*30-3,6,6); /运行监听方法/ public void run() try /监视服务器所发送的信息while(true) String receive = in.readUTF(); if(receive!=null) txtDisplay.append(re
45、ceive + "n"); /将光标移动到最后一个以实现滚动条的自动置底 txtDisplay.setCaretPosition(txtDisplay.getText().length(); catch (Exception ex) txtDisplay.append("Network problem or Server down"); txtInput.setVisible(false);public void stop() try out.writeUTF("leave");catch (Exception ex) /*ChatS
46、erver类*/import .*;import java.io.*;import java.util.*;public class ChatServer public static void main(String args)throws ExceptionServerSocket svSocket =null;/Vector threads 为ServerThread集合Vector threads = new Vector();/开始监听System.out.println ("listening.");try /创建服务端套接口svSocket = new Serv
47、erSocket(5555);catch (Exception ex) System.out.println ("Server create ServerSocket failed!");return;tryint nid = 0;/监听是否有客户端连接while(true)Socket socket = svSocket.accept();System.out.println ("accept a client");/创建一个新的ServerThreadServerThread st = new ServerThread(socket,threads);/为客户端分配一个ID号st.setID(nid+);threads.add(st);new Thread(st).start();/向所有人广播有新客户端连接for(int i=0;i < thre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 3780.26-2018炭黑 第26部分:炭黑原料油中碳含量的测定》
- 深度解析(2026)《GBT 3554-2008石油蜡含油量测定法》
- 《JBT 10800-2007塑杯成型灌装封切机》专题研究报告
- 2026年法律职业资格考试民法侵权归责原则卷含解析
- 2026高一生物下册第二单元第一次月考含答案及解析
- 《JBT 10554.1-2015无损检测 轴类球墨铸铁超声检测 第1部分:总则》专题研究报告
- 《JBT 10375-2002焊接构件振动时效工艺参数选择及技术要求》专题研究报告
- 2026高二政治上册第一二三单元第一次月考含答案及解析
- 湖南中考:生物重点基础知识点大全
- 大语言模型概论(微课版)-作业集及其参考答案
- 三一集团在线测试题库
- 电信网络维护规范手册(标准版)
- 加油站安全生产三项制度
- 2025年医学影像复试题目及答案
- 中间业务收入培训课件
- 刺络放血治疗牛皮癣
- 国家安全青春同行
- 呆滞物料的预防和处理培训
- 2026年普通高中学业水平合格性考试政治必背知识点考点提纲
- DB63-T 1143-2012 青海省受损砌体结构安全性鉴定实施导则
- 公路建设项目投资计划书
评论
0/150
提交评论