Swing学校成绩管理系统
系统功能介绍
本系统为学校成绩管理系统,目的在于可以让教师更方便、快捷的增添、删除、修改学生的相关信息,让学生能够更加方便的查询自己的选课及课程成绩情况,并且支持管理员的后台信息管理。
(1)用户添加功能,可以在本系统中添加管理员、教师、学生等不同权限级别的用户。
(2)用户登录功能,实现不同权限级别用户的登录。
(3)后台管理,实现学生信息管理、教师信息管理、课程信息管理、年级信息管理、班级信息管理等功能。
(4)选课情况,实现选课录入,选课总览等功能。
(5)成绩管理,实现成绩录入、成绩统计、报表操作等功能。
(6)数据库管理,实现MySQL数据库的初始化操作、数据库备份操作、数据库恢复等功能。
主要功能截图
- 登录界面
2. 管理员界面
3. 后台管理
(包含学生信息、教师信息、课程信息、年级信息、班级信息管理)
-
选课情况
-
成绩管理
-
其他功能
-
学生和教师登录后,只有对应功能的权限
技术点介绍
1> 语言:java swing,即GUI窗口
2> 界面:beautyEye+Bootstrap开源UI框架,使原生的Swing窗口美化很多
3> 数据库:mysql
4> jdk1.7或jdk1.8
5> 特色:使用了背景音乐,在启动系统时即播放
6> 权限分离:管理员、教师、学生三种角色权限操作分离
7> 代码:逻辑清晰,数据库、操作、窗口分离,model、dao、辅助类分类清晰
8> 希望这个代码可以提升你的代码管理能力
主要代码说明
1、登录页面布局:Login.java
package com.code2life.student.manage.frame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.UIManager;
import java.awt.Rectangle;
import javax.swing.*;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.text.SimpleDateFormat;
import javax.swing.JTextField;
import javax.swing.ImageIcon;
import com.code2life.student.manage.dao.UserDao;
import com.code2life.student.manage.util.DBConnection;
import com.code2life.student.manage.util.MusicDemo;
import javax.swing.JComboBox;
import javax.swing.plaf.InsetsUIResource;
import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
import org.jb2011.lnf.beautyeye.ch3_button.BEButtonUI;
public class Login extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton21 = null;
private JButton jButton22 = null;
private JTextField jTextField = null;
private JPasswordField jPasswordField = null;
private JLabel jLabel = null;
static int storeUserId;// 登录用户名
public static String storeUserName = null;// 登录用户名
public static String storeUserPassword = null;// 登录密码
static boolean RELOAD = true;// 重新登陆标记
static int login_user_type;// 0表示管理员,1表示老师,2表示学生
private JLabel jLabel_User = null;
private JLabel jLabel_userName = null;
private JLabel jLabel_password = null;
private JLabel jLabel_privilege = null;
private URL imgURL = null;
private BtnListener btl = null;
private JComboBox jComboBox = null;
private JLabel jLabel_tips = null;
private void initialize() {
jLabel_tips = new JLabel();
jLabel_tips.setBounds(new Rectangle(15, 247, 277, 24));
jLabel_tips.setText("管理员使用账号登陆,非管理员请使用ID登陆");
this.setResizable(false);
this.setSize(296, 356);
// this.setSize(350, 450);
this.setTitle("欢迎登陆");
imgURL = this.getClass().getResource(
"/com/code2life/student/manage/images/logo_0.png");
this.setIconImage(Toolkit.getDefaultToolkit().getImage(imgURL));
this.setLocationRelativeTo(null);
// this.setUndecorated(true);//设置无边框
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");// 使用windows外观
} catch (Exception e) {
e.printStackTrace();
}
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jButton21 = new JButton();
jButton21.setBounds(new Rectangle(15, 295, 78, 26));
/*
* InputStream in=this.getClass().getResourceAsStream(""); Reader
* data=new InputStreamReader(in);
*/
// 解决打包找不到资源的问题
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/icon.png");
jButton21.setText("登录");
jButton21.setUI(new BEButtonUI()
.setNormalColor(BEButtonUI.NormalColor.green));
// 允许回车登录
getRootPane().setDefaultButton(jButton21);
jButton22 = new JButton();
jButton22.setUI(new BEButtonUI()
.setNormalColor(BEButtonUI.NormalColor.lightBlue));
jButton22.setBounds(new Rectangle(110, 296, 78, 26));
jButton22.setText("退出");
jTextField = new JTextField(20);
jTextField.setBounds(new Rectangle(120, 180, 124, 23));
jPasswordField = new JPasswordField();
jPasswordField.setBounds(new Rectangle(120, 210, 124, 23));
jLabel = new JLabel();
jLabel.setText("");
jLabel.setBounds(new Rectangle(0, -1, 291, 142));
imgURL = this.getClass()
.getResource("/com/code2life/student/manage/images/login.png");
jLabel.setIcon(new ImageIcon(imgURL));
jLabel_password = new JLabel();
jLabel_password.setBounds(new Rectangle(29, 210, 71, 19));
jLabel_password.setText("密 码:");
jLabel_userName = new JLabel();
jLabel_userName.setBounds(new Rectangle(29, 181, 71, 19));
jLabel_userName.setText("用户名:");
jLabel_User = new JLabel();
jLabel_User.setBounds(new Rectangle(10, 147, 275, 98));
jLabel_privilege = new JLabel();
jLabel_privilege.setBounds(new Rectangle(18, 272, 71, 19));
jLabel_privilege.setText("登陆类型:");
jComboBox = new JComboBox();
jComboBox.setBounds(new Rectangle(109, 272, 123, 23));
jComboBox.addItem("管理登陆");
jComboBox.addItem("老师登录");
jComboBox.addItem("学生登陆");
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/user.gif");
jLabel_User.setIcon(new ImageIcon(imgURL));
jLabel_User.setText("User");
jContentPane = new JPanel();// 新建jPanel面板
jContentPane.setLayout(null);
// jContentPane.setBackground(new Color(250,250,250));
jContentPane.add(jLabel_userName, null);
jContentPane.add(jLabel_password, null);
jContentPane.add(jButton21, null);
jContentPane.add(jButton22, null);
jContentPane.add(jTextField, null);
jContentPane.add(jPasswordField, null);
jContentPane.add(jLabel, null);
jContentPane.add(jLabel_User, null);
jContentPane.add(jComboBox, null);
jContentPane.add(jLabel_privilege, null);
jContentPane.add(jLabel_tips, null);
setContentPane(jContentPane);
btl = new BtnListener();
jButton21.addActionListener(btl);
jButton22.addActionListener(btl);
}
/**
* @author Administrator
* @监听类
*/
public class BtnListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jButton21) {
UserDao ud = new UserDao();
String user = jTextField.getText().trim();
String password = new String(jPasswordField.getPassword())
.trim();// char to String
storeUserName = user;
storeUserPassword = password;
login_user_type = jComboBox.getSelectedIndex();
if ("".equals(user)) {
JOptionPane.showMessageDialog(null, "用户名不能为空");
return;
}
if ("".equals(password)) {
JOptionPane.showMessageDialog(null, "密码不能为空");
return;
}
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String dt = sdf.format(new java.util.Date());
// 如果是管理员,可以直接使用账户登录
if (login_user_type == 0) {
if (ud.userLogin(login_user_type, storeUserName,
storeUserPassword)) {
dispose();
try {
UIManager.put("RootPane.setupButtonVisible", false);
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper
.launchBeautyEyeLNF();
// 在一键换肤纯色图后加上这一句
// BeautyEyeLNFHelper.frameBorderStyle =
// BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
// 实心的加上后面这一堆。
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground",
Boolean.FALSE);
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
// UIManager.put("RootPane.setupButtonVisible",
// false);
UIManager.put("TabbedPane.tabAreaInsets",
new InsetsUIResource(0, 0, 0, 0));
UIManager.put("TabbedPane.contentBorderInsets",
new InsetsUIResource(0, 0, 2, 0));
UIManager.put("TabbedPane.tabInsets",
new InsetsUIResource(3, 10, 9, 10));
Font frameTitleFont = (Font) UIManager
.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont
.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont",
frameTitleFont);
} catch (Exception e1) {
// TODO exception
}
MainFrame mf = new MainFrame();
mf.setVisible(true);
JOptionPane.showMessageDialog(null, "欢迎 " + user
+ "登陆!", "关于选修课程管理系统",
JOptionPane.INFORMATION_MESSAGE);
storeUserId = ud.getUserIdByUserName(storeUserName);
String log_operate = "[" + storeUserName + "]"
+ "管理员登陆系统";
DBConnection
.update("insert into c_log(login_user,log_operate,log_time) values('"
+ storeUserName
+ "','"
+ log_operate
+ "','" + dt + "')");
} else {
JOptionPane.showMessageDialog(null, "登录失败");
return;
}
// 教师登录
} else if (login_user_type == 1) {
if (ud.userLogin(login_user_type, storeUserName,
storeUserPassword)) {
dispose();
MainFrame mf = new MainFrame();
mf.setVisible(true);
JOptionPane.showMessageDialog(null, "欢迎 "
+ storeUserName + "号教师登陆!", "关于选修课程管理系统",
JOptionPane.INFORMATION_MESSAGE);
String log_operate = "[" + storeUserName + "]号教师"
+ "用户登陆系统";
DBConnection
.update("insert into c_log(login_user,log_operate,log_time) values('"
+ storeUserName
+ "','"
+ log_operate
+ "','" + dt + "')");
} else {
JOptionPane.showMessageDialog(null, "登录失败");
return;
}
} else if (login_user_type == 2) {
System.out.println("学生登录中");
System.out.println(login_user_type+","+storeUserName+","+storeUserPassword);
if (ud.userLogin(login_user_type, storeUserName,
storeUserPassword)) {
dispose();
MainFrame mf = new MainFrame();
mf.setVisible(true);
JOptionPane.showMessageDialog(null, "欢迎 " + user
+ "号学生登陆!", "关于选修课程管理系统",
JOptionPane.INFORMATION_MESSAGE);
String log_operate = "[" + storeUserName + "]"
+ "号学生登陆系统";
DBConnection
.update("insert into c_log(login_user,log_operate,log_time) values('"
+ storeUserName
+ "','"
+ log_operate
+ "','" + dt + "')");
} else {
JOptionPane.showMessageDialog(null, "登录失败");
return;
}
}
} else if (e.getSource() == jButton22) {
System.exit(0);
}
}
}
/**
* @param args
* @throws Exception
* @主函数
*/
public static void main(String[] args) throws Exception {
try {
UIManager.put("RootPane.setupButtonVisible", false);
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
} catch (Exception e) {
// TODO exception
}
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0, 0, 0,
0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,
0, 2, 0));
UIManager.put("TabbedPane.tabInsets",
new InsetsUIResource(3, 10, 9, 10));
Font frameTitleFont = (Font) UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
Login login = new Login(RELOAD);
login.setVisible(true);
}
public Login() {
super();
initialize();
}
public Login(boolean reload) {
super();
initialize();
new MusicDemo();// 背景音乐
}
} // @jve:decl-index=0:visual-constraint="10,10"
2.主界面布局:MainFrame.java
package com.code2life.student.manage.frame;
import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.swing.ImageIcon;
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.UIManager;
import javax.swing.plaf.InsetsUIResource;
import com.code2life.student.manage.util.About_syjc;
import com.code2life.student.manage.util.DBConnection;
import com.code2life.student.manage.util.DBInit;
import com.code2life.student.manage.util.Main;
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JMenu jMenu_start = null;
private JMenu jMenu_start2 = null;
private JMenuBar jJMenuBar = null;
private JMenuBar jJMenuBar2 = null;
private JMenu jMenu_backstage = null;
private JMenu jMenu_ccourse = null;
private JMenu jMenu_mark = null;
private JMenu jMenu_jdk = null;
private JMenu jMenu_help = null;
private JMenuItem jMenuItem_relogin = null;
public JMenuItem jMenuItem_initDB = null;
public JMenu jMenuItem_hf = null;
private JMenuItem jMenuItem_change_password = null;
public JMenuItem jMenuItem_user_manage = null;
private JMenuItem jMenuItem_hang_system = null;
private JMenuItem jMenuItem_exit = null;
private JMenuItem jMenuItem_student_manage = null;
private JMenuItem jMenuItem_teacher_manage = null;
private JMenuItem jMenuItem_course_manage = null;
private JMenuItem jMenuItem_grade_class = null;
private JMenuItem jMenuItem_class = null;
private JMenuItem jMenuItem_about = null;
private JMenuItem jMenuItem_else = null;
private JMenuItem jMenuItem_online_update = null;
private JMenuItem jm_item0=null;
private JMenuItem jm_item1=null;
private JMenuItem jm_item2=null;
private JMenuItem jm_item3=null;
private JMenuItem jm_item4=null;
private JMenuItem jMenuItem_sys_info = null;
public JMenuItem jMenuItem_operate_log = null;
private JMenuItem jMenuItem_ccourse = null;
private JMenuItem jMenuItem_ccourse_add = null;
private JMenuItem jMenuItem_mark_add = null;
private JMenuItem jMenuItem_bb = null;
private JMenuItem jMenuItem_mark_statistics = null;
private JMenuItem jMenuItem_jdk_bf = null;
private JMenuItem jMenuItem_jdk_hf = null;
private JLabel jLabel = null;
private JLabel jLabel1 = null;
private URL imgURL = null;
private URL imgURL1 = null;
private SystemTray sysTray = SystemTray.getSystemTray();
private int x,y;
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/com/code2life/student/manage/images/icon.png"));
private TrayIcon trayicon = new TrayIcon(image, "成绩管理系统", createMenu());
public MainFrame() {
super();
try
{
UIManager.put("RootPane.setupButtonVisible", false);
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
//在一键换肤纯色图后加上这一句
// BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
//实心的加上后面这一堆。
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
catch(Exception e)
{
//TODO exception
}
initialize(0);
initPrivilege();
}
private void initialize(int tt) {
// //this.setSize(800, 533);// 主界面大小
// //this.setSize(1350,755);
// this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setTitle("学生成绩管理系统 V1.0");
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/icon.png");
this.setIconImage(Toolkit.getDefaultToolkit().getImage(imgURL));
// this.setLocationRelativeTo(null);
// this.setResizable(false);
// this.setVisible(true);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension dimension = kit.getScreenSize();
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setBounds(0, 0, dimension.width, dimension.height);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setUndecorated(true);
this.setAlwaysOnTop(false);
this.setVisible(true);
this.addWindowListener(new WindowAdapter()// 系统关闭事件
{
public void windowClosing(WindowEvent e) {
SystemTrayInitial();//初始化托盘图标
}
});
jMenuItem_relogin = new JMenuItem();
jMenuItem_relogin.setText("重新登录");
jMenuItem_operate_log = new JMenuItem();
jMenuItem_operate_log.setText("操作日志");
jMenuItem_change_password = new JMenuItem();
jMenuItem_change_password.setText("修改密码");
jMenuItem_user_manage = new JMenuItem();
jMenuItem_user_manage.setText("用户管理");
jMenuItem_initDB = new JMenuItem();
jMenuItem_initDB.setText("初始化数据库");
jMenuItem_hf = new JMenu();
jMenuItem_hf.setText("一键换肤");
jMenuItem_hang_system = new JMenuItem();
jMenuItem_hang_system.setText("挂机");
jMenuItem_exit = new JMenuItem();
jMenuItem_exit.setText("退出");
jMenuItem_student_manage = new JMenuItem();
jMenuItem_student_manage.setText("学生信息管理");
jMenuItem_teacher_manage = new JMenuItem();
jMenuItem_teacher_manage.setText("教师信息管理");
jMenuItem_course_manage = new JMenuItem();
jMenuItem_course_manage.setText("课程信息管理");
jMenuItem_grade_class = new JMenuItem();
jMenuItem_grade_class.setText("年级信息管理");
jMenuItem_class = new JMenuItem();
jMenuItem_class.setText("班级信息管理");
jMenuItem_ccourse_add = new JMenuItem();
jMenuItem_ccourse_add.setText("选课录入");
jMenuItem_ccourse = new JMenuItem();
jMenuItem_ccourse.setText("选课总览");
jMenuItem_mark_add = new JMenuItem();
jMenuItem_mark_add.setText("成绩录入");
jMenuItem_mark_statistics = new JMenuItem();
jMenuItem_mark_statistics.setText("成绩统计");
jMenuItem_bb = new JMenuItem();
jMenuItem_bb.setText("报表操作");
jMenuItem_jdk_bf = new JMenuItem();
jMenuItem_jdk_bf.setText("数据库备份");
jMenuItem_jdk_hf = new JMenuItem();
jMenuItem_jdk_hf.setText("数据库恢复");
jMenuItem_about = new JMenuItem();
jMenuItem_about.setText("关于系统");
jMenuItem_sys_info = new JMenuItem();
jMenuItem_sys_info.setText("系统说明");
jMenuItem_else = new JMenuItem();
jMenuItem_else.setText("使用教程");
jMenuItem_online_update = new JMenuItem();
jMenuItem_online_update.setText("在线升级");
jMenu_start = new JMenu();
jMenu_start.setText("开始菜单");
jMenu_start.add(jMenuItem_relogin);
jMenu_start.add(jMenuItem_change_password);
jMenu_start.add(jMenuItem_user_manage);
jMenu_start.add(jMenuItem_operate_log);
jMenu_start.add(jMenuItem_hf);
jMenu_start.addSeparator();// 分割线
//
JMenuItem jm_item0=new JMenuItem("picture0");
JMenuItem jm_item1=new JMenuItem("picture1");
JMenuItem jm_item2=new JMenuItem("picture2");
JMenuItem jm_item3=new JMenuItem("picture3");
JMenuItem jm_item4=new JMenuItem("picture4");
jMenuItem_hf.add(jm_item0);
jMenuItem_hf.add(jm_item1);
jMenuItem_hf.add(jm_item2);
jMenuItem_hf.add(jm_item3);
jMenuItem_hf.add(jm_item4);
//JMenuBar jBar=new JMenuBar();
//jBar.add(jMenu);
//jMenuItem_hf.add(jMenu);
//jMenu_start.add(jMenuItem_hang_system);
jMenu_start.add(jMenuItem_exit);
jMenu_backstage = new JMenu();
jMenu_backstage .setText("后台管理");
jMenu_backstage .add(jMenuItem_student_manage);
jMenu_backstage .add(jMenuItem_teacher_manage);
jMenu_backstage .add(jMenuItem_course_manage);
jMenu_backstage .add(jMenuItem_grade_class);
jMenu_backstage .add(jMenuItem_class);
jMenu_backstage.setForeground(Color.magenta);
jMenu_ccourse = new JMenu();
jMenu_ccourse.setText("选课情况");
jMenu_ccourse.add(jMenuItem_ccourse_add);
jMenu_ccourse.add(jMenuItem_ccourse);
jMenu_ccourse.setForeground(Color.orange);
jMenu_mark = new JMenu();
jMenu_mark.setText("成绩管理");
jMenu_mark.add(jMenuItem_mark_add);
jMenu_mark.add(jMenuItem_mark_statistics);
jMenu_mark.add(jMenuItem_bb);
//jMenu_mark.setFont(new Font("宋体",Font.PLAIN,16));
jMenu_mark.setForeground(Color.blue);
jMenu_jdk = new JMenu();
jMenu_jdk.setText("数据库管理");
jMenu_jdk.add(jMenuItem_initDB);
jMenu_jdk.add(jMenuItem_jdk_bf);
jMenu_jdk.add(jMenuItem_jdk_hf);
jMenu_jdk.setForeground(Color.green);
jMenu_help = new JMenu();
jMenu_help.setText("帮助");
jMenu_help.add(jMenuItem_about);
jMenu_help.add(jMenuItem_sys_info);
jMenu_help.add(jMenuItem_else);
//jMenu_help.add(jMenuItem_online_update);
jJMenuBar = new JMenuBar();
jJMenuBar.setPreferredSize(new Dimension(10, 25));
jJMenuBar.add(jMenu_start);
jJMenuBar.add(jMenu_backstage );
jJMenuBar.add(jMenu_ccourse);
jJMenuBar.add(jMenu_mark);
jJMenuBar.add(jMenu_jdk);
jJMenuBar.add(jMenu_help);
//jJMenuBar.setForeground(Color.red);
jJMenuBar.setBackground(Color.getHSBColor(192,220,243));
setJMenuBar(jJMenuBar);
jLabel = new JLabel();
//jLabel.setText("JLabel");
//jLabel.setBounds(new Rectangle(1, -2, 1600, 768));
x=dimension.width;
y=dimension.height;
jLabel.setBounds(0, 0, dimension.width, dimension.height);
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/main.jpg");
jLabel.setIcon(new ImageIcon(imgURL));
jContentPane = new JPanel();
//jContentPane.add(jLabel1, null);
jContentPane.setLayout(null);
jContentPane.add(jLabel, null);
setContentPane(jContentPane);
btnListener btn = new btnListener();
jMenuItem_relogin.addActionListener(btn);
jMenuItem_change_password.addActionListener(btn);
jMenuItem_user_manage.addActionListener(btn);
jMenuItem_initDB.addActionListener(btn);
jMenuItem_operate_log.addActionListener(btn);
jMenuItem_hang_system.addActionListener(btn);
jMenuItem_exit.addActionListener(btn);
jMenuItem_student_manage.addActionListener(btn);
jMenuItem_teacher_manage.addActionListener(btn);
jMenuItem_course_manage.addActionListener(btn);
jMenuItem_grade_class.addActionListener(btn);
jMenuItem_class.addActionListener(btn);
jMenuItem_ccourse_add.addActionListener(btn);
jMenuItem_about.addActionListener(btn);
jMenuItem_else.addActionListener(btn);
jMenuItem_mark_add.addActionListener(btn);
jMenuItem_mark_statistics.addActionListener(btn);
jMenuItem_bb.addActionListener(btn);
jMenuItem_jdk_bf.addActionListener(btn);
jMenuItem_jdk_hf.addActionListener(btn);
jMenuItem_ccourse.addActionListener(btn);
jMenuItem_sys_info.addActionListener(btn);
jm_item0.addActionListener(btn);
jm_item1.addActionListener(btn);
jm_item2.addActionListener(btn);
jm_item3.addActionListener(btn);
jm_item4.addActionListener(btn);
jm_item0.setActionCommand("000");
jm_item1.setActionCommand("111");
jm_item2.setActionCommand("222");
jm_item3.setActionCommand("333");
jm_item4.setActionCommand("444");
}
/**
* @初始化托盘
*/
private void SystemTrayInitial() { // 托盘
if (!SystemTray.isSupported()) // 判断当前系统是否支持系统栏
return;
try {
sysTray.add(trayicon);
} catch (AWTException e1) {
e1.printStackTrace();
}
setVisible(false);
trayicon.displayMessage("选课管理系统--By axuhongbo and his friends", "选课管理系统", MessageType.INFO);// 窗体托盘时所显示的消息对话
trayicon.addActionListener(new ActionListener()// 击图标时显示窗体
{
public void actionPerformed(ActionEvent e) {
sysTray.remove(trayicon);
setVisible(true);
}
});
}
/**
* @初始化托盘右键
* @return
*/
private PopupMenu createMenu() { // 创建系统栏菜单的方法
PopupMenu menu = new PopupMenu();
MenuItem exitItem = new MenuItem("退出本系统");
exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
MenuItem openItem = new MenuItem("打开主窗口");
openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
public void actionPerformed(ActionEvent e) {
if (!isVisible()) {
setVisible(true);
sysTray.remove(trayicon);
}
}
});
MenuItem viewItem = new MenuItem("你好");
viewItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
public void actionPerformed(ActionEvent e) {
try {
Runtime.getRuntime().exec("explorer http://axuhongbo.top");
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
menu.add(openItem);
menu.add(viewItem);
menu.addSeparator();
menu.add(exitItem);
return menu;
}
public void initPrivilege(){
if(Login.login_user_type==1){
jMenuItem_change_password.setEnabled(false);
jMenuItem_operate_log.setEnabled(false);
jMenuItem_initDB.setEnabled(false);
jMenuItem_user_manage.setEnabled(false);
jMenu_backstage .setEnabled(false);
jMenu_jdk.setEnabled(false);
}else if(Login.login_user_type==0){
}else if(Login.login_user_type==2){
jMenuItem_change_password.setEnabled(true);
jMenuItem_operate_log.setEnabled(false);
jMenuItem_initDB.setEnabled(false);
jMenuItem_user_manage.setEnabled(false);
jMenuItem_sys_info.setEnabled(false);
jMenu_mark.setEnabled(false);
jMenu_backstage .setEnabled(false);
jMenu_jdk.setEnabled(false);
}else{
jMenuItem_change_password.setEnabled(false);
jMenuItem_operate_log.setEnabled(false);
jMenuItem_initDB.setEnabled(false);
jMenuItem_user_manage.setEnabled(false);
jMenuItem_sys_info.setEnabled(false);
jMenu_mark.setEnabled(false);
jMenu_backstage .setEnabled(false);
jMenu_jdk.setEnabled(false);
}
}
public class btnListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jMenuItem_relogin) {
dispose();
Login login = new Login();// 调用无参数构造方法,避免音乐重复播放
login.setVisible(true);
} else if (e.getSource() == jMenuItem_change_password) {
// if(Login.login_user_type!=0)
// {JOptionPane.showMessageDialog(null, "对不起,非后台管理员暂不提供修改密码功能");
// return;
// }
UserChangePassword cp = new UserChangePassword();
cp.setVisible(true);
} else if (e.getSource() == jMenuItem_user_manage) {
UserManage um = new UserManage();
um.setVisible(true);
} else if (e.getSource() == jMenuItem_operate_log) {
LogManage lm = new LogManage();
lm.setVisible(true);
}
else if (e.getActionCommand().equals("000")) {
jLabel.setBounds(0, 0, x, y);
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/main.jpg");
jLabel.setIcon(new ImageIcon(imgURL));
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
catch(Exception ee)
{
//TODO exception
}
}
else if (e.getActionCommand().equals("111")) {
jLabel.setBounds(0, 0, x, y);
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/main1.jpg");
jLabel.setIcon(new ImageIcon(imgURL));
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
catch(Exception ee)
{
//TODO exception
}
}
else if (e.getActionCommand().equals("222")) {
jLabel.setBounds(0, 0, x, y);
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/main2.jpg");
jLabel.setIcon(new ImageIcon(imgURL));
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
try {
BeautyEyeLNFHelper.launchBeautyEyeLNF();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
else if (e.getActionCommand().equals("333")) {
jLabel.setBounds(0, 0, x, y);
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/main3.jpg");
jLabel.setIcon(new ImageIcon(imgURL));
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
catch(Exception ee)
{
//TODO exception
}
}
else if (e.getActionCommand().equals("444")) {
jLabel.setBounds(0, 0, x, y);
imgURL = this.getClass().getResource("/com/code2life/student/manage/images/main4.jpg");
jLabel.setIcon(new ImageIcon(imgURL));
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
try {
BeautyEyeLNFHelper.launchBeautyEyeLNF();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
else if (e.getSource() == jMenuItem_hang_system) {
DBConnection.update(Login.storeUserName + " 执行挂机操作!");
JOptionPane.showMessageDialog(null, "暂未考虑加入挂机功能!");
} else if (e.getSource() == jMenuItem_initDB) {
DBInit di = new DBInit();
di.setVisible(true);
} else if (e.getSource() == jMenuItem_exit) {
System.exit(0);
} else if (e.getSource() == jMenuItem_student_manage) {
StudentManage sm = new StudentManage();
sm.setVisible(true);
} else if (e.getSource() == jMenuItem_teacher_manage) {
TeacherManage tm = new TeacherManage();
tm.setVisible(true);
}else if (e.getSource() == jMenuItem_grade_class) {
//JOptionPane.showMessageDialog(null, "功能优化中...敬请期待!");
GradeManage gm = new GradeManage();
gm.setVisible(true);
} else if(e.getSource() == jMenuItem_class){
ClassManage cm= new ClassManage();
cm.setVisible(true);
//JOptionPane.showMessageDialog(null, "功能优化中...敬请期待!");
}else if (e.getSource() == jMenuItem_course_manage) {
CourseManage cm = new CourseManage();
cm.setVisible(true);
} else if (e.getSource() == jMenuItem_ccourse_add) {
CCourseAdd cm = new CCourseAdd();
cm.setVisible(true);
} else if (e.getSource() == jMenuItem_ccourse) {
CCourseManage cci = new CCourseManage();
cci.setVisible(true);
}else if (e.getSource() == jMenuItem_mark_add) {
CCourseMarkAdd ccma = new CCourseMarkAdd();
ccma.setVisible(true);
}else if (e.getSource() == jMenuItem_mark_statistics) {
CCourseMarkStatistic ccs = new CCourseMarkStatistic();
ccs.setVisible(true);
}
else if (e.getSource() == jMenuItem_bb) {
CCourse_bb ds = new CCourse_bb();
ds.setVisible(true);
}
else if (e.getSource() == jMenuItem_jdk_bf) {
try {
Main sjk = new Main(1);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//ffff.setVisible(true);
}
else if (e.getSource() == jMenuItem_jdk_hf) {
try {
Main ffff = new Main(2);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else if (e.getSource() == jMenuItem_about) {
About ab = new About();
ab.setVisible(true);
}
else if(e.getSource() == jMenuItem_else)
{
About_syjc abs= new About_syjc();
abs.setVisible(true);
}
// else if (e.getSource() == jMenuItem_else) {
// About ab = new About();
// ab.setVisible(true);
// }
else if (e.getSource() == jMenuItem_sys_info) {
try {
String fp = System.getProperty("user.dir") + "\\readme.txt";
File f = new File(fp);
if (f.exists()) {
Runtime.getRuntime().exec(" notepad.exe " + fp);
} else {
JOptionPane.showMessageDialog(null, "http://www.code2life.wang/stu/");
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
public static void main(String[] args) {
try
{
UIManager.put("RootPane.setupButtonVisible", false);
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
//在一键换肤纯色图后加上这一句
// BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
//实心的加上后面这一堆。
BeautyEyeLNFHelper.translucencyAtFrameInactive = false;
UIManager.put("ToolBar.isPaintPlainBackground", Boolean.FALSE);
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
BeautyEyeLNFHelper.launchBeautyEyeLNF();
// UIManager.put("RootPane.setupButtonVisible", false);
UIManager.put("TabbedPane.tabAreaInsets", new InsetsUIResource(0,0,0,0));
UIManager.put("TabbedPane.contentBorderInsets", new InsetsUIResource(0,0,2,0));
UIManager.put("TabbedPane.tabInsets", new InsetsUIResource(3,10,9,10));
Font frameTitleFont = (Font)UIManager.get("InternalFrame.titleFont");
frameTitleFont = frameTitleFont.deriveFont(Font.PLAIN);
UIManager.put("InternalFrame.titleFont", frameTitleFont);
}
catch(Exception e)
{
//TODO exception
}
MainFrame login = new MainFrame();
login.setVisible(true);
}
}
3.用户管理dao: UserDao.java
package com.code2life.student.manage.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.code2life.student.manage.model.UserModel;
import com.code2life.student.manage.util.DBConnection;
public class UserDao {
/**
* 用户登录login_user_type 为0表示管理,为1表示教师,为2表示学生
* @param login_user_type
* @param user_name ,如果是学生,使用id登录
* @param password
* @return
*/
public boolean userLogin(int login_user_type,String user_name,String password){
String sql = "";
switch(login_user_type){
case 0:
//管理员登录
sql = "select * from c_user where user_name='" + user_name+ "' and user_password='" + password + "'";
break;
case 1:
//教师登录
sql = "select * from c_teacher where teach_id=" + user_name+ " and teach_password='" + password + "'";
break;
case 2:
//学生使用id登录
// sql = "select * from c_student where stu_id=" + user_name+ " and stu_password='" + password + "'";
sql = "select * from c_student where stu_name='" + user_name+ "' and stu_password='" + password + "'";
System.out.println(sql);
break;
}
try {
ResultSet rs = DBConnection.query(sql);
if(rs.next())
{
rs.close();
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public List<UserModel> getLists(boolean option,int teach_id){
List<UserModel> lists = new ArrayList<UserModel>();
String sql = "";
if(option){
sql = "select * from c_user where user_id="+teach_id;
}else
{sql = "select * from c_user";
}
ResultSet rs = DBConnection.query(sql);
try {
while(rs.next()){
UserModel um = new UserModel();
um.setUser_id(rs.getInt("user_id"));
um.setUser_name(rs.getString("user_name"));
um.setUser_login_ip(rs.getString("user_login_ip"));
um.setUser_login_time(rs.getString("user_login_time"));
um.setUser_password(rs.getString("user_password"));
um.setUser_privilege(rs.getString("user_privilege"));
lists.add(um);
}rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return lists;
}
/**
* @删除用户
* @param user_id
* @return
*/
public boolean deleteListByUserId(int user_id){
String sql ="delete from c_user where user_id="+user_id;
return (DBConnection.update(sql))?true:false;
}
/**
* @添加用户
* @param user_name
* @param user_password
* @param user_privilege
* @return
*/
public boolean addUser(String user_name,String user_password,String user_privilege){
String sql = "insert into c_user(user_name,user_password,user_privilege) values('"+user_name+"','"+user_password+"','"+user_privilege+"')";
return DBConnection.update(sql)==true?true:false;
}
/**
* @修改用户
* @param user_name
* @param user_password
* @param user_privilege
* @return
*/
public boolean modifyUser(String user_name,String user_password,String user_privilege){
String sql = "update c_user set user_name='"+user_name+"',user_password='"+user_password+"',user_privilege='"+user_privilege+"'";
return DBConnection.update(sql)==true?true:false;
}
/**
* @修改密码
* @param option 值为0表示修改管理员,1修改老师,2修改学生
* @param name_or_id 学生或管理员id
* @param old_password
* @param new_password
* @return
*/
public boolean changeUserPassword(int option,String name_or_id,String old_password,String new_password){
String sql = "";
if(option==0){
sql = "update c_user set user_password = '"+new_password+"' where user_name ='"+name_or_id+"' and user_password='"+old_password+"'";
}else if(option==2)
{sql = "update c_student set student_password='"+new_password+"' where student_id="+name_or_id;
}
return DBConnection.update(sql)==true?true:false;
}
/**
* @检查用户是否重名
* @param user_name
* @return 返回true 表示存在重名
*/
public boolean isExist(String user_name){
String sql = "select * from c_user where user_name='"+user_name+"'";
ResultSet rs = DBConnection.query(sql);
try {
if(rs.next()){
rs.close();
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* @根据用户名找出id
* @param user_name
* @return
*/
public int getUserIdByUserName(String user_name){
int user_id=0;
String sql = "select user_id from c_user where user_name='"+user_name+"'";
ResultSet rs = DBConnection.query(sql);
try {
if(rs.next()){
user_id = rs.getInt("user_id");
}
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user_id;
}
}
其他模块dao与这个逻辑都差不多的,模仿写既可
4.数据库连接辅助类:DbHelper.java
package com.code2life.javen.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBhepler {
/*String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://127.0.0.1;DatabaseName=Mobile";*/
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/studentmanager?useUnicode=true&characterEncoding=utf-8";
Connection con = null;
ResultSet res = null;
public void DataBase() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url, "root", "");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.err.println("装载 JDBC/ODBC 驱动程序失败。");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.err.println("无法连接数据库");
e.printStackTrace();
}
}
// 查询
public ResultSet Search(String sql, String str[]) {
DataBase();
try {
PreparedStatement pst = con.prepareStatement(sql);
if (str != null) {
for (int i = 0; i < str.length; i++) {
pst.setString(i + 1, str[i]);
}
}
res = pst.executeQuery();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
// 增删修改
public int AddU(String sql, String str[]) {
int a = 0;
DataBase();
try {
PreparedStatement pst = con.prepareStatement(sql);
if (str != null) {
for (int i = 0; i < str.length; i++) {
pst.setString(i + 1, str[i]);
}
}
a = pst.executeUpdate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a;
}
}
5.学生实体类封装:StuEntity.java
public class StuEntity {
private int id;
private String name;
private String sex;
private int num;
public StuEntity() {
}
public StuEntity(int id, String name, String sex, int num) {
this.id = id;
this.name = name;
this.sex = sex;
this.num = num;
}
@Override
public String toString() {
return "StuEntity [id=" + id + ", name=" + name + ", sex=" + sex
+ ", num=" + num + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
6.其他就是存放图片、报表、声音等的文件啦,代码的结构大概是这样子
写在最后
这个系统耗费心血较大,功能点也比较多,可能有点小bug,但是基本的功能都可以完美使用。