Java版本:图书管理系统

实验目的:掌握数据库编程技术。能正确连接数据库,能对数据库中信息进行查询、插入、删除、修改。

实验内容:在数据库中创建一张书目信息表,包括书名、作者、出版社、出版日期、书号、价格字段。设计一个GUI界面进行书目管理。在该界面上有四个选项卡,分别是查询、插入、删除、修改。点击查询选项卡,出现的界面上有书名、作者、出版社、书号四个文本框,一个按钮和一个只读文本区。文本框内容可以为空,输入相应的查询信息后(例如根据书名查询可以仅输入书名),点击界面上的“查询”按钮,可以在界面下方的文本区中显示出符合条件的书目详细信息。点击插入选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。在文本框中输入信息后,点击“插入”按钮,该书目信息插入数据库表中。点击删除选项卡,出现的界面上有书名文本框和一个按钮,输入书名后点击“删除”按钮,该书目信息从数据库表中删除。点击修改选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。输入的书名必须是已存在的,否则会弹出消息框显示出错信息。输入信息后,点击“修改”按钮,数据库表中的相应书目信息被修改为新值。

实验源码:

BookInfo.java

<strong>/</strong>*
 * 项目名称:图书管理系统
 * 版本:    1.0
 * 创建者:  张俊强
 * 创建时间:2016/5/26
 * */
package librarySystem;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;
import java.sql.*;

@SuppressWarnings("serial")
public class BookInfo extends JFrame implements ActionListener{
	//主角面上的控件
	private JLabel inputLabel;
	private JTextField inputText;
	private JButton searchBut;

	private JTable bookTable;
	private JScrollPane bookScroll;
	private JButton addBut;
	private JButton modifyBut;
	private JButton deleteBut;
	private JButton refreshBut;
	private BookTableModel bookTableModel;
	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		BookInfo bookInfo=new BookInfo();
		bookInfo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		bookInfo.setBounds(350, 150, 600, 400);
		bookInfo.setVisible(true);
//		bookInfo.importSQL();//导出数据
		bookInfo.setMinWindowLayout();//设置数据
	}
	public BookInfo() throws SQLException{
		//创建主界面上的控件
		inputLabel=new JLabel("请输入书名:");
		inputText=new JTextField(10);
		searchBut=new JButton("查询");
		bookTableModel=new BookTableModel();

		bookTable=new JTable(bookTableModel);
		bookScroll=new JScrollPane(bookTable);

		addBut=new JButton("添加");
		modifyBut=new JButton("修改");
		deleteBut=new JButton("删除");
		refreshBut=new JButton("刷新");
		searchBut.addActionListener(this);
		addBut.addActionListener(this);
		refreshBut.addActionListener(this);
		modifyBut.addActionListener(this);
		deleteBut.addActionListener(this);

	}

	void setMinWindowLayout(){
		//主界面布局
		Container con1=new Container();
		con1.setLayout(new FlowLayout());
		con1.add(inputLabel);
		con1.add(inputText);
		con1.add(searchBut);
		con1.add(refreshBut);
		Container con2=new Container();
		con2.setLayout(new FlowLayout());
		con2.add(addBut);
		con2.add(modifyBut);
		con2.add(deleteBut);
		this.setLayout(new BorderLayout());
		this.add(con1,BorderLayout.NORTH);
		this.add(bookScroll,BorderLayout.CENTER);
		this.add(con2,BorderLayout.SOUTH);
		this.validate();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==searchBut){
			if(!this.inputText.getText().equals("")){
			   String bookName=this.inputText.getText();
			   String sql="SELECT * FROM book_info WHERE book_name ='"+bookName+"'";
			   try {
			    bookTableModel=new BookTableModel(sql);
				bookTable.setModel(bookTableModel);
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

			}else{
				JOptionPane.showMessageDialog(this,"输入不能为空", "提示",JOptionPane.PLAIN_MESSAGE);
			}
		}
		else if(e.getSource()==addBut){
			@SuppressWarnings("unused")
			AddBookDialog addWin=new AddBookDialog(this,"添加图书",true);
			this.refreshTable();
		}
		else if(e.getSource()==refreshBut){
			this.refreshTable();
		}
		else if(e.getSource()==deleteBut){
			int rowNum=bookTable.getSelectedRow();
			if(rowNum<0||rowNum>bookTable.getRowCount()){
				JOptionPane.showMessageDialog(this,"未选中", "提示",JOptionPane.PLAIN_MESSAGE);
			}
			else{
				//System.out.print(bookName);
				int n = JOptionPane.showConfirmDialog(null, "确认删除吗?", "确认删除框", JOptionPane.YES_NO_OPTION);
				if (n == JOptionPane.YES_OPTION) {
					String bookNum=(String) bookTable.getValueAt(rowNum, 0);
					String sql="DELETE FROM book_info WHERE book_num= '"+bookNum+"'";
					bookTableModel.deleteBook(sql);
					this.refreshTable();
					JOptionPane.showMessageDialog(this,"删除成功", "提示",JOptionPane.PLAIN_MESSAGE);
				} else if (n == JOptionPane.NO_OPTION) {
					return;
				}
			}
		}
		else if(e.getSource()==modifyBut){
			bookTable.setModel(bookTableModel);
			int rowNum=bookTable.getSelectedRow();
			if(rowNum<0||rowNum>bookTable.getRowCount()){
				JOptionPane.showMessageDialog(this,"未选中", "提示",JOptionPane.PLAIN_MESSAGE);
			}
			else{
				@SuppressWarnings("unused")
				ModifyBook modifyWin=new ModifyBook(this,"修改信息",true,bookTableModel,rowNum);
		    	this.refreshTable();
			}
		}

	}
	public void refreshTable(){
		BookTableModel searchBook;
		try {
			searchBook = new BookTableModel("SELECT * FROM book_info");
			bookTable.setModel(searchBook);
			bookTableModel=searchBook;
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}

BookTableModel.java

package librarySystem;
import java.sql.*;
import java.util.*;

/*
 * 图书表模型
 * */
import javax.swing.table.*;
@SuppressWarnings("serial")
public class BookTableModel extends AbstractTableModel{
	//表的元素
	private Vector<Vector<String>> rowData;
	private Vector<String> colName;
    // 数据库
    private PreparedStatement stmt;
    private ResultSet result;
	public BookTableModel(String sql) throws SQLException{
		this.initData(sql);
	}
	public BookTableModel() throws SQLException{
		this.initData("SELECT * FROM book_info");
	}
	public void initData(String sql) throws SQLException{
		setRowData(new Vector<Vector<String>>());
		setColName(new Vector<String>());
		getColName().add("书号");
		getColName().add("书名");
		getColName().add("作者");
		getColName().add("出版社");
		getColName().add("出版时间");
		getColName().add("价格");
		/*
		 * 数据库的导入
		 * */
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String url= "jdbc:mysql://localhost:3306/device";
		String user="root";
		String password="zjq1314520";
		Connection con=DriverManager.getConnection(url,user,password);
	    stmt = con.prepareStatement(sql);
	    result=stmt.executeQuery();
	    importSQL();
	}
	void importSQL() throws SQLException{
		// TODO Auto-generated method stub
		@SuppressWarnings("unused")
		boolean signNull=true;
		while(result.next()){
			Vector<String> item=new Vector<String>();
			for(int i=1;i<7;i++){
				item.add(result.getString(i));
			}
			getRowData().add(item);
			signNull=false;
		}
		result.close();
	}
	@Override
	public int getColumnCount() {//得到列数
		// TODO Auto-generated method stub
		return this.colName.size();
	}

	@Override
	public int getRowCount() {//得到行数
		// TODO Auto-generated method stub
		return this.rowData.size();
	}

	@Override
	public Object getValueAt(int row, int col) {//得到某行某列的数据
		// TODO Auto-generated method stub
		return (this.rowData.get(row)).get(col);
	}

	@Override
	public String getColumnName(int column) {
		// TODO Auto-generated method stub
		return this.colName.get(column);
	}

	public Vector<Vector<String>> getRowData() {
		return rowData;
	}
	public void setRowData(Vector<Vector<String>> rowData) {
		this.rowData = rowData;
	}
	public Vector<String> getColName() {
		return colName;
	}
	public void setColName(Vector<String> colName) {
		this.colName = colName;
	}
	public void addBook(String sql){
		try {
			stmt.executeUpdate(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
//		initData("SELECT * FROM book_info");
	}
	public void deleteBook(String sql){
		try {
			stmt.executeUpdate(sql);
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}

AddBookDialog.java

package librarySystem;

import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;

import javax.swing.*;

@SuppressWarnings("serial")
public class AddBookDialog extends JDialog implements ActionListener{
	private JLabel bookNumLabel;
	private JLabel bookNameLabel;
	private JLabel bookWriterLabel;
	private JLabel bookPublishLabel;
	private JLabel bookPriceLabel;
	private JLabel bookTimeLabel;
	private JTextField bookNumText;
	private JTextField bookNameText;
	private JTextField bookWriterText;
	private JTextField bookPublishText;
	private JTextField bookPriceText;
	private JTextField bookTimeText;

	private JButton submitBut;
	private JButton cancelBut;
	public AddBookDialog(Frame owner,String title,boolean model){
		//父窗口,窗口名,是否是模式窗口
		super(owner,title,model);
		bookNumLabel=new JLabel("书    号:");
		bookNameLabel=new JLabel("书    名:");
		bookWriterLabel=new JLabel("作    者:");
		bookPublishLabel=new JLabel("出版社:");
		bookPriceLabel=new JLabel("价    格:");
		bookTimeLabel=new JLabel("出版时间:");

		bookNumText=new JTextField(10);
		bookNameText=new JTextField(10);
		bookWriterText=new JTextField(10);
		bookPublishText=new JTextField(10);
		bookPriceText=new JTextField(10);
		bookTimeText=new JTextField(9);

		submitBut=new JButton("确认");
		cancelBut=new JButton("取消");
		submitBut.addActionListener(this);
		cancelBut.addActionListener(this);
		this.setBounds(350,150,400,260);
		this.setResizable(false);
		this.setLayout(new BorderLayout());
		initLayout();
	}
	public void initLayout(){
		Container[] con1=new Container[6];
		for(int i=0;i<6;i++) con1[i]=new Container();
		con1[0].setLayout(new FlowLayout());
		con1[0].add(bookNumLabel);
		con1[0].add(bookNumText);

		con1[1].setLayout(new FlowLayout());
		con1[1].add(bookNameLabel);
		con1[1].add(bookNameText);

		con1[2].setLayout(new FlowLayout());
		con1[2].add(bookWriterLabel);
		con1[2].add(bookWriterText);

		con1[3].setLayout(new FlowLayout());
		con1[3].add(bookPublishLabel);
		con1[3].add(bookPublishText);

		con1[4].setLayout(new FlowLayout());
		con1[4].add(bookPriceLabel);
		con1[4].add(bookPriceText);

		con1[5].setLayout(new FlowLayout());
		con1[5].add(bookTimeLabel);
		con1[5].add(bookTimeText);

		Container con2=new Container();
		con2.setLayout(new BorderLayout());
		con2.add(con1[0],BorderLayout.NORTH);
		con2.add(con1[1],BorderLayout.CENTER);
		con2.add(con1[2],BorderLayout.SOUTH);

		Container con3=new Container();
		con3.setLayout(new BorderLayout());
		con3.add(con1[3],BorderLayout.NORTH);
		con3.add(con1[4],BorderLayout.CENTER);
		con3.add(con1[5],BorderLayout.SOUTH);

		Container con4=new Container();
		con4.setLayout(new FlowLayout());
		con4.add(submitBut);
		con4.add(cancelBut);
		Container con5=new Container();
		con5.setLayout(new BorderLayout());
		con5.add(con2,BorderLayout.NORTH);
		con5.add(con3,BorderLayout.CENTER);
		con5.add(con4,BorderLayout.SOUTH);

		this.add(con5,BorderLayout.CENTER);
		this.validate();
		this.setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==submitBut){
			if(bookNumText.getText().equals("")||bookNameText.getText().equals("")||
					bookWriterText.getText().equals("")||bookPublishText.getText().equals("")||
					bookPriceText.getText().equals("")||bookTimeText.getText().equals("")){
				//System.out.println("输入失败");
			    JOptionPane.showMessageDialog(this,"输入不能有空", "提示",JOptionPane.PLAIN_MESSAGE);
			}
			else{
				//System.out.println("输入成功");
				String sql="insert into "
						+ "book_info(book_num,book_name,book_writer,publish_house,book_price,publish_time)"
						+ "values('"+bookNumText.getText()+"','"+bookNameText.getText()+"','"+bookWriterText.getText()+"','"+bookPublishText.getText()+"','"+bookPriceText.getText()+"','"+bookTimeText.getText()+"')";
				try {
					BookTableModel book=new BookTableModel();
					book.addBook(sql);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				JOptionPane.showMessageDialog(this,"添加成功", "提示",JOptionPane.PLAIN_MESSAGE);
			    this.setVisible(false);
			}
		}
		if(e.getSource()==cancelBut){
			this.setVisible(false);
		}
	}
}

ModifyBook.java

package librarySystem;

import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;

@SuppressWarnings("serial")
public class ModifyBook extends JDialog implements ActionListener{
	private JLabel bookNumLabel;
	private JLabel bookNameLabel;
	private JLabel bookWriterLabel;
	private JLabel bookPublishLabel;
	private JLabel bookPriceLabel;
	private JLabel bookTimeLabel;
	private JTextField bookNumText;
	private JTextField bookNameText;
	private JTextField bookWriterText;
	private JTextField bookPublishText;
	private JTextField bookPriceText;
	private JTextField bookTimeText;
	private JButton submitBut;
	private JButton cancelBut;
	private BookTableModel bookModel;
	private int rowNum;
	public ModifyBook(Frame owner,String title,boolean type,BookTableModel model,int row){
		super(owner,title,type);
		bookModel=model;
		rowNum=row;
		bookNumLabel=new JLabel("书    号:");
		bookNameLabel=new JLabel("书    名:");
		bookWriterLabel=new JLabel("作    者:");
		bookPublishLabel=new JLabel("出版社:");
		bookPriceLabel=new JLabel("价    格:");
		bookTimeLabel=new JLabel("出版时间:");

		bookNumText=new JTextField(10);
		bookNameText=new JTextField(10);
		bookWriterText=new JTextField(10);
		bookPublishText=new JTextField(10);
		bookPriceText=new JTextField(10);
		bookTimeText=new JTextField(9);

		submitBut=new JButton("确认修改");
		cancelBut=new JButton("取消");
		submitBut.addActionListener(this);
		cancelBut.addActionListener(this);
		this.setBounds(350,150,400,260);
		this.setResizable(false);
		this.setLayout(new BorderLayout());
		this.setValue();
		this.initLayout();

	}
	public void initLayout(){
		Container[] con1=new Container[6];
		for(int i=0;i<6;i++) con1[i]=new Container();
		con1[0].setLayout(new FlowLayout());
		con1[0].add(bookNumLabel);
		con1[0].add(bookNumText);

		con1[1].setLayout(new FlowLayout());
		con1[1].add(bookNameLabel);
		con1[1].add(bookNameText);

		con1[2].setLayout(new FlowLayout());
		con1[2].add(bookWriterLabel);
		con1[2].add(bookWriterText);

		con1[3].setLayout(new FlowLayout());
		con1[3].add(bookPublishLabel);
		con1[3].add(bookPublishText);

		con1[4].setLayout(new FlowLayout());
		con1[4].add(bookPriceLabel);
		con1[4].add(bookPriceText);

		con1[5].setLayout(new FlowLayout());
		con1[5].add(bookTimeLabel);
		con1[5].add(bookTimeText);

		Container con2=new Container();
		con2.setLayout(new BorderLayout());
		con2.add(con1[0],BorderLayout.NORTH);
		con2.add(con1[1],BorderLayout.CENTER);
		con2.add(con1[2],BorderLayout.SOUTH);

		Container con3=new Container();
		con3.setLayout(new BorderLayout());
		con3.add(con1[3],BorderLayout.NORTH);
		con3.add(con1[4],BorderLayout.CENTER);
		con3.add(con1[5],BorderLayout.SOUTH);

		Container con4=new Container();
		con4.setLayout(new FlowLayout());
		con4.add(submitBut);
		con4.add(cancelBut);
		Container con5=new Container();
		con5.setLayout(new BorderLayout());
		con5.add(con2,BorderLayout.NORTH);
		con5.add(con3,BorderLayout.CENTER);
		con5.add(con4,BorderLayout.SOUTH);
		this.add(con5,BorderLayout.CENTER);
		this.validate();
		this.setVisible(true);
	}
	public void setValue(){
		this.bookNumText.setText((String) bookModel.getValueAt(rowNum, 0));
		this.bookNumText.setEditable(false);

		this.bookNameText.setText((String) bookModel.getValueAt(rowNum, 1));
		this.bookWriterText.setText((String) bookModel.getValueAt(rowNum, 2));
		this.bookPublishText.setText((String) bookModel.getValueAt(rowNum, 3));
		this.bookTimeText.setText((String) bookModel.getValueAt(rowNum, 4));
		this.bookPriceText.setText((String) bookModel.getValueAt(rowNum, 5));
		this.validate();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
	//	System.out.println(bookPriceText.getText());
		// TODO Auto-generated method stub
		if(e.getSource()==submitBut){
			if(bookNumText.getText().equals("")||bookNameText.getText().equals("")||
					bookWriterText.getText().equals("")||bookPublishText.getText().equals("")||
					bookPriceText.getText().equals("")||bookTimeText.getText().equals("")){
				//System.out.println("输入失败");
			    JOptionPane.showMessageDialog(this,"修改不能有空", "提示",JOptionPane.PLAIN_MESSAGE);
			}
			else{
				int n = JOptionPane.showConfirmDialog(null, "确认修改吗?", "确认修改框", JOptionPane.YES_NO_OPTION);
				if (n == JOptionPane.YES_OPTION) {
					String sql="UPDATE book_info SET book_name ='"+bookNameText.getText()+"', book_writer= '"+bookWriterText.getText()+"',publish_house='"+bookPublishText.getText()+"',book_price='"+bookPriceText.getText()+"',publish_time='"+bookTimeText.getText()+"' WHERE book_num = '"+bookNumText.getText()+"' ";
					try {
						BookTableModel book=new BookTableModel();
						book.addBook(sql);
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					JOptionPane.showMessageDialog(this,"修改成功", "提示",JOptionPane.PLAIN_MESSAGE);
				    this.setVisible(false);
				} else if (n == JOptionPane.NO_OPTION) {
					return;
				}
			}
		}
		if(e.getSource()==cancelBut){
			this.setVisible(false);
		}
	}
}

程序运行结果:

主界面:

查询界面:

添加图书界面:

修改界面:

删除操作:

数据库界面:

时间: 2024-11-06 11:30:57

Java版本:图书管理系统的相关文章

java系统-图书管理系统

(1)在Oracle数据库中创建book.booktype.users.admin.borrowbook.reader.zjtype表 create table book(......); create table booktype(......); create table users(......); create table admin(......); create table borrowbook(......); create table reader(......); create

Java版本 学生管理系统

package BookDemo_1; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test { public static void main(String[] args) { StudentSys stuSys=new StudentSys("学生管理系统"); stuSys.initWin(); } } class StudentSys extends JFrame{

基于SSM的图书管理系统(读者管理借阅管理)-java图书管理系统图书馆管理

基于SSM的图书管理系统(读者管理借阅管理)-java图书管理系统图书馆管理 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.7,Tomcat 7涉及技术点:MVC模式.SpringMvc.Mybatis.Spring.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Mybatis框架实现ORM对象关系映射,前台JSP实现,后台springMvc映射

Java图书管理系统(用Java常用集合实现)

图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭住址,手机号码,登录名称,登录密码,状态. 5.图书属性包括:id,图书名称,作者,单价,出版社,出版日期,类别. 6.技术:通过用集合来模拟数据库实现该系统,建议采用List集合实现,集合模拟数据库只是一个数据的临时保存. 二.功能说明 1.注册功能 描述:注册需要用户输入所有的必须的用户信息.

Java小项目迷你图书管理系统

package 迷你图书管理系统; import java.util.Scanner; public class BookMgr { public static void main(String[] args) { Scanner input = new Scanner(System.in); //数据初始化6本图书 //图书:图书的姓名,图书借阅状态,图书借阅日期,图书借阅次数 String[]names = new String[6]; int []states = new int[6];/

《图书管理系统——java》

/* (盯着先拔头筹程序) * 该计划的版权声明和版本号 * Copyright (c) 2011, 烟台大学计算机学院学生的学校 * All rights reserved. * 文件名:    <系统--java> * 作    者:       刘江波 * 完毕日期:    2012     年  3     月     1   日 * 版 本 号:    v3.0 * 对任务及求解方法的描写叙述部分 * 问题描写叙述: * 程序头部的凝视结束 */ 文件包的建立情况: BookDao.

手把手实现Java图书管理系统(附源码)

基于SSM的图书管理系统的设计与实现 一.系统简介 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍了图书管理系统的实现,包括:1.环境搭建2.系统功能3.技术实现4.项目运行5.功能演示6.系统扩展 以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用. 二.技术实现 1.后台框架:Spring.SpringMVC.MyBatis2.UI界面:BootStr

Java swing项目-图书管理系统(swing+mysql+jdbc)

(一)项目功能分析 该项目是设计一个图书管理系统,主要包含的内容有 (1)管理员登陆界面 ->信息录入 ->登录 ->重置 (2)图书管理系统总界面 ->子界面菜单: 1)图书类别添加子界面 ->图书类别信息录入 ->图书类别添加 ->图书类别信息重置 2)图书类别管理子界面 ->显示所有的图书类别 ->查询图书类别 ->修改的图书类别信息显示 ->修改图书类别信息 ->删除图书类别 3)图书添加子界面 ->图书信息录入 -&g

《图书管理系统》—需求分析报告

目录 一.引言 1 1.2项目背景 1 二.任务概述 2 2.2用户特点 2 2.3需求概述 2 2.4功能的规定 3 三.功能需求 3 3.1功能划分 3 3.2功能描述 4 四.性能需求 4 4.1数据精确度 4 4.2系统响应时间 4 4.3适应性 4 4.4.输入输出要求 5 4.5.数据管理 5 4.6.故障处理要求 5 4.7.其他专门要求 5 五.运行需求 5 5.1.设备 5 5.2支持软件 6 5.3接口 6 5.3.1用户接口 6 5.4控制 6 六.数据描述 7 6.1静态