




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计(2)课程设计任务书题 目贪吃蛇小游戏程序学生姓名学号专业班级设计内容与要求【问题描述】 这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。移动时必须从蛇头开始,也就是蛇尾不能改作蛇头。当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。图形的实现是从蛇头的新位置开始画出蛇。用户可以用上下左右键控制蛇头的方向。非常简单!【软件功能】1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。2. 游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。3. 游戏界面大小可以任意指定,数据从文件读入。4. 利用swing实现良好的GUI界面。【基本要求】1. 贪食蛇的前移算法主要是蛇身结点前移,后面的覆盖前面的蛇身结点。依靠的调用编写的成员方法实现。2. 在贪吃蛇中蛇头来控制蛇的移动方向,依靠的调用编写的成员方法实现。3. 要求用户界面采用图形用户界面,影响方向键的控制。4. 重复的调用paint()函数来实现对界面的重绘和食物的重置。5. 源程序中要有充分的注释,报告中要有详细的流程图。6. 运行的结果以及图形用户界面要进行屏幕拷贝,插入报告中。幕拷贝,插入报告中。【提交成果】1. “高级语言程序设计(2)课程设计任务书”和“高级语言程序设计(2)课程设计报告”打印件各一份;2. 先将上面两项内容的word文档,通过电子邮件交到指导教师,待许可后,打印装袋。起止时间2012 年 12 月 24 日 至 2012 年12月 30 日指导教师签名李元觉 2012年 12 月 22 日系(教研室)主任签名郝华宁 2012 年 12月 22 日学生签名年 月 日高级语言程序设计(2)课程设计报告 专业: 班级: 学号: 姓名: 完成日期: 2012.12.29 指导教师:李元觉1、 程序设计说明书【设计题目】 贪吃蛇小游戏程序 【问题描述】 这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。移动时必须从蛇头开始,也就是蛇尾不能改作蛇头。当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。图形的实现是从蛇头的新位置开始画出蛇。用户可以用上下左右键控制蛇头的方向。非常简单!【软件功能】 1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。2. 游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。3. 游戏界面大小可以任意指定,数据从文件读入。4. 利用swing实现良好的GUI界面。【算法思想】1. 贪吃蛇是很经典的格子游戏。所谓格子游戏就是在设计游戏时的主要思想是每个设对象都是由格子组成,游戏运行界面也是由格子组成。格子思想决定了此类游戏在设计时的算法思想。2. 方向键控制一个方块的移动的方法,一个方块的移动是靠移动其坐标位置来实现的。3. 方向键控制是上下左右对一个方块的控制,用四个判断语句实现。4. 蛇的移动算法思想可以看成是第一个方块移动,第二个方块移到第一个方块的位置, 第三个方块移动到第二个方块的位置第N个方块移动到第N-1个方块的位置。这样连续的移动就是蛇的移动了。方向控制键控制了第一个方块的移动后,后面方块跟着移动 ,这样也实现了方向键控制对长蛇的移动。5. 食物的随机产生的方法食物的随机产生需要一个随机种子函数然后利用系统时间做为随机种子。6. 蛇的身体变长的方法当然要当蛇吃到食物时才能使身体变长。因此有两个需要解决的问题:问题一:如何知道是否吃到食物?问题二:吃到食物后身体变长?解决问题一的方法是需要一个判断语句,当蛇头即构成蛇的第一个方块跟食物所在方块的坐标一样时判断吃到食物。解决问题二则要相对复杂一些,需要多个判断语句构成。7. 游戏结束的方法,当蛇碰到边框时或者吃到自己时游戏结束。根据这个思想可以用判断语句实现 。然后是游戏结束后的处理,比如显示继续玩游戏还是退出游戏,并显示所吃到的食物的个数和时间等。【类的设计】1.创建的类的描述。1. Login类,登陆界面要求输入登陆者输入用户名和密码,分别设Go和Cancel两个登陆选项。Login属性: 用户名 密码 Go(进入游戏) Cancel(取消)操作: Enter() Close()2. SnakeFrame类,创建游戏窗口主界面。采用图形界面设计,有窗体,菜单栏和游戏操作界面。3. SnakeModel类,此类为蛇的初始化状态及模型,所有的游戏的开始都通过此类初始化及对蛇的操作。SnakeModel属性: rows,cols,snakeHead,runingDiriction,locRO,snake,playBlocks snakeFood,gameScore,AddScore操作: LocationRO getSnakeHead(),LocationRO getSnakeTail(), Location getRuningDiriction(),LinkedList getSnake(), LinkedList getOthers(), getScore(),getAddScore(), setSnakeHead(Location snakeHead),LocationRO getSnakeFood(), setSnakeFood(),moveTo(Object a,LinkedList fromlist,LinkedList tolist), init(),SnakeModel(int rows1,int cols1),move(Location direction) 4. SnakePanel类,此类为游戏界面创建蛇的面板和蛇的移动控制实现。SnakePanel属性:gridsPanel, row; col; gridsPanel;direction;snake; snakeBody; otherBlocks;snakeHead; snakeFood; gameScore=0; speed; AddScore; t; isEnd; notExit;操作:SnakePanel(SnakeFrame parent,int row,int col),newGame(long speed)stopGame(),returnGame(),getGameScore(),updateTextFiled(String str)updateColors(),run(),keyPressed(KeyEvent event)keyReleased(KeyEvent event),keyTyped(KeyEvent event)change(SnakeFrame parent,int row2, int col2) 5. LocationRO类,随机生成的食物位置。用来随机生成食物。引导蛇的移动方向。 6. Location类,对蛇的位置的描述类。Location属性: x y操作:Location(int x,int y) ,getX(),getY(),setX(int x),setY(int y) ,equalOrRev(Location e),equals(Location e) ,reverse(Location e)2.类之间的调用关系。Login登陆SnakeFrameLocationLocationROSnakePanelSnakeModel【用户界面】1. 登陆界面 2. 游戏主界面 【程序技巧】1. 为游戏设置权限,为游戏设置登陆界面。2. 游戏界面采用图形界面美观大方易操作。3. 功能齐全,可以选择开始,暂停,继续可以随时操控游戏状态,方便易操作,人性化设计。4. 设置菜单功能齐全,可以让界面显示网格和取消显示网格,还可以根据自己的实际能力情况选择游戏的等级。5. 窗口大小菜单可以根据自己的需要和爱好调整窗体的大小,可以选择大中小三种窗体。适合不同的需要。6. 本程序设置了作者信息菜单可以查询程序的制作人的信息等。7. 对于新手用户,我为他们设置了操作指南菜单,帮助他们方便快捷的学会游戏的操作步骤。 【模块划分及调用关系】主要模块开始登陆界面取消登录游戏界面退出程序结束【模块流程图】1. 游戏界面模块开始和登陆模块流程图。 登陆界面取消登录进入游戏输入用户名和密码帮助文件设置窗口大小作者信息操作指南软件信息视图显示网格等级大中小退出继续暂停开始结束游戏结束2. 游戏模块游戏开始是否结束创建贪吃蛇 暂停 否 是 随机显示食物是否开始蛇蛇运动 否是否碰到蛇身墙蛇身加长,分数增加是否吃到食物 是 否提示游戏结束 是结束 【运行说明】1. 安装eclipse,在其上运行。 2. 如图在eclipse中创建java项目,项目名为杨文,在src下建立SnakeGameDemo包将所有的源程序放入包中,在项目中建立img图片文件夹,将文件中需要的图片放入其中以便调用。 3. 主函数在Login类中,只需运行Login.java程序进入登陆界面,输入用户名和密码进入游戏。4. 在文件菜单下开始,暂停,继续游戏。5. 对第一次进入的用户请先看操作说明。2、 程序上机调试报告【语法错误及其排除】1. 将所有外部类定义为公共类,可以直接拿来应用,必须引入一个包来定义一个类来进行使用。程序中的蛇是用网格布局中的小面板组成,蛇的身体由等大的小网格组成。2. 键盘事件未进行监听以致键盘操作无法进行,监听函数有错误。最后加入正确的监听函数。3. 在eclipse上运行,程序出现乱码,通过调试编辑器解决。【算法错误及其排除】1. 游戏开始出现的方块是随机给的,但每个游戏中只给一种形状的方块,最后将随机函数放在游戏开始中,程序方可执行;2. 贪吃蛇在吃掉一个食物后,不能实现分数累加,在游戏中改变成员方法public boolean getAddScore()return AddScore;3. 游戏在运行过程中不能暂停,在游戏中增加暂停控制public void stopGame()requestFocus();isEnd=true;3、 程序测试结果【测试数据】1. 游戏登陆测试,用户名:杨文,密码:123456.2. 进入主界面。3. 测试文件菜单;游戏开始,贪吃蛇窗墙则游戏结束;退出提示。4. 测试设置菜单。5. 测试窗口大小菜单。6. 测试作者信息菜单。7. 测试帮助菜单。【输出结果】1. 登陆测试 2.进入主界面 3.测试文件菜单 文件主界面 1.菜单/开始 2.贪吃蛇窗墙则游戏结束 3.退出提示。文件/退出。 4.测试设置菜单. 5.测试窗口大小菜单。 6. 测试作者信息菜单。 7. 测试帮助菜单。 【收获及体会】通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,感觉到自己对Java程序的又有了新的认识。在做Java设计之前也有做过c语言的课程设计,但规模很小。在管理系统、各种应用软件和游戏中,我觉得对游戏的设计还有点热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间用c语言做过班级通讯录等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限。综合运用以前所学习的知识,设计一个JAVA贪吃蛇游戏,并能实现以下的功能:游戏界面登录、游戏开始、游戏暂停、游戏重新开始、游戏的结束和很好的图形化界面操作。总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。4、源程序代码 1.Login 类源代码package SnakeGameDemo;import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Image;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;/登陆界面public class Login extends JFrame private TextField f1;/创建文本框private TextField f2;private JButton b1;/创建按钮private JButton b2;public Login() /登陆界面Container cp=getContentPane();/获取容器cp.setLayout(new GridLayout(4,1);/设置布局管理为网格四行一列Label l1=new Label(用户名);/创建标签了l1,l2Label l2=new Label(密 码); Panel p1=new Panel();/创建面板,p1,p2,p3,p4Panel p2=new Panel();Panel p3=new Panel();MyPanel1 p4=new MyPanel1();/创建插入图片平面p4f1=new TextField(10);f2=new TextField(10);f2.setEchoChar(*);/回显字符为* 用于输入密码,设置为不可见b1=new JButton(Go);/新建按钮b1,b2b2=new JButton(Cancel);p1.add(l1);/第一行添加label 1p1.add(f1);p2.add(l2);p2.add(f2);p3.add(b1);p3.add(b2);cp.add(p4);/面板p4,p1,p2,p3分别加入容器cpcp.add(p1);cp.add(p2);cp.add(p3);b1.addActionListener(new Enter();/添加按钮事件响应b2.addActionListener(new Close();class Enter implements ActionListener public void actionPerformed(ActionEvent e) JButton bt=(JButton)e.getSource(); if(f1.getText().equals(杨文)&(f2.getText().equals(123456)&bt=b1) JFrame.setDefaultLookAndFeelDecorated(true); SnakeFrame frame=new SnakeFrame();/创建游戏主界面 frame.setSize(frame.col*11+11,frame.row*11+100); frame.setResizable(false); frame.setLocation(500,200);/设置窗体位置 frame.setTitle(贪吃蛇大战); frame.setVisible(true); else JOptionPane.showMessageDialog(null, 用户名或密码错误,请重新登录!);/错误用户提示class Close implements ActionListener /关闭登陆按钮响应public void actionPerformed(ActionEvent e) JButton bt=(JButton)e.getSource();if(bt=b2) System.exit(0);/退出/主函数 程序开始public static void main(String args) Login log=new Login(); log.setTitle(贪吃蛇游戏界面登陆); log.setBounds(500, 200, 300, 300); log.setBackground(Color.blue); log.setVisible(true);class MyPanel1 extends JPanel /插入登陆界面图片Image img=Toolkit.getDefaultToolkit().getImage(imgs/201.jpg);/添加图片public void paint(Graphics g) g.drawImage(img,0,0,this);2. SnakeFrame类源代码package SnakeGameDemo;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButtonMenuItem;import javax.swing.JTextField;public class SnakeFrame extends JFrame implements ActionListenerint row=20;int col=30;SnakePanel p=new SnakePanel(this,row,col);JMenuBar menubar=new JMenuBar();/菜单条JMenu fileMenu=new JMenu(文件);/菜单JMenuItem newgameitem=new JMenuItem(开始);/菜单条目JMenuItem stopitem=new JMenuItem(暂停);JMenuItem runitem=new JMenuItem(继续);JMenuItem exititem=new JMenuItem(退出); /设置菜单JMenu optionMenu=new JMenu(设置); /* * 等级选项 * ButtonGroup 创建一组按钮选项 * JRadioButtonMenuItem 是属于一组菜单项中的一个菜单项,该组中只能选择一个项。 * 被选择的项显示其选择状态。选择此项的同时,其他任何以前被选择的项都切换到未选择状态。 * Panel 是最简单的容器类。应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板。 */ JMenu degreeMenu=new JMenu(等级); ButtonGroup groupDegree = new ButtonGroup(); JRadioButtonMenuItem oneItem= new JRadioButtonMenuItem(初级); JRadioButtonMenuItem twoItem= new JRadioButtonMenuItem(中级); JRadioButtonMenuItem threeItem= new JRadioButtonMenuItem(高级); / 设置“窗口大小”菜单 JMenu windowsMenu = new JMenu(窗口大小); JMenu windowsMenu1 = new JMenu(视图); ButtonGroup groupDegree1 = new ButtonGroup(); JRadioButtonMenuItem minItem= new JRadioButtonMenuItem(小); JRadioButtonMenuItem midItem= new JRadioButtonMenuItem(中); JRadioButtonMenuItem maxItem= new JRadioButtonMenuItem(大); / 设置“作者信息”菜单 JMenu XinXi=new JMenu(作者信息); JMenuItem XinXiItem=new JMenuItem(软件信息); /设置“帮助”菜单 JMenu helpMenu=new JMenu(帮助); JMenuItem helpItem=new JMenuItem(操作指南); /可以被选定或取消选定的菜单项. final JCheckBoxMenuItem showGridItem = new JCheckBoxMenuItem(显示网格); JLabel scorelabel;/为分数创建标签 public JTextField scoreField;/显示分数的文本框 private long speedtime=200; private String helpstr = 游戏说明:n1 :方向键控制蛇移动的方向.+ n2 :单击菜单文件-开始开始游戏.+ n3 :单击菜单文件-暂停或者单击键盘空格键暂停游戏.+ n4 :单击菜单文件-继续继续游戏.+ n5 :单击菜单设置-等级可以设置难度等级.+ n6 :单击菜单设置-显示网格可以设置是否显示网格.+ n7 :红色为食物,吃一个得10分同时蛇身加长.+ n8 :蛇不可以出界或自身相交,否则结束游戏.; SnakeFrame() setJMenuBar(menubar); fileMenu.add(newgameitem); fileMenu.add(stopitem); fileMenu.add(runitem); fileMenu.add(exititem); menubar.add(fileMenu); oneItem.setSelected(true); /设置可选择 groupDegree.add(oneItem); groupDegree.add(twoItem); groupDegree.add(threeItem); degreeMenu.add(oneItem); degreeMenu.add(twoItem); degreeMenu.add(threeItem); optionMenu.add(degreeMenu); minItem.setSelected(true); groupDegree1.add(minItem); groupDegree1.add(midItem); groupDegree1.add(maxItem); windowsMenu1.add(minItem); windowsMenu1.add(midItem); windowsMenu1.add(maxItem); windowsMenu.add(windowsMenu1); / 风格选项 showGridItem.setSelected(true); optionMenu.add(showGridItem); menubar.add(optionMenu); helpMenu.add(helpItem); XinXi.add(XinXiItem); menubar.add(windowsMenu); menubar.add(XinXi); menubar.add(helpMenu);Container contentpane=getContentPane(); contentpane.setLayout(new FlowLayout();/设置布局管理contentpane.add(p);scorelabel=new JLabel(得 分: );scoreField=new JTextField(0,15);scoreField.setEnabled(false);scoreField.setHorizontalAlignment(0);/设置图标和文本的水平对齐方式JPanel toolPanel=new JPanel();toolPanel.add(scorelabel);toolPanel.add(scoreField);contentpane.add(toolPanel);/事件监听 使得按钮可以响应oneItem.addActionListener(this); twoItem.addActionListener(this); threeItem.addActionListener(this); minItem.addActionListener(this); midItem.addActionListener(this); maxItem.addActionListener(this); newgameitem.addActionListener(this); stopitem.addActionListener(this); runitem.addActionListener(this); exititem.addActionListener(this); XinXiItem.addActionListener(this); helpItem.addActionListener(this); showGridItem.addActionListener(this); public void actionPerformed(ActionEvent e) / 事件响应 从接口 ActionListener 复制的描述 ,发生操作时调用。 try/异常捕获 if(e.getSource()=helpItem) JOptionPane.showConfirmDialog(p,helpstr,操纵说明,JOptionPane.PLAIN_MESSAGE); else if(e.getSource()=exititem) JOptionPane.showConfirmDialog(null, 你确定退出游戏吗?, , JOptionPane.YES_NO_OPTION); else if(e.getSource()=newgameitem) p.newGame(speedtime); else if(e.getSource()=stopitem) p.stopGame(); else if(e.getSource()=runitem) p.returnGame(); else if(e.getSource()=showGridItem) if(!showGridItem.isSelected() p.setBackground(Color.lightGray);/设置背景颜色elsep.setBackground(Color.darkGray); else if(e.getSource()=oneItem) speedtime=200; else if(e.getSource()=twoItem) speedtime=100; else if(e.getSource()=threeItem) speedtime=50; else if(e.getSource()=minItem) row=20;col=30; p.change(this,row,col); this.setSize(col*11+11,row*11+100); else if(e.getSource()=XinXiItem) JOptionPane.showMessageDialog(this,贪吃蛇游戏nn西安石油大学n理学院n信息与计算科学 + n班级:信息1002班n学号:201001010214 +n姓名: 杨 文n指导老师:李元觉n2012年12月, 软件信息,JOptionPane.INFORMATION_MESSAGE); else if(e.getSource()=midItem) row=30;col=45; p.change(this,row,col); this.setSize(col*11+11,row*11+100); else if(e.getSource()=maxItem) row=40;col=60; p.change(this,row,col); this.setSize(col*11+11,row*11+100); catch(Exception ee)ee.printStackTrace();/异常处理 3. SnakePanel类源代码package SnakeGameDemo2;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Iterator;import java.util.LinkedList;import javax.swing.JFrame;import javax.swing.JPanel;public class SnakePanel extends JPanel implements Runnable,KeyListenerJFrame parent=new JFrame();private int row; /网格行数 30-341 60-671 40-451private int col; /列数private JPanel gridsPanel; /面板网格private Location direction;/方向定位private SnakeModel snake; /贪吃蛇private LinkedList snakeBody; /蛇的身体private LinkedList otherBlocks; /其他区域private LocationRO snakeHead; /蛇的头部private LocationRO snakeFood; /目标食物private Color bodyColor=Color.orange;/蛇的身体颜色private Color headColor=Color.black; /蛇的头部颜色private Color foodColor=Color.red; /目标食物颜色private Color othersColor=Color.lightGray;/其他区域颜色private int gameScore=0; /总分private long speed; /速度(难度设置)private boolean AddScore;/加分private Thread t; /线程private boolean isEnd; /暂停private static boolean notExit; /构造器,初始化操作public SnakePanel(SnakeFrame parent,int row,int col)change(parent,row,col); /开始游戏public void newGame(long speed)this.speed=speed;if (notExit) snake.init();/初始化elsesnake=new SnakeModel(row,col);notExit=true;t=new Thread(this);t.start();requestFocus();direction.setX(0);direction.setY(1);gameScore=0;updateTextFiled(+gameScore);isEnd=false; /暂停游戏public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江工商大学《病理形态学诊断技术》2023-2024学年第二学期期末试卷
- 智慧课堂与学生心理健康的互动关系
- 湖南信息职业技术学院《交通工程专业英语》2023-2024学年第二学期期末试卷
- 云南工程职业学院《口腔颌面外科学二》2023-2024学年第二学期期末试卷
- 海南软件职业技术学院《免疫系统与疾病》2023-2024学年第二学期期末试卷
- 药物联合治疗研究行业跨境出海项目商业计划书
- 2025年山东城市服务职业学院招聘人员笔试高频难、易错点备考题库附答案详解
- 创造力的培养教育心理学的视角与策略
- 以知识产权为核心的教育创新战略探讨
- 教育信息化提升教学效率的新技术
- 民法典案例解读PPT
- 安全生产知识应知应会
- 质 量 管 理 体 系 认 证审核报告(模板)
- 肿瘤科新护士入科培训和护理常规
- 体育器材采购设备清单
- 第4章 颌位(双语)
- 二手车鉴定评估报告书最终
- 电影场记表(双机位)
- 塔吊负荷试验方案
- 电子商务专业“产教融合、五双并行”人才培养 模式的实践研究课题论文开题结题中期研究报告(经验交流)
- 购买社区基本公共养老、青少年活动服务实施方案
评论
0/150
提交评论