diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index 1f4b510..c1df413 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -50,6 +50,7 @@
     public int SubmitSeed(String begid,Seed seed);//提交种子，返回状态：0 success，1 重复，2其他原因
     public void SettleBeg();//结算所有求种信息，求种信息中需要增加Beg截止日期，默认14天，期间投票>的则Beg成功，否则Beg失败，并发放对应奖励
 
+    public Post[] GetPostList();//获取用户的帖子列表
     public int AddPost(Post post);//添加一个新的帖子，返回状态：0 success，1 重复，2其他原因
     public int UpdatePost(Post post);//更新一个帖子，返回状态：0 success，1 不存在,2其他原因
     public int DeletePost(String postid);//删除一个帖子，返回状态：0 success，1 不存在,2其他原因
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index e67dcb0..030abdd 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -20,6 +20,7 @@
 import entity.QUserPT;
 import entity.QUserStar;
 import entity.QUserInvite;
+import entity.QPost;
 import entity.Seed;
 import entity.User;
 import entity.UserPT;
@@ -47,12 +48,10 @@
                 return null;
             }
             
-            // 用户名和邮箱应该有且仅有一个不为空
-            boolean hasUsername = userinfo.username != null && !userinfo.username.isEmpty();
             boolean hasEmail = userinfo.email != null && !userinfo.email.isEmpty();
             
             // 如果两个都为空或两个都不为空，返回null
-            if ((!hasUsername && !hasEmail) || (hasUsername && hasEmail)) {
+            if (!hasEmail) {
                 return null;
             }
             
@@ -60,21 +59,13 @@
             QUser u = QUser.user;
             User foundUser = null;
             
-            if (hasUsername) {
-                // 通过用户名和密码查找
-                foundUser = query.select(u)
-                    .from(u)
-                    .where(u.username.eq(userinfo.username)
-                        .and(u.password.eq(userinfo.password)))
-                    .fetchOne();
-            } else {
-                // 通过邮箱和密码查找
-                foundUser = query.select(u)
-                    .from(u)
-                    .where(u.email.eq(userinfo.email)
-                        .and(u.password.eq(userinfo.password)))
-                    .fetchOne();
-            }
+            
+            // 通过邮箱和密码查找
+            foundUser = query.select(u)
+                .from(u)
+                .where(u.email.eq(userinfo.email)
+                    .and(u.password.eq(userinfo.password)))
+                .fetchOne();
             
             // 如果找到匹配的用户则返回用户ID，否则返回null
             return foundUser != null ? foundUser.userid : null;
@@ -108,13 +99,18 @@
                 return 1; // 邮箱重复
             }
 
-             entitymanager.persist(userinfo);
-             return 0; // 注册成功
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(userinfo);
+            entitymanager.getTransaction().commit();
+            return 0; // 注册成功
 
-         }catch(Exception e){
-             e.printStackTrace();
-            return 3;
-         }
+        }catch(Exception e){
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }   
+            return 4;
+        }
          
     }
 
@@ -199,16 +195,24 @@
     @Override
     public int RegisterUserPT(UserPT userinfo){
         try {
+            entitymanager.getTransaction().begin();
+            
             JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
             QUserPT u = QUserPT.userPT;
             UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
             if (checkUserPT != null) {
+                entitymanager.getTransaction().rollback();
                 return 1;
             }
+            
             entitymanager.persist(userinfo);
+            entitymanager.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return 2;
         }
     }
@@ -596,5 +600,13 @@
     }
     //获取所有迁移信息
 
+    @Override
+    public Post[] GetPostList() {
+        JPAQuery<Post> query = new JPAQuery<>(entitymanager);
+        QPost p = QPost.post;
+        List<Post> posts = query.select(p).from(p).fetch();
+        return posts.toArray(new Post[0]);
+    }
+
 }
 
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 0e6dadf..7a58953 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -1101,4 +1101,9 @@
             }
         }
     }
+
+    @Override
+    public Post[] GetPostList(){
+        return null;
+    }
 }
\ No newline at end of file
