課程設計目錄
一、問題描述
如何實現一個功能簡單的學生信息管理系統,能夠對學生信息(包括照片)進行添加、刪除、修改和查詢等操作。
二、基本要求
實現一個功能簡單的學生信息管理系統,該系統具有按照賬戶名密碼登錄功能,登錄後,可以添加,刪除,修改、查詢(顯示學生相片)學生信息,添加學生信息時,要求能添加學生的相片信息(實現相片文件的上傳和下載功能)。
三、需求分析
程序設計的任務是實現對學生信息的管理。用戶名和密碼都默認設置爲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數據庫技術詳解》 李剛 著
等你有了新的圈子,別忘了誰陪你走過了人煙稀少的時候;等你過得好時,別忘了誰陪你度過了最艱難的時刻。路上人山人海,不一定都對你好,但肯定會有一個願意等。朋友不要多,但要最真。你可以不好,但不能背叛;可以不是土豪,但會懂得分享。可以沒有勢力,但知道護友。最後我們都散了,記得常聯繫。