java图书管理系统目的_java_图书管理系统java版,本文的目的就是通过图书管理 - phpStudy...
图书管理系统java版
本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询、插入、删除、修改。
内容:在数据库中创建一张书目信息表,包括书名、作者、出版社、出版日期、书号、价格字段。设计一个GUI界面进行书目管理。在该界面上有四个选项卡,分别是查询、插入、删除、修改。点击查询选项卡,出现的界面上有书名、作者、出版社、书号四个文本框,一个按钮和一个只读文本区。文本框内容可以为空,输入相应的查询信息后(例如根据书名查询可以仅输入书名),点击界面上的“查询”按钮,可以在界面下方的文本区中显示出符合条件的书目详细信息。点击插入选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。在文本框中输入信息后,点击“插入”按钮,该书目信息插入数据库表中。点击删除选项卡,出现的界面上有书名文本框和一个按钮,输入书名后点击“删除”按钮,该书目信息从数据库表中删除。点击修改选项卡,出现的界面上有书名、作者、出版社、出版日期、书号、价格文本框,一个按钮。输入的书名必须是已存在的,否则会弹出消息框显示出错信息。输入信息后,点击“修改”按钮,数据库表中的相应书目信息被修改为新值。
源码:
BookInfo.java
* 项目名称:图书管理系统
* 版本: 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> rowData;
private Vector 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>());
setColName(new Vector());
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 item=new Vector();
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> getRowData() {
return rowData;
}
public void setRowData(Vector> rowData) {
this.rowData = rowData;
}
public Vector getColName() {
return colName;
}
public void setColName(Vector 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);
}
}
}
程序运行结果:主界面:
查询界面:
添加图书界面:
修改界面:
删除操作:
数据库界面:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持phpstudy。相关阅读:
css样式制作的漂亮按钮
返回页面顶部top按钮通过锚点实现(自写)
js中的this关键字详解
win7系统电脑卡顿不流畅是什么原因 win7电脑卡顿不流畅的七大原因及解决办法
php中的比较运算符详解
Win10输入法已禁用IME不能输入中文该怎么办?
Win7 vpn连接不上怎么办?Win7系统vpn连接不上问题的解决方法
JavaScript实现三阶幻方算法谜题解答
ie下$.getJSON出现问题的解决方法
浅析用prototype定义自己的方法
Win7在命令提示符窗口中创建环境变量的方法
C#图片添加水印的实现代码
JSP入门教程之客户端验证、常用输出方式及JSTL基本用法
url传递的参数值中包含&时,url自动截断问题的解决方法
java图书管理系统目的_java_图书管理系统java版,本文的目的就是通过图书管理 - phpStudy...相关推荐
- java jdbc 回滚_java_详解Java的JDBC API中事务的提交和回滚,如果JDBC连接是在自动提交模式 - phpStudy...
详解Java的JDBC API中事务的提交和回滚 如果JDBC连接是在自动提交模式下,它在默认情况下,那么每个SQL语句都是在其完成时提交到数据库. 这可能是对简单的应用程序,但有三个原因,你可能想关 ...
- java中iterator用法_java_详解Java中Iterator迭代器的用法,迭代器(Iterator)迭代 - phpStudy...
详解Java中Iterator迭代器的用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为&quo ...
- Java RESTful Web Service实战(第2版)
Java核心技术系列 Java RESTful Web Service实战 (第2版) 韩陆 著 图书在版编目(CIP)数据 Java RESTful Web Service实战 / 韩陆著. -2版 ...
- javaweb 图书管理系统完整代码_基于Java web的图书管理系统
源码编号:B-E00029点击查看(分类规则) 项目类型:Java EE项目(非开源) 项目名称:基于Java web的图书管理系统(library_system) 当前版本:V2.0.2版本 难度等 ...
- java 皮肤包_Java swing图书管理系统无注释美化皮肤包版1:含SQL部分和效果图
SQL: select ts_shuliang,jnum from tushu t join jieyue j on t.ts_id=j.ts_id where j.ts_id='1' j.ts_id ...
- 2023计算机毕业设计SSM最新选题之java东风锻造有限公司点检管理系统65p2d
2023计算机毕业设计SSM最新选题之java东风锻造有限公司点检管理系统65p2d 大四计算机专业的同学们即将面临大学4年的最后一次考验--毕业设计.通过完成毕业设计来对过去4年的大学学习生活做一个 ...
- java计算机毕业设计南通大学福利发放管理系统源码+系统+数据库+lw文档+mybatis+运行部署
java计算机毕业设计南通大学福利发放管理系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计南通大学福利发放管理系统源码+系统+数据库+lw文档+mybatis+运行部 ...
- java毕业生设计中小型饭馆餐饮管理系统计算机源码+系统+mysql+调试部署+lw
java毕业生设计中小型饭馆餐饮管理系统计算机源码+系统+mysql+调试部署+lw java毕业生设计中小型饭馆餐饮管理系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B ...
- JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 本源 ...
最新文章
- 【图像】尺度不变特征变换算法(SIFT)
- Web Services 详解
- 微信小程序字符串与对象相互转换
- 小白开学Asp.Net Core 《十》
- 高德地图 Android API 的基站定位原理及使用方法
- matlab中rgb转hsv,matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转
- 彻底搞清 Flink 中的 Window 机制
- 字符数字转换 atoi 与 strtol
- android x5内核使用方法,android 快速教你集成腾讯X5内核
- Trying to create too many scroll contexts. Must be less than or equal to: [20000]
- linux分配oracle内存,【学习笔记】Linux系统 ORACLE用户进程占用私有内存分析
- c语言如何编辑数学公式,怎样用C语言编写数学公式
- 电脑高手常用技巧应用全接解
- CSS解构系列之-新浪页面解构-01
- 谷粒商城项目篇8_分布式高级篇_商城首页、性能压测、优化(Nginx动静分离)
- crypto加密解密
- 初学者:java练习题———含答案-------类与对象(2)
- 【建站教程】万网域名使用万网\QQ企业邮箱,设置解析方法
- listview条目有下划线
- 微软商店Microsoft Store下载安装找这个
热门文章
- express 什么是中间件(浅显易懂)
- 国产操作系统还有比windows系统要好的地方?
- win10隐藏recovery盘
- lisp中getkword输入默认_Lisp: 我不是为了 (zhuang) 宏(bi),我只是为了(ke)读(du)取(xing)...
- https协议和Htt协议
- 右下角弹出广告 js,漂浮效果(兼容多浏览器)
- c语言 输入1-7之间的一个整数,然后根据输入的数字判断是星期几,最后输出对应的星期的全称。如输入3,则输出Wednesday。
- POJ2010 Moo University - Financial Aid
- Petalinux-conifg 错误失败
- 按版面抓取饮水思源照片