package Chlier;
import Util.Dates;
//客户端端
public class ChlierScorket {
public static void main(String[] args) {
System.out.println("************************************************");
System.out.println("<-----欢迎来到晖哥移动大厅----->");
Dates dates=new Dates();//dates对象
dates.mute();//方法调用
}
}
package Serever;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import Util.MyTheread;
//服务器端
public class SereverScorket {
public static void main(String[] args) {
try {
//新建端口
ServerSocket socket=new ServerSocket(6666);
while (true) {
//通过while循环使监听重复使用
Socket accept = socket.accept();
System.out.println(“链接成功!”);//提示语句
MyTheread thread=new MyTheread(accept);//建立线程对象
Thread th=new Thread(thread);//线程类型转换
th.start();//开启线程
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package Util;
import java.io.Serializable;
//服务状态
public class Date implements Serializable{
//服务的属性
private Object obj;//传输对象状态
private boolean yesNo;//传输结果
private String lookUser;//传输内容
private String fangfa;
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public boolean isYesNo() {
return yesNo;
}
public void setYesNo(boolean yesNo) {
this.yesNo = yesNo;
}
public String getLookUser() {
return lookUser;
}
public void setLookUser(String lookUser) {
this.lookUser = lookUser;
}
public String getFangfa() {
return fangfa;
}
public void setFangfa(String fangfa) {
this.fangfa = fangfa;
}
}
package Util;
//导入包区
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
//功能类
public class Dates {
//属性区
//socket客户端端口
private Socket socket;
//is输入流
private ObjectInputStream ois;
//os输出流
private ObjectOutputStream oos;
//建立date对象
Date date=new Date();
//用户键盘录入
Scanner input=new Scanner (System.in);
//初始化功能
public void inte(){
try {
//连接断开
socket=new Socket(“localhost”, 6666);
//建立io流,使io传输的数据为object类型的数据(可序列化数据)
oos=new ObjectOutputStream(socket.getOutputStream());
ois=new ObjectInputStream(socket.getInputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//菜单功能
public void mute(){
//定义布尔值变量,
boolean yeNo=false;
do {
System.out.println("——————1.开卡\t2.查询\t3.缴费\t4.退出——————");
System.out.println("=请输入服务项=");
String num=input.next();
//通过用户输入的数字进行对应的赋值
if(num.equals(“1”)){
date.setFangfa(“kaika”);
}if(num.equals(“2”)){
date.setFangfa(“lookUser”);
}if(num.equals(“3”)){
date.setFangfa(“andMoeny”);
}
//通过用户输入对应值进行对应的选项
if(num.equals(“1”)){
inte();//方法调用
newId();//方法调用
yeNo=false;//改变布尔值
}else if(num.equals(“2”)){
inte();//方法调用
lookUser();//方法调用
yeNo=false;//改变布尔值
}else if(num.equals(“3”)){
inte();//方法调用
andMoeny();//方法调用
yeNo=false;//改变布尔值
}else if(num.equals(“4”)){
System.out.println(“您已退出,欢迎下次使用!”);
yeNo=false;//改变布尔值
}else{
System.out.println(“您的输入有误,请重新输入!”);
yeNo=true;//改变布尔值
}
} while (yeNo);
}
//开卡
public void newId(){
//获取相应的信息
System.out.println(“请输入您的姓名”);
String name=input.next();
System.out.println(“请输入您的身份证号”);
String UserId=input.next();
User user=new User();
//通过用户输入的身份证号进行判定,如果是进行赋值,如果不是进行调用方法
if(UserId.length()==16){
user.setName(name);
user.setUserId(UserId);
}else{
System.out.println(“您的身份证号有误,请重试!”);
newId();
}
date.setObj(user);//对象赋值
try {
oos.writeObject(date);//通过输出流进行对象发送到服务端
Date dates = (Date) ois.readObject();//读取服务端返回的数据(date类型)
if(dates.isYesNo()){//判断对象的结果
System.out.println(“开卡成功,送您100元话费哦!”);
System.out.println(“您的电话号码是:”+dates.getFangfa());
mute();//调用方法
}else{
System.out.println(“开卡失败!”);
mute();//调用方法
}
ois.close();//刷新关闭流
oos.flush();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//查询
public void lookUser(){
//获取对应的数据
System.out.println(“请输入您的电话号码”);
String UserId=input.next();
User user=new User();
if(UserId.length()==11){//判读电话长度
user.setUserId(UserId);//长度符合要求进行赋值
date.setObj(user);
}else{
System.out.println(“您的电话号码有误,请重试!”);
mute();
}
try {
//向服务端进行发送数据
oos.writeObject(date);
Date dates = (Date) ois.readObject();//读取服务端返回的数据(date类型)
String lookUser = dates.getLookUser();
System.out.println(lookUser);
mute();
ois.close();//关闭刷新流
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void andMoeny(){
//获取对应数据
System.out.println(“请输入您的电话号码”);
String UserId=input.next();
User user=new User();
System.out.println("************************"+UserId);
if(UserId.length()==11){//判读电话长度
user.setUserId(UserId);
System.out.println(“请输入您的缴费金额:”);
int moeny=input.nextInt();//获取缴费金额
user.setMoeny(moeny);//将数据写入对象
date.setObj(user);
try {
oos.writeObject(date);//将数据对象法送到服务端
oos.flush();
Date dates = (Date) ois.readObject();//读取服务端返回的数据(date)
String obj = (String) dates.getObj();
if(dates.isYesNo()){//判断是否是,并输出内容
System.out.println(obj);
mute();
}else{
System.out.println(obj);
mute();
}
oos.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}else{
System.out.println(“您的电话号码有误,请重试!”);
newId();
}
}
}
package Util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Iterator;
import java.util.Random;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
//线程类
public class MyTheread implements Runnable {
//线程中存在的属性
private ObjectInputStream ois;//输入流
private ObjectOutputStream oos;//输出流
private Socket socket;//端口
private Element root ;//根节点
private Document document;
private User user ;//user 对象
private boolean yesNo=true;//布尔变量
Date date21=new Date();//date 对象
private String Id;
public MyTheread(Socket socket) {
this.socket = socket;
}
public ObjectInputStream getOis() {
return ois;
}
public void setOis(ObjectInputStream ois) {
this.ois = ois;
}
public ObjectOutputStream getOos() {
return oos;
}
public void setOos(ObjectOutputStream oos) {
this.oos = oos;
}
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
public Document getDocument() {
return document;
}
public void setDocuemnt(Document document) {
this.document = document;
}
//线程
public void run() {
try {
//对io流进行赋值
oos=new ObjectOutputStream(socket.getOutputStream());
ois=new ObjectInputStream(socket.getInputStream());
//读取客户端发送的数据(date)
date21 = (Date) ois.readObject();
user = (User) date21.getObj();//数据转换
if(date21.getFangfa().equals("kaika")){//判断用户发送的状态
readXML();//调用方法
Date dates=new Date();//date对象
if(yesNo){
date21.setYesNo(true);//对对象赋值
date21.setFangfa(Id);
oos.writeObject(date21);//向客户端法送数据
oos.close();//关闭流
}else{
oos.writeObject(date21);//向客户端法送数据
oos.close();//关闭流
}
}else if(date21.getFangfa().equals("lookUser")){//判断用户发送的状态
lookXML();//调用方法
Date dates=new Date();
if(yesNo){
//查询失败
oos.writeObject(date21);//向客户端发送数据
oos.close();
}else{
//查询成功
oos.writeObject(date21);
oos.close();
}
}else if(date21.getFangfa().equals("andMoeny")){//判断用户发送的状态
lookXML();//调用方法
Date dates=new Date();
if(yesNo){
Date date0=new Date();
String no="充值失败!";
date0.setYesNo(false);//对对象进行赋值
date0.setObj(no);
oos.writeObject(date0);//将对象数据发送到客户端
}else{
Date date0=new Date();
String no="充值成功!";
date0.setYesNo(true);//对对象进行赋值
date0.setObj(no);
oos.writeObject(date0);//将对象数据发送到客户端
}
}
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//读取文件
public void readXML(){
SAXReader read=new SAXReader();//解析器
try {
document=read.read(new File("User.xml"));//读取指定XML文件
root = document.getRootElement();//获取根节点
Iterator it = root.elementIterator();
Element next = null;
while (it.hasNext()) {//获取说有的子标签
next = (Element) it.next();
if(user.getName().endsWith(next.attributeValue("name"))){//判断
System.out.println("开卡失败!");
yesNo=false;
}
}
if(yesNo){
System.out.println("开卡成功!");
writeXML();
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
//查询文件
public void lookXML(){
boolean useryes=false;
SAXReader read=new SAXReader();//解析器
try {
Element next = null;
document=read.read(new File("User.xml"));//读取指定的XML文件
root = document.getRootElement();//获取所有的根节点
Iterator it = root.elementIterator();
while (it.hasNext()) {
next = (Element) it.next();//获取所有的子节点
Iterator it2= next.elementIterator();
while (it2.hasNext()) {
Element next2 = (Element) it2.next();//获取所有的孙节点
System.out.println(user.getUserId());
if(next2.getText().equals(user.getUserId())){
System.out.println("查询成功!");
String moeny1=next.element("moeny").getText();
date21.setLookUser(moeny1);//对对象进行赋值
if(date21.getFangfa().equals("andMoeny")){
int moeny = user.getMoeny();
Element eleme = next.element("moeny");
String moeny2=next.element("moeny").getText();
Integer of = Integer.valueOf(moeny2);//将string类型数据进行转换为int类型数据
int moenyss=of;
int moenys5=moenyss+moeny;
eleme.setText(moenys5+"");//将数据写入对象
OutputFormat formants=OutputFormat.createPrettyPrint();//编写XML文件添加的格式
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("User.xml")),formants);
writer.write(document);//保存到XML文件
writer.close();//关闭流
}
yesNo=false;
}
}
if(yesNo){
System.out.println("查询失败,请输入正确的号码!");
date21.setLookUser("请输入正确的号码!");
yesNo=true;
}
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//保存文件
public void writeXML(){
Element eleme = root.addElement("userName");//添加指定标签名的子节点
eleme.addAttribute("name", user.getName());//添加指定属性内容
Element foot=eleme.addElement("userId");//添加指定标签的孙节点
Random radom=new Random();//获取电话号码
int int1 = radom.nextInt(999999999);
int int2 = radom.nextInt(9);
Id="1"+int2+int1;
foot.addText("1"+int2+int1);
Element foot2=eleme.addElement("moeny");//添加指定内容的孙节点
foot2.addText("100");//添加孙节点的文本内容
OutputFormat format=OutputFormat.createPrettyPrint();//指定格式
try {
XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("User.xml")),format);//XML文件转换器
writer.write(document);//保存到XML文件
writer.close();//关闭流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package Util;
import java.io.Serializable;
//用户类
public class User implements Serializable{
private String name;//用户姓名
private String UserId;//用户身份证号
private int moeny;//用户年龄
public User() {
}
public User(String name, String userId, int moeny) {
this.name = name;
UserId = userId;
this.moeny = moeny;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUserId() {
return UserId;
}
public void setUserId(String userId) {
UserId = userId;
}
public int getMoeny() {
return moeny;
}
public void setMoeny(int moeny) {
this.moeny = moeny;
}
}