Java課程設計【學生信息管理系統】

一、問題描述

如何實現一個功能簡單的學生信息管理系統,能夠對學生信息(包括照片)進行添加、刪除、修改和查詢等操作。

二、基本要求

實現一個功能簡單的學生信息管理系統,該系統具有按照賬戶名密碼登錄功能,登錄後,可以添加,刪除,修改、查詢(顯示學生相片)學生信息,添加學生信息時,要求能添加學生的相片信息(實現相片文件的上傳和下載功能)。

三、需求分析

程序設計的任務是實現對學生信息的管理。用戶名和密碼都默認設置爲0,用戶名或密碼輸入錯誤會彈出“用戶名或密碼輸入不正確”的對話框。在用戶名和密碼輸入正確後進入學生信息管理系統,然後進行添加、修改、刪除等操作。在添加操作裏面可以上傳和下載照片,這是File類型的。輸入的其他學號、姓名、性別、電話、QQ和專業都是String類型,輸出的也是String類型。點擊確認後會彈出“添加成功”。

四、概要設計

1、類之間的調用關係

在這裏插入圖片描述

2、學生信息模塊

在這裏插入圖片描述

3、管理系統模塊

在這裏插入圖片描述

4、詳細設計

①主程序LoginGUI的代碼

public class LoginGUI{
	private JFrame jf;
	//水平box
	private Box center=Box.createVerticalBox();
	//學號的JPanel
	private JPanel idPanel=new JPanel();
	//密碼的JPanel
	private JPanel passwordPanel=new JPanel();
	private JLabel lUserId=new JLabel("用戶名");
//設置用戶名的文本框
	private JTextField tUserId=new JTextField(15);
	private JLabel lPassword=new JLabel("密   碼");
//設置密碼的文本框
	private JPasswordField tPassword=new JPasswordField(15);
	//按鈕的JPanel
	private JPanel buttonPanel=new JPanel();
	private JButton bLogin=new JButton("登錄");
	private JButton bCancel=new JButton("取消");
	//設置運行時窗口的大小
	Dimension faceSize=new Dimension(350,150);
	//獲得屏幕的大小
	Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
	public void init(){
		jf=new JFrame("學生信息管理系統");
		//設置JFrame的名稱
		jf.setTitle("登錄");
		//將lUserId,tUserId放在idPanel中,idPanel默認水平放置
		idPanel.add(lUserId);
		idPanel.add(tUserId);
		passwordPanel.add(lPassword);
		passwordPanel.add(tPassword);
		center.add(idPanel);
		center.add(passwordPanel);
		buttonPanel.add(bLogin);
		buttonPanel.add(bCancel);
		//登錄按鈕的監聽器
		bLogin.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String userId=tUserId.getText();
				String password=String.valueOf(tPassword.getPassword());
				//開啓接受數據的線程
				if(userId.trim().equals("")||userId==null||password.trim().equals("")||password==null){
					JOptionPane.showMessageDialog(jf,"用戶名或密碼不能爲空!","提示",JOptionPane.WARNING_MESSAGE);
				}else{
					if(userId.equals("0")&&password.equals("0")){
						new StudentManageView().init();
					}else{
						loginFailure();
					}
				}
			}
			
		});
		//取消按鈕的監聽器
		bCancel.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
		center.add(buttonPanel);
		jf.add(center);
		jf.pack();
		//設置JFame運行時的大小
		jf.setSize(faceSize);
		//設置JFame運行時的位置
		jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);
		//設置JFrame不可最大化
		jf.setResizable(false);
		//設置JFrame單機X時結束程序
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//設置JFrame可見
		jf.setVisible(true);
	}
	public void loginFailure(){
		JOptionPane.showMessageDialog(jf, "用戶名或密碼輸入不正確!","提示",JOptionPane.WARNING_MESSAGE);
	}
	public static void main(String args[])throws Exception{
		new LoginGUI().init();
	}
}

②程序View的代碼

public class View {
private JFrame jf=new JFrame();
//頁面的總JPanel
private JPanel total=new JPanel(new BorderLayout());
//上傳
private JPanel pUpload=new JPanel(new FlowLayout(FlowLayout.LEFT));
private JLabel lFileName=new JLabel("請選擇上傳的照片");
private JTextField tFileName=new JTextField(15);
private JButton bBrowse=new JButton("瀏   覽");
private JFileChooser uploadChooser=new JFileChooser();
private JButton bUpload=new JButton("上  傳");
private JPanel pDownload=new JPanel(new FlowLayout(FlowLayout.LEFT));
private JLabel lDownload=new JLabel("下載下面的圖片:");
private JFileChooser downloadChooser=new JFileChooser();
private JButton bDownload=new JButton("下  載");
private JPanel pIcon=new JPanel(new FlowLayout(FlowLayout.LEFT));
//使用本地圖片文件作爲圖標
private ImageIcon icon=new ImageIcon(new ImageIcon("D:/Saved Pictures/009.jpg").getImage().getScaledInstance(400,320,0));
private JLabel lIcon=new JLabel(icon);
Dimension faceSize=new Dimension(500,450);
//設置運行時窗口的位置
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
public void use(){
	pUpload.add(lFileName);
	pUpload.add(tFileName);
	pUpload.add(bBrowse);
	pUpload.add(bUpload);
	//瀏覽按鈕的監聽器
	bBrowse.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			downloadChooser.setCurrentDirectory(new File("."));
			int result=downloadChooser.showOpenDialog(jf);
			if(result==JFileChooser.APPROVE_OPTION ){
				String path=downloadChooser.getSelectedFile().getPath();
				tFileName.setText(path);
			}
		}
	});
	//上傳按鈕的監聽器
	bUpload.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			String fromFileName=tFileName.getText();
			String toFileName="D:/Config/"+System.currentTimeMillis()+".jpg";
			write(fromFileName,toFileName);
			JOptionPane.showMessageDialog(jf, "上傳成功!","提示",JOptionPane.WARNING_MESSAGE );
		}
	});
	pDownload.add(lDownload);
	pDownload.add(bDownload);
	//下載按鈕的監聽器
	bDownload.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			downloadChooser.setCurrentDirectory(new File("."));
			int result=uploadChooser.showOpenDialog(jf);
			if(result==JFileChooser.APPROVE_OPTION ){
			String path=uploadChooser.getSelectedFile().getPath();
			String fromFileName="D:/Saved Pictures/009.jpg";
			write(fromFileName,path);
			JOptionPane.showMessageDialog(jf, "下載成功!","提示",JOptionPane.WARNING_MESSAGE );
		}
	  }
	});
//放置按鈕的位置
    pIcon.add(lIcon);
	total.add(pUpload,BorderLayout.NORTH);
	total.add(pDownload,BorderLayout.CENTER);
	total.add(pIcon,BorderLayout.SOUTH);
	jf.add(total);
	jf.setSize(faceSize);
	jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);
	jf.setResizable(false);
	jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
	jf.setVisible(true);
}
//fromFile是源文件,toFile是目的文件
public void write(String fromFile,String toFile){
	FileInputStream fis=null;
	FileOutputStream fos=null;
//用try和catch捕獲異常
	try{
		fis=new FileInputStream(fromFile);
		fos=new FileOutputStream(toFile);
		byte[] buf=new byte[1024];
		int hasRead=0;
		while((hasRead=fis.read(buf))>0){
			fos.write(buf,0,hasRead);
		}
	}catch(FileNotFoundException e){
		e.printStackTrace();
	}catch(IOException e){
		e.printStackTrace();  
	}finally{
		try{
			fis.close();
			fos.close();
		}catch(IOException e){
			e.printStackTrace();  
		}
	}
}
public static void main(String args[]){
//用View的引用調用use方法
	new View().use();
}
}

③程序Student的代碼

package 學生信息管理系統;
class User{
	private String userId;
	private String password;
	public String getUserId(){
		return userId;
	}
	public void setUserId(String userId){
		this.userId=userId;
	}
	public String getPassword(){
		return password;
	}
	public void setPassword(String password){
		this.password=password;
	}
}
public class Student extends User{
 private String id;
 private String name;
 private String sex;
 private String age;
 private String phone;
 private String qq;
 private String major;
 private Object photo;
 public Object getPhoto(){
	 return photo;
 }
 public void setPhoto(Object photo){
	 this.photo=photo;
 }
 public String getId(){
	 return id;
 }
 public void setId(String 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 String getAge(){
	 return age;
 }
 public void setAge(String age){
	 this.age=age;
 }
 public String getPhone(){
	 return phone;
 }
 public void setPhone(String phone){
	 this.phone=phone;
 }
 public String getQq(){
	 return qq;
 }
 public void setQq(String qq){
	 this.qq=qq;
 }
 public String getMajor(){
	 return major;
 }
 public void setMajor(String major){
	 this.major=major;
 }
}

④程序ConnectSQLServer的代碼

package 學生信息管理系統;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.swing.JOptionPane;

 class DatebaseConnection {
	//數據庫連接成功
	public final String DBDRIVER="net.sourceforge.jtds.jdbc.Driver";
	//數據庫連接的URL
	public  final String DBURL="jdbc:jtds:sqlserver://127.0.0.1:1433/Competition";
	//數據庫登錄名
	public final String DBUSER="sa";
	//數據庫登錄密碼
	public final String DBPASS="Ambow99999999";
	private Connection conn=null;
	public DatebaseConnection(){
		try{
			//加載數據庫驅動
			Class.forName(DBDRIVER);
			//獲取數據庫連接
			conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,"數據庫連接失敗","異常",JOptionPane.ERROR_MESSAGE );
			System.exit(0);
		}catch(ClassNotFoundException e){
			JOptionPane.showMessageDialog(null, "驅動加載失敗","異常",JOptionPane.ERROR_MESSAGE );
			System.exit(0);
		}
	}
	public Connection getConnection(){
		return this.conn;
	}
	public void close(){
		//關閉數據庫連接
		if(this.conn!=null){
			try{
				this.conn.close();
			}catch(SQLException e){}
		}
	}
 }
	public class ConnectSQLServer{
	public static void main(String[] args) {
		try{
			Connection con=new DatebaseConnection().getConnection();
			if(con!=null){
				JOptionPane.showMessageDialog(null,"數據庫連接成功","祝賀",JOptionPane.INFORMATION_MESSAGE );
				System.exit(0);
			}else{
				JOptionPane.showMessageDialog(null, "數據庫連接失敗","錯誤",JOptionPane.ERROR_MESSAGE );
				System.exit(0);
			}
			con.close();
		}catch(SQLException e){
			e.printStackTrace();  
			}

	}
	}

五、調試分析

在一開始調試的時候,發現雖然沒有錯誤,但無法運行,找了很久發現是自己在main方法裏沒有去調用init()方法,然後填上了之後程序可以運行。然後在成功登錄後進入學生信息管理系統界面。在裏面沒有上傳照片和下載圖片這一選項。我在View這個程序裏面首先添加了本地的圖片作爲圖標可供下載,然後選定一個文件夾Config作爲上傳的路徑。這樣,我就在LoginGUI類裏面的添加按鈕監聽器裏面再增加了調用View類的use()方法的監聽器,實現了圖片上傳和下載的功能。總之,從一開始參考書上例題打出來的程序作爲基石,在上面進行雕刻。從設計轉化爲實現,打基礎這一步很困難,因爲要花很長時間查資料、看書和看代碼來理解程序,然後才能自己靈活進行優化。同學之間也相互討論幫助,都能給出自己的想法,然後交流之後會得出更好的創意,從第一個星期開始,我已經規劃好要怎樣做,許多同學也參考了我的規劃。我一直按照計劃實施並且很順利地完成了程序設計。

六、用戶使用說明

1、登錄

(1)程序設計的任務是先設計出一個登錄窗口,輸入學號和密碼,如果輸入錯誤,會像如圖所示輸出“用戶名或密碼輸入不正確”的對話框:
在這裏插入圖片描述
(2)如果正確,則成功登錄,進入學生信息管理界面,如圖所示:
在這裏插入圖片描述

2、添加

(1)點擊“添加”按鈕,進入學生信息添加界面:
在這裏插入圖片描述
(2)在以上界面輸入要添加的學生信息,首先點擊“上傳照片”按鈕,然後彈出如下窗口:
在這裏插入圖片描述
(3)點擊瀏覽選項,選擇本地文件裏需要上傳的圖片,這裏我們選擇小貓圖片,然後點擊上傳,會顯示“上傳成功”的對話框。
在這裏插入圖片描述
(4)即可上傳到本地D:/Config這個文件夾內,如下圖所示的小貓圖片。
在這裏插入圖片描述
(5)也可以點擊“下載”這個按鈕,會提示下載成功的對話框,如圖所示:
在這裏插入圖片描述
(6)它會將演示的圖標下載到你指定的文件夾中,都是實現了文件的複製功能,如下圖所示是將圖標下載到E:/QQ瀏覽器文件這個文件夾裏。
在這裏插入圖片描述
(7)然後添加其他的學生信息,如圖所示:
在這裏插入圖片描述
(8)點擊“確認”按鈕,即可保存學生信息。我們再添加一個女學生的信息,如下圖所示:
在這裏插入圖片描述
(9)然後單擊“確定”按鈕,此時學生信息添加成功。

3、查詢

(1)在學生管理界面的學生信息列表中點擊“查詢”按鈕,即可顯示已經添加的學生信息記錄,如圖所示:
在這裏插入圖片描述
(2)也可以在“查詢”的文本框內輸入學號,然後點擊“查詢”按鈕,會跳出所對應的學生記錄,如圖所示:
在這裏插入圖片描述

4、修改

(1)點擊所選的武則天學生記錄,再點擊“修改”按鈕,彈出信息框,修改姓名爲“花木蘭”,修改手機號爲“18816218888”,如圖所示:
在這裏插入圖片描述
(2)點擊確認按鈕,再點擊“查詢”按鈕進行刷新,顯示出修改後的信息,如下圖所示:
在這裏插入圖片描述

5、刪除

(1)在學生信息管理系統界面選中某一學生記錄,單擊“刪除”按鈕,彈出刪除確認界面。如果確認刪除,單擊“確定”按鈕,否則單擊“取消”按鈕。
在這裏插入圖片描述
(2)我們選擇學生凱的記錄,並點擊“刪除”按鈕,再確定刪除,會看到這條記錄被刪除,僅剩學生花木蘭的記錄,如圖:
在這裏插入圖片描述

6、退出

點擊右上角的X,將關閉所有程序窗口。

七、測試結果

測試數據和測試結果在用戶使用說明選項中已經詳細介紹過,這裏不再重複介紹。

八、課程設計總結

這次課程設計總體來說是一次非常有意義的任務,因爲在這次課程設計中我學會了很多GUI編程和流類的知識,提高了編程的能力,也增加了對編程的興趣。雖然這是一個小項目,但是能把它做好也是有很大的滿足感。雖然一開始遇到很多問題,但自己都咬牙克服、迎難而上,每天都在鑽研程序,然後將自己的思想與同學們交流。可以說,沒有付出就沒有回報,只要你肯付出,就會有收穫。一件事,你只要用心去做了,將它做好,無論結果如何,你都不會留有遺憾的。課程設計讓我對所學知識有了更深刻的理解,也讓我明白如今對程序員的要求是多麼嚴格,需要掌握各種編程知識,才能夠在職場上遊刃有餘。

九、參考文獻

《JAVA核心技術》 馬志強 張然 李雷孝著
《JAVA API文檔》 Oracle官網文件
《JAVA編程思想》 【美】Bruce Eckel著
《JAVA數據庫技術詳解》 李剛 著

等你有了新的圈子,別忘了誰陪你走過了人煙稀少的時候;等你過得好時,別忘了誰陪你度過了最艱難的時刻。路上人山人海,不一定都對你好,但肯定會有一個願意等。朋友不要多,但要最真。你可以不好,但不能背叛;可以不是土豪,但會懂得分享。可以沒有勢力,但知道護友。最後我們都散了,記得常聯繫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章