版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、java程序設計實訓報告一、 系統(tǒng)功能說明“學生成績查詢系統(tǒng)”模仿簡單教務系統(tǒng),通過用戶名和密碼登陸,可存儲用戶信息、學生個人信息、課程和成績等內容,并可進行增刪查改四個基本操作。實現(xiàn)“教師錄入成績,學生查詢成績”的目的。 系統(tǒng)的不足之處:系統(tǒng)功能開發(fā)不全面,僅能實現(xiàn)記錄一門課成績,無更多增強功能。安全級別不夠高,易遭到攻擊破壞和篡改。界面不友好、不美觀,個別位置有小漏洞:在選擇功能菜單的按鈕時,系統(tǒng)只設計了支持阿拉伯數(shù)字。當用戶輸入英文字母或者其他文字時,整個程序則無法運行。增加學生就是按學生學號增加,系統(tǒng)沒有嚴格規(guī)定必須輸入相同位數(shù)的學生學號。成績查詢,修改密碼和刪除學生都是按學生學號實現(xiàn)
2、,在刪除學生這個功能里,數(shù)據(jù)庫中沒有存的學生信息也可以刪除。二、 數(shù)據(jù)庫的簡單介紹此系統(tǒng)數(shù)據(jù)庫為access數(shù)據(jù)庫,包括四個表,分別為student表,sc表,course表和userinfo表,分別存儲學生信息、成績、課程和用戶信息的內容。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方法,封裝學生屬性。9、userbean類定義了set和get方法,封裝用戶屬性。10、userloginutilis類接收user
4、。其中,我的理解application為主類consoleinpututil、consoleoutpututil這兩個類與界面輸入輸出有關dbutil、schoolcrud與數(shù)據(jù)庫相連實現(xiàn)相應功能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(登錄成功!);/ 顯示功能菜單并進行相應處理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對象,并通過有參構造函數(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(歡迎使用學生成績查詢系統(tǒng)!);system.out.println(*);/退出系統(tǒng)打印輸入語句public static void printgoodbyeinfo() system.out.println(*);system.out.println(謝謝使用學生成績查詢系統(tǒng),再見!);system.out.println(*);/打印輸出
11、學生成績public static void printscoresinfo(hashtable scores) throws exception /這些方法主要通過向量的元素、哈希表的鍵以及哈希表中的值進行枚舉。枚舉也用于將輸入流指定到 sequenceinputstream 中enumeration e = scores.keys();/將哈希表賦值于enumeration對象/實現(xiàn) enumeration 接口的對象,它生成一系列元素,一次生成一個。連續(xù)調用 nextelement 方法將返回一系列的連續(xù)元素string cname = null;int score = -1;/打印所有
12、學生的成績while (e.hasmoreelements() cname = (string) e.nextelement();/獲取姓名score = (integer)scores.get(cname);/通過鍵名獲取學生成績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、庫,可調用該類獲取可用的連接對象 * 需要先進行測試,看是否可以正常使用 */public class dbutil private static string driver;/定義連接驅動方式字符串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驅動加載到java虛擬機當中conn = drivermanager.getconnection(url);/加載連接驅動,并與數(shù)據(jù)庫建立連接,其中數(shù)據(jù)庫連接字符串用來標識數(shù)據(jù)庫return conn;/返回連接連接對象/* * 關閉數(shù)據(jù)
15、庫連接 */public static void closeconnection(connection conn) try /異常處理conn.close();/關閉連接對象 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);/關閉數(shù)據(jù)庫連接system.out.println(已關閉與數(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)建字符串對象變量,學號,姓名,性別,系別date sbirth;/date對象syst
18、em.out.print(請輸入學生學號:);sno = br.readline();/讀入學號,保存至sno中system.out.print(請輸入學生姓名:);sname = br.readline();/讀入姓名,保存至sname中system.out.print(請輸入學生性別:);ssex = br.readline();/讀入性別,保存至ssex中system.out.print(請輸入學生出生日期,格式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(請輸入學生系別:);sdept = br.readline();/讀入系別,保存至sdept中studentbean student = new studentbean();/創(chuàng)建學生對象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(添加學生成功!);/操作成功,打印輸出語句public static void listscores() throws exception system.out.print(請輸入學號:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedre
21、ader對象string sno = br.readline();/讀入學號,保存至sno中hashtable scores = schoolcrud.getscoresbysno(sno);/通過學號查詢成績并保存至哈希表中consoleoutpututil.printscoresinfo(scores);/打印輸出學生成績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(修改密碼成功!);/操作成功打印輸出語句/* * 刪除學生信息 */public static void deletestudent() throws exception system.out.print(請輸入學號:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操
25、作,創(chuàng)建bufferedreader對象string sno = br.readline();/讀入學號,保存至sno中system.out.print(你確定要刪除該學生嗎(y/n)? );string input = br.readline();/讀入字符,保存至input中/判斷是否輸入yif (input.equalsignorecase(y) boolean b = schoolcrud.deletestudentbysno(sno);/輸入y,執(zhí)行刪除操作,通過學號if (b) system.out.println(刪除學生信息成功!);/操作成功打印輸出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-增加學生,2-查詢成績,3-修改密碼,4-刪除學生,5-退出:);bufferedreader br = new bufferedreader(new inputstreamreader(system.in);/讀取數(shù)據(jù),輸入操作,創(chuàng)建bufferedreader對象string input = br.readline();/讀入輸入字符串int i = integer.parseint(input);/將讀入字符串類型轉換為int類型,即類型轉換switch (i) case 1: functionimplementati
28、on.addstudent(); break;/執(zhí)行添加操作case 2: functionimplementation.listscores(); break;/執(zhí)行打印輸出學生成績操作case 3: functionimplementation.modifypassword(user);break;/執(zhí)行修改用戶密碼操作case 4: functionimplementation.deletestudent();break;/執(zhí)行刪除學生信息操作case 5:return;/退出系統(tǒng)default:system.out.println(你的選擇非法!);/ 直接遞歸調用,再次顯示功能菜單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 /* * 添加學生信息,并返回波爾值,判斷是否添加成功 */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);/預編譯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對象,并將出生日期轉換為d
32、ate類型pstmt.setdate(4, date);/為sql語句參數(shù)賦值pstmt.setstring(5, student.getsdept();/為sql語句參數(shù)賦值,設置插入系別的值int i = pstmt.executeupdate();/執(zhí)行插入操作,返回int類型,1:插入數(shù)據(jù)至數(shù)據(jù)庫操作成功,0:操作失敗if (i = 1) result = true;/插入成功返回trueelse result = false;/插入失敗返回falsepstmt.close();/關閉preparedstatement對象conn.close();/關閉數(shù)據(jù)庫連接return resu
33、lt;public static hashtable getscoresbysno(string sno) throws exception /類實現(xiàn)一個哈希表,該哈希表將鍵映射到相應的值。任何非 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對象,結果集/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í)行查詢操作,并將查詢結果保存至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();/關閉resultset對象stmt.close();/關閉statemt對象conn.close();/關閉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對象,并進行預編譯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();/關閉preparedstatement對象conn.close();/關閉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對象,并進行預編譯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();/關閉preparedstatement對象conn.close();/關閉connection對象return result;/返回是否操作成功studentbeanpackage .buu.it;import java.util.dat
41、e;/* * student對象java bean */public class studentbean private string sno;/學號屬性private string sname;/學生姓名private string ssex;/學生性別private date sbirth;/學生出生年月日private string sdept;/學生系別/* * 學生屬性數(shù)據(jù)封裝 */獲取學號public string getsno() return sno;/設置學號參數(shù)值public void setsno(string sno) this.sno = sno;/獲取姓名publi
42、c string getsname() return sname;/設置學生姓名參數(shù)public void setsname(string sname) this.sname = sname;/獲取性別public string getssex() return ssex;/設置性別參數(shù)public void setssex(string ssex) this.ssex = ssex;/獲取出生日期public date getsbirth() return sbirth;/設置出生日期public void setsbirth(date sbirth) this.sbirth = sbirt
43、h;/獲取系別public string getsdept() return sdept;/設置系別參數(shù)public void setsdept(string sdept) this.sdept = sdept;userbeanpackage .buu.it;/ 實體類,與數(shù)據(jù)庫中的 userinfo 表對應public class userbean private string username;/用戶名屬性private string password;/密碼屬性/無參構造函數(shù)public userbean() /有參構造函數(shù),為屬性值賦初值public userbean(st
44、ring username, string password) this.username = username;this.password = password;/* * 用戶屬性數(shù)據(jù)封裝 */獲取用戶名public string getusername() return username;/設置用戶名public void setusername(string username) this.username = username;/獲取密碼值public string getpassword() return password;/設置密碼值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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老舊廠區(qū)改造方案設計
- 供氣項目目標與發(fā)展規(guī)劃
- 2024年苗木供需協(xié)議
- 城市更新項目可行性研究報告
- 插床機構課程設計畫圖
- 空心板梁課程設計20
- 2024年照明燈具采購與照明環(huán)境監(jiān)測服務合同3篇
- 2024年度單位二手房買賣法律保障協(xié)議3篇
- 2024年股權質押合同示例
- 2024年度代運營服務與運營支持合同2篇
- DB5105-T 4001-2023 白酒貯藏容器 陶壇
- 網絡安全培訓-網絡安全培訓課件
- 人教版高一數(shù)學上冊必修一第三章同步練習題課后練習題含答案解析及章知識點總結
- 大學有機化學人名反應總結
- 污水、廢水處理:芬頓氧化法工藝操作及設計
- CVT電壓式互感器的結構及工作原理、內在邏輯
- H型鋼梁等強連接計算
- 《文明城市建設問題研究開題報告3000字》
- GB/T 3917.1-1997紡織品織物撕破性能第1部分:撕破強力的測定沖擊擺錘法
- 玲龍醫(yī)用診斷X 射線系統(tǒng) XR 6000維修手冊
- 殘疾學生送教上門記錄
評論
0/150
提交評論