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对应的种子的传输任务记录
+}
