亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java練手小項目實現(xiàn)一個項目管理系統(tǒng)

 更新時間:2021年10月21日 15:00:08   作者:空山新雨后~  
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個項目管理系統(tǒng),大家可以在過程中查缺補漏,提升水平

前言:

時隔多日,我們學習完java的面向對象階段,畢竟需要付諸實踐,這個小項目就 作為我們第一個java面向對象解決的項目,接下來就讓我們一起進入項目的世界吧

我來了

一、項目需求

• 模擬實現(xiàn)一個基于文本界面的 《 項目開發(fā)團隊分配管理軟件 》

• 熟悉 Java 面向對象的高級特性,進一步掌握編程技巧和調試技巧

•主要涉及以下知識點:

Ø 類的繼承性和多態(tài)性

Ø 對象的值傳遞、接口

Ø static 和 final 修飾符

Ø 特殊類的使用:包裝類、抽象類、內部類

Ø 異常處理

Ø Java 基本語法和流程控制

Ø 數(shù)組, ArrayList 集合

二、功能實現(xiàn)

Ø 軟件啟動時,首先進入登錄界面進行注冊和登錄功能。

Ø 當?shù)顷懗晒螅M入菜單,首先就可以對開發(fā)人員賬戶和密碼進行修改。

Ø 然后可以對開發(fā)人員進行增刪改操作

Ø 人員添加成功后,根據(jù)菜單提示,基于現(xiàn)有的 公司成員 ,組建一個 開發(fā)團隊 以開發(fā)一個新的項目。

Ø 組建過程包括將成員插入到團隊中,或從團隊中刪除某成員,還可以列出團隊中現(xiàn)有成員的列表,開發(fā)團隊成員包括架構師、設計師和程序員。

Ø 團隊組建成功,則可以進入項目模塊,添加項目,分配開發(fā)團隊進行開發(fā)。

整個項目UML類圖。制作不標準,見諒。

系統(tǒng)流程

三、具體模塊的實現(xiàn)

1.實現(xiàn)登陸模塊。

思路:要實現(xiàn)登陸模塊,我們首先應該想到,我們平常登陸賬號都是輸入賬號,密碼,匹配你之前注冊的賬號密碼即可登陸成功, 怎么做到我們輸入的賬號密碼和我們提前注冊的賬號密碼匹配呢,這里我們就要想到,我們輸入的賬號密碼都是字符串類型,既然是字符串,我們就可以使用String類的equals方法進行匹配,匹配成功,則登陸成功。

那么,在我們的項目當中,登陸之前我們是肯定要匹配他是否存在于我們的注冊賬號之中,如果存在,直接登陸, 如果不存在,我們應該讓用戶先注冊,當然,也可以加一個隨機數(shù)組成的驗證碼來進一步強化我們的登陸模塊。

實例代碼

package com.Team.loginAndRegister;
 
/**
 * @author WangWei
 * @version 1.0
 */
public class LoadingAndRegister {
    public String user;
    public String password;
    public LoadingAndRegister() {
 
    }
    public LoadingAndRegister(String user,String password) {
        this.user = user;
        this.password = password;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getUser() {
        return user;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
    }
}
 
 
 
package com.Team.loginAndRegister;
 
import java.util.Scanner;
import java.util.ArrayList;
 
/**
 * @author WangWei
 * @version 1.0
 */
public class LoadingAndRegisterTest {
 
    /**
     * - ArrayList<LoadingAndRegister> a 儲存賬號密碼的集合
     * - LoadingAndRegister lr 賬號密碼類的對象
     */
    Scanner sc = new Scanner(System.in);
    
    private ArrayList<LoadingAndRegister> a = new ArrayList<LoadingAndRegister>();
    private LoadingAndRegister lr = new LoadingAndRegister();
 
    /**
     * 注冊方法
     * @throws InterruptedException
     */
    public void loginAccount() throws InterruptedException {
        
        TSUtility.loadSpecialEffects();
        System.out.println("開始注冊:");
        System.out.println("請輸入你的注冊賬戶名稱:");
        String loginUserName = TSUtility.readKeyBoard(6, false);
        lr.setUser(loginUserName);
        System.out.println("請輸入你的登陸密碼:");
        String loginPassword = TSUtility.readKeyBoard(8, false);
        lr.setPassword(loginPassword);
        a.add(lr);
        System.out.println("注冊成功,請登陸!");
    }
 
    /**
     * 登陸方法
     * @throws InterruptedException
     */
    public void loading() throws InterruptedException {
        Scanner sc = new Scanner(System.in);
        boolean flag = true;
        int count = 5;
        while (flag) {
            System.out.println("********************🐱");
            System.out.println("***   <登錄界面>   ***");
            System.out.println("***     (:      ***🐱");
            System.out.println("********************🐱");
 
            System.out.println("請輸入你的登陸賬戶名稱:");
            String userName = sc.next();
            System.out.println("請輸入你的登陸密碼:");
            String password = sc.next();
            //未注冊
            if (lr.getUser() == null || lr.getPassword() == null) {
                System.out.println("未檢測到您的賬號,請先注冊!");
                loginAccount();
            } else if (userName.equals(lr.getUser()) && password.equals(lr.getPassword())) {
                System.out.println("登陸成功!歡迎您:" + lr.getUser());
                flag = false;
            } else {
                if (count == 1) {
                    System.out.println("你的賬戶已被鎖定,已強制退出!");
                    System.exit(0);
                } else {
                    count--;
                    System.out.println("登陸失敗!用戶名或密碼不匹配,你還有" + (count) + "次機會!\n請重新登陸:");
                }
            }
        }
    }
 
    /**
     * 修改用戶信息方法
     * @throws InterruptedException
     */
    public void updateAccount() throws InterruptedException {
 
        boolean flag = true;
        while (flag) {
            System.out.println("=====請選擇功能=====");
            System.out.println("1、修改密碼");
            System.out.println("2、修改用戶名");
            System.out.println("3、修改用戶名和密碼");
            System.out.println("4、不修改,退出");
            System.out.println("===================");
            System.out.print("請選擇:");
            char c = TSUtility.readMenuSelection();
            TSUtility.loadSpecialEffects();
            switch (c) {
                case '1':
                    System.out.println("請輸入原密碼:");
                    String oldPassword = sc.next();
                    if (lr.getPassword().equals(oldPassword)) {
                        System.out.println("密碼正確,請輸入你的新密碼:");
                        String newPassword = sc.next();
                        lr.setPassword(newPassword);
                        System.out.println("設置成功,請記住新密碼!");
                        break;
                    } else {
                        System.out.println("密碼錯誤,請重新選擇!");
                    }
                    break;
                case '2':
                    System.out.println("請輸入原密碼:");
                    String oldPassword1 = sc.next();
                    if (lr.getPassword().equals(oldPassword1)) {
                        System.out.println("密碼正確,請輸入你的新用戶名:");
                        String newUserName = sc.next();
                        lr.setPassword(newUserName);
                        System.out.println("設置成功!");
                    } else {
                        System.out.println("密碼錯誤,請重新選擇!");
                    }
                    break;
                case '3':
                    System.out.println("請輸入原密碼:");
                    String oldPassword2 = sc.next();
                    if (lr.getPassword().equals(oldPassword2)) {
                        System.out.println("密碼正確,請輸入你的新用戶名:");
                        String newUserName = sc.next();
                        lr.setPassword(newUserName);
                        System.out.println("請輸入你的新密碼:");
                        String newPassword = sc.next();
                        lr.setPassword(newPassword);
                        System.out.println("設置成功!");
                    } else {
                        System.out.println("密碼錯誤,請重新選擇!");
                    }
                    break;
                case '4':
 
                    System.out.println("退出中");
                    TSUtility.loadSpecialEffects();
                    System.out.println("退出成功");
                    flag = false;
                    break;
                default:
                    System.out.println("輸入錯誤,請重新輸入!");
                    break;
            }
        }
    }
}
 

當我們注冊完畢后,就要進入系統(tǒng),進行我們的幾個操作。

1.完成開發(fā)人員的增刪改查。

2.完成將開發(fā)人員添加到開發(fā)團隊的操作,刪除,修改操作。

3.完成項目模塊, 將項目交給開發(fā)團隊進行開發(fā)的操作。以及項目的曾刪改查。

那么完成開發(fā)人員的增刪改查,根據(jù)我們的UML類圖設計來看,我們至少要完成九個類和一個接口的編寫。

通過將employee類,programmer類,designer類,architect類,這四個類是存在繼承關系的,目的是為了繼承父類的屬性。另有三個類,PC,notebook,printer,他們都實現(xiàn)了一個接口,equipment。這幾個類完成之后,我們就著手編寫NameListService類,這個類的功能主要是完成對我們的開發(fā)人員進行增刪改查的任務。

NamlistService類里面要注意的問題主要是開發(fā)人員的ID問題,要想開發(fā)人員的ID隨著我們的增加或者刪除而增加或者刪除,那么我們可以定義一個全局變量,去控制ID的變化。通過增加一個開發(fā)人員,我們設置他的ID自增,那么我們刪除的時候,從他刪除那個位置就開始,因為我們使用的集合來存儲開發(fā)人員,他的前一個元素被刪除之后,那么他的后一個元素就應該到被刪除的那個元素的位置,在集合當中的下標就會向前移動。我們要做的就是將該元素的ID相應的減一,那么就會用到循環(huán)去找到該下標對應的元素,然后去設置他的ID。示例代碼如下

boolean flag = false;
        for (int i = 0; i < employees.size(); i++) {
            if (id == employees.get(i).getId()) {
                System.out.println( "員工:"+ employees.get(i).getName() + "刪除成功!");
                employees.remove(i);
                for (i = id; i <= employees.size(); i++) {
                    //這個代碼表示,將我們第i個對象從集合中刪除之后,我們后一個元素的ID就應該相應的減一。
                    employees.get(i - 1).setId(employees.get(i - 1).getId() - 1);
                }

這個就需要結合集合的下標進行理解,大家可以自行畫一個圖輔助理解。

做完這個我們就需要做開發(fā)團隊的模塊,開發(fā)團隊模塊里面需要注意的就是數(shù)據(jù)互通的問題。

當我們做到這個部分的時候,進行測試時會發(fā)現(xiàn)一個問題,我們無法將我們之前namelist類里面修改過的數(shù)據(jù)拿過來用,一是因為我們重新創(chuàng)建對象的原因,導致數(shù)據(jù)發(fā)生變化,那么怎么去杜絕此類情況發(fā)生呢?有兩種解決方案:
一:我們可以把我們需要使用到NameListService類里面的數(shù)據(jù)的方法的參數(shù)改成NameListService類的對象,這樣就不會導致我們去創(chuàng)建對象導致數(shù)據(jù)發(fā)生改變。

實例:

 public ArrayList<ArrayList<Programmer>> getManyTeam(NameListService nls) throws TeamException {

二:我們可以將NameListService類中的存放開發(fā)人員的集合改為靜態(tài)修飾,那么他的數(shù)據(jù)就可以共享,當我們這么做了之后,會發(fā)現(xiàn)我們測試時他將我們代碼塊中的內容打印了一遍,又將我們修改好的集合中的內容打印了一遍,這樣就不符合我們的要求,這是因為,類加載的時候,會默認打印一遍代碼塊的內容,那么我們可以對代碼塊的內容進行一個判斷,判斷我們存放開發(fā)人員的集合是否為空,如果為空,才打印代碼塊的內容,如果不為空,就打印集合內容。

實例:

 {
       /* if (employees.isEmpty())
        {
        }*/
        employees.add(new Employee(count, "馬云 ", 22, 3000));
        employees.add(new Architect(++count, "馬化騰", 32, 18000, new NoteBook("聯(lián)想T4", 6000), 60000, 5000));
        employees.add(new Programmer(++count, "李彥宏", 23, 7000, new PC("戴爾", "NEC 17寸")));
        employees.add(new Programmer(++count, "劉強東", 24, 7300, new PC("戴爾", "三星 17寸")));
        employees.add(new Designer(++count, "雷軍 ", 50, 10000, new Printer("激光", "佳能2900"), 5000));
        employees.add(new Programmer(++count, "任志強", 30, 16800, new PC("華碩", "三星 17寸")));
        employees.add(new Designer(++count, "柳傳志", 45, 35500, new PC("華碩", "三星 17寸"), 8000));
        employees.add(new Architect(++count, "楊元慶", 35, 6500, new Printer("針式", "愛普生20k"), 15500, 1200));
        employees.add(new Designer(++count, "史玉柱", 27, 7800, new NoteBook("惠普m6", 5800), 1500));
        employees.add(new Programmer(++count, "丁磊 ", 26, 6600, new PC("戴爾", "NEC17寸")));
        employees.add(new Programmer(++count, "張朝陽 ", 35, 7100, new PC("華碩", "三星 17寸")));
        employees.add(new Designer(++count, "楊致遠", 38, 9600, new NoteBook("惠普m6", 5800), 3000));
    }

項目模塊需要注意的就是項目的添加問題,需要去做個判斷,不能比如項目中沒有團隊,而你卻添加了。

四、總結

完成這個開發(fā)項目,對于新手來說,確實有難度,但是只要去花時間,還是能夠完成的。

接下來我分享一下我在這個項目中的所得以及經(jīng)驗。

首先,拿到這個項目之前應該先熟悉流程,理清楚他的邏輯,厘清各個模塊之間的關系,再去完成各個模塊的內容,因為我們用到的是面向對象的知識,那我們更應該好好地理清各個類之間的關系,繼承,實現(xiàn)等等。

完成每一個模塊,一定要做好測試,把能找出來的bug盡量找出來,不然等到最后做主控模塊來找bug能讓你抓狂。

完成這個項目之后,你會對面向對象的知識加一步認知,并且越來越熟悉面向對象的各種特性。以及我們之前學過的各種小知識的查漏補缺。

以上便是我對這個項目的理解。歡迎大家討論,不足之處,還請見諒,代碼如下:

鏈接:https://pan.baidu.com/s/1SRiTPgvxSC-ytUDfX00k5w
提取碼:8bfk

到此這篇關于Java練手小項目實現(xiàn)一個項目管理系統(tǒng)的文章就介紹到這了,更多相關Java 項目管理系統(tǒng)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)

    Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)

    最近做項目遇到這樣的需求,天、小時、分鐘、秒的數(shù)值都是隔開的,服務器端只返回一個時間戳長度,怎么實現(xiàn)這樣的功能呢?下面小編給大家?guī)砹薐ava 實現(xiàn)倒計時功能的方案,需要的朋友參考下吧
    2018-01-01
  • 減少代碼開發(fā)工作的Java庫lombok及注解的使用學習

    減少代碼開發(fā)工作的Java庫lombok及注解的使用學習

    不久前發(fā)現(xiàn)有一個java第三方庫可以在一定程度上幫助我們從體力勞動中解救出來,它就是lombok。它提供了一些簡單的注解,并以此來消除java中臃腫的模版代碼。本文對于一些常用到的注解做了一個簡要的記錄,希望有更多的人enjoy it
    2022-07-07
  • Java中三種零拷貝的實現(xiàn)示例以及對比詳解

    Java中三種零拷貝的實現(xiàn)示例以及對比詳解

    這篇文章主要介紹了Java中三種零拷貝的實現(xiàn)示例以及對比詳解,本文主要是介紹幾種零拷貝的實現(xiàn)示例,以及與最傳統(tǒng)的做一個對比,看看在效率上到底有多大的提升,需要的朋友可以參考下
    2023-12-12
  • Java使用dom4j實現(xiàn)對xml簡單的增刪改查操作示例

    Java使用dom4j實現(xiàn)對xml簡單的增刪改查操作示例

    這篇文章主要介紹了Java使用dom4j實現(xiàn)對xml簡單的增刪改查操作,結合實例形式詳細分析了Java使用dom4j實現(xiàn)對xml簡單的增刪改查基本操作技巧與相關注意事項,需要的朋友可以參考下
    2020-05-05
  • Java設計模式之中介模式

    Java設計模式之中介模式

    這篇文章主要介紹了Java設計模式之中介模式,中介模式(Mediator?Pattern),屬于行為型設計模式,目的是把系統(tǒng)中對象之間的調用關系從一對多轉變成一對一的調用關系,以此來降低多個對象和類之間的通信復雜性,需要的朋友可以參考下
    2023-12-12
  • 使用HTTPclient保持長連接

    使用HTTPclient保持長連接

    這篇文章主要介紹了使用HTTPclient保持長連接,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JedisPool資源池優(yōu)化方法

    JedisPool資源池優(yōu)化方法

    這篇文章主要介紹了JedisPool資源池優(yōu)化方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java編程基于快速排序的三個算法題實例代碼

    Java編程基于快速排序的三個算法題實例代碼

    這篇文章主要介紹了Java編程基于快速排序的三個算法題實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 簡單聊聊Java程序中的換行符

    簡單聊聊Java程序中的換行符

    Java程序中的換行符一般使用“\n”表示,它是一個轉義字符,表示換行符。根據(jù)操作系統(tǒng)的不同,換行符的實際表示可能不同,本文就來簡單聊聊他們的區(qū)別與使用吧
    2023-03-03
  • Java 字符終端上獲取輸入三種的方式分享

    Java 字符終端上獲取輸入三種的方式分享

    這篇文章主要介紹了Java 字符終端上獲取輸入三種的方式,有需要的朋友可以參考一下
    2013-11-11

最新評論