เตรียม <br /> ในระยะแรกของ <br /> ก่อนอื่นคุณต้องมีความคิดทั่วไปอย่างชัดเจนฟังก์ชั่นที่จะบรรลุเพื่อทำความเข้าใจด้านใดของโมดูลทั้งหมดที่จะใช้และค้นพบข้อบกพร่องของคุณจาก กระบวนการทำ ความก้าวหน้าทางเทคนิคส่วนใหญ่จะต้องออกมาจากการฝึกฝน
ฟังก์ชั่น : ฟังก์ชั่นการลงทะเบียนผู้ใช้+ฟังก์ชั่นการเข้าสู่ระบบของระบบ+การสร้างรหัสการตรวจสอบ
ความรู้ : การออกแบบหน้าต่าง, การออกแบบฐานข้อมูล, แอตทริบิวต์บรรจุภัณฑ์ Javabean, การใช้งาน JDBC ของการเชื่อมต่อฐานข้อมูล, รหัสการตรวจสอบ (รวมถึงรหัสการตรวจสอบสี) เทคโนโลยีการสร้างและบางอย่างเช่นการใช้ข้อมูลการลงทะเบียนผู้ใช้การตรวจสอบการแสดงออกปกติ การควบคุมจำนวนอักขระในข้อความ ฯลฯ
โมดูลการออกแบบตัวอย่างแผนที่:
ดูตัวอย่างของรหัสการตรวจสอบสี:
ฐานข้อมูลที่ใช้: MySQL
การออกแบบฐานข้อมูล
สร้างฐานข้อมูล db_database01 ซึ่งมีตาราง tb_user เพื่อบันทึกข้อมูลการลงทะเบียนของผู้ใช้
มันมี 4 ฟิลด์
id int (11)
ชื่อผู้ใช้ Varchar (15)
รหัสผ่าน varchar (20)
อีเมล Varchar (45)
คำสั่ง MySQL สามารถออกแบบได้เช่นนี้:
สร้าง schema db_database01; ใช้ db_database01; 1, "lixiyu", "lixiyu", [email protected]);
ใช้ Lixiyu เป็นชื่อผู้ใช้
เลือกคำสั่งเพื่อตรวจสอบแบบฟอร์มที่สร้างขึ้น:
เขียนแอตทริบิวต์ผู้ใช้บรรจุภัณฑ์ Javabean
แพ็คเกจ com.lixiyu.model; โมฆะสาธารณะ setId (int id) {this.id = id;} สตริงสาธารณะ getuseerNername () {return username;} โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {thi s.username = ชื่อผู้ใช้;} สตริงสาธารณะ getPassword () {รหัสผ่านคืน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน;} สตริงสาธารณะ getEmail () {return email;} seitemail โมฆะสาธารณะ (strin g อีเมล) {this.email = อีเมล;}}}
เขียนคลาสเครื่องมือ JDBC
วางรหัสที่เกี่ยวข้องกับการดำเนินการฐานข้อมูลในอินเตอร์เฟส DBCONFIG และคลาส DBHELPER
อินเตอร์เฟส DBConfig ใช้เพื่อบันทึกฐานข้อมูลชื่อผู้ใช้และรหัสข้อมูลรหัสผ่าน:
แพ็คเกจ com.lixiyu.util;
เพื่อลดความซับซ้อนของการพัฒนา JDBC DBHELPER ใช้การรวมกันของคอมมอนส์ DBUTIL
คลาส DBHELPER สืบทอดอินเตอร์เฟส DBCONFIG
(1) วิธีการ getConnection (): รับการเชื่อมต่อฐานข้อมูลใช้แหล่งข้อมูล MySQL เพื่อทำให้การเขียนโปรแกรมง่ายขึ้นเพื่อหลีกเลี่ยงความผิดปกติเนื่องจากการโหลดไดรเวอร์ฐานข้อมูล
(2) มีอยู่ () วิธี: พิจารณาว่าชื่อผู้ใช้อินพุตมีอยู่หรือไม่
(3) วิธีการตรวจสอบ (): เมื่อผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านให้ตรวจสอบว่าวิธีการตรวจสอบ () ถูกต้องหรือไม่
(4) วิธีการบันทึก (): หลังจากผู้ใช้ป้อนข้อมูลการลงทะเบียนทางกฎหมายให้บันทึกข้อมูล
รหัสรายละเอียด:
com.lixiyu.util; Commons.dbutils.queryrunner; ; นำเข้า com.mysql.jdbc.jdbc2.optional.msqldatarce; การเชื่อมต่อ getConnection () {mysqldataSource mds = mysqldatasorce () ใหม่ // สร้างแหล่งข้อมูล mysql mds.setdatabasename (databasename); รหัสผ่าน); * * เพื่อตรวจสอบว่าผู้ใช้ที่ระบุชื่อผู้ใช้พร้อมใช้งานหรือไม่ / กำหนด connnnection แบบสอบถาม (); RSH); .PrintStackTrace ();} ในที่สุด ใช้คอมโพเนนต์คอมมอนส์เพื่อหลีกเลี่ยงการฉีด SQL * * @return: กลับไปที่จริงข้อผิดพลาดกลับไปที่การตรวจสอบบูลีนแบบคงที่สาธารณะ (ชื่อผู้ใช้สตริง, ถ่าน [] รหัสผ่าน) {ชื่อผู้ใช้ = stringscapeutils.escapesql (ชื่อผู้ใช้); ชื่อผู้ใช้อินพุตไปยัง QueryRunner runner = ใหม่ queryRunner (); / / สร้างสตริงวัตถุ QueryRunner SQL = "เลือกรหัสผ่านจาก tb_user herername = '" + ชื่อผู้ใช้ + "';"; พล็อต ResultsEthandler <jobch> rsh = new Scalalandler (); result.tocharray (); // password arrays.fill (querypasswork d, '0'); ); ข้อมูลที่ลงทะเบียนที่ป้อนโดยผู้ใช้ * * @return: หากการบันทึกถูกส่งกลับไปยัง TRUE สำเร็จความล้มเหลวของการเก็บรักษาจะส่งคืน Boolean แบบคงที่ * / Public Static Save (ผู้ใช้ผู้ใช้) {QueryRunner Runner = ใหม่ สตริงวัตถุ SQL = "แทรกลงใน tb_user (ชื่อผู้ใช้, รหัสผ่าน, อีเมล) ค่า (?,?,?);"; .getPassword (), user.getEmail ()}; ////////หากการบันทึกจะถูกส่งกลับไปยัง True return true;}} else {// ถ้าการเก็บรักษาล้มเหลวให้ส่งคืน False return false;}} catch (sqlexception e) {e.printstacktrace ();}} Equietly (Conn);
เข้าสู่ระบบระบบ
1.1 การออกแบบหน้าต่าง
ใช้เค้าโครง BoxLayout เพื่อตั้งค่าวิธีการจัดเรียงควบคุมจากบนลงล่าง:
โค้ดคัดลอกรหัสดังต่อไปนี้: ContentPane.SetLayout (ใหม่ BoxLayout (ContentPane, BoxLayout.Page_Axis));
หน้าต่างใช้การควบคุมโดเมนข้อความโดเมนรหัสผ่านปุ่มและตัวควบคุมอื่น ๆ เพื่อใช้รหัส:
ล็อกอินสาธารณะขยายตัว {private serialversionuid = -4655235896173916415L; ("" com.sun.java.swing.plaf.nimbus.nimbuslookandfeel ");} catch (throwable e) {eventqueue.invokeler (ใหม่ r) ไม่สามารถทำได้ () (); frame.setvisible (true);} catch (Exception e) {E.printstacktrace ();}}); usernamepanel = new JPanel (); usernamepanel.add (ผู้ใช้งานได้); (); ContentPane.Add (PasswordPanel); jpasswordfield (); = new JLabel ("/U9A8C/U8BC1/U7801/UFF1A"); validatetextfield.setfont (ฟอนต์ใหม่ ("Microsoft Yahei", Font.plain, 15); ValidatePanel.add (Validatetextfield); ); ; CancelButton = ใหม่ JButton ("Exit"); . ADD (CancelButton);
แสดงในหน้าต่าง:
ระดับสาธารณะ Swingutil {/** ตามขนาดของคอนเทนเนอร์พิกัดมุมบนซ้ายจะถูกคำนวณ )/ 2; พิกัดมุมซ้าย}}
1.2 รหัสการตรวจสอบและการวาดภาพ
คลาสสาธารณะ Captchalabel ขยาย Jlabel {ส่วนตัวคงที่สุดท้าย serialversionuid = -963570191302793615L ข้อความสตริงส่วนตัว; ฉลาก} @Overridepublic Void Paint (กราฟิก G) {Super G.DrawString (ข้อความ, 5, 25);
*รหัสการตรวจสอบสี:
Public Class ColorCaptChalabel ขยาย JLabel {ส่วนตัวคงที่สุดท้าย serialversionuid = -963570191302793615L; .gray, color.green, color.light_gray, color.magenta, color.orange, color.pink, color.red, color.yllow}; . text = text; .SetFont (ตัวอักษรใหม่ ("Microsoft Yahei", Font.plain, 16)); [color randomutils.nextint (colours.length));
1.3 โรงเรียนที่ไม่ว่างเปล่า
if (username.isempty ()) {// พิจารณาว่าชื่อผู้ใช้เป็น emptypanepane.showmessagedialog (นี่คือ "ชื่อผู้ใช้ไม่สามารถว่างเปล่า!", "ข้อมูลเตือน", jobpane.warning_message); (รหัสผ่าน) .iseMpty ()) {// ตรวจสอบว่ารหัสผ่านนั้นว่างเปล่า jobpane.showMessagedialog (นี่ "รหัสผ่านไม่สามารถว่างเปล่าได้หรือไม่!", "warningPane.warning_message); return;} ถ้า (ถูกต้องกิน {// พิจารณาว่ารหัสการตรวจสอบเป็น emptypanepane.showMessagedialog (นี่ "รหัสการตรวจสอบไม่สามารถว่างเปล่า!", "ข้อมูลเตือน", jobpane.warning_message);
1.4 การตรวจสอบความถูกต้องตามกฎหมาย
if (! dbhelper.exists (ชื่อผู้ใช้)) {// ถ้าไม่มีชื่อผู้ใช้มันจะแจ้งให้ jobpane.showMessageDialog (นี่ "ชื่อผู้ใช้ไม่มีอยู่!", "warningPane.warning_message); return; ! เพื่อแจ้งให้ jobpane.showmessagedialog (สิ่งนี้ "ข้อผิดพลาดของรหัสการตรวจสอบ!", "ข้อมูลเตือน", jobparning_message);
1.5 แสดงหน้าต่างหลัก
Eventqueue.invokelateer (ใหม่ runnable () {@overridepublic void run () {mainframe frame = mainframe ใหม่ (); // สร้างเฟรมหน้าต่างหลัก setSetVisible (จริง); // ตั้งหน้าต่างหลักเพื่อดู} catch (ยกเว้น e ) {E.PrintStackTrace ();}}});
ออกแบบหน้าต่างหลัก (ค่อนข้างง่ายนี้):
mainframe สาธารณะ () {SetDefaultCloseoperation (jFrame.EXIT_ON_CLOSE); ContentPane .SetLayout (BorderLayout ใหม่ (0, 0)); El .SetFont (ฟอนต์ใหม่ ("Microsoft Yahei", Font.plain, 40); // ตั้งค่า TAG FONTS ContentPane.Add (Tiplabel, BorderLayout.Center); // แอปพลิเคชันฉลาก setLocation (swingutil.centrecontainer )); // ให้หน้าต่างยืนอยู่ตรงกลางของหน้าต่าง}
การลงทะเบียนผู้ใช้
1.1 การออกแบบหน้าต่าง
การลงทะเบียนระดับสาธารณะ jframe {/****/ส่วนตัวคงที่ครั้งสุดท้าย serizationuid = 2491294229716316338L; แสดงข้อมูลพรอมต์/*** เปิดแอปพลิเคชัน*/โมฆะคงที่สาธารณะ (สตริง [] ศิลปะ) {ลอง {uimanager.setlookandfeel ("com.sun.java.plaf.nimbus.ni.ni mbuslookandfeel" (throwable e) {e.printStackTrace ();} eventqueue.invokelo (ใหม่ runnable () {@overridepublic void run () {ลอง {register frame = newer (); f rame.setVisible (จริง); ) {E.PrintStackTrace ();}}});}/*** สร้างเฟรม*/การลงทะเบียนสาธารณะ () {Settitle ("/U7528/U6CE8/U518C"); JPANEL ใหม่ (); /u540d/uff1a "); uernamelabel.setfont to. w jtextfield (); usernametextfield.settooltiptex U7684 /U7B57/U7B26/U7B26/U4E32 "); AbstractDocument DOC = (AbstractDocument) USERNAMETEXTFIELD.GetDocument (); doc.setDocumentFilter (เอกสารใหม่ (Documentsizelisizer, 15); "); PasswordLabel1.SetFont TOSET (" Microsoft Yahei ", Font.plain, 15)); PasswordPanel1.add (PasswordField1 = NewwordField (PasswordFordfield1 = newWordfield (); AbstrctDocument) PasswordField1.getDocument (); doc.setDocumentfilter 20); .SetColumns (10); 15)); Documeentsizelisizer, 20)); . ADD (EmailPanel); ); emailTextfield = new Jtextfield (); .AddoCumentListener (เอกสารใหม่ SELISTENER, 45); tton submentbutton = new jbutton ("/u63d0/u4ea4"); Font.plain, 15); = JButton ใหม่ ("/U53D6/U6D88"); yahei ", font.plain, 15); buttonpanel.add (cancelbutton); pack (); // ปรับขนาดของ setLocation หน้าต่างโดยอัตโนมัติ (swingutil.centrecontrecontrecontrecontrecontrecontre ตรงกลางของหน้าต่าง}
1.2 ใช้ DocumentFilter เพื่อ จำกัด จำนวนอักขระที่มีอยู่ในข้อความ
DocumentsizeFilter ขยายตัว DocumentFilter {private int maxsize; , int Office, String String, attributeset attr) พ่น badLocationException {ถ้า (fb.getDocume (). getLength () + string.length ()) <= maxsize) ขนาดใหญ่ -length Super.insertString (FB, ออฟเซ็ต, สตริง, attr) ; พ่น BadLocationException {ถ้า (fb.getDocument (). getLength () + text.length () <= maxsize) {// super.replace (fb, ชดเชย, ความยาว, ข้อความ, attrs); คลาส} else {toolkit.getdefaulttoolkit ()
1.3 ใช้อินเทอร์เฟซ DocumentListener เพื่อใช้การควบคุมข้อความที่แสดง
ชั้นเรียนเอกสารที่กำหนดค่าใช้จ่ายในการจัดทำเอกสาร {ส่วนตัว jlabel tiplabel ส่วนตัว; }@ ouverridepublic void removenate (documentEvent e) {settiptext (e);}@osuepublic voidupdate (documentEvent e) {settiptext (e);} void settiptext ส่วนตัว Document Object Tiplabel.setforeground (color.black); %tiplabel () + "/" + maxsize);}}
1.4 โรงเรียนที่ไม่ว่างเปล่า
if (username.isempty ()) {// พิจารณาว่าชื่อผู้ใช้เป็น emptypanepane.showmessagedialog (นี่คือ "ชื่อผู้ใช้ไม่สามารถว่างเปล่า!", "ข้อมูลเตือน", jobpane.warning_message); (รหัสผ่าน 1). isEmpty ()) {// ตรวจสอบว่ารหัสผ่านเป็นหนังสือพิมพ์ว่างเปล่า showMessagedialog (นี่ "รหัสผ่านไม่สามารถว่างเปล่าได้!", "warningPane.warning_message); return; ()) {// ตัดสินว่ารหัสผ่านยืนยันเป็น emptypanepane.ShowMessagedialog (นี่ "การยืนยันรหัสผ่านไม่สามารถว่างเปล่า!", "warningPane.warning_message); pty ()) (นี่ "อีเมลไม่สามารถว่างเปล่า!", "ข้อมูลเตือน", jobpane.warning_message);
1.5 ใช้สตริงการตรวจสอบนิพจน์ทั่วไป (การตรวจสอบความถูกต้องตามกฎหมาย)
// ข้าวสาลีไม่ว่าชื่อผู้ใช้จะถูกกฎหมายถ้า (! pattern.matches ("// w {5,15}" ชื่อผู้ใช้) {jobpane.showMessagedialog (นี่ "โปรดป้อนชื่อผู้ใช้ตามกฎหมาย!", "ข้อมูลเตือน" , jobpane.warning_message); return;} // ตรวจสอบว่ารหัสผ่านที่คุณป้อนสองครั้งนั้นเหมือนกันถ้า (! array.equals (รหัสผ่าน 1, รหัสผ่าน 2)) {jobpane.showmessagedialog (นี่นี่คือสิ่งนี้นี่ นี่นี่คือสิ่งนี้นี่นี่นี่คือสิ่งนี้นี่นี่นี่คือสิ่งนี้สิ่งนี้นี่นี่นี่คือสิ่งนี้นี่นี่นี่คือสิ่งนี้นี่นี่นี่คือสิ่งนี้นี่นี่คือ "รหัสผ่านที่แตกต่างกัน! "," "," "" ข้อมูลเตือน ", jobpane.warning_message); return;} // ตรวจสอบว่าที่อยู่อีเมลนั้นถูกต้องตามกฎหมายหรือไม่ถ้า (! Jobpine.ShowMessageDialo G (สิ่งนี้ "โปรดป้อนอีเมลทางกฎหมาย!", "ข้อมูลเตือน", jobpane.warning_message); return;} // ตรวจสอบว่าชื่อผู้ใช้มีอยู่จริงหรือไม่ บันทึก (นี้ "ชื่อผู้ใช้มีอยู่แล้ว", "ข้อมูลเตือน", jobpane.warning_message);
1.6 บันทึกข้อมูลการลงทะเบียน
ผู้ใช้ = ผู้ใช้ใหม่ (); if (dbhelper.save (ผู้ใช้)) {jobpane.showmessagedialog (นี้ "การลงทะเบียนผู้ใช้!" ane .information_message); ;}}}
ณ จุดนี้โมดูลการลงทะเบียนเข้าสู่ระบบที่เรียบง่ายและสมบูรณ์จะเสร็จสมบูรณ์
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้