使用數組制作簡易的用戶管理系統【java】


 思路:

一、分析用戶管理功能模塊

  - User類型屬性值設定

    private String username;  // 用戶id(唯一字段)

    private String nickname;  // 昵稱

    private String password;  // 密碼

    private int age;  // 年齡

  - 實現用戶數據(通過 UserManager 類進行 User 對象的數據管理)的“增刪改查”功能;

    增加用戶: add(user User):void   

    刪除功能: delete(username String):void

    修改用戶: update(user User):void

    查詢數據: load(user User):User    

  - 實現用戶登錄功能;

    登錄功能: login(username String,password String):void

    UML圖示:

    

  二、創建User類和UserManager類

    - User 類中只包含私有的 User 屬性,並用 setter 方法和 getter 方法進行封裝;

    - UserManager 類包含上述的自定義方法,用於實現用戶數據的“增刪改查”操作;

      思考:

      在 UserManager 類中,需要存儲 n 多一個User類型的數據,則可以在該類中 new 一個 User 類型的數組,即:User[] users;

      數組的長度是未知的,如果直接在該類中定義死了,則這個系統的靈活性就降低了(無論如何只能用初始定義好的數組大小,后期需要擴容的時候面臨需要修改源代碼的煩惱)。因此可以考慮如果想增加數組的靈活性,能不能在main函數中管理者自己定義一個數組大小呢?答案是可以的,可以使用 UserManager 的構造方法來設定 users 數組的大小,即:

      public class UserManager( int size ) {

        users = new User[size];

      } 

 三、UserManager 類中各個功能模塊的業務邏輯思路

      1、load( String username ) 方法

        實現通過參數 username 在整個數組中尋找到相應的數組元素,並返回該數組元素(User 對象);

        通過 for 循環遍歷數組,在循環體中:將每次遍歷的數組元素和參數 username 進行 equals 比較:

          - 如果比較值為真,則表示找到了該 username 對應的數組元素,返回該遍歷的數組;

          - 如果整個遍歷完了都沒有找到,則在循環語句之后進行null值返回,因為 load() 方法返回值類型為 User 。

        注意:

           如果這個數組的長度(size)是 5 ,數組中目前只有三條記錄,那么遍歷的時候就只需要遍歷到這有記錄的三條即可。

           那怎么讓for循環遍歷的時候只遍歷到當前數據記錄的最后一條的位置呢?

           我們可以人為的定義一個“標記”,這個標記用來表示,數組存到哪里,就指到哪里,為后期需要增加/刪除新的元素操作做鋪墊;

           比如:

              users = new User[10];  //默認初始的5個數組內存中都是null,此時遍歷元素值為 null 的數組元素沒有任何意義。

           當user[0] 中增加了一條數據,我們就讓“標記”記錄一條,此時標記累計值為 1 ;

           當user[1] 中再增加一條數據,我們就讓“標記”再記錄一條,此時標記累計值為 2;

              ……

             當user[8 中再增加一條數據,我們就讓“標記”再記錄一條,此時標記累計值為 9;

           當user[9] 中再增加一條數據,我們就讓“標記”再記錄一條,此時標記累計值為 10;

           如果是刪除數據,則是相類似的規律。nums 的值表示共存了 nums 個用戶數據,而數組中依次存在 user[0] , user[1] , … ,user[nums-1] 當中。

              由此可以得出:標記的增加/減少與數組元素的下標值有關,因此可以人為設定一個 int 類型的 nums 變量,這個變量默認值為 0 ,放置到 UserManager 類的屬性值中,只要創建了 UserManager 類的實例,就進行默認初始化。

           因此查詢數組中的所有元素,就只需要遍歷 nums 次,每次得到該次“標記”對應的數組元素即可。

      2、add( User user ) 方法

        用戶數據信息的增加首先需要考慮的問題是:

          - 數組剩余內存空間的多少,如果數組元素滿員了,則需要提示管理者不可以再添加新的用戶數據;

          - username 關鍵字的唯一性,因此需要判斷現有的數組元素中是否存在重復數據的問題,如果數據重復(關鍵字重疊),則需要提示數據已存在,不可以添加。

        如果上述問題條件都沒有發生,則表示新增的用戶數據是全新的數據,並且數組內存中有“位置”將其添加。

        實現思路:

        // 剩余空間判斷

        本數組的長度(length)為 size,只需要判斷“標記”(用 nums 標記數組內存中存了多少個有效的元素值)和數組長度的大小。

        nums 只要大於或者等於數組長度則提示不可以再增加數據記錄。

        // 數據唯一性判斷

        可以通過load方法進行判斷,讓參數 user 對象的 username 屬性值在 loa() 方法里進行搜索,如果搜索到的是一個 null 值則表示新增的數據沒有和當前的數據庫中的記錄重復。

        // 添加數據記錄

        將數據存至 user[nums] 當中,並讓 nums 自增 1 即可。

        【拓展】通過指定位置增加數組元素,見圖:

       3、update( User user ) 方法

        update() 方法的實現思路與添加功能相似:

        首先判斷參數 user 是否在數組中存在,如果不存在則提示“要更新的原始數據不存在!”;

        其次在上一個步驟中,已經找出了該需要更新的數據位置,直接將user的屬性值利用 users 數組的 setter() 方法進行修改。 

      4、delete( String username ) 方法

        刪除數組元素操作思路見下圖:

 代碼:

  User 類

 1 package com.test.test01;
 2 
 3 public class User {
 4     private String username;
 5     private String nickname;
 6     private String password;
 7     private int age;
 8     
 9     public String getUsername() {
10         return username;
11     }
12     public void setUsername(String username) {
13         this.username = username;
14     }
15     public String getNickname() {
16         return nickname;
17     }
18     public void setNickname(String nickname) {
19         this.nickname = nickname;
20     }
21     public String getPassword() {
22         return password;
23     }
24     public void setPassword(String password) {
25         this.password = password;
26     }
27     public int getAge() {
28         return age;
29     }
30     public void setAge(int age) {
31         this.age = age;
32     }
33     
34     public User(String username, String password, String nickname, int age) {
35         super();
36         this.username = username;
37         this.nickname = nickname;
38         this.password = password;
39         this.age = age;
40     }
41     
42     @Override
43     public String toString() {
44         return "User [username=" + username + ", nickname=" + nickname
45                 + ", password=" + password + ", age=" + age + "]";
46     }
47     
48 }

   UserManager 類

  1 package com.test.test01;
  2 
  3 public class UserManager {
  4     User[] users;
  5     private int nums=0;
  6     
  7     
  8     public UserManager(int size) {
  9         users = new User[size];
 10     }
 11 
 12     public void add(User user) {
 13         //判斷數組內存是否有剩余
 14         if(nums>=users.length) {
 15             System.out.println("對不起,用戶數據內存已滿,無法再添加"+user.getUsername()+"信息!");
 16             return;
 17         }
 18         
 19         //判斷是否存在該用戶數據
 20         User u = this.load(user.getUsername());
 21         if(u!=null) {
 22             System.out.println("對不起,該用戶:"+u.getUsername()+"數據已存在!");
 23             return;
 24         }
 25         
 26         //添加數據
 27         users[nums] = user;
 28         nums++;
 29         System.out.println("用戶:"+user.getUsername()+"數據已添加成功!");
 30         return;
 31         
 32     }
 33     
 34     public User load(String username) {
 35         for(int i=0;i<nums;i++) {
 36             User u = users[i];
 37             if(username.equals(u.getUsername())) {
 38                 return u;
 39             }
 40         }
 41         return null;
 42     }
 43     
 44     public void delete(String username) {
 45         int index=-1;
 46         //通過index索引找到需要刪除的數組下標值
 47         for(int i=0;i<nums;i++) {
 48             User u = users[i];
 49             if(username.equals(u.getUsername())) {
 50                 index=i;
 51                 break;
 52             }
 53         }
 54         
 55         if(index==-1) {
 56             System.out.println("對不起,要刪除的用戶:"+username+"不存在!");
 57             return;
 58         }
 59         
 60         //從index位置開始,后一個數組元素賦值到前一個數組元素中,最后再將users[nums]=null,nums自減
 61         for(int i=index+1;i<nums;i++) {
 62             users[i-1] = users[i];
 63         }
 64         users[nums-1]=null;
 65         nums--;
 66         System.out.println("用戶:"+username+"數據刪除成功!");
 67         return;
 68         
 69     }
 70     
 71     public void add(int pos,User user) {
 72         //首先檢查pos是否合法
 73         if(pos<0||pos>=nums) {
 74             System.out.println("對不起,用戶"+user.getUsername()+"信息添加位置不正確!");
 75             return;
 76         }
 77         
 78         //判斷pos是否可以插入,即nums個數據已經存滿了就不可以再增加新數據
 79         if(nums>=users.length) {
 80             System.out.println("對不起,內存已滿,無法再添加"+user.getUsername()+"信息!");
 81             return;
 82         }
 83         
 84         //檢查是否已存在user對象
 85         User u = this.load(user.getUsername());
 86         if(u!=null) {
 87             System.out.println("對不起,該用戶:"+u.getUsername()+"數據已存在!");
 88             return;
 89         }
 90         
 91         for(int i=nums;i>pos;i--) {
 92             //前面有nums>=users.length判斷,因此users[nums]空間存在,可以被前面的元素賦值
 93             users[i] = users[i-1];
 94         }
 95         
 96         users[pos] = user;
 97         nums++;
 98         System.out.println("用戶:"+user.getUsername()+"數據已添加成功!");
 99         return;
100     }
101     
102     public void update(User user) {
103         //檢查是否存在該用戶數據
104         User u = this.load(user.getUsername());
105         if(u==null) {
106             System.out.println("對不起,該用戶:"+user.getUsername()+"數據不存在!");
107             return;
108         }
109         
110         //更新數據
111         u.setNickname(user.getNickname());
112         u.setPassword(user.getPassword());
113         u.setAge(user.getAge());
114         System.out.println("用戶:"+user.getUsername()+"數據已更新成功!");
115         return;
116     }
117     
118     public void login(String username,String password) {
119         //判斷是否存在 username 用戶名
120         User u = this.load(username);
121         
122         if(u==null) {
123             System.out.println("用戶名:"+username+"不正確,請檢查輸入!");
124             return;
125         }
126         
127         //判斷密碼是否正確
128         if(!password.equals(u.getPassword())) {
129             System.out.println("密碼不正確,請檢查輸入!");
130             return;
131         }                
132         //成功登錄系統
133         System.out.println("歡迎"+username+"登錄系統!");
134         return;
135     }
136     
137     public User[] list() {
138         User[] tus = new User[nums];    //只遍歷數組元素中存有有效元素值的數組
139         for(int i=0;i<nums;i++) {
140             tus[i] = users[i];
141         }
142         return tus;
143     }
144 }

   TestUser 測試入口

 1 package com.test.test01;
 2 
 3 public class TestUser {
 4 
 5     public static void main(String[] args) {
 6         UserManager um = new UserManager(5);
 7         um.add(new User("zs","123","張三",24));    //添加信息成功
 8         um.add(new User("ls","123","李四",22));    //添加信息成功
 9         um.add(new User("ls","123","李四",23));    //添加不成功,已存在
10         um.add(new User("ww","123","王五",21));    //添加信息成功
11         um.add(new User("zl","123","趙六",21));    //添加信息成功
12         um.add(new User("zq","123","朱七",22));    //添加信息成功
13         
14         um.add(new User("S","123","大S",22));    //滿員了,添加信息不成功
15         
16         System.out.println("------分割線------");
17         
18         um.delete("ls");    //刪除ls
19         um.delete("ls1231");    //提示要刪除的用戶名不存在
20         
21         System.out.println("------分割線------");
22         
23         um.update(new User("S","1234","大S",23));    //提示要更新的用戶名不存在
24         um.update(new User("zq","1234","朱七",23));    //提示zq信息更新成功
25         
26         System.out.println("------分割線------");
27         
28         um.login("zs1", "1234");    //提示用戶名錯誤
29         um.login("zs1", "123412");    //提示用戶名錯誤
30         um.login("zs", "123412");    //提示密碼錯誤
31         um.login("zs", "123");        //提示成功登陸系統
32         
33         um.login("ls", "123");    //用戶名不存在,提示錯誤
34         
35         System.out.println("------分割線------");
36         
37         User[] u = um.list();
38         for(int i=0;i<u.length;i++) {
39             System.out.println(u[i]);
40         }
41         
42         System.out.println("------分割線------");
43         
44         um.add(1,new User("S","123","大S",22));
45         um.delete("ww");
46         um.add(1,new User("Y","123","大Y",22));
47         um.delete("Y");
48         um.add(3,new User("s","123","小S",22));
49         
50         System.out.println("------分割線------");
51         
52         User[] u2 = um.list();
53         for(int i=0;i<u2.length;i++) {
54             System.out.println(u2[i]);
55         }
56     }
57 
58 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM