学生信息管理系统(Swing+MySQL实现)

前言:取其精华,去其糟粕;海边拾贝,只取阳光下最耀眼的贝壳。 

MySQL安装

数据库图形化工具navicat安装  

学生信息管理系统完整源代码(包含数据库文件) 

tips:如没有安装MySQL,请先安装MySQL,navicat非必须安装,但建议安装,这样可以快速建好数据库


 

一、项目设计基本流程

二、系统效果预览

三、代码分析

四、总结


一、项目设计基本流程

1、项目总体设计

2、系统需求分析

3、数据库分析

4、模块分析


  • 项目总体设计
    • 学生信息管理系统有学生,老师,系统管理员三种权限,提供三种身份登录系统。学生、老师使用管理员提供的账号密码进行登录,登录系统后可补全,修改、查看信息。老师可查看学生信息,成绩。系统管理员,运行和维护系统,可以管理、添加,修改,删除管理员,学生,老师等信息。
    • 系统设置一个主窗口,将主窗口的面板设置为卡片布局,设计一个接口,通过接口让内容面板和主窗口面板联系起来,实现每个面板添加到主窗口的面板上的标准。通过面板的转换来实现窗口内容的转换,。我们将设计好的一个个内容面板添加到主窗口的面板上,指定名称,之后便可以指定名称来指定主窗口要显示的内容面板。信息查询结果通过弹出的对话框来显示。
  • 系统需求分析
    • 系统管理员
      • 添加、更新、删除系统管理员、学生、老师等信息
      • 添加、查看成绩
      • 开设、查看课程
    • 老师
      • 使用系统提供的账号密码进行登录
      • 修改信息
      • 查看学生成绩、课程
    • 学生
      • 使用系统提供的账号密码进行登录
      • 修改信息
      • 查看个人信息、成绩、课程
  • 数据库分析
    • 管理员信信息表
    • 老师信息表
    • 学生信息表
    • 课程表(可分专业有不同的表)
    • 成绩表(可分专业有不同的表)
  • 模块分析
    • 登录模块
    • 添加模块
    • 查找模块
    • 更新模块
    • 删除模块

二、系统效果预览

登录界面

管理员导航界面

添加管理员信息界面

查看管理员信息界面 

学生信息界面

查询界面 

查寻学生成绩界面

 学生成绩信息

教师登陆界面

学生个人登录界面

三、代码分析 

tips:篇幅有限,仅以管理员为例进行分析,完整源代码在文章上面。

创建数据库和导入数据表

前提:安装了MySQL和navicat,若没有安装有MySQL或navicat,看前面的连接安装教程,先安装MySQL和navicat 

导入数据表。打开navicat然后打开连接,连接好MySQL服务器。 

右键连接名新建一个数据库:数据库名称一定要和程序中的数据名称一样!!!这里数据名称为db_studentmis

 建好数据库后,点击左上角的文件,然后选择打开外部文件,点击查询,在弹出的窗口中选择源代码文件夹中的db_studentmis数据库文件。

 

设置运行的左侧指定的数据库为建好的db_stduentmis点击运行即可,然后查看数据库下的表,出现多个表即完成数据库部分的准备。

数据库分析

管理员数据表结构:管理员信息表设九个字段 ,主键为id。(具体文件在源代码文件夹中)。

DROP TABLE IF EXISTS `tb_manager`;
CREATE TABLE `tb_manager`  (`id` int NOT NULL AUTO_INCREMENT,`number` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`account` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`password` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`phone` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`mail` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`address` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`remark` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

数据库操作

jdbc连接数据库,根据自己的情况设置url、用户名、密码。

/*** 连接数据库* @author 魔宇**/
public class SqlConnection {//连接地址、用户名、密码private static final String url="jdbc:mysql://localhost/db_studentmis";private static final String name="root";private static final String password="123456";private static Connection connection;public static Connection getConnection() {try {//加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//获取数据库连接connection=DriverManager.getConnection(url,name,password);} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println(e.getMessage());} catch (SQLException e) {e.printStackTrace();System.out.println(e.getMessage());}return connection;}
}

数据库查询管理员信息:每一行就是一个管理员的信息,将每一行信息都封装进一个管理员对象,在使用ArrayList来存放管理员对象

/*** 数据库管理员表中查询信息* 将查询结果放入ArrayList中,方便操作* 返回一个ArrayList* @param sql* @return*/public static ArrayList queryManager(String sql){Statement state=null;ResultSet result=null;Manager manager=null;ArrayList managerList=new ArrayList();try {//连接数据库,创建查询state=SqlConnection.getConnection().createStatement();result=state.executeQuery(sql);//遍历查询结果,每一行每一行的遍历,先使用管理员类封装再放入ArrayList中while(result.next()) {manager=new Manager();//通过字段名称获取对应信息manager.setNumber(result.getString("number"));manager.setName(result.getString("name"));manager.setAccount(result.getString("account"));manager.setPassword(result.getString("password"));manager.setPhone(result.getString("phone"));manager.setMail(result.getString("mail"));manager.setAddress(result.getString("address"));manager.setRemark(result.getString("remark"));managerList.add(manager);}} catch (SQLException e) {e.printStackTrace();}finally {if(state!=null) {try {state.close();} catch (SQLException e) {e.printStackTrace();}}}return managerList;}

数据库更新管理员信息:将表中变动的数据行中各个值重新设置。

/*** 数据库管理员表更新* @param manager* @return*/public static int updateManager(Manager manager) {PreparedStatement prepare=null;int i=0;String sql="update tb_manager set number=?,name=?,account=?,password=?,phone=?,mail=?,address=?,"+ "remark=? where number=?";try {prepare=SqlConnection.getConnection().prepareStatement(sql);prepare.setString(1,manager.getNumber());prepare.setString(2,manager.getName());prepare.setString(3,manager.getAccount());prepare.setString(4,manager.getPassword());prepare.setString(5,manager.getPhone());prepare.setString(6,manager.getMail());prepare.setString(7,manager.getAddress());prepare.setString(8,manager.getRemark());prepare.setString(9,manager.getNumber());//执行操作i=prepare.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {if(prepare!=null) {try {prepare.close();} catch (SQLException e) {e.printStackTrace();}}}return i;}

数据库添加管理员信息

​
/*** 数据库管理员表中插入数据* @param manager* @return*/public static int saveManager(Manager manager) {PreparedStatement prepare=null;//用于标识操作是否成功int i=0;try {String sql="insert into tb_manager values(?,?,?,?,?,?,?,?,?)";prepare=SqlConnection.getConnection().prepareStatement(sql);//在设置表结构时,id字段为自动增长prepare.setObject(1,null);prepare.setString(2,manager.getNumber());prepare.setString(3,manager.getName());prepare.setString(4,manager.getAccount());prepare.setString(5,manager.getPassword());prepare.setString(6,manager.getPhone());prepare.setString(7,manager.getMail());prepare.setString(8,manager.getAddress());prepare.setString(9,manager.getRemark());i=prepare.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {//关闭if(prepare!=null) {try {prepare.close();} catch (SQLException e) {e.printStackTrace();}}}return i;}​

数据库管理员表删除信息:指定数据行删除

/*** 数据库管理员表删除记录* @param number* @return*/public static int deleteManager(String number) {String sql="delete from tb_manager where number="+"'"+number+"'";Statement state=null;int i=0;try {state=SqlConnection.getConnection().createStatement();//执行操作i=state.executeUpdate(sql);} catch (SQLException e) {e.printStackTrace();}finally {if(state!=null) {try {state.close();} catch (SQLException e) {e.printStackTrace();}}}return i;}

模块分析

登录模块:系统提供三种登录身份,根据不同身份登入系统,获取不同的操作界面和操作权限。用户先根据自己情况选定身份,然后通过账号密码验证登陆系统。登录模块使用到了简单工厂模式,先设计一个用户接口,用来制定一个标准(方法),即验证登录,每一个用户都必须进行验证登录;因为有三种不同的用户类型,每一种类型验证信息都有一些不同,所以再设计三个不同的用户类型的实现类,实现类继承用户接口,各自具体实现登录验证;设计一个工厂,用来生产三种类型的对象,并将对象上转型为用户接口引用,作为返回值。

tips:设计之初因为将三种用户的登录信息分别放在了三个表。

设计一个登录用户类:用来封装登录信息

​
public class User {//用户类型String user;//账号密码String account;String password;CardLayout card=new CardLayout();JPanel pane=new JPanel(card);public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public JPanel getPane() {return pane;}public void setPane(JPanel pane) {this.pane = pane;}public CardLayout getCard() {return card;}public void setCard(CardLayout card) {this.card = card;}
}​

设计一个用户接口,制定用户账号密码验证的标准,每一种用户都必须实现

/*** 工厂模式:接口* 通用登录用户*/
public interface UserLogin {//进行用户账号密码验证public void LoginCheck();
}

设计具体用户实现类,实现类继承的登录用户类和用户接口

管理员实现类

/*** 管理员实现类* 继承接口,具体实现登录验证*/
public class ManagerLogin extends User implements UserLogin{@Overridepublic void LoginCheck() {//sql原先设置为实例变量,结果因为account也是实例变量且未初始化,所以sql为空。同是实例成员,且都没有初始化,实例成员不要相互调用String sql="select*from tb_manager where account="+"'"+account+"'";if(!account.equals("")&&!password.equals("")) {try {//连接数据库Statement state=SqlConnection.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//查询结果ResultSet result=state.executeQuery(sql);if(result.next()) {//验证密码if(result.getString("password").equals(password)) {card.show(pane,"navigation");}else {JOptionPane.showMessageDialog(null,"密码不正确,请重新输入");}}else{JOptionPane.showMessageDialog(null,"请检查用户名是否正确");}} catch (SQLException e1) {e1.printStackTrace();}}else {JOptionPane.showMessageDialog(null,"用户名或密码为空","错误",JOptionPane.ERROR_MESSAGE,null);}}
}

设计一个工厂类,提供方法生产各个登陆用户对象,在方法里根据信息,判断登录用户是哪一种类型(简单工厂模式)

/*** 工厂:因为已经知道有三种用户,所以使用简单工厂* 简单工厂(相关生产事务信息因在方法参数列表里)* 负责生产接口引用(方法)多态:上转型* 具体实现还是交由实现类*/
public class UserFactory implements Layout{CardLayout card=new CardLayout();JPanel pane=new JPanel(card);//传入信息public UserLogin createUser(String user,String account,String password) {if(user.equals("系统管理员")) {//创建对象,具体类再方法里创建ManagerLogin manager=new ManagerLogin();manager.setPane(pane);manager.setCard(card);manager.setAccount(account);manager.setPassword(password);return manager;}else if(user.equals("教师")) {TeacherLogin teacher=new TeacherLogin();teacher.setPane(pane);teacher.setCard(card);teacher.setAccount(account);teacher.setPassword(password);return teacher;}else if(user.equals("学生")) {StudentLogin student=new StudentLogin();student.setPane(pane);student.setCard(card);student.setAccount(account);student.setPassword(password);return student;}return null;}@Overridepublic void setPane(JPanel pane) {this.pane=pane;}@Overridepublic void setcard(CardLayout card) {this.card=card;}
}

具体实现登录

​//登录login_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取输入的账号和密码String account=name_text.getText();String password=new String(password_text.getPassword());//创建登录工厂UserFactory factory=new UserFactory();factory.setPane(pane);factory.setcard(card);//获取登录用户的对象,并上转型为接口引用。item_type:登录用户类型UserLogin user=factory.createUser(item_type, account, password);/*** 典型多态* 工厂模式,使客户端,即使用功能的类中,代码变得简洁,不必考虑是那一种用户类                                                                                                            * 型进行登录 而把繁杂的代码实现交给了其他类(具体实现类、工厂类)* */user.LoginCheck();//进行登录验证name_text.setText("");password_text.setText("");}});​

添加模块,更新模块、删除模块、更新模块

使用工厂方式模式生产表格

创建一个接口,使其实现统一标准,即都可以创建和更新

/*** 工厂方法模式:需要创建和更新各种各样的表,所以使用工厂方法模式* @author 魔宇**/
public interface UserTable {//从数据库中查询信息后,使其在窗口中以表格呈现public JTable createTable();//对信息更改后进行更新操作public void plushTable(JTable table);}

管理员表具体实现类:实现表的创建和表的更新

/*** 管理员信息表格实现类* 创建和更新* @author 魔宇*/
public class ManagerTable implements UserTable{/*** 返回一个表格模型*/@Overridepublic JTable createTable() {String sql="select*from tb_manager";JTable table=new JTable();//表格模型:用来操作数据DefaultTableModel tableModel=new DefaultTableModel();//从数据库中查询出信息ArrayList managerList=SqlOperation.queryManager(sql);//表头Object[] column= {"管理编号","姓名","账号","密码","电话号码","电子邮箱","地址","备注"};Object[]rowData=new Object[column.length];table=new JTable();table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);table.getTableHeader().setReorderingAllowed(false);table.setEnabled(false);tableModel=(DefaultTableModel)table.getModel();tableModel.setRowCount(0);tableModel.setColumnIdentifiers(column);//将信息填入表格模型for(Manager manager:managerList) {rowData[0]=manager.getNumber();rowData[1]=manager.getName();rowData[2]=manager.getAccount();rowData[3]=manager.getPassword();rowData[4]=manager.getPhone();rowData[5]=manager.getMail();rowData[6]=manager.getAddress();rowData[7]=manager.getRemark();tableModel.addRow(rowData);}//应用表格模型table.setModel(tableModel);return table;}/*** 更新表格:改变表格模型中的数据,在将模型应用到表格中*/@Overridepublic void plushTable(JTable table) {//获取原表格的表格模型DefaultTableModel newTableModel=(DefaultTableModel) table.getModel();String sql="select*from tb_manager";//再次获取数据库中的信息ArrayList managerList=SqlOperation.queryManager(sql);Object[] column= {"管理编号","姓名","账号","密码","电话号码","电子邮箱","地址","备注"};Object[][] rowData=new Object[managerList.size()][column.length];int i=0;//将信息填入表格模型for(Manager manager:managerList) {rowData[i][0]=manager.getNumber();rowData[i][1]=manager.getName();rowData[i][2]=manager.getAccount();rowData[i][3]=manager.getPassword();rowData[i][4]=manager.getPhone();rowData[i][5]=manager.getMail();rowData[i][6]=manager.getAddress();rowData[i][7]=manager.getRemark();i++;}//更新表格模型数据newTableModel.setDataVector(rowData,column);//更新表格组件table.updateUI();}
}

表格工厂接口

/*** 工厂接口* @author 魔宇**/
public interface TableFactoryAbstract {//返回一个操作表类型public UserTable createUserTable();}

生产管理员表的具体工厂:生产管理员信息表格对象

/*** 管理员表的具体工厂* @author 魔宇**/
public class ManagerTableFactory implements TableFactoryAbstract{@Overridepublic UserTable createUserTable() {//创建一个管理员表的具体对象return new ManagerTable();}}

应用工厂方式模式进行生成表:先创建工厂对象,上转型为工厂接口,通过接口引用调用方法(统一标准),完成创建信息表格。通过接口引用调用方法刷新更新表格。

/*** 管理员信息界面* @author 魔宇**/
public class ManagerMessage implements Layout{CardLayout card=new CardLayout();JPanel pane=new JPanel(card);//获取工厂TableFactoryAbstract factory=new ManagerTableFactory();//生产表格UserTable userTable=factory.createUserTable();JTable table=userTable.createTable();public JPanel managerMessagePane() {//将表格添加到滚动面板中JScrollPane srollPane=new JScrollPane(table);JPanel panel=new JPanel(new BorderLayout());panel.add(srollPane,BorderLayout.CENTER);JPanel button_pane=new JPanel();JButton revise_button=new JButton("修改");JButton keep_button=new JButton("编辑");JButton remove_button=new JButton("删除");JButton lookup_button=new JButton("查找");JButton return_button=new JButton("返回");revise_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {table.setEnabled(true);}});/*** 被表格监听器弄心态崩了,监听器与表格更新冲突,原本好好的,* 突然就各种问题,不开心,所以现在把它给灭了,改为使用对话框进行数据具体修改*/keep_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int selectRow=table.getSelectedRow();if(selectRow>=0) {Manager manager=new Manager();manager.setNumber((String)table.getValueAt(selectRow,0));manager.setName((String)table.getValueAt(selectRow,1));manager.setAccount((String)table.getValueAt(selectRow,2));manager.setPassword((String)table.getValueAt(selectRow,3));manager.setPhone((String)table.getValueAt(selectRow,4));manager.setAddress((String)table.getValueAt(selectRow,5));manager.setMail((String)table.getValueAt(selectRow,6));manager.setRemark((String)table.getValueAt(selectRow,7));//对话框,在对话框中的可以修改信息LookupResultManager lookupResult=new LookupResultManager();lookupResult.setTable(table);lookupResult.add(lookupResult.checkResultPanel(manager));lookupResult.setVisible(true);}else {JOptionPane.showMessageDialog(pane,"请先选择编辑行");}}});remove_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int rowSelect=table.getSelectedRow();if(rowSelect>=0) {int order=JOptionPane.showConfirmDialog(pane,"是否删除","提示",JOptionPane.OK_CANCEL_OPTION);if(order==JOptionPane.OK_OPTION) {SqlOperation.deleteManager((String)table.getModel().getValueAt(rowSelect,0));//更新表格,不再需要知道要更新数据库中的那个表userTable.plushTable(table);}}else {JOptionPane.showMessageDialog(pane,"请先选择数据行");}}});return_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {table.setEnabled(false);card.show(pane,"navigation");}});lookup_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {LookupDialogManager lookup=new LookupDialogManager();lookup.setTable(table);lookup.setVisible(true);}});button_pane.add(revise_button);button_pane.add(keep_button);button_pane.add(remove_button);button_pane.add(lookup_button);button_pane.add(return_button);panel.add(button_pane,BorderLayout.SOUTH);return panel;}@Overridepublic void setPane(JPanel pane) {this.pane=pane;}@Overridepublic void setcard(CardLayout card) {this.card=card;}
}

管理员查找对话框:通过指定信息在数据库查找到信息,将信息封装进管理员对象中,作为参数传入方法中。

/*** 对话框:查找管理员信息结果* @author 魔宇**/
@SuppressWarnings("serial")
public class LookupResultManager extends JDialog implements Layout{CardLayout card=new CardLayout();JPanel pane=new JPanel(card);JTable table=new JTable();public LookupResultManager() {setTitle("查询结果");setSize(400,400);setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);setLocationRelativeTo(pane);setModal(true);}public JPanel checkResultPanel(Manager manager) {	//从对象参数中取出各个信息填入文本框中,文本框默认不可操作JLabel number_label=new JLabel("管理编号:");JTextField number_text=new JTextField(10);number_text.setText(manager.getNumber());number_text.setEnabled(false);JPanel number_pane=new JPanel();number_pane.add(number_label);number_pane.add(number_text);JLabel name_label=new JLabel("姓    名:");JTextField name_text=new JTextField(10);name_text.setText(manager.getName());name_text.setEnabled(false);JPanel name_pane=new JPanel();name_pane.add(name_label);name_pane.add(name_text);JLabel account_label=new JLabel("账    号:");JTextField account_text=new JTextField(10);account_text.setText(manager.getAccount());account_text.setEnabled(false);JPanel account_pane=new JPanel();account_pane.add(account_label);account_pane.add(account_text);JLabel password_label=new JLabel("密    码:");JTextField password_text=new JTextField(10);password_text.setText(manager.getPassword());password_text.setEnabled(false);JPanel password_pane=new JPanel();password_pane.add(password_label);password_pane.add(password_text);JLabel phone_label=new JLabel("电话号码:");JTextField phone_text=new JTextField(10);phone_text.setText(manager.getPhone());phone_text.setEnabled(false);JPanel phone_pane=new JPanel();phone_pane.add(phone_label);phone_pane.add(phone_text);JLabel mail_label=new JLabel("电子邮箱:");JTextField mail_text=new JTextField(10);mail_text.setText(manager.getMail());mail_text.setEnabled(false);JPanel mail_pane=new JPanel();mail_pane.add(mail_label);mail_pane.add(mail_text);JLabel address_label=new JLabel("地    址:");JTextField address_text=new JTextField(10);address_text.setText(manager.getAddress());address_text.setEnabled(false);JPanel address_pane=new JPanel();address_pane.add(address_label);address_pane.add(address_text);JLabel remark_label=new JLabel("备    注:");JTextField remark_text=new JTextField(10);remark_text.setText(manager.getRemark());remark_text.setEnabled(false);JPanel remark_pane=new JPanel();remark_pane.add(remark_label);remark_pane.add(remark_text);JButton revise_button=new JButton("修改");//将文本框改为可操作revise_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {name_text.setEnabled(true);account_text.setEnabled(true);password_text.setEnabled(true);phone_text.setEnabled(true);mail_text.setEnabled(true);address_text.setEnabled(true);remark_text.setEnabled(true);}});JButton keep_button=new JButton("保存");//将文本框的信息取出封装进管理员对象,再做为参数传入方法进行更新keep_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Manager manager=new Manager();manager.setNumber(number_text.getText());manager.setName(name_text.getText());manager.setAccount(account_text.getText());manager.setPassword(password_text.getText());manager.setPhone(phone_text.getText());manager.setMail(mail_text.getText());manager.setAddress(address_text.getText());manager.setRemark(remark_text.getText());int i=SqlOperation.updateManager(manager);if(i>0) {JOptionPane.showMessageDialog(pane,"保存成功");//创建工厂TableFactoryAbstract factory=new ManagerTableFactory();//通过工厂创建表格对象UserTable user=factory.createUserTable();//刷新表格user.plushTable(table);}}});JButton return_button=new JButton("返回");return_button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dispose();}});JPanel button_pane=new JPanel();button_pane.add(revise_button);button_pane.add(keep_button);button_pane.add(return_button);JPanel panel=new JPanel(new GridLayout(5,2));panel.add(number_pane);panel.add(name_pane);panel.add(account_pane);panel.add(password_pane);panel.add(phone_pane);panel.add(mail_pane);panel.add(address_pane);panel.add(remark_pane);JPanel panell=new JPanel(new BorderLayout());panell.add(panel,BorderLayout.CENTER);panell.add(button_pane,BorderLayout.SOUTH);return panell;}@Overridepublic void setPane(JPanel pane) {this.pane=pane;}@Overridepublic void setcard(CardLayout card) {this.card=card;}public void setTable(JTable table) {this.table=table;}
}

总结 

总结与心得:第一次写博客,有些抓不住重点,篇幅有些长显得有些啰嗦,排版也不尽人意,这次总的来说不甚满意,不过也没办法了,到了预期的时间,当断则断了,不过也不是没有收获,毕竟是自己两个星期的奋战,虽不是很好,但也算是自己的一个足迹,也许多年后,回过头来看看自己写的东西,会笑自己此时的稚嫩,吐糟自己写的代码,到那时候也会很有趣。说说踩过的坑,在敲代码之前,没有一个完备的设计方案,这就造成了在开始敲代码后就不断的改设计,简单说就是只把功能单纯的实现了,程序显得没有章法,后面优化和拓展是比较困难的,直到基本把功能实现了才回头完善设计,惭愧,那怕后面用工厂模式改了一下代码,也感觉到用的特别的蹩脚,无奈,能力有限,所以以后没有一个相对完整的设计方案思路,就开始写东西,完全是坑,还不止一个,坑自己坑他人,引以为戒。说说两个让人无比抓狂的情况,一个是怎么改都一直报错,一个怎么改都实现不出功能还都不报错。遇到这种情况,从头开始梳理,梳理细支末节,不要太相信自己的直觉,尽量减少这种情况最好是写注释,最后说一句,一定要冷静,不要摔鼠标,解决不了问题,还挺费钱的,所以说心态调整也挺重要的。说说写程序的过程,程序本身就是用来解决问题的,这过程更是需要不断解决问题,一开始不太可能把说所有的问题都想得到并解决掉(有人能一开始就把所有的变量列完吗),这过程就是把出现的问题解决掉,写程序需要任务驱动。

 

tips:如有出错之处或不当之处,欢迎指正。

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部