diff --git a/src/main/java/object/config.java b/src/main/java/object/config.java
index e584e22..a620518 100644
--- a/src/main/java/object/config.java
+++ b/src/main/java/object/config.java
@@ -6,4 +6,6 @@
     public int FakeTime;
     public int BegVote;
     public String SqlURL="192.168.5.9:3306";
+    public String Database="pt_database";
+    public String TestDatabase="pt_database_test";
 }
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index e1165b2..8addf61 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,5 +1,84 @@
 package tracker;
 
-// public class Tracker implements TrackerInterface {
-    
-// }
+import java.io.File;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+import com.querydsl.jpa.impl.JPAUpdateClause;
+import object.QUserPT;
+import object.UserPT;
+import object.TTorent;
+import object.TransRecord;
+
+public class Tracker implements TrackerInterface {
+    private static final EntityManagerFactory emf =
+        Persistence.createEntityManagerFactory("myPersistenceUnit");
+
+    @Override
+    public boolean AddUpLoad(String userid, int upload) {
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tx = em.getTransaction();
+        try {
+            tx.begin();
+            QUserPT q = QUserPT.userPT;
+            long updated = new JPAUpdateClause(em, q)
+                .where(q.userid.eq(userid))
+                .set(q.upload, q.upload.add(upload))
+                .execute();
+            tx.commit();
+            return updated > 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return false;
+        } finally {
+            em.close();
+        }
+    }
+
+    @Override
+    public boolean ReduceUpLoad(String userid,int upload){
+        return false;
+    };//给用户减上传量，返回0成功，返回1失败;
+
+    @Override
+    public boolean AddDownload(String userid,int download){
+        return false;
+    };//给用户增加下载量，返回0成功，返回1失败;
+
+    @Override
+    public boolean ReduceDownload(String userid,int download){
+        return false;
+    };//给用户减少下载量，返回0成功，返回1失败;
+
+    @Override
+    public boolean AddMagic(String userid,int magic){
+        return false;
+    };//给用户增加魔力值，返回0成功，返回1失败;
+
+    @Override
+    public boolean ReduceMagic(String userid,int magic){
+        return false;
+    };//给用户减少魔力值，返回0成功，返回1失败;
+
+    @Override
+    public TTorent ReadTorrent(File torrent){
+        return new TTorent();
+    };//传入torrent文件，解析后返回TTorent类
+
+    @Override
+    public int SaveTorrent(TTorent seed,String seedid){
+        return 0;
+    };//保存seedid对应的ttorent信息
+
+    @Override
+    public File GetTTorent(String seedid,String userid){
+        return null;
+    };//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
+
+
+    @Override
+    public int AddRecord(String seedid,TransRecord rd){
+        return 0;
+    };//新增一个seedid对应的种子的传输任务记录
+}
diff --git a/src/test/java/apitest/apisystest.java b/src/test/java/apitest/apisystest.java
new file mode 100644
index 0000000..f8ca9ed
--- /dev/null
+++ b/src/test/java/apitest/apisystest.java
@@ -0,0 +1,5 @@
+package apitest;
+
+public class apisystest {
+    
+}
diff --git a/src/test/java/cheattest/cheatsystest.java b/src/test/java/cheattest/cheatsystest.java
new file mode 100644
index 0000000..090500c
--- /dev/null
+++ b/src/test/java/cheattest/cheatsystest.java
@@ -0,0 +1,5 @@
+package cheattest;
+
+public class cheatsystest {
+    
+}
diff --git a/src/test/java/databasetest/databasetest.java b/src/test/java/databasetest/databasetest.java
new file mode 100644
index 0000000..e947a9b
--- /dev/null
+++ b/src/test/java/databasetest/databasetest.java
@@ -0,0 +1,5 @@
+package databasetest;
+
+public class databasetest {
+    
+}
diff --git a/src/test/java/trackertest/trackersystest.java b/src/test/java/trackertest/trackersystest.java
new file mode 100644
index 0000000..90ea14f
--- /dev/null
+++ b/src/test/java/trackertest/trackersystest.java
@@ -0,0 +1,5 @@
+package trackertest;
+
+public class trackersystest {
+    
+}
diff --git a/src/test/java/viptest/vipsystest.java b/src/test/java/viptest/vipsystest.java
new file mode 100644
index 0000000..89a0555
--- /dev/null
+++ b/src/test/java/viptest/vipsystest.java
@@ -0,0 +1,5 @@
+package viptest;
+
+public class vipsystest {
+    
+}
