diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 210b9bf..da92c17 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,5 +1,4 @@
 package tracker;
-
 import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -19,10 +18,8 @@
 import entity.config;
 import entity.TTorent;
 import java.time.LocalDateTime;
-
 public class Tracker implements TrackerInterface {
     private final EntityManagerFactory emf;
-
     // 默认构造：产线数据库
     public Tracker() {
         config cfg = new config();
@@ -33,12 +30,10 @@
         props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
         this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
     }
-
     // 测试传入：测试库
     public Tracker(EntityManagerFactory emf) {
         this.emf = emf;
     }
-
     @Override
     public boolean AddUpLoad(String userid, int upload) {
         EntityManager em = emf.createEntityManager();
@@ -60,7 +55,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean ReduceUpLoad(String userid, int upload){
         EntityManager em = emf.createEntityManager();
@@ -82,7 +76,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean AddDownload(String userid, int download) {
         EntityManager em = emf.createEntityManager();
@@ -103,7 +96,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean ReduceDownload(String userid, int download) {
         EntityManager em = emf.createEntityManager();
@@ -124,7 +116,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean AddMagic(String userid, int magic) {
         EntityManager em = emf.createEntityManager();
@@ -145,7 +136,6 @@
             em.close();
         }
     }
-
     @Override
     public boolean ReduceMagic(String userid, int magic) {
         EntityManager em = emf.createEntityManager();
@@ -166,7 +156,6 @@
             em.close();
         }
     }
-
     @Override
     public int SaveTorrent(String seedid, File TTorent){
         try {
@@ -177,7 +166,6 @@
             String filename = TTorent.getName();
             Path target = storageDir.resolve(seedid + "_" + filename);
             Files.copy(TTorent.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
-
             EntityManager em = emf.createEntityManager();
             EntityTransaction tx = em.getTransaction();
             try {
@@ -197,7 +185,6 @@
             return 1;
         }
     }
-
     @Override
     public File GetTTorent(String seedid, String userid, String ip) {
         EntityManager em = emf.createEntityManager();
@@ -230,7 +217,6 @@
         }
         return file;
     }
-
     @Override
     public int AddRecord(TransRecord rd){
         EntityManager em = emf.createEntityManager();
@@ -248,4 +234,4 @@
             em.close();
         }
     }
-}
+}
\ No newline at end of file
