diff --git a/src/main/java/entity/Seed.java b/src/main/java/entity/Seed.java
index eabf49d..394ce3c 100644
--- a/src/main/java/entity/Seed.java
+++ b/src/main/java/entity/Seed.java
@@ -50,4 +50,7 @@
 
     @Column(name = "popularity", nullable = false)
     public int downloadtimes;
+
+    @Column(name = "URL", columnDefinition = "TEXT")
+    public String url;
 }
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
index 603ec85..69d34ed 100644
--- a/src/main/java/entity/User.java
+++ b/src/main/java/entity/User.java
@@ -17,10 +17,10 @@
 public class User {
     @Id
     @Column(name = "user_id", length = 36, nullable = false)
-    private String userid;
+    public String userid;
 
     @Column(name = "email", nullable = false, length = 255, unique = true)
-    private String email;
+    public String email;
 
     @Column(name = "username", length = 100, nullable = false)
     public String username;
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
