java聯(lián)系人管理系統(tǒng)簡單設(shè)計(jì)
本文實(shí)例為大家分享了java聯(lián)系人管理系統(tǒng)畢業(yè)設(shè)計(jì),供大家參考,具體內(nèi)容如下
要求:
請(qǐng)使用XML保存數(shù)據(jù),完成一個(gè)聯(lián)系人管理系統(tǒng)。
用戶必須經(jīng)過認(rèn)證登錄后方可以使用系統(tǒng)。
注冊(cè)、增加、刪除、查看聯(lián)系人功能。
分模塊進(jìn)行設(shè)計(jì)。
兩層框架-用戶交互層,Dao層。
其他支持層-數(shù)據(jù)封裝層。
工具類-加密,工廠Bean。
開發(fā)步驟:
第一步:設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)-XML。
第一步:設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)-XML。
第三步:準(zhǔn)備資源并編碼實(shí)現(xiàn)。
第四步:運(yùn)行測試。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><contacts> <user name="Jack" pwd="1234"> <contact id="707dede609dd4a2990f7cfa4cd5233f9"> <name>xiaoming</name> <sex>male</sex> <tel>123456</tel></contact> <contact id="80983802eaa6402d8bac8bb39e71c48f"> <name>12</name> <sex>12</sex> <tel>12</tel> </contact></user> <user name="Rose" pwd="4321"> <contact id="eedb795b97194c3aaa9bacda7e2948e9"> <name>xiaoming</name> <sex>female</sex> <tel>123</tel> </contact></user> </contacts>
util
package cn.hncu.contact.util;
import java.util.UUID;
public class IDGenerate {
private IDGenerate(){
}
public static String getID(){
// return UUID.randomUUID().toString();
return UUID.randomUUID().toString().replace("-", "");
}
}
package cn.hncu.contact.util;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
public class myDocumentFactory {
private static final String FILE_NAME="./xml/users.xml";
private static Document dom=null;
static{
DocumentBuilder db;
try {
db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
dom=db.parse(FILE_NAME);
} catch (Exception e) {
throw new RuntimeException("xml文檔解析失敗...",e);
}
}
public static Document getDocument(){
return dom;
}
public static void save(){
try {
Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(dom), new StreamResult(FILE_NAME));
} catch (Exception e) {
throw new RuntimeException("xml文檔存儲(chǔ)失敗...", e);
}
// ConfigurationError:配置異常
}
}
dao
package cn.hncu.contact.dao;
import java.util.List;
import java.util.Map;
import org.w3c.dom.Element;
public interface contactDAO {
public abstract boolean login(String name,String pwd);
public abstract List<Map<String, String>> queryAll();
public abstract Element add(String name,String sex,String tel);
public abstract void reg(String name,String pwd);
public Element delete(String id);//默認(rèn)abstract
public abstract Element change(String id, String name, String sex,
String tel);
}
package cn.hncu.contact.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import cn.hncu.contact.util.IDGenerate;
import cn.hncu.contact.util.myDocumentFactory;
public class contactImpl implements contactDAO{
private Element currentUser;
Document dom=null;
public contactImpl(){
}
// private static String name=null;
// private static String pwd=null;
@Override
// public boolean login(String name2, String pwd2) {
public boolean login(String name, String pwd) {
// name=name2;
// pwd=pwd2;
dom=myDocumentFactory.getDocument();
Element root=(Element) dom.getFirstChild();
NodeList nodelist=root.getElementsByTagName("user");
for(int i=0;i<nodelist.getLength();i++){
Element e=(Element) nodelist.item(i);
if(e.getAttribute("name").equalsIgnoreCase(name)&&e.getAttribute("pwd").equalsIgnoreCase(pwd)){
currentUser=e;
return true;
}
}
return false;
}
@Override
public List<Map<String, String>> queryAll() {
List<Map<String, String>> list=new ArrayList<Map<String,String>>();
if(currentUser==null){
return list ;
}
NodeList nodeList=currentUser.getElementsByTagName("contact");
for(int i=0;i<nodeList.getLength();i++){
Map<String, String> map= new HashMap<String, String>();
Element e=(Element) nodeList.item(i);
String id=e.getAttribute("id");
map.put("id", id);
String name=e.getElementsByTagName("name").item(0).getTextContent();
map.put("name", name);
String sex=e.getElementsByTagName("sex").item(0).getTextContent();
map.put("sex", sex);
String tel=e.getElementsByTagName("tel").item(0).getTextContent();
map.put("tel", tel);
list.add(map);
}
return list;
}
@Override
public Element add(String name,String sex,String tel) {
Document dom=myDocumentFactory.getDocument();
Element eNewContact=dom.createElement("contact");
eNewContact.setAttribute("id", IDGenerate.getID());
Element nameNew=dom.createElement("name");
nameNew.setTextContent(name);
eNewContact.appendChild(nameNew);
Element sexNew=dom.createElement("sex");
sexNew.setTextContent(sex);
eNewContact.appendChild(sexNew);
Element telNew=dom.createElement("tel");
telNew.setTextContent(tel);
eNewContact.appendChild(telNew);
currentUser.appendChild(eNewContact);
myDocumentFactory.save();
// login(name, pwd);
return eNewContact;
}
public Element delete(String id) {
NodeList nodeList=currentUser.getElementsByTagName("contact");
for(int i=0;i<nodeList.getLength();i++){
Element e=(Element) nodeList.item(i);
if(e.getAttribute("id").equals(id)){
currentUser.removeChild(e);//把節(jié)點(diǎn)從樹中移除
myDocumentFactory.save();
// login(name, pwd);
return e;
}
}
return null;
}
@Override
public void reg(String name, String pwd) {
Document dom=myDocumentFactory.getDocument();
Element userNew=dom.createElement("user");
userNew.setAttribute("name", name);
userNew.setAttribute("pwd", pwd);
dom.getFirstChild().appendChild(userNew);
myDocumentFactory.save();
}
@Override
public Element change(String id, String name, String sex, String tel) {
NodeList nodeList=currentUser.getElementsByTagName("contact");
for(int i=0;i<nodeList.getLength();i++){
Element e=(Element) nodeList.item(i);
if(e.getAttribute("id").equals(id)){
e.getElementsByTagName("name").item(0).setTextContent(name);
e.getElementsByTagName("sex").item(0).setTextContent(sex);
e.getElementsByTagName("tel").item(0).setTextContent(tel);
myDocumentFactory.save();
// login(name, pwd);
return e;
}
}
return null;
}
}
package cn.hncu.contact.dao;
public class contactDAOFactory {
private contactDAOFactory(){
}
public static contactDAO getContactDAO(){
return new contactImpl();
}
}
cmd
package cn.hncu.contact.cmd;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.w3c.dom.Element;
import cn.hncu.contact.dao.contactDAO;
import cn.hncu.contact.dao.contactDAOFactory;
public class contanctAction {
private contactDAO dao=contactDAOFactory.getContactDAO();
private Scanner sc=null;
private String delIds[];
public contanctAction(){
sc=new Scanner(System.in);
while (true) {
System.out.println("1:登錄");
System.out.println("2:注冊(cè)");
System.out.println("0:退出");
String op=sc.nextLine();
if ("1".equals(op)) {
Login();
} else if ("2".equals(op)) {
Reg();
} else {
// System.exit(0);
break;
}
}
}
private void Reg() {
System.out.println("請(qǐng)輸入用戶名:");
String name=sc.nextLine();
System.out.println("請(qǐng)輸入用戶密碼:");
String pwd=sc.nextLine();
System.out.println("請(qǐng)確認(rèn)用戶密碼:");
String pwd2=sc.nextLine();
if(pwd.equals(pwd2)){
dao.reg(name,pwd);
}else{
System.out.println("兩次密碼輸入不一致,請(qǐng)重新注冊(cè)");
}
}
private void Login() {
System.out.println("請(qǐng)輸入用戶名:");
String name=sc.nextLine();
System.out.println("請(qǐng)輸入用戶密碼:");
String pwd=sc.nextLine();
boolean boo=dao.login(name, pwd);
if(boo){
System.out.println("登錄成功...");
operation();
}else{
System.out.println("denglushibai");
}
}
private void operation() {
List<Map<String, String>> list = dao.queryAll();
delIds=new String[list.size()];
int i=0;
for (Map<String, String> map : list) {
String id=map.get("id");
delIds[i++]=id;
}
// while (true) {
//因?yàn)楣灿猛豢胐om樹,所以每次增刪改查之后,還是原來那棵dom樹.
//而while內(nèi)的操作都是對(duì)之前的操作,所以要退出到上一階段重新登陸,獲取更新之后的dom樹
System.out.println("1:顯示聯(lián)系人");
System.out.println("2:添加聯(lián)系人");
System.out.println("3:刪除聯(lián)系人");
System.out.println("4:修改聯(lián)系人");
System.out.println("0:退出");
String sel = sc.nextLine();
if ("1".equals(sel)) {
System.out.println("序號(hào)\t姓名\t性別\t電話");
System.out.println("------------------------------");
int j = 1;
for (Map<String, String> map : list) {
String name = map.get("name");
String sex = map.get("sex");
String tel = map.get("tel");
System.out.println((j++) + "\t" + name + "\t" + sex + "\t"
+ tel);
}
} else if ("2".equals(sel)) {
addContact();
} else if ("3".equals(sel)) {
delContact();
} else if ("4".equals(sel)) {
changeContact();
} else if ("0".equals(sel)) {
return;
// break;
}
// }
operation();
}
private void changeContact() {
System.out.println("請(qǐng)輸入要修改的聯(lián)系人的序號(hào):");
int num=sc.nextInt();
sc.nextLine();//吸掉換行符1
System.out.println("請(qǐng)輸入要修改的聯(lián)系人的姓名:");
String name=sc.nextLine();
System.out.println("請(qǐng)輸入要修改的聯(lián)系人的姓別:");
String sex=sc.nextLine();
System.out.println("請(qǐng)輸入要修改的聯(lián)系人的電話:");
String tel=sc.nextLine();
Element e=dao.change(delIds[num-1],name,sex,tel);
if(e!=null){
System.out.println(num+"號(hào)聯(lián)系人更新之后:姓名:"+e.getElementsByTagName("name").item(0).getTextContent()
+"性別:"+e.getElementsByTagName("sex").item(0).getTextContent()
+"電話號(hào)碼:"+e.getElementsByTagName("tel").item(0).getTextContent());
}else{
System.out.println("修改失敗...");
}
}
private void delContact() {
System.out.println("請(qǐng)輸入刪除的聯(lián)系人序號(hào):");
int num=sc.nextInt();
sc.nextLine();//吸掉換行符
Element e=dao.delete(delIds[num-1]);
if(e==null){
System.out.println("刪除失敗,無此聯(lián)系人");
}else{
System.out.println("刪除聯(lián)系人:"+e.getElementsByTagName("name").item(0).getTextContent()+"成功...");
}
}
private void addContact() {
System.out.println("請(qǐng)輸入聯(lián)系人信息:");
System.out.println("姓名:");
String name=sc.nextLine();
System.out.println("姓別:");
String sex=sc.nextLine();
System.out.println("電話:");
String tel=sc.nextLine();
Element e=dao.add( name,sex, tel);
System.out.println("添加聯(lián)系人"+e.getElementsByTagName("name").item(0).getTextContent()+"成功...");
}
public static void main(String[] args) {
new contanctAction();
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot Quartz動(dòng)態(tài)修改cron表達(dá)式的方法
這篇文章主要介紹了springboot Quartz動(dòng)態(tài)修改cron表達(dá)式的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
Java二維數(shù)組與稀疏數(shù)組相互轉(zhuǎn)換實(shí)現(xiàn)詳解
在某些應(yīng)用場景中需要大量的二維數(shù)組來進(jìn)行數(shù)據(jù)存儲(chǔ),但是二維數(shù)組中卻有著大量的無用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間2022-09-09
JavaWeb簡單用戶登錄注冊(cè)實(shí)例代碼(有驗(yàn)證碼)
這篇文章主要介紹了JavaWeb簡單用戶登錄注冊(cè)實(shí)例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
spring event 事件異步處理方式(發(fā)布,監(jiān)聽,異步處理)
這篇文章主要介紹了spring event 事件異步處理方式(發(fā)布,監(jiān)聽,異步處理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
SSM框架中測試單元的使用 spring整合Junit過程詳解
這篇文章主要介紹了SSM框架中測試單元的使用 spring整合Junit過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
詳解Java使用Pipeline對(duì)Redis批量讀寫(hmset&hgetall)
本篇文章主要介紹了Java使用Pipeline對(duì)Redis批量讀寫(hmset&hgetall),具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12
Spring?Boot教程之提高開發(fā)效率必備工具lombok
這篇文章主要介紹了Spring?Boot教程之提高開發(fā)效率必備工具lombok的相關(guān)資料,需要的朋友可以參考下2022-08-08
Java利用StringBuffer替換特殊字符的方法實(shí)現(xiàn)
這篇文章主要介紹了Java利用StringBuffer替換特殊字符的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

