目錄
1.專案大綱
1.專案前提
2.專案說明
3.專案內容
3.該軟體完成以下功能:
2.軟體設計
1.結構
2.類設計
3. 部分代碼展示
心得:
1.專案大綱
1.專案前提
- 掌握java基本語法
- 熟悉使用流程控制
- 了解Arraylist集合的基本
- 理解面向物件思想
- 熟練封裝,繼承,多型
- 熟悉使用介面,例外
2.專案說明
- 本實踐專案是一個專案開發團隊分配管理系統,可以對開發人員和開發團隊進行統一管理,并且可以給一個專案分配一個團隊進行開發,
- 本實踐專案有四個模塊:用戶注冊和登錄模塊,開發人員管理模塊,開發團隊調度管理模塊和開發專案管理模塊
- 開發人員相關資訊請按照需求檔案設計
- 團隊組建程序包括將成員插入到團隊中,或從團隊中洗掉某成員,還可以列出團隊中現有成員的串列開發團隊成員包括架構師、設計師和程式員,
- 最后,需要完成每一個專案都能有一個開發團隊在進行開發即可
3.專案內容

系統流程:

3.該軟體完成以下功能:
軟體啟動時,首先進入登錄界面進行注冊和登錄功能, 當登陸成功后,進入選單,首先就可以對開發人員賬戶和密碼進行修改, 然后可以對開發人員進行增刪改操作 人員添加成功后,根據選單提示,基于現有的公司成員,組建一個開發團隊以開發一個新的專案, 組建程序包括將成員插入到團隊中,或從團隊中洗掉某成員,還可以列出團隊中現有成員的串列,開發團隊成員包括架構師、設計師和程式員, 團隊組建成功,則可以進入專案模塊,添加專案,分配開發團隊進行開發,
2.軟體設計
1.結構
com.team.view 模塊為主控模塊,負責選單的顯示和處理用戶操作 com.team.service 模塊為物體物件(Employee及其子類如程式員等)的管理模塊, NameListService和TeamService類分別用各自的陣列來管理公司員工和開發團隊成員物件 ProjectService是對專案的操作物件類 domain模塊為Employee及其子類等JavaBean類所在的包

2.類設計
1. 定義一個LoginView類
1.1 實作注冊方法
如果沒有賬戶則需要注冊
如果有賬號則直接進行登錄
1.2實作登錄功能
判斷用戶輸入的值是否正確
如果正確則進入軟體選單
如果錯誤則重新輸入,限制次數只有5次,超過次數則程式停止,重新啟動
1.3實作修改用戶密碼功能
可以實作對用戶名,密碼,或者兩者都可以進行修改即可,
2.物體類
2.1Equipment介面以及實作子類

說明: model 表示機器的型號 display 表示顯示幕名稱 type 表示機器的型別 根據需要提供各屬性的get/set方法以及多載構造器 實作類實作介面的方法,回傳各自屬性的資訊
2.2Employee類及子類的設計


3.開發人員管理模塊
3.1在NameListService類中完成功能操作
實作員工的添加(根據職業添加(無,程式員,設計師,架構師)) 實作員工的修改(至少修改員工的姓名,年齡,工資) 實作員工的洗掉(注意員工id需要動態顯示,也就是洗掉后,員工id需要更新) 實作員工的查看 (顯示所有資料)

按照設計要求撰寫NameListService類 一個屬性為:private ArrayList<Employee> employees 有一個代碼塊用作資料的填充,如圖(注意不同人的身份和設備都不同) 有一個方法:getAllEmployees(),回傳employees物件即可 還有一個方法:getEmployee(int id),得到指定id的員工,沒有則拋出自定義的例外, 其他方法
4.開發團隊調度管理模塊
需求:
如果添加操作因某種原因失敗,將顯示類似以下資訊(失敗原因視具體原因而不同): 1-團隊串列 2-添加團隊成員 3-洗掉團隊成員 4-退出 請選擇(1-4):2 ---------------------添加成員--------------------- 請輸入要添加的員工ID:2 添加失敗,原因:該員工已是某團隊成員 按回車鍵繼續... 失敗資訊包含以下幾種: (需要拋出自定義例外) 成員已滿,無法添加 該成員不是開發人員,無法添加 該員工已在本開發團隊中 該員工已是某團隊成員 團隊中至多只能有一名架構師(以下判斷可借用instanceof進行判斷) 團隊中至多只能有兩名設計師 團隊中至多只能有三名程式員
當選擇“添加團隊成員”選單時,將執行從串列中添加指定(通過ID)成員到開發團隊的功能: 1-團隊串列 2-添加團隊成員 3-洗掉團隊成員 4-退出 請選擇(1-4):2 ---------------------添加成員--------------------- 請輸入要添加的員工ID:2 添加成功 按回車鍵繼續... 添加成功后,按回車鍵將重新顯示主界面, 開發團隊人員組成要求: 最多一名架構師 最多兩名設計師 最多三名程式員
功能:關于開發團隊成員的管理:添加、洗掉等(還需要自行實作), 說明: counter為靜態變數,用來為開發團隊新增成員自動生成團隊中的唯一ID,即memberId,(提示:應使用增1的方式) MAX_MEMBER:表示開發團隊最大成員數 team陣列:用來保存當前團隊中的各成員物件 (也可以用一個新的集合)

說明: getTeam()方法:回傳當前團隊的所有物件 回傳:包含所有成員物件的陣列,陣列大小與成員人數一致 addMember(e: Employee)方法:向團隊中添加成員 引數:待添加成員的物件 例外:添加失敗, TeamException中包含了失敗原因 removeMember(memberId: int)方法:從團隊中洗掉成員 引數:待洗掉成員的memberId 例外:找不到指定memberId的員工,洗掉失敗 另外,可根據需要自行添加其他方法或多載構造器



3. 部分代碼展示
3.1登錄界面
package ProjectOne.view;
import ProjectOne.domain.UserRegistration;
import java.util.ArrayList;
/**
* @author 黎豪
* @version 1.0
*/
public class LoginView {
/**
* 顏色特效
*/
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_CYAN = "\u001B[36m";
private static int count=0;
private static boolean b=true;
public static ArrayList<String> array=new ArrayList<>();
//下面是用戶登錄界面
public static void menu() {
while (b){
System.out.println(ANSI_CYAN);
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
System.out.println("$ $");
System.out.println("$歡迎來到專案開發團隊分配管理軟體$");
System.out.println("$ $");
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
System.out.println("$");
System.out.println("$");
System.out.println("$");
System.out.println("$");
System.out.println("--------請您先登錄-----------");
TSUtility.readReturn();
System.out.println(ANSI_YELLOW);
System.out.println("*******************");
System.out.println("*** <登錄界面> ***");
System.out.println("*** (: ***");
System.out.println("********************");
System.out.println("請先輸入你的登錄賬戶名稱:");
String userAccount = TSUtility.readKeyBoard(20, false);
System.out.println("請輸入你的密碼:");
String LoginPassword=TSUtility.readKeyBoard(11, false);
if (array.size() == 0) {
System.out.println("未檢測到您的賬號,請您先注冊!");
try {
UserRegistration.addUserAccount(array);//注冊賬號
System.out.println();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if (!(array.get(0).equals(userAccount))){
count++;
System.out.println("用戶名不存在請重新輸入:"+"你還有"+(5-count)+"次機會");
if (count==5){
System.out.println("你已經錯了5次,請聯系管理員");
System.exit(0);
}
}
else if (!(array.get(1).equals(LoginPassword))){
count++;
System.out.println("密碼錯誤!請重新輸入!"+"你還有"+(5-count)+"次機會");
if (count==5){
System.out.println("你已經錯了5次,請聯系管理員");
System.exit(0);
}
}
else if (count==5){
System.exit(0);
}
else {
UserRegistration.CheckUserAccount(array, userAccount, LoginPassword);
b=false;
}
}
}
}
3.2團隊調度管理
package ProjectOne.view;
import ProjectOne.domain.*;
import ProjectOne.service.NameListService;
import ProjectOne.service.TeamException;
import java.util.ArrayList;
/**
* @author 黎豪
* @version 1.0
*/
//開發團隊調度管理
public class TeamView extends NameListService implements TID {
/**
* 顏色特效
*/
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_CYAN = "\u001B[36m";
public static int count=1,count1=1,count2=1;
public static ArrayList<ArrayList> team=new ArrayList<>();
//團隊調度界面1,2,3,4;
public static ArrayList<Programmer> programmer=new ArrayList<>();
public static void DispatchingTeam(){
boolean b=true;
while (b) {
System.out.println(ANSI_BLUE);
System.out.println("※※※※※※※※※※※");
System.out.println("※ 團隊調度界面 ※");
System.out.println("※※※※※※※※※※※");
System.out.print("1-添加團隊 2-查看團隊 3-洗掉團隊 4-退出 請選擇(1-4):");
char number = TSUtility.readMenuSelection();
switch (number) {
case '1':
addTeam();
break;
case '2':
findTeam();
break;
case '3':
deletaTeam();
break;
case '4':
//b=false;
System.out.println("確認退出Y/N:");
char c3=TSUtility.readConfirmSelection();
if (c3=='Y') {
b = false;
}else {
break;
}
break;
}
}
}
//1.添加團隊
public static void addTeam(){
int k=0;
boolean b=true;
while (b){
viewDeveloper();
System.out.println("---------------------------------------------");
System.out.println("1-團隊串列 2-添加團隊成員 3-洗掉團隊成員 4-退出");
char c=TSUtility.readMenuSelection();
switch (c){
case '1':
viewTeampeople();
break;
case '2':
addTeampeople();
break;
case '3':
deletaTeampeople();
break;
case '4':
if (programmer.size()==0){
System.out.println("此次操作你沒有添加任何成員!!!");
}
else {
if (programmer.size()!=0){
team.add(k,programmer);
}
programmer=new ArrayList<>();
k++;
count=1;count1=1;count2=1;
}
b = false;
break;
}
}
}
//2.查看團隊串列
public static void viewTeampeople(){
if (programmer.size()==0){
System.out.println("沒有任何成員,請先添加團隊成員!!!");
}else {
System.out.println("-------------------------------");
System.out.println("TID/ID\t姓名\t\t年齡\t 工資\t 職位\t 獎金\t 股票 領用設備");
for (int i = 0; i <programmer.size() ; i++) {
System.out.println((i+1)+"/"+programmer.get(i));
}
System.out.println("---------------------------------");
}
}
//3.洗掉團隊成員
public static void deletaTeampeople(){
System.out.println(ANSI_GREEN);
if (programmer.size()==0){
System.out.println("請先添加成員!");
}
else {
viewTeampeople();
System.out.println("請輸入要洗掉的TID:");
int i=TSUtility.readInt();
if (i>programmer.size()||i<=0){
System.out.println("洗掉失敗,員工TID錯誤!!!");
}else {
programmer.get(i-1).setStatus(true);
System.out.println("洗掉成功!");
if (programmer.get(i-1) instanceof Architect){
count--;
}
//最多兩名設計師
else if (programmer.get(i-1) instanceof Desigener){
count1--;
}
//最多三名程式員
else if (programmer.get(i-1) instanceof Programmer){
count2--;
}
programmer.remove(i-1);
}
}
}
//添加團隊成員
public static void addTeampeople(){
System.out.println(ANSI_GREEN);
System.out.println("----------添加成員--------");
System.out.println("請輸入要添加的員工ID:");
int num=TSUtility.readInt();
try {
abnormal(num);
} catch (TeamException e) {
System.out.println("添加失敗!原因:"+e.getMessage());
}
}
//各種例外的處理------------------------------
public static void abnormal(int num) throws TeamException {
//員工ID不存在
if (num>employees.size()||num<=0){
throw new TeamException("該員工不存在!");
}
//該成員不是開發團隊
else if (!(employees.get(num-1) instanceof Programmer)){
throw new TeamException("該成員不是開發團隊,無法添加!!!");
}
//狀態為false的不添加
else if (((Programmer)employees.get(num-1)).getStatus()==false){
//已存在該隊伍
for (int i = 0; i <programmer.size() ; i++) {
if (employees.get(num-1).getId()==programmer.get(i).getId()){
throw new TeamException("已存在該隊伍");
}
}
System.out.println("該成員已存在某團隊中!!!無法添加!");
}
//團隊成員不能超過5名
else if (programmer.size()>4){
throw new TeamException("團隊成員最多只能有五個");
}
//只能有一名架構師
else if (employees.get(num-1) instanceof Architect){
if (count>1){
throw new TeamException("團隊中至多只能有一名架構師!");
}
else {
programmer.add((Programmer) employees.get(num-1));
System.out.println("添加了一名架構師");
count++;
((Programmer) employees.get(num-1)).setStatus(false);
}
}
//最多兩名設計師
else if (employees.get(num-1) instanceof Desigener){
if (count1>2){
throw new TeamException("最多兩名設計師");
}
else {
programmer.add((Programmer) employees.get(num-1));
count1++;
System.out.println("添加了一名設計師");
((Programmer) employees.get(num-1)).setStatus(false);
}
}
//最多三名程式員
else if (employees.get(num-1) instanceof Programmer){
if (count2>3){
throw new TeamException("添加失敗!最多三名程式員");
}
else {
programmer.add((Programmer) employees.get(num-1));
count2++;
System.out.println("添加了一名程式員");
((Programmer) employees.get(num-1)).setStatus(false);
}
}
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//查看團隊
public static void findTeam(){
System.out.println(ANSI_GREEN);
if (team.size()==0){
System.out.println("沒有團隊!!!請先添加!!!!!");
}
else{
System.out.println("TID/ID\t姓名\t\t年齡\t 工資\t 職位\t 獎金\t 股票 領用設備");
for (int i = 0; i <team.size() ; i++) {
for (int j = 0; j <team.get(i).size() ; j++) {
System.out.println((j+1)+"/"+team.get(i).get(j));
}
System.out.println("======這是團隊"+(i+1)+"=======");
System.out.println("==========================================");
}
}
}
//洗掉團隊
public static void deletaTeam(){
if (team.size()==0){
System.out.println("請先添加團隊,再洗掉!!!!");
}
else{
findTeam();
System.out.println("請輸入你想洗掉的團隊編號:");
int a=TSUtility.readInt();
if (a>team.size()||a<=0){
System.out.println("你輸入的編號有誤!!!洗掉失敗!!");
}else {
for (int i = 0; i <team.get(a-1).size(); i++) {
((Programmer)team.get(a-1).get(i)).setStatus(true);
// System.out.println(((Programmer)team.get(a-1).get(i)));
}
team.remove(a-1);
System.out.println("你已成功洗掉團隊"+a);
}
}
}
}
3.3專案管理
package ProjectOne.service;
import ProjectOne.domain.Programmer;
import ProjectOne.domain.Project;
import ProjectOne.view.TSUtility;
import ProjectOne.view.TeamView;
import java.util.ArrayList;
/**
* @author 黎豪
* @version 1.0
*/
/管理專案的類、、、、、
public class ProjectService {
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static ArrayList<Project> pro=new ArrayList<Project>();
public static ArrayList<ArrayList>total=new ArrayList<>();
public static ArrayList<Project> newpro=new ArrayList<>();
public static int count=1;
//增加專案
public static void addProject(){
System.out.println(ANSI_YELLOW);
System.out.println("專案參考:--------------------------------------------------");
System.out.println("1.小米官網:開發完成類似于小米官網的web專案.");
System.out.println("2.公益在線商城:貓寧Morning公益商城是中國公益性在線電子商城.");
System.out.println("3.博客系統:Java博客系統,讓每一個有故事的人更好的表達想法!");
System.out.println("4.在線協作檔案編輯系統:一個很常用的功能,適合小組內的檔案編輯,");
System.out.println("------------------------------------------------------------");
TSUtility.readReturn();
System.out.println("請輸入你想添加的專案名: ");
char c=TSUtility.readMenuSelection();
switch (c) {
case '1':
Project p1 = new Project();
p1.setProId(count++);
p1.setProName("小米官網");
p1.setDesName("開發完成類似于小米官網的web專案.");
pro.add(p1);
try {
TSUtility.loadSpecialEffects();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("已添加專案:"+p1.getProName());
break;
case '2':
Project p2 = new Project();
p2.setProId(count++);
p2.setProName("公益在線商城");
p2.setDesName("貓寧Morning公益商城是中國公益性在線電子商城.");
pro.add(p2);
try {
TSUtility.loadSpecialEffects();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("已添加專案:"+p2.getProName());
break;
case '3':
Project p3 = new Project();
p3.setProId(count++);
p3.setProName("博客系統");
p3.setDesName("Java博客系統,讓每一個有故事的人更好的表達想法!");
pro.add(p3);
try {
TSUtility.loadSpecialEffects();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("已添加專案:" + p3.getProName());
break;
case '4':
Project p4 = new Project();
p4.setProId(count++);
p4.setProName("在線協作檔案編輯系統");
p4.setDesName("一個很常用的功能,適合小組內的檔案編輯,");
pro.add(p4);
try {
TSUtility.loadSpecialEffects();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("已添加專案:"+p4.getProName());
break;
default:
System.out.println("專案不存在!!!");
}
}
//專案分配
public static void distributionProject(ArrayList<ArrayList>team){
if (pro.size()==0){
System.out.println("你還沒有專案,請先添加");
}
else{
if (team.size()==0){
System.out.println("你的團隊已經被分配完了!!!請去添加團隊");
}
else {
System.out.println("TID/ID\t姓名\t\t年齡\t 工資\t 職位\t 獎金\t 股票 領用設備");
for (int i = 0; i < team.size(); i++) {
for (int j = 0; j < team.get(i).size(); j++) {
System.out.println((j + 1) + "/" + team.get(i).get(j));
}
System.out.println("======這是團隊" + (i + 1) + "=======");
System.out.println("==========================================");
}
System.out.println("請先選擇團隊:");
int t = TSUtility.readInt();
if (t > team.size() || t <= 0) {
System.out.println("你輸入有誤!!!分配失敗!!");
} else {
System.out.println("請給他們取一個新的團隊名稱:");
String name = TSUtility.readKeyBoard(6, false);
for (int j = 0; j < pro.size(); j++) {
System.out.println(pro.get(j));
}
System.out.println("請為該團隊分配任務!!!請輸入專案序號(從一開始):");
int c1 = TSUtility.readInt();
if (c1 > pro.size() || c1 <= 0) {
System.out.println("你輸入有誤!!添加專案失敗!!");
} else if ((pro.get(c1 - 1).getStatus())) {
System.out.println("該專案已被開發!!!");
} else if (!(pro.get(c1 - 1).getStatus())) {
pro.get(c1 - 1).setStatus(true);
pro.get(c1 - 1).setTeamName(name);
total.add(team.get(t - 1));
team.remove(t - 1);
newpro.add(pro.get(c1 - 1));
pro.remove(c1 - 1);
System.out.println("專案分配成功!!");
TSUtility.readReturn();
}
}
}
}
}
//查看專案
public static void findProject(){
System.out.println(ANSI_RESET);
if (newpro.size()==0){
if (pro.size()==0){
System.out.println("請先添加專案在查看!!!");
}else
{
for (int i = 0; i <pro.size() ; i++) {
System.out.println(pro.get(i));
}
}
}
else{
if (pro.size()==0){
for (int i = 0; i <newpro.size() ; i++) {
System.out.println(newpro.get(i));
}
}
else {
for (int i = 0; i <pro.size() ; i++) {
System.out.println(pro.get(i));
}
System.out.println("==========================================");
for (int i = 0; i <newpro.size() ; i++) {
System.out.println(newpro.get(i));
}
}
}
}
//專案洗掉
public static void deletaProject() {
if (pro.size() == 0) {
System.out.println("沒有未開發任務!!!");
} else {
for (int i = 0; i < pro.size(); i++) {
System.out.println(pro.get(i));
}
System.out.println("請輸入你要洗掉的專案(從一開始):");
int a = TSUtility.readInt();
if (a <= 0 || a > pro.size()) {
System.out.println("該專案不存在!!!!");
} else {
pro.remove(a - 1);
System.out.println("洗掉成功!!!");
}
}
}
}
心得:
第一次寫千行代碼,感覺自己又行了!!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293720.html
標籤:java
上一篇:cgb2106-day15
