diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 8d919b6..28a8ac5 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -40,6 +40,91 @@
 //     }
 
 //     @Override
+//     public int RegisterUser(User userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int UpdateInformation(User userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public User GetInformation(String userid) {
+//         return null;
+//     }
+
+//     @Override
+//     public UserPT GetInformationPT(String userid) {
+//         return null;
+//     }
+
+//     @Override
+//     public int UpdateInformationPT(UserPT userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int RegisterUserPT(UserPT userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public Seed GetSeedInformation(String seedid) {
+//         return null;
+//     }
+
+//     @Override
+//     public int RegisterSeed(Seed seedinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int UpdateSeed(Seed seedinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public Seed[] SearchSeed(String userQ) {
+//         return new Seed[0];
+//     }
+
+//     @Override
+//     public int AddNotice(Notice notice) {
+//         return 0;
+//     }
+
+//     @Override
+//     public boolean UpdateNotice(Notice notice) {
+//         return false;
+//     }
+
+//     @Override
+//     public boolean DeleteNotice(String noticeid) {
+//         return false;
+//     }
+
+//     @Override
+//     public int GetUserAvailableInviteTimes(String userid) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int InviteUser(String inviterid, String inviteemail) {
+//         return 0;
+//     }
+
+//     @Override
+//     public boolean AddCollect(String userid, String postid) {
+//         return false;
+//     }
+
+//     @Override
+//     public boolean DeleteCollect(String userid, String postid) {
+//         return false;
+//     }
+
+//     @Override
 //     public int AddBegSeed(BegInfo info) {
 //         if (info == null || info.begid == null || info.begid.isEmpty()) {
 //             logger.warn("Invalid parameter: info is null or begid is empty");
@@ -208,13 +293,14 @@
 //             Long voteCount = new JPAQuery<>(em)
 //                     .select(uv.count())
 //                     .from(uv)
-//                     .where(uv.userId.eq(userId)
-//                             .and(uv.begId.eq(begId))
-//                             .and(uv.seedId.eq(seedId)))
+//                     .where(uv.user.userid.eq(userId))
+//                     .where(uv.begInfo.begid.eq(begId))
+//                     .where(uv.seed.seedid.eq(seedId))
 //                     .fetchOne();
 
 //             if (voteCount > 0) {
-//                 logger.warn("User {} has already voted for seed {} in beg {}", userId, seedId, begId);
+//                 logger.warn("User {} has already voted for seed {} in beg {}", userId,
+//                         seedId, begId);
 //                 return 1;
 //             }
 
@@ -278,12 +364,13 @@
 //             Long submitCount = new JPAQuery<>(em)
 //                     .select(ss.count())
 //                     .from(ss)
-//                     .where(ss.begId.eq(begid)
-//                             .and(ss.seedId.eq(seed.seedid)))
+//                     .where(ss.begInfo.begid.eq(begid))
+//                     .where(ss.seed.seedid.eq(seed.seedid))
 //                     .fetchOne();
 
 //             if (submitCount > 0) {
-//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid, begid);
+//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid,
+//                         begid);
 //                 return 1;
 //             }
 
@@ -338,15 +425,15 @@
 //                 // 2. 查找投票最多的提交任务
 //                 QSubmitSeed ss = QSubmitSeed.submitSeed;
 //                 Tuple topSubmission = new JPAQuery<>(em)
-//                         .select(ss.seedId, ss.votes)
+//                         .select(ss.seed.seedid, ss.votes)
 //                         .from(ss)
-//                         .where(ss.begId.eq(beg.begid))
+//                         .where(ss.begInfo.begid.eq(beg.begid))
 //                         .orderBy(ss.votes.desc())
 //                         .limit(1)
 //                         .fetchOne();
 
 //                 if (topSubmission != null && topSubmission.get(ss.votes) > 0) {
-//                     String seedId = topSubmission.get(ss.seedId);
+//                     String seedId = topSubmission.get(ss.seed.seedid);
 
 //                     // 3. 获取上传者ID
 //                     QSeed s = QSeed.seed;
@@ -374,7 +461,8 @@
 //             }
 
 //             tx.commit();
-//             logger.info("Successfully settled {} expired beg requests", expiredBegs.size());
+//             logger.info("Successfully settled {} expired beg requests",
+//                     expiredBegs.size());
 
 //         } catch (Exception e) {
 //             if (tx != null && tx.isActive()) {
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
index 69d34ed..d1d67c7 100644
--- a/src/main/java/entity/User.java
+++ b/src/main/java/entity/User.java
@@ -8,50 +8,39 @@
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Transient;
-
 import com.querydsl.core.annotations.QueryEntity;
 
 @QueryEntity
-@Entity(name="User")
+@Entity(name = "User")
 @Table(name = "User")
 public class User {
     @Id
     @Column(name = "user_id", length = 36, nullable = false)
     public String userid;
-
     @Column(name = "email", nullable = false, length = 255, unique = true)
     public String email;
-
     @Column(name = "username", length = 100, nullable = false)
     public String username;
-
     @Column(name = "password", length = 255, nullable = false)
     public String password;
-
     @Column(name = "gender", nullable = false)
     public String sex;
-
     @Transient
     public String age;
-
     @Column(name = "school")
     public String school;
-
     @Column(name = "avatar_url")
     public String pictureurl;
-
     @Column(name = "bio")
     public String profile;
-
     @Column(name = "account_status", nullable = false)
     public boolean accountstate;
-
     @Column(name = "invite_left", nullable = false)
     public int invitetimes;
-
     @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
     public UserPT userPT;
 
     // Constructors, getters, setters
-    public User() {}
-}
+    public User() {
+    }
+}
\ No newline at end of file
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
diff --git a/src/main/java/tracker/TrackerInterface.java b/src/main/java/tracker/TrackerInterface.java
index 4776d11..eb9d002 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失败;
