版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上JAVA程序设计 课程设计报告课 题: 学生信息管理系统 姓 名:
2、160; 赵咏荔 学 号:
3、;同组姓名: 肖雅婷 刘玲 专业班级: 信管12101
4、; 指导教师: 刘国清 设计时间:
5、160; 评阅意见:评定成绩:指导老师签名: 年 月 日专心-专注-专业 目 录1.系统描述.3 1.1需要实现的功能.3 1.2 设计的目的.32.分析与设计.4 2.1 功能模块划分.4 2.2 数据库结构描述.4 2.3 系统详细设计文档.5 2.4 各个模块实现方法描述.9 2.5 测试数据及期望结果.93.系统测试.124.总结或心得体会.185.参考文献.196.附录.191.系统描述1.1需要实现的功能(1)录入学生基本信息的功能
6、学生基本信息主要包括:学号、姓名、性别、年龄、出生地、专业、班级、总学分,在插入时,如果数据库则已经存在该学号,则不能再插入该学号。(2)修改学生基本信息的功能在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。(3)查询学生基本信息的功能可使用 “姓名”对已存有的学生资料进行查询。(4)删除学生基本信息的功能 在管理员模式下,只要选择表格中的某个学生,就可以删除该学生。(5)用户登陆用不同的登录权限可以进入不同的后台界面,从而实现权限操作。(6)用户登陆信息设置可以修改用户登陆密码1.2 设计的目的本程序用于用户对少量学生信息进行简单的管理,本程序针对于对安全系数要求不高,
7、操作不是很复杂的小型客户开发。本程序的管理员可以实现对学生信息的录入、查询、修改、删除等操作,同时支持查看所有学生信息,学生只能查询自己的信息。程序功能完善,界面简洁美观,布局合理,操作简便,简单易用,任何人可轻松操作。同时,本程序对系统要求配置较低,运行速度快,而却对数据库管理要求较低。本程序数据库采用office2007版本的access数据库(.accdb)进行数据存储,该数据库可实现关系较为简单的数据管理。2.分析与设计: 2.1功能模块划分学生信息管理系统浏览学生信息查询学生信息添加学生信息修改学生信息删除学生信息普通学生(用户)模块班委(管理员)模块浏览学生信息查询学生信息学生管理
8、登陆管理修改登陆密码显示登陆用户 图1 功能模块图2.2数据库结构描述 (1)数据库E-R模型 图2 学生局部E-R图 图3 登陆用户局部E-R图(2)数据库关系模型二维 表1 学生表(student)字段数据类型说明stuIdnvarchar(30)学号stuNamenvarchar(30)姓名stuSexnvarchar(30)性别stuAgeint年龄stuJgnvarchar(30)籍贯stuZynvarchar(30)专业classIdnvarchar(30)班号stuSoursenumeric(5,2)总学分 表2 登陆权限表(login)字段数据类型说明userIdnvarcha
9、r(30)用户名(账号),即登陆Idpasswordnvarchar(30)登陆密码positionnvarchar(30)职位,如班委,普通学生(3)数据流图进度条(闪屏)用户登陆登陆验证falsetrue班委(管理员)界面普通学生界面查询添加修改删除查询显示班委(管理员员 )普通学生(用户)退出退出系统结束结束退出系统truefalsefalsetrue修改用户登陆密码显示登陆用户信息 图4 数据流图2.3系统详细设计文档 表3 包以及包所包含的类包名(package)所包含的类说明com.sqlConnectionSqlConn.java用于连接数据库com.ToolsMyFont.ja
10、va用于设置窗体各组件的字体com.ViewIndex.java使用进度条与线程结合实现闪屏,初始化进入登陆界面Login.java登陆界面,管理员与用户登陆ManageView.java管理员界面,可进行所有操作StuMainView.java普通学生(用户)界面,只能进行部分操作StuQuery.java学生信息查询模块AddStu.java添加学生信息模块UpdateStu.java更新学生信息模块TableModel.java表数据更新模型,学于更新并通过表来显示信息LoginModel.java用户登陆验证模型PurViewModel.java用户权限设置界面UpdateLogin.
11、java用户账户修改界面 表4 SqlConn类类名类的成员属性与方法说明SqlConn.javaConnection ct得到与数据库的连接PreparedStatement ps实现发送SQL语句给数据库ResultSet rs获得数据库返回的记录集public ResultSet sqlQuery(String sql)实现查询功能的方法public void sqlUpdate(String sql)实现添加,修改功能 的方法public void sqlDelete(String sql)实现删除学生记录的方法public void closeSqlConn()实现关闭数据库连接的功
12、能 表5 Index类类名类的成员属性与方法说明Index.javaJProgressBar jpb定义进度条JLabel jl1用于在窗体的北部放一张图片,南部是进度条int width,height用于获取显示屏分辨率大小,以便设置窗口的默认位置public Index()初始化窗口的相关组件public void run()进度条线程的run方法,用于设置线程的属性int progressValue定义一个数组,存放进度条显示时需要的数据 表6 Login类 类名类的成员属性与方法说明Login.javaJLabel jl1,jl2,jl3定义三个标签组件JTextField jtf1定
13、义一个用户输入账号的文本框JPasswordField jpf1密码输入框JButton jb1,jb2提交和清除按钮int width,height用于设置窗口初始位置的变量,即获取显示器的大小ResultSet rs用于接收从数据库返回来的记录集LoginModel loginModel自定义一个模型,把值到登陆验证模型public Login()构造方法,用于初始化登陆窗口的相关组件class BackImage extends JPanel创建一个内部类,并继承JPanle,用于画背景图片2.4各个模块实现方法描述 sqlConnection是连接数据库。可实现发送SQL语句给数据库,
14、获得数据库返回的记录集,实现查询、添加、修改、删除学生记录,关闭数据库连接等功能。Myfont是设置窗体各组件的字体。Index是使用进度条与线程结合实现闪屏,初始化进入登陆界面。Login是登陆界面,管理员与用户登陆,可以分别登入管理员和用户,管理员与用户的登录进去后可分别按自己的权限操作。2.5 测试数据及期望结果在登入窗口可以分别登入管理员和用户的账号及密码,会进入权限不同的页面,管理员可以实现查询、添加、修改、删除学生记录,还可以查询,修改、删除管理员表格。而学生只能查询学生记录。例如: 图1登入管理员 图2查询全部信息 图3查询个人信息 图4添加学生信息 图5修改学生信息 图6修改学
15、生信息 图7查询肖林卫婕的成绩3. 系统测试 图8系统启动界面图9 用户登陆界面 图10 班委(管理员)界面,即具有完全权限的用户后台界面 图11 班委(管理员)界面子菜单项显示 图12 普通用户(学生)界面子菜单项显示图13学生信息查询结果显示图14 添加学生信息界面图15 修改学生信息界面 图16 显示所有学生信息 图17当没有选中一行的时候,不能修改和删除,并弹出提示警告框 图18 删除文件时的确认对话框(当点击确认时才会删除,点击取消,则返回主界面) 图19 显示所有登陆用户信息 图20 修改用户登陆密码,选中某个用户进行修改 图21 关闭用户记录,即不显示所有用户信息 图22 关闭学
16、生记录 图23 退出系统确认对话框,只有确认时才会退出系统,否则返加主界面 图24 普通学生登陆后的界面(即不能对学生信息进行添加,修改和删除以及用户密码修改,对应的这几项灰色显示,不可点击)四、总结或心得体会1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂
17、程序,提高效率。4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性5)养成创建包来存放不同功能的类,使系统的结构更加模块化和规范化。6)在编写代码的时候,一定要边写边调试,要适时的设置断点,或者把某些变量的值输出到控制台,通过观察和分析变量的值,便于判断问题所在,同时,需要捕获异常的一定要把异常信息打印出来,便于分析问题。在老师悉心的指导下,我顺利地完成了本次课程设计,并取得了很大的收获,对以后的软件开发奠定了一定的基础!5、 参考文献(1)赵海廷.Java语言程序设计教程.北京:清华大学出版社.2012(2)孙印杰,刘斌,孙玉
18、强.Java编程案例精解.北京:电子工业出版 社.2005(3)何梅.java编程实例系列丛书.北京:清华大学出版社,2002(4)杨昭.编著二级Java语言程序设计教程.北京:中国水利水电出版社,2006(5)赵文靖编著.Java程序设计基础与上机指导.北京:清华大学出版社,2006六、附录(1)功能:连接数据库package com.SqlConnection;import java.sql.*;import ;public class SqlConn Connection ct=null;PreparedStatement ps=null;ResultSet rs=null;String
19、 driver=;String dburl="jdbc:odbc:stuSystem"String userName=""String password=""/实现查询功能的方法public ResultSet sqlQuery(String sql)try /加载驱动Class.forName(driver);ct=DriverManager.getConnection(dburl,userName,password);ps=ct.prepareStatement(sql);rs=ps.executeQuery(); catch (
20、Exception e) e.printStackTrace();/ TODO: handle exceptionreturn rs;/实现添加,修改功能 的方法public void sqlUpdate(String sql)try /加载驱动Class.forName(driver);ct=DriverManager.getConnection(dburl,userName,password);ps=ct.prepareStatement(sql);/执行添加,更新操作int i=ps.executeUpdate();/返回一个值,如果为1则表示添加成功。if(i=1)System.out
21、.println("数据添加/修改成功!");elseSystem.out.println("数据添加/修改失败!"); catch (Exception e) e.printStackTrace();/ TODO: handle exception/实现删除学生记录的方法public void sqlDelete(String sql)try /加载驱动System.out.println("ok");Class.forName(driver);ct=DriverManager.getConnection(dburl,userNam
22、e,password);ps=ct.prepareStatement(sql);System.out.println("ok1");/执行添加,更新操作int i=ps.executeUpdate();/返回一个值,如果为1则表示删除成功。if(i=1)System.out.println("数据删除成功!");elseSystem.out.println("数据删除失败!"); catch (Exception e) e.printStackTrace();/ TODO: handle exception/实现关闭数据库连接的功能p
23、ublic void closeSqlConn()try if(rs!=null)rs.close();if(ps!=null)ps.close();if(ct!=null)ct.close(); catch (Exception e) e.printStackTrace();/ TODO: handle exception(2)功能:这是一个字体包,用于美化窗口的字体package com.Tools;importpublic class MyFont public static Font f1=new Font("宋体",Font.PLAIN,15);public st
24、atic Font f2=new Font("宋体",Font.PLAIN,13);(3) 功能:这是添加学生的界面,通过模式对话(即继承JDialog对话框)来实现 package com.View;import java.awt.*;importimportimportimport javax.swing.*;importimportpublic class AddStu extends JDialog implements ActionListener /定义添加学生信息的相关组件JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8;JText
25、Field jtf1,jtf2,jtf3,jtf4,jtf5,jtf6,jtf7,jtf8;JButton jb1,jb2,jb3;ResultSet rs;SqlConn sqlconn;String No;int stuAge=0;Double stuSourse=0.0;int i=0;/用于判断到底点击了添加还是取消,来决定是否执行数据更新操作public int falg()return i;/这是添加学生界面的函数封装public void addView()jl1=new JLabel("学 号:");jl1.setBounds(20, 20, 60, 25)
26、;jl1.setFont(MyFont.f1);jl2=new JLabel("姓 名:");jl2.setFont(MyFont.f1);jl2.setBounds(250, 20, 60, 25);jl3=new JLabel("性 别:");jl3.setFont(MyFont.f1);jl3.setBounds(20, 60, 60, 25);jl4=new JLabel("年 龄:");jl4.setFont(MyFont.f1);jl4.setBounds(250, 60, 60, 25);jl5=new JLabel(&
27、quot;出生地:");jl5.setFont(MyFont.f1);jl5.setBounds(14, 100, 60, 25);jl6=new JLabel("专 业:");jl6.setFont(MyFont.f1);jl6.setBounds(20, 140, 60, 25);jl7=new JLabel("班 级:");jl7.setFont(MyFont.f1);jl7.setBounds(20, 180, 60, 25);jl8=new JLabel("总学分:");jl8.setFont(MyFont.f1)
28、;jl8.setBounds(240, 180, 60, 25);jtf1=new JTextField(20);jtf1.setBounds(70, 20, 130, 25);jtf1.setBorder(BorderFactory.createLoweredBevelBorder();jtf2=new JTextField(20);jtf2.setBounds(300, 20, 130, 25);jtf2.setBorder(BorderFactory.createLoweredBevelBorder();jtf3=new JTextField(10);jtf3.setBounds(70,
29、 60, 60, 25);jtf3.setBorder(BorderFactory.createLoweredBevelBorder();jtf4=new JTextField(10);jtf4.setBounds(300, 60, 60, 25);jtf4.setBorder(BorderFactory.createLoweredBevelBorder();jtf5=new JTextField(30);jtf5.setBounds(70, 100, 360, 25);jtf5.setBorder(BorderFactory.createLoweredBevelBorder();jtf6=n
30、ew JTextField(20);jtf6.setBounds(70, 140, 290, 25);jtf6.setBorder(BorderFactory.createLoweredBevelBorder();jtf7=new JTextField(20);jtf7.setBounds(70, 180, 130, 25);jtf7.setBorder(BorderFactory.createLoweredBevelBorder();jtf8=new JTextField(20);jtf8.setBounds(300, 180, 130, 25);jtf8.setBorder(BorderF
31、actory.createLoweredBevelBorder();jb1=new JButton("添 加");jb1.setFont(MyFont.f1);jb1.setBounds(100, 220, 80, 25);jb1.addActionListener(this);jb2=new JButton("取 消");jb2.setFont(MyFont.f1);jb2.setBounds(280, 220, 80, 25);jb2.addActionListener(this);jb3=new JButton("清 除");j
32、b3.setFont(MyFont.f1);jb3.setBounds(190,220,80,25);jb3.addActionListener(this);this.setLayout(null);/把组件添加到窗体this.add(jl1);this.add(jtf1);this.add(jl2);this.add(jtf2);this.add(jl3);this.add(jtf3);this.add(jl4);this.add(jtf4);this.add(jl5);this.add(jtf5);this.add(jl6);this.add(jtf6);this.add(jl7);thi
33、s.add(jtf7);this.add(jl8);this.add(jtf8);this.add(jb1);this.add(jb2);this.add(jb3);public AddStu(Frame Main,String title,boolean model)/调用父类的构造方法,实现模式对话super(Main,title,model);/调用添加学生信息界面的的方法this.addView();/设置窗体的属性this.setSize(465,300);this.getContentPane().setBackground(Color.LIGHT_GRAY);/设置背景必须是在显
34、示窗口前面,否则不能显示出来this.setVisible(true);this.setResizable(false);Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stub/用于判断输入的学号是否存在时,如果存在则返回该学号,否则返回null,因此在这里,定义一个用于接收该返回的学号/并设置该No的初始值为空,否则报错。String No = null ;/当点击了添加按钮if(e.getSource()=jb1)/*/获取文本框的信息 String stuId=jtf1.ge
35、tText().trim();/判断,不能让文本输入框的值为空if(stuId.equals("")JOptionPane.showMessageDialog(this, "请输入学号!");return;/返回到输入界面,如果没有return语句,则会回到主界面String stuName=jtf2.getText().trim();if(stuName.equals("")JOptionPane.showMessageDialog(this, "请输入姓名!");return;/返回到输入界面,如果没有retu
36、rn语句,则会回到主界面String stuSex=jtf3.getText().trim();if(stuSex.equals("")JOptionPane.showMessageDialog(this, "请输入性别!");return;/返回到输入界面,如果没有return语句,则会回到主界面/对于年龄,则需要进行两个判断,一个是不能为空,另一个必须是int型,下面用异常来判断输入的学生年龄是否是整型数/*/try stuAge=Integer.parseInt(jtf4.getText().trim();/把从文本框取得的字符串转换成整型,如果抛
37、异常,则输入的不是整形数 if(stuAge<1) JOptionPane.showMessageDialog(this, "年龄必须大于或等于1!"); return; catch (Exception e2) /提示输入的不是整数JOptionPane.showMessageDialog(this, "请输入一个整数的年龄!");/如果抛异常,则返回到添加窗口,后面终止执行*/return;/ TODO: handle exception/*/String stuJg=jtf5.getText().trim();if(stuJg.equals(
38、"")JOptionPane.showMessageDialog(this, "请输入出生地!");return;/返回到输入界面,如果没有return语句,则会回到主界面String stuZy=jtf6.getText().trim();if(stuZy.equals("")JOptionPane.showMessageDialog(this, "请输入专业!");return;/返回到输入界面,如果没有return语句,则会回到主界面String classId=jtf7.getText().trim();i
39、f(classId.equals("")JOptionPane.showMessageDialog(this, "请输入班号!");return;/返回到输入界面,如果没有return语句,则会回到主界面/*/try stuSourse=Double.parseDouble(jtf8.getText().trim();if(stuSourse=0.0)JOptionPane.showMessageDialog(this, "请输入总学分!");return;/返回到输入界面,如果没有return语句,则会回到主界面 catch (Ex
40、ception e2) JOptionPane.showMessageDialog(this, "请输入一个整数或小数的总学分!");return;/ TODO: handle exception/*/首先先判断该主键是否在数据库中是否存在,其次分别判断性别是否为“男”或者“女”,年龄是否为数字,总学分是否为浮点型或双精度型String sql="select * from student where stuId='"+stuId+"'"SqlConn sqlconn=new SqlConn();rs=sqlconn.
41、sqlQuery(sql);try while(rs.next()No=rs.getString(1);/看到底是否存在该学生的学号,如果存在,则返回该学号,不存在,则为空。 catch (Exception e2) e2.printStackTrace();/ TODO: handle exceptionif(No=null)if(stuSex.equals("男")|stuSex.equals("女")/调用数据库连接 sql="insert into student values('"+stuId+"'
42、,'"+stuName+"','"+stuSex+"','"+stuAge+"','"+stuJg+"','"+stuZy+"','"+classId+"','"+stuSourse+"')"sqlconn=new SqlConn();sqlconn.sqlUpdate(sql);this.i=1;/关闭数据库连接sqlconn.clo
43、seSqlConn();this.dispose();else JOptionPane.showMessageDialog(this, "性别应该是男或女!");else JOptionPane.showMessageDialog(this, "该学号已经存在,请输入新的学号!");/如果点击了取消按钮,则关闭模式对话框else if(e.getSource()=jb2)this.dispose();else if(e.getSource()=jb3)jtf1.setText("");jtf2.setText(""
44、);jtf3.setText("");jtf4.setText("");jtf5.setText("");jtf6.setText("");jtf7.setText("");jtf8.setText("");(4)功能:实现闪屏界面package com.View;import java.awt.*;import javax.swing.*;public class Index extends JWindow implements Runnable/定义与进度条相关的组件JP
45、rogressBar jpb;/定义进度条JLabel jl1;/用于在窗体的北部放一张图片,南部是进度条int width,height;/用于获取显示屏分辨率大小public static void main(String args)Index index=new Index();/创建index线程Thread t=new Thread(index);/启动线程t.start();/构造函数public Index()/创建标签,并在标签上放置一张图片jl1=new JLabel(new ImageIcon("image/index1.gif");/创建进度条jpb=
46、new JProgressBar();/设置进度条属性jpb.setStringPainted(true);/显示当前进度值信息jpb.setIndeterminate(false);/确定进度条执行完成后不来回滚动jpb.setBorderPainted(false);/设置进度条边框不显示jpb.setBackground(Color.darkGray);/设置进度条的背景色/添加组件this.add(jl1,BorderLayout.NORTH);this.add(jpb,BorderLayout.SOUTH);/设置窗体属性this.setSize(625,359);/设置窗体显示的位
47、置width=Toolkit.getDefaultToolkit().getScreenSize().width;height=Toolkit.getDefaultToolkit().getScreenSize().height;this.setLocation(width/2-200,height/2-150);/设置窗口显示this.setVisible(true);/进度条线程的run方法,用于设置线程的属性public void run() /定义一个数组,存放进度条显示时需要的数据int progressValue=0,8,35,43,49,56,70,99,100;for(int
48、i=0;i<progressValue.length;i+)try /休眠1秒,再执行Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();jpb.setValue(progressValuei);/取得数组中的进度值/当进度完成后,执行相应的操作,如切换到其他的窗口,同时关闭进度条窗口等new Login();/关闭进度条窗口this.dispose();(5) 功能:这是学生/管理员登陆的窗口,根据权限不同进入不同的后台界面pack
49、age com.View;importimport com.Tools.*;import java.awt.*;importimportimportimportimportimport javax.swing.*;import ;import ;public class Login extends JFrame implements ActionListener/定义登陆窗口需要的组件JLabel jl1,jl2,jl3;JTextField jtf1;JPasswordField jpf1;JButton jb1,jb2;int width,height;/定义用于连接数据库的组件,也就是c
50、om.SqlConnection类下的SqlConn方法SqlConn sqlconn;/定义用于传送SQL语句的变量String sql;/定义一个用于接收登陆验证返回来的记录集ResultSet rs;/声明用于验证登陆用户的模型LoginModel loginModel;int flag;public static void main(String args)Login login=new Login();public Login()/创建登陆所需的组件jl1=new JLabel("账 号:");jl1.setFont(MyFont.f1);jl1.setBound
51、s(50,50,60,25);jl2=new JLabel("密 码:");jl2.setFont(MyFont.f1);jl2.setBounds(50,90,60,25);jtf1=new JTextField(20);jtf1.setBounds(110,50,150,25);/设置文本框下凹,三维效果jtf1.setBorder(BorderFactory.createLoweredBevelBorder();jpf1=new JPasswordField(20);jpf1.setBorder(BorderFactory.createLoweredBevelBorder();jpf1.setBounds(110,90,150,25);jb1=new JButton("登 陆");jb1.setFont(MyFont.f1);jb1.addActionListener(this);jb1.setBounds(95,130,75,25);jb2=new JButton("取消");jb2.setFont(MyFont.f1);jb2.addAct
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市更新的绿色发展与生态城市
- 机器人体验券课程设计
- 本地植物标本课程设计
- 2024年企业间场地租赁合同
- 木门配套门施工方案
- 木方楼梯施工方案
- 2024年上海地区离婚协议书全新修订版
- 佳木斯大学《学前比较教育学》2021-2022学年第一学期期末试卷
- 派遣维保人员消防值班服务合同(2篇)
- 2024年企业合规审核服务合同
- 伴游旅行行业分析
- 部编版二年级上册黄山奇石课件
- 企业法律合规与纠纷解决策略课件
- 计算机毕业设计jsp家庭美食食谱网站系统vue论文
- 室内防火通道设立提高逃生速度
- 社会工作大数据分析与应用
- 《倾斜角与斜率》课件
- (小学)语文教师书写《写字教学讲座》教育教研讲座教学培训课件
- 快手报告分析
- 建造冷库可行性报告
- 电子商务专业综合实训DEEP大数据分析实验报告
评论
0/150
提交评论