【Java课设】学生信息管理系统简易版(文件IO代替数据库)
生活随笔
收集整理的這篇文章主要介紹了
【Java课设】学生信息管理系统简易版(文件IO代替数据库)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
學(xué)生信息管理系統(tǒng)簡易版(文件IO代替數(shù)據(jù)庫)
一.設(shè)計任務(wù)及要求
二.需求分析
要求有完整的圖形用戶界面,界面應(yīng)該能顯示完整的學(xué)生信息表格,同時要能對學(xué)生信息完成添加、修改、查詢、刪除四個基本功能。學(xué)生信息表格的數(shù)據(jù)應(yīng)該保存在數(shù)據(jù)庫里,每次登錄系統(tǒng)時即對數(shù)據(jù)庫進(jìn)行訪問和修改,可以考慮用TXT文本代替數(shù)據(jù)庫,在本地包里創(chuàng)建TXT文本,通過IO流進(jìn)行訪問。
三.總體設(shè)計
四.代碼詳細(xì)實現(xiàn)
1.啟動界面代碼,程序唯一的main方法,單獨獨立出來,養(yǎng)成好習(xí)慣
/*** @ClassName: StudentMessageControlSystem* @Auther: Drawin* @Date: 2021/12/25 22:25* @Description:學(xué)生信息管理系統(tǒng)* 要求:* 使用圖形用戶界面* 用數(shù)據(jù)庫建立 1或 2個學(xué)生信息表。 (可以使用 txt 文件代替數(shù)據(jù)庫* 能連接數(shù)據(jù)庫并實現(xiàn)查詢、增、刪、改等功能。*/public class StudentMessageControlSystem {public static void main(String[] args) {new LoginGUi();} }2.Student類代碼
public class Student {private String stuID; /* 學(xué)生學(xué)號 */private String name; /* 學(xué)生姓名 */private String sex; /* 學(xué)生性別 */private String age; /* 學(xué)生年齡 */private String callnumber; /* 學(xué)生電話號碼 */private String home_place; /* 學(xué)生家庭住址,籍貫 */private String identityID; /* 學(xué)生身份證號碼 */public Student(String stuID,String name,String sex,String age,String callnumber,String home_place,String identityID) {this.stuID=stuID;this.name=name;this.sex=sex;this.age=age;this.callnumber=callnumber;this.home_place=home_place;this.identityID=identityID;}public Student() {}public String getStuID() {return this.stuID;}public void setStuID(String stuID) {this.stuID=stuID;}public String getName() {return name;}public void setName(String name) {this.name=name;}public String getSex() {return this.sex;}public void setSex(String sex) {this.sex=sex;}public String getAge() {return this.age;}public void setAge(String age) {this.age=age;}public String getCallnumber() {return this.callnumber;}public void setCallnummber(String callnumber) {this.callnumber=callnumber;}public String getHome_place() {return this.home_place;}public void setHome_place(String home_place) {this.home_place=home_place;}public String getIdentityID() {return this.identityID;}public void setIdentityID(String identityID) {this.identityID=identityID;}//從文件中錄入的數(shù)據(jù)格式 "學(xué)號 姓名 性別 年齡 電話號碼 家庭住址 身份證號碼"public String fileString(){return stuID+" "+name+" "+sex+" "+age+" "+callnumber+" "+home_place+" "+identityID;} }3.MainView主界面代碼,包括四個功能按鈕,和完整的查找,刪除功能
import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Vector;/*** @ClassName: MainView* @Auther: Drawin* @Date: 2021/12/26 19:01* @Description:主界面,四個功能按鈕,和完整的查找,刪除功能*/public class MainView extends JFrame implements ActionListener {JTable table = null;DefaultTableModel model = null;JPanel jPanelNorth;JTextField search;JButton add,delete,modify,seek;Function act =new Function();//顯示全部學(xué)生信息public MainView() {//頂部JLabel jLabel = new JLabel("請輸入學(xué)號");jPanelNorth=new JPanel();jPanelNorth.setLayout(new GridLayout(1, 6));search =new JTextField(10);add =new JButton("添加");delete =new JButton("刪除");modify =new JButton("修改");seek =new JButton("查找");jPanelNorth.add(jLabel);jPanelNorth.add(search);jPanelNorth.add(seek);jPanelNorth.add(add);jPanelNorth.add(modify);jPanelNorth.add(delete);//中間的表格JFrame jf = new JFrame("學(xué)生信息管理系統(tǒng)");// 創(chuàng)建內(nèi)容面板JPanel panel = new JPanel();// 表頭(列名)Vector columnNames=createColumnNames();Vector data=createTableModelData();// 創(chuàng)建一個默認(rèn)的表格模型model = new DefaultTableModel(data, columnNames);table = new JTable(model);table.setPreferredScrollableViewportSize(new Dimension(500, 80));JScrollPane tablePanel = new JScrollPane(table);// 設(shè)置表格內(nèi)容顏色table.setForeground(Color.BLACK); // 字體顏色table.setFont(new Font(null, Font.PLAIN, 14)); // 字體樣式table.setSelectionForeground(Color.DARK_GRAY); // 選中后字體顏色table.setSelectionBackground(Color.LIGHT_GRAY); // 選中后字體背景table.setGridColor(Color.GRAY); // 網(wǎng)格顏色// 設(shè)置表頭table.getTableHeader().setFont(new Font(null, Font.BOLD, 14)); // 設(shè)置表頭名稱字體樣式table.getTableHeader().setForeground(Color.RED); // 設(shè)置表頭名稱字體顏色table.getTableHeader().setResizingAllowed(false); // 設(shè)置不允許手動改變列寬table.getTableHeader().setReorderingAllowed(false); // 設(shè)置不允許拖動重新排序各列// 設(shè)置行高table.setRowHeight(40);// 第一列列寬設(shè)置為40table.getColumnModel().getColumn(0).setPreferredWidth(60);// 設(shè)置滾動面板視口大小(超過該大小的行數(shù)據(jù),需要拖動滾動條才能看到)table.setPreferredScrollableViewportSize(new Dimension(640, 320));// 把表格放到滾動面板中(表頭將自動添加到滾動面板頂部)JScrollPane scrollPane = new JScrollPane(table);// 添加 滾動面板 到 內(nèi)容面板panel.add(scrollPane);// JScrollPane pane = new JScrollPane(table);// 設(shè)置 內(nèi)容面板 到 窗口jf.setContentPane(panel);jf.pack();jf.setSize(800, 500);jf.add(jPanelNorth,BorderLayout.NORTH);jf.add(scrollPane, BorderLayout.CENTER);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//數(shù)據(jù)居中顯示DefaultTableCellRenderer r = new DefaultTableCellRenderer();r.setHorizontalAlignment(JLabel.CENTER);table.setDefaultRenderer(Object.class, r);jf.setLocationRelativeTo(null);int t=table.getRowCount();if(t<=0){JOptionPane.showMessageDialog(null, "該系統(tǒng)中還沒有錄入學(xué)生信息!!!");jf.setVisible(false);}else {jf.setVisible(true);}//監(jiān)聽開始add.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {jf.setVisible(false);new AddView();}});modify.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new AddView();}});seek.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID= search.getText();int flag=act.seek(sID);if (flag==-1){JOptionPane.showMessageDialog(null, "未查找到該學(xué)號的學(xué)生!!!\n\n請重新輸入");return;}else{JOptionPane.showMessageDialog(null,act.find(sID));}search.setText("");}});delete.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID = search.getText(); //獲取文本框中內(nèi)容int flag=act.seek(sID);if(flag==-1){JOptionPane.showMessageDialog(null, "未查找到該學(xué)號的學(xué)生!!!\n\n請重新輸入");}else {act.delete(sID);act.writefile();JOptionPane.showMessageDialog(null, "刪除成功!!!\n");}new MainView();search.setText("");}});}private Vector createColumnNames() {Vector columnNames = new Vector();//columnNames.add("序號");columnNames.add("學(xué)號");columnNames.add("姓名");columnNames.add("性別");columnNames.add("年齡");columnNames.add("電話號碼");columnNames.add("家庭住址");columnNames.add("身份證號碼");return columnNames;}private Vector createTableModelData() {Vector data = new Vector();String t=null;try{FileReader f1 = new FileReader("student.txt");BufferedReader br=new BufferedReader(f1);//arry.clear();// 清除原數(shù)組列表中的數(shù)據(jù)int i=0;while ((t= br.readLine())!= null){String [] s=t.split("\\s+"); //通過空格分割字符串?dāng)?shù)組Vector rowData = new Vector();//rowData.add("i");rowData.add(s[0]);rowData.add(s[1]);rowData.add(s[2]);rowData.add(s[3]);rowData.add(s[4]);rowData.add(s[5]);rowData.add(s[6]);data.add(rowData);// System.out.print(s[6]);i++;}f1.close();br.close();} catch (IOException e) {// TODO 自動生成的 catch 塊e.printStackTrace();}return data;}@Overridepublic void actionPerformed(ActionEvent e) {} }4.登錄界面LoginGUI
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;/*** @ClassName: LoginGUi* @Auther: Drawin* @Date: 2021/12/26 16:34* @Description:*/public class LoginGUi extends JFrame implements ActionListener {public LoginGUi(){JFrame jFrame = new JFrame("登錄");JLabel jLabel1 = new JLabel(" 用戶名");JLabel jLabel2 = new JLabel(" 密碼");JTextField jTextField1 = new JTextField(10);JTextField jTextField2 = new JTextField(10);JButton jButton1 = new JButton("登錄");JButton jButton2 = new JButton("退出");JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();jPanel1.setLayout(new GridLayout(3,2));jPanel2.setLayout(new GridLayout(1,2));jPanel1.add(jLabel1);jPanel1.add(jTextField1);jPanel1.add(jLabel2);jPanel1.add(jTextField2);jPanel2.add(jButton1);jPanel2.add(jButton2);jFrame.add(jPanel1, BorderLayout.NORTH);jFrame.add(jPanel2,BorderLayout.SOUTH);jFrame.setVisible(true);jFrame.setSize(350,150);jFrame.setLocationRelativeTo(null);//在屏幕中間顯示jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出關(guān)閉JFramejButton1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {jFrame.setVisible(false);new MainView();}});jButton2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.exit(0);}});}@Overridepublic void actionPerformed(ActionEvent e) {} }5.Function類,增刪改查功能實現(xiàn)(通過IO)
import java.io.*; import java.util.ArrayList;/*** @ClassName: Function* @Auther: Drawin* @Date: 2021/12/26 21:11* @Description:*/public class Function {ArrayList<Student> arry=new ArrayList<Student>();public Function() //讀文件,將文件中的學(xué)生信息存放在數(shù)組列表{this.readfile();}//根據(jù)學(xué)號查找學(xué)生信息,找到返回學(xué)號,找不到返回-1public int seek(String str){for (int i = 0; i<arry.size(); i++)if (arry.get(i).getStuID().equals(str))return i;//等于在數(shù)組列表的位置return -1;}public String find(String str){for (int i = 0; i<arry.size(); i++)if (arry.get(i).getStuID().equals(str))return arry.get(i).fileString();//等于在數(shù)組列表的位置return null;}//修改學(xué)生信息public void modify(YYX.Smcs.Student stu) {int flag=seek(stu.getStuID()); //查找是否存在arry.set(flag, stu); //替換 flag 處的學(xué)生信息}// 讀文件public boolean readfile() {String t=null;try{FileReader f1 = new FileReader("student.txt");BufferedReader br=new BufferedReader(f1);arry.clear(); // 清除原數(shù)組列表中的數(shù)據(jù)while ((t= br.readLine())!= null){String [] s=t.split("\\s+");YYX.Smcs.Student st=new Student (s[0],s[1],s[2],s[3],s[4],s[5],s[6]);arry.add(st);System.out.println("讀取文件:");System.out.println(s[0]);}f1.close();br.close();return true;} catch (IOException e) {// TODO 自動生成的 catch 塊e.printStackTrace();return false;}}//添加學(xué)生信息public boolean add(YYX.Smcs.Student stu){System.out.println();System.out.println("要添加的學(xué)生");System.out.println(stu.fileString());System.out.println();if (seek(stu.getStuID())!=-1)return false;arry.add(stu);return true;}//寫,注意每行必須有七個元素,否則讀取文件并判斷是否存在時會出錯時會出錯,沒有輸入的用---代替public boolean writefile() {FileWriter fw=null;BufferedWriter out=null;try {fw = new FileWriter("student.txt");out = new BufferedWriter(fw);//姓名學(xué)號等中間隔一個空格for(int i=0;i<arry.size();i++){String s=arry.get(i).fileString();System.out.println("數(shù)組列表數(shù)據(jù):");System.out.println(arry.get(i).fileString());out.write(s);out.newLine();}out.close();fw.close();return true;} catch (IOException e) {e.printStackTrace();return false;}}//刪除學(xué)生信息,并且文件中的內(nèi)容也要修改public boolean delete(String s) //添加學(xué)生記信息{int pos=seek(s);if (pos==-1)return false;arry.remove(pos);return true;} }6.AddView 添加修改頁面,第三個界面
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList;/*** @ClassName: AddView* @Auther: Drawin* @Date: 2021/12/26 19:52* @Description:添加,修改功能*/public class AddView extends JFrame {private JPanel jPanelCenter, jPanelSouth;private JButton addButton, exitButton,modiButton;private JTextField stuID,name,sex,age,callnumber,home_place,identityID;Function act =new Function();public AddView(){//centerjPanelCenter = new JPanel();jPanelCenter.setLayout(new GridLayout(7, 2));jPanelCenter.add(new JLabel(" 學(xué)號"));stuID=new JTextField();jPanelCenter.add(stuID);jPanelCenter.add(new JLabel(" 姓名"));name = new JTextField();jPanelCenter.add(name);jPanelCenter.add(new JLabel(" 性別"));sex = new JTextField();jPanelCenter.add(sex);jPanelCenter.add(new JLabel(" 年齡"));age = new JTextField();jPanelCenter.add(age);jPanelCenter.add(new JLabel(" 電話號碼"));callnumber = new JTextField();jPanelCenter.add(callnumber);jPanelCenter.add(new JLabel(" 家庭住址"));home_place = new JTextField();jPanelCenter.add(home_place);jPanelCenter.add(new JLabel(" 身份證號碼"));identityID = new JTextField();jPanelCenter.add(identityID);//southjPanelSouth = new JPanel();jPanelSouth.setLayout(new GridLayout(1, 3));addButton=new JButton("添加");exitButton=new JButton("返回");modiButton=new JButton("修改");jPanelSouth.add(addButton);jPanelSouth.add(modiButton);jPanelSouth.add(exitButton);this.add(jPanelCenter, BorderLayout.CENTER);this.add(jPanelSouth, BorderLayout.SOUTH);//監(jiān)聽exitButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {setVisible(false);new MainView();}});Student s1=new Student();ArrayList<Student> arry=new ArrayList<Student>();addButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID = stuID.getText(); //獲取文本框中內(nèi)容if(act.seek(sID)!=-1){JOptionPane.showMessageDialog(null, "該學(xué)號對應(yīng)的學(xué)生已經(jīng)存在!");//清空文本框stuID.setText("");name.setText("");age.setText("");callnumber.setText("");home_place.setText("");identityID.setText("");return;}String sname = name.getText();//先判斷學(xué)號和姓名是否為空,如果為空,直接退出if(sID.equals("")||sname.equals("")){JOptionPane.showMessageDialog(null, "請重新輸入");return;}String sage = age.getText();if(sage.equals(""))//年齡為空,沒有輸入sage="--";String scall = callnumber.getText();if(scall.equals(""))scall="--";String shome = home_place.getText();if(shome.equals(""))shome="--";String siden = identityID.getText();if(siden.equals(""))siden="--";String ssex=sex.getText();if (ssex.equals(""))ssex="--";s1.setStuID(sID);s1.setAge(sage);s1.setName(sname);s1.setSex(ssex);s1.setCallnummber(scall);s1.setHome_place(shome);s1.setIdentityID(siden);System.out.println(s1.fileString());act.add(s1);act.writefile();JOptionPane.showMessageDialog(null, "錄入成功!!!");setVisible(false);new MainView();}});modiButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID =stuID.getText(); //獲取文本框中內(nèi)容int flag=act.seek(sID); //查找是否存在if (flag==-1){JOptionPane.showMessageDialog(null, "未查找到該學(xué)號的學(xué)生!!!\n\n請重新輸入");return;}else {JOptionPane.showMessageDialog(null, "確認(rèn)返回后請輸入需要修改后的數(shù)據(jù)");}String sage = age.getText();if(sage.equals(""))//年齡為空,沒有輸入sage="--";String scall = callnumber.getText();if(scall.equals(""))scall="--";String shome = home_place.getText();if(shome.equals(""))shome="--";String siden = identityID.getText();if(siden.equals(""))siden="--";String ssex=sex.getText();if (ssex.equals(""))ssex="--";String sname = name.getText();//先判斷學(xué)號和姓名是否為空,如果為空,直接退出if(sname.equals("")){JOptionPane.showMessageDialog(null, "錄入的學(xué)生姓名為空!!!\n\n請重新輸入");return;}s1.setStuID(sID);s1.setAge(sage);s1.setName(sname);s1.setSex(ssex);s1.setCallnummber(scall);s1.setHome_place(shome);s1.setIdentityID(siden);act.modify(s1); //修改act.writefile();JOptionPane.showMessageDialog(null, "修改成功!!!");}});setDefaultCloseOperation(DISPOSE_ON_CLOSE);setBounds(500, 300, 400, 270);setVisible(true);} }五.功能實現(xiàn)截圖
1.登錄界面
2.管理系統(tǒng)主界面
3.添加修改界面
4.查找功能
5.反饋信息
6.提示信息
六.參考文獻(xiàn)
Java課程設(shè)計【學(xué)生信息管理系統(tǒng)】——振華OPPO
Java+學(xué)生信息管理系統(tǒng)+GUI+文件——H千面
學(xué)生信息管理系統(tǒng)–(Java+MySQL實現(xiàn))——__Mzzz
總結(jié)
以上是生活随笔為你收集整理的【Java课设】学生信息管理系统简易版(文件IO代替数据库)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51实战演练之存储器-熊健-专题视频课程
- 下一篇: Mysql性能调优之max_allowe