diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index d53c258..6334ebb 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -11,10 +11,10 @@
 
 import com.querydsl.jpa.impl.JPAUpdateClause;
 
+import entity.QUserPT;
 import entity.TTorent;
 import entity.TransRecord;
 import entity.config;
-import entity.QUserPT;
 
 public class Tracker implements TrackerInterface {
     private final EntityManagerFactory emf;
@@ -80,32 +80,92 @@
     }
 
     @Override
-    public boolean AddDownload(String userid,int download){
-        return true;
-    };//给用户增加下载量，返回0成功，返回1失败;
+    public boolean AddDownload(String userid, int download) {
+        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.download, q.download.add(download))
+                .execute();
+            tx.commit();
+            return updated <= 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return true;
+        } finally {
+            em.close();
+        }
+    }
 
     @Override
-    public boolean ReduceDownload(String userid,int download){
-        return true;
-    };//给用户减少下载量，返回0成功，返回1失败;
+    public boolean ReduceDownload(String userid, int download) {
+        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.download, q.download.subtract(download))
+                .execute();
+            tx.commit();
+            return updated <= 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return true;
+        } finally {
+            em.close();
+        }
+    }
 
     @Override
-    public boolean AddMagic(String userid,int magic){
-        return true;
-    };//给用户增加魔力值，返回0成功，返回1失败;
+    public boolean AddMagic(String userid, int magic) {
+        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.magic, q.magic.add(magic))
+                .execute();
+            tx.commit();
+            return updated <= 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return true;
+        } finally {
+            em.close();
+        }
+    }
 
     @Override
-    public boolean ReduceMagic(String userid,int magic){
-        return true;
-    };//给用户减少魔力值，返回0成功，返回1失败;
+    public boolean ReduceMagic(String userid, int magic) {
+        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.magic, q.magic.subtract(magic))
+                .execute();
+            tx.commit();
+            return updated <= 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return true;
+        } finally {
+            em.close();
+        }
+    }
+
 
     @Override
-    public TTorent ReadTorrent(File torrent){
-        return new TTorent();
-    };//传入torrent文件，解析后返回TTorent类
-
-    @Override
-    public int SaveTorrent(TTorent seed,String seedid){
+    public int SaveTorrent(File TTorent){
         return 0;
     };//保存seedid对应的ttorent信息
 
@@ -116,7 +176,20 @@
 
 
     @Override
-    public int AddRecord(String seedid,TransRecord rd){
-        return 0;
-    };//新增一个seedid对应的种子的传输任务记录
+    public int AddRecord(TransRecord rd){
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tx = em.getTransaction();
+        try {
+            tx.begin();
+            em.persist(rd);
+            tx.commit();
+            // 持久化成功，返回1表示插入成功
+            return 1;
+        } catch (Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return -1;
+        } finally {
+            em.close();
+        }
+    }
 }
diff --git a/src/main/java/tracker/TrackerInterface.java b/src/main/java/tracker/TrackerInterface.java
index 0c2df5c..1496a26 100644
--- a/src/main/java/tracker/TrackerInterface.java
+++ b/src/main/java/tracker/TrackerInterface.java
@@ -1,8 +1,8 @@
 package tracker;
 import java.io.File;
 
-import entity.TTorent;
 import entity.TransRecord;
+
 public interface TrackerInterface{
     public boolean AddUpLoad(String userid,int upload);//给用户新增上传量，返回0成功，返回1失败;
     public boolean ReduceUpLoad(String userid,int upload);//给用户减上传量，返回0成功，返回1失败;
@@ -11,9 +11,8 @@
     public boolean AddMagic(String userid,int magic);//给用户增加魔力值，返回0成功，返回1失败;
     public boolean ReduceMagic(String userid,int magic);//给用户减少魔力值，返回0成功，返回1失败;
 
-    public TTorent ReadTorrent(File torrent);//传入torrent文件，解析后返回TTorent类
-    public int SaveTorrent(TTorent seed,String seedid);//保存seedid对应的ttorent信息
+    public int SaveTorrent(File TTorent);//保存seedid对应的ttorent信息
     public File GetTTorent(String seedid,String userid);//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
-
-    public int AddRecord(String seedid,TransRecord rd);//新增一个seedid对应的种子的传输任务记录
+    
+    public int AddRecord(TransRecord rd);//新增一个seedid对应的种子的传输任务记录
 }
\ No newline at end of file
