版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、java程序設(shè)計實訓(xùn)報告一、 系統(tǒng)功能說明“學(xué)生成績查詢系統(tǒng)”模仿簡單教務(wù)系統(tǒng),通過用戶名和密碼登陸,可存儲用戶信息、學(xué)生個人信息、課程和成績等內(nèi)容,并可進行增刪查改四個基本操作。實現(xiàn)“教師錄入成績,學(xué)生查詢成績”的目的。 系統(tǒng)的不足之處:系統(tǒng)功能開發(fā)不全面,僅能實現(xiàn)記錄一門課成績,無更多增強功能。安全級別不夠高,易遭到攻擊破壞和篡改。界面不友好、不美觀,個別位置有小漏洞:在選擇功能菜單的按鈕時,系統(tǒng)只設(shè)計了支持阿拉伯數(shù)字。當用戶輸入英文字母或者其他文字時,整個程序則無法運行。增加學(xué)生就是按學(xué)生學(xué)號增加,系統(tǒng)沒有嚴格規(guī)定必須輸入相同位數(shù)的學(xué)生學(xué)號。成績查詢,修改密碼和刪除學(xué)生都是按學(xué)生學(xué)號實現(xiàn)
2、,在刪除學(xué)生這個功能里,數(shù)據(jù)庫中沒有存的學(xué)生信息也可以刪除。二、 數(shù)據(jù)庫的簡單介紹此系統(tǒng)數(shù)據(jù)庫為access數(shù)據(jù)庫,包括四個表,分別為student表,sc表,course表和userinfo表,分別存儲學(xué)生信息、成績、課程和用戶信息的內(nèi)容。sc表里記錄了sno、cno、score信息course表里記錄cno、course、ccredit、ctype信息student表里記錄了sno、sname、sbirth、sdept信息 userinfo表里記錄了username、password信息程序通過dbutil類、schoolcrud類實現(xiàn)與數(shù)據(jù)庫相連三、 程序中的類以及對類的理解程序中包含1
3、0個類:1、application類是輸出歡迎信息,讀取用戶的輸入信息。2、consoleinpututil類是讀取所輸入的用戶名和密碼數(shù)據(jù)。3、consoleoutpututil類是輸出歡迎信息,退出信息。4、dbutil的功能為用于連接數(shù)據(jù)庫的類。5、functionimplementation類的功能為實現(xiàn)增刪查改。6、functionmenu類是顯示菜單信息。7、schoolcrud類聯(lián)系數(shù)據(jù)庫實現(xiàn)增刪查改。8、studentbean類定義了set和get方法,封裝學(xué)生屬性。9、userbean類定義了set和get方法,封裝用戶屬性。10、userloginutilis類接收user
4、。其中,我的理解application為主類consoleinpututil、consoleoutpututil這兩個類與界面輸入輸出有關(guān)dbutil、schoolcrud與數(shù)據(jù)庫相連實現(xiàn)相應(yīng)功能functionmenu類顯示菜單信息functionimplementation類主要實現(xiàn)增刪查改功能studentbean、userbean實現(xiàn)封裝userloginutilis驗證信息,實現(xiàn)用戶登錄四、 程序與注釋applicationpackage .buu.it;public class application public static void main(string arg
5、s) throws exception / 輸出歡迎信息consoleoutpututil.printwelcomeinfo();/ 讀取用戶的輸入信息userbean user = null;user = consoleinpututil.getconsoleinputuserinfo();system.out.println(用戶名: + user.getusername();system.out.println( 密碼: + user.getpassword();/ 用戶登錄判斷boolean isusernameright = userloginutil.isusernameright
6、(user);/查詢用戶名boolean ispasswordright = userloginutil.ispasswordright(user);/查詢密碼/判斷用戶是否存在if (!isusernameright) system.out.println(用戶名不存在!);return;/判斷密碼是否正確else if (!ispasswordright) system.out.println(密碼錯誤!);return;/用戶名,密碼均正確打印輸出語句,顯示功能菜單else system.out.println(登錄成功!);/ 顯示功能菜單并進行相應(yīng)處理functionmenu.sho
7、wfunctionmenu(user);/打印輸出退出提示信息consoleoutpututil.printgoodbyeinfo();consoleinpututilpackage .buu.it;import java.io.bufferedreader;import java.io.ioexception;import java.io.inputstreamreader;public class consoleinpututil public static userbean getconsoleinputuserinfo() throws ioexception userbe
8、an user = null;/創(chuàng)建userbean對象string username = null;/字符串變量定義string password = null;system.out.print(請輸入用戶名稱:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedreader對象username = br.readline();/讀入姓名,保存至username中system.out.print(請輸入用戶密碼:);password = br.readli
9、ne();/讀入密碼,保存至password中user = new userbean();/實例化userbean對象user.setusername(username);/通過set()方法,為對象賦值user.setpassword(password);user = new userbean(username, password);/實例化user對象,并通過有參構(gòu)造函數(shù)為對象賦初值return user;/返回對象consoleoutpututilpackage .buu.it;import java.util.enumeration;import java.util.has
10、htable;public class consoleoutpututil /運行系統(tǒng)打印輸出語句public static void printwelcomeinfo() system.out.println(*);system.out.println(歡迎使用學(xué)生成績查詢系統(tǒng)!);system.out.println(*);/退出系統(tǒng)打印輸入語句public static void printgoodbyeinfo() system.out.println(*);system.out.println(謝謝使用學(xué)生成績查詢系統(tǒng),再見!);system.out.println(*);/打印輸出
11、學(xué)生成績public static void printscoresinfo(hashtable scores) throws exception /這些方法主要通過向量的元素、哈希表的鍵以及哈希表中的值進行枚舉。枚舉也用于將輸入流指定到 sequenceinputstream 中enumeration e = scores.keys();/將哈希表賦值于enumeration對象/實現(xiàn) enumeration 接口的對象,它生成一系列元素,一次生成一個。連續(xù)調(diào)用 nextelement 方法將返回一系列的連續(xù)元素string cname = null;int score = -1;/打印所有
12、學(xué)生的成績while (e.hasmoreelements() cname = (string) e.nextelement();/獲取姓名score = (integer)scores.get(cname);/通過鍵名獲取學(xué)生成績system.out.println(t + cname + : + score);dbutilpackage .buu.it;import java.sql.connection;import java.sql.drivermanager;import java.sql.sqlexception;/* * 用于連接數(shù)據(jù)庫的類 * 其它類如果需要訪問數(shù)據(jù)
13、庫,可調(diào)用該類獲取可用的連接對象 * 需要先進行測試,看是否可以正常使用 */public class dbutil private static string driver;/定義連接驅(qū)動方式字符串private static string url;/定義連接字符串private static string user;/定義訪問數(shù)據(jù)庫用戶名private static string password;/定義訪問數(shù)據(jù)庫密碼static driver = sun.jdbc.odbc.jdbcodbcdriver;/ 使用 jdbc-odbc 橋url = jdbc:odbc:school;/ 訪
14、問access數(shù)據(jù)庫一般不需要用戶名稱和密碼/* * 獲取數(shù)據(jù)庫連接對象 */public static connection getconnection() throws classnotfoundexception,sqlexception connection conn = null;/創(chuàng)建連接對象class.forname(driver);/把jdbc驅(qū)動加載到j(luò)ava虛擬機當中conn = drivermanager.getconnection(url);/加載連接驅(qū)動,并與數(shù)據(jù)庫建立連接,其中數(shù)據(jù)庫連接字符串用來標識數(shù)據(jù)庫return conn;/返回連接連接對象/* * 關(guān)閉數(shù)據(jù)
15、庫連接 */public static void closeconnection(connection conn) try /異常處理conn.close();/關(guān)閉連接對象 catch (sqlexception e) e.printstacktrace();/拋出異常public static void main(string args) connection conn = null;/創(chuàng)建連接對象try conn = dbutil.getconnection();/獲取連接boolean state = conn.isclosed();/判斷連接是否建立if (!state) syste
16、m.out.println(已成功建立與數(shù)據(jù)庫的連接!); catch (exception e) e.printstacktrace(); finally dbutil.closeconnection(conn);/關(guān)閉數(shù)據(jù)庫連接system.out.println(已關(guān)閉與數(shù)據(jù)庫的連接!);functionimplementationpackage .buu.it;import java.io.bufferedreader;import java.io.inputstreamreader;import java.text.simpledateformat;import java
17、.util.date;import java.util.hashtable;public class functionimplementation public static void addstudent() throws exception bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedreader對象string sno, sname, ssex, sdept;/創(chuàng)建字符串對象變量,學(xué)號,姓名,性別,系別date sbirth;/date對象syst
18、em.out.print(請輸入學(xué)生學(xué)號:);sno = br.readline();/讀入學(xué)號,保存至sno中system.out.print(請輸入學(xué)生姓名:);sname = br.readline();/讀入姓名,保存至sname中system.out.print(請輸入學(xué)生性別:);ssex = br.readline();/讀入性別,保存至ssex中system.out.print(請輸入學(xué)生出生日期,格式1989-05-12:);simpledateformat sdf = new simpledateformat();/創(chuàng)建simpledateformat,日期格式對象sdf.
19、applypattern(yyyy-mm-dd);/規(guī)定日期格式sbirth = sdf.parse(br.readline();/讀入出生日期,并進行格式化system.out.print(請輸入學(xué)生系別:);sdept = br.readline();/讀入系別,保存至sdept中studentbean student = new studentbean();/創(chuàng)建學(xué)生對象student.setsno(sno);/為student對象賦值,通過set()方法student.setsname(sname);student.setssex(ssex);student.setsbirth(sbi
20、rth);student.setsdept(sdept);boolean b = schoolcrud.addstudent(student);/執(zhí)行數(shù)據(jù)插入數(shù)據(jù)庫操作if (b) system.out.println(添加學(xué)生成功!);/操作成功,打印輸出語句public static void listscores() throws exception system.out.print(請輸入學(xué)號:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedre
21、ader對象string sno = br.readline();/讀入學(xué)號,保存至sno中hashtable scores = schoolcrud.getscoresbysno(sno);/通過學(xué)號查詢成績并保存至哈希表中consoleoutpututil.printscoresinfo(scores);/打印輸出學(xué)生成績public static void modifypassword(userbean user) throws exception system.out.print(請輸入舊密碼:);bufferedreader br = new bufferedreader(new i
22、nputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedreader對象string oldpassword = br.readline();/讀入密碼,保存至 oldpassword中/判斷輸入密碼是否正確if (!oldpassword.equals(user.getpassword() system.out.println(舊密碼不正確!);return;else string newpassword = null;string newpasswordconfirm = null;int counter = 0;while (counter 3)
23、 system.out.print(請輸入新密碼:);newpassword = br.readline();/讀入密碼,保存至 newpassword中system.out.print(請再次輸入新密碼:);newpasswordconfirm = br.readline();/讀入密碼,保存至newpasswordconfirm中/判斷兩次密碼是否正確if (newpassword.equals(newpasswordconfirm) break;else system.out.println(兩次輸入的密碼不一致!);counter +;/如果連續(xù)輸入密碼錯誤累計三次退出if (coun
24、ter = 3) return;/執(zhí)行密碼修改操作boolean b = schoolcrud.modifypassword(user, newpassword);if (b) system.out.println(修改密碼成功!);/操作成功打印輸出語句/* * 刪除學(xué)生信息 */public static void deletestudent() throws exception system.out.print(請輸入學(xué)號:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操
25、作,創(chuàng)建bufferedreader對象string sno = br.readline();/讀入學(xué)號,保存至sno中system.out.print(你確定要刪除該學(xué)生嗎(y/n)? );string input = br.readline();/讀入字符,保存至input中/判斷是否輸入yif (input.equalsignorecase(y) boolean b = schoolcrud.deletestudentbysno(sno);/輸入y,執(zhí)行刪除操作,通過學(xué)號if (b) system.out.println(刪除學(xué)生信息成功!);/操作成功打印輸出else if (inpu
26、t.equalsignorecase(n) return;/輸入n,退出系統(tǒng)else system.out.println(你的輸入不正確!);/輸入其他字符,打印輸出語句functionmenupackage .buu.it;import java.io.bufferedreader;import java.io.inputstreamreader;/* * 功能菜單類 */public class functionmenu /* * 顯示功能菜單方法 */public static void showfunctionmenu(userbean user) throws exce
27、ption system.out.println(請輸入你的選擇,1-增加學(xué)生,2-查詢成績,3-修改密碼,4-刪除學(xué)生,5-退出:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedreader對象string input = br.readline();/讀入輸入字符串int i = integer.parseint(input);/將讀入字符串類型轉(zhuǎn)換為int類型,即類型轉(zhuǎn)換switch (i) case 1: functionimplementati
28、on.addstudent(); break;/執(zhí)行添加操作case 2: functionimplementation.listscores(); break;/執(zhí)行打印輸出學(xué)生成績操作case 3: functionimplementation.modifypassword(user);break;/執(zhí)行修改用戶密碼操作case 4: functionimplementation.deletestudent();break;/執(zhí)行刪除學(xué)生信息操作case 5:return;/退出系統(tǒng)default:system.out.println(你的選擇非法!);/ 直接遞歸調(diào)用,再次顯示功能菜單f
29、unctionmenu.showfunctionmenu(user);schoolcrudpackage .buu.it;import java.sql.connection;import java.sql.preparedstatement;import java.sql.date;import java.sql.resultset;import java.sql.statement;import java.util.hashtable;public class schoolcrud /* * 添加學(xué)生信息,并返回波爾值,判斷是否添加成功 */public static bool
30、ean addstudent(studentbean student) throws exception boolean result = false;/聲明返回值,即是否添加成功connection conn = null;/創(chuàng)建連接對象preparedstatement pstmt = null;/創(chuàng)建preparedstatement對象string sql = insert into student(sno, sname, ssex, sbirth, sdept) values(?,?,?,?,?) ;/插入語句conn = dbutil.getconnection();/獲取連接ps
31、tmt = conn.preparestatement(sql);/預(yù)編譯sql語句pstmt.setstring(1, student.getsno();/為sql語句參數(shù)賦值pstmt.setstring(2, student.getsname();pstmt.setstring(3, student.getssex();java.util.date sbirth = student.getsbirth();/通過對象student的get方法獲取出生日期值java.sql.date date = new date(sbirth.gettime();/創(chuàng)建date對象,并將出生日期轉(zhuǎn)換為d
32、ate類型pstmt.setdate(4, date);/為sql語句參數(shù)賦值pstmt.setstring(5, student.getsdept();/為sql語句參數(shù)賦值,設(shè)置插入系別的值int i = pstmt.executeupdate();/執(zhí)行插入操作,返回int類型,1:插入數(shù)據(jù)至數(shù)據(jù)庫操作成功,0:操作失敗if (i = 1) result = true;/插入成功返回trueelse result = false;/插入失敗返回falsepstmt.close();/關(guān)閉preparedstatement對象conn.close();/關(guān)閉數(shù)據(jù)庫連接return resu
33、lt;public static hashtable getscoresbysno(string sno) throws exception /類實現(xiàn)一個哈希表,該哈希表將鍵映射到相應(yīng)的值。任何非 null 對象都可以用作鍵或值。為了成功地在哈希表中存儲和獲取對象,用作鍵的對象必須實現(xiàn) hashcode 方法和 equals 方法hashtable table = new hashtable();/創(chuàng)建一個hashtable實例connection conn = null;statement stmt = null;/創(chuàng)建statement對象resultset rs = null;/創(chuàng)建re
34、sultset對象,結(jié)果集/string和stringbuffer他們都可以存儲和操作字符串,即包含多個字符的字符串數(shù)據(jù),string類是字符串常量,是不可更改的常量。而stringbuffer是字符串變量,它的對象是可以擴充和修改的。stringbuffer sql = new stringbuffer();sql.append(select cname, score )/將字符串常量追加到stringbuffer類的對象sql的后面 .append(from sc, course ) .append(where co = sc.cno and sno = ) .append(sno) .a
35、ppend();conn = dbutil.getconnection();/獲取連接對象stmt = conn.createstatement();/實例化statement對象rs = stmt.executequery(sql.tostring();/執(zhí)行查詢操作,并將查詢結(jié)果保存至resultset對象string cname = null;/創(chuàng)建姓名字符串int score = -1;/若查詢不為空while (rs.next() cname = rs.getstring(cname);/姓名賦值操作,將所查到的姓名賦值給cname變量score = rs.getint(score)
36、;/成績賦值操作table.put(cname, score);/添加key/鍵值對,保存到哈希表中,name為鍵,score為保存值rs.close();/關(guān)閉resultset對象stmt.close();/關(guān)閉statemt對象conn.close();/關(guān)閉connection對象return table;/* * 更新用戶密碼 */public static boolean modifypassword(userbean user, string newpassword) throws exception boolean result = false;/創(chuàng)建返回值connection
37、 conn = null;/創(chuàng)建連接對象preparedstatement pstmt = null;/創(chuàng)建preparestatement對象string sql = update userinfo set password = ? where username = ?;/sql語句,更新conn = dbutil.getconnection();/獲取數(shù)據(jù)庫連接對象pstmt = conn.preparestatement(sql);/實例化preparestatement對象,并進行預(yù)編譯pstmt.setstring(1, newpassword);/為sql語句參數(shù)賦值pstmt.s
38、etstring(2, user.getusername();int i = pstmt.executeupdate();/執(zhí)行更新操作,返回int類型,1:更新數(shù)據(jù)操作成功,0:操作失敗if (i = 1) result = true;/更新成功返回trueelse result = false;/更新失敗返回falsepstmt.close();/關(guān)閉preparedstatement對象conn.close();/關(guān)閉connection對象return result;/返回是否操作成功public static boolean deletestudentbysno(string sno
39、) throws exception boolean result = false;/創(chuàng)建返回值connection conn = null;/創(chuàng)建連接對象preparedstatement pstmt = null;/創(chuàng)建preparestatement對象string sql = delete from student where sno = ?;/sql語句,刪除數(shù)據(jù)操作conn = dbutil.getconnection();/獲取數(shù)據(jù)庫連接對象pstmt = conn.preparestatement(sql);/實例化preparestatement對象,并進行預(yù)編譯pstmt.
40、setstring(1, sno);/為sql語句參數(shù)賦值int i = pstmt.executeupdate();/執(zhí)行刪除操作,返回int類型,1:刪除數(shù)據(jù)操作成功,0:操作失敗if (i = 1) result = true;/刪除成功返回trueelse result = false;/刪除失敗返回falsepstmt.close();/關(guān)閉preparedstatement對象conn.close();/關(guān)閉connection對象return result;/返回是否操作成功studentbeanpackage .buu.it;import java.util.dat
41、e;/* * student對象java bean */public class studentbean private string sno;/學(xué)號屬性private string sname;/學(xué)生姓名private string ssex;/學(xué)生性別private date sbirth;/學(xué)生出生年月日private string sdept;/學(xué)生系別/* * 學(xué)生屬性數(shù)據(jù)封裝 */獲取學(xué)號public string getsno() return sno;/設(shè)置學(xué)號參數(shù)值public void setsno(string sno) this.sno = sno;/獲取姓名publi
42、c string getsname() return sname;/設(shè)置學(xué)生姓名參數(shù)public void setsname(string sname) this.sname = sname;/獲取性別public string getssex() return ssex;/設(shè)置性別參數(shù)public void setssex(string ssex) this.ssex = ssex;/獲取出生日期public date getsbirth() return sbirth;/設(shè)置出生日期public void setsbirth(date sbirth) this.sbirth = sbirt
43、h;/獲取系別public string getsdept() return sdept;/設(shè)置系別參數(shù)public void setsdept(string sdept) this.sdept = sdept;userbeanpackage .buu.it;/ 實體類,與數(shù)據(jù)庫中的 userinfo 表對應(yīng)public class userbean private string username;/用戶名屬性private string password;/密碼屬性/無參構(gòu)造函數(shù)public userbean() /有參構(gòu)造函數(shù),為屬性值賦初值public userbean(st
44、ring username, string password) this.username = username;this.password = password;/* * 用戶屬性數(shù)據(jù)封裝 */獲取用戶名public string getusername() return username;/設(shè)置用戶名public void setusername(string username) this.username = username;/獲取密碼值public string getpassword() return password;/設(shè)置密碼值public void setpassword(string password) this.password = password;userloginutilpackage .buu.it;import java.sql.connection;import java.sql.resultset;import java.sql.statement;public class userloginutil
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)與社會責(zé)任研究-洞察分析
- 系統(tǒng)安全性分析-洞察分析
- 心搏驟停急救設(shè)備研發(fā)-洞察分析
- 虛擬現(xiàn)實與旅游文化體驗-洞察分析
- 南寧市三好學(xué)生主要事跡(8篇)
- 虛擬現(xiàn)實技術(shù)在游樂園的應(yīng)用-洞察分析
- 體育用品零售市場現(xiàn)狀分析-洞察分析
- 原子分子反應(yīng)動力學(xué)-洞察分析
- 天然氣水合物形成機制及其資源評價研究-洞察分析
- 胸部疾病影像智能識別-洞察分析
- 信息安全意識培訓(xùn)課件
- Python試題庫(附參考答案)
- 攀巖智慧樹知到期末考試答案章節(jié)答案2024年華中農(nóng)業(yè)大學(xué)
- 飲食的健康哲學(xué)智慧樹知到期末考試答案章節(jié)答案2024年青島大學(xué)
- MOOC 理解馬克思-南京大學(xué) 中國大學(xué)慕課答案
- MOOC 國際私法-暨南大學(xué) 中國大學(xué)慕課答案
- 部編本語文八年級上全冊文言文課下注釋
- 十二種健康教育印刷資料
- RTO處理工藝PFD計算
- 凱旋帝景地產(chǎn)杯籃球爭霸賽方案
- 煙草專賣(公司)內(nèi)部專賣管理監(jiān)督工作制度
評論
0/150
提交評論