日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

项目开发团队分配管理软件总结

發(fā)布時(shí)間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目开发团队分配管理软件总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

前言

?一、項(xiàng)目需求

二、主要思路

?三、系統(tǒng)流程

四、代碼實(shí)現(xiàn)

4.1 登錄

4.2?開(kāi)發(fā)人員管理模塊

4.3開(kāi)發(fā)團(tuán)隊(duì)調(diào)度管理模塊

4.4開(kāi)發(fā)項(xiàng)目管理模塊

4.5 IndexView類的設(shè)計(jì)

五、總結(jié)


前言

當(dāng)我們?cè)趯W(xué)習(xí)完了Java基礎(chǔ)和面向?qū)ο笾笪覀兙涂梢蚤_(kāi)始著手寫一些比較簡(jiǎn)單的項(xiàng)目了。當(dāng)我們能夠自己獨(dú)立的寫完一個(gè)比較完整的小項(xiàng)目的時(shí)候,也表示我們前面學(xué)習(xí)的Java基礎(chǔ)和面對(duì)對(duì)象這些都學(xué)懂了,能夠進(jìn)行靈活運(yùn)用。主要目的就是熟悉Java面向?qū)ο蟮母呒?jí)特性,進(jìn)一步掌握編程技巧和調(diào)試技巧。

而我先選擇的就是項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)分配管理軟件這個(gè)小項(xiàng)目,這個(gè)項(xiàng)目需要的知識(shí)點(diǎn)比較全面的囊括了前面所學(xué)的基礎(chǔ)和面對(duì)對(duì)象的知識(shí)。

接下來(lái)就看一下我寫這個(gè)小項(xiàng)目的思路以及做法。

?一、項(xiàng)目需求

在我們拿到一個(gè)項(xiàng)目的時(shí)候也會(huì)拿到這個(gè)項(xiàng)目的相關(guān)需求,而項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)分配管理軟件的需求就是,用戶使用的時(shí)候能夠有登錄界面,有開(kāi)發(fā)人員的管理,有項(xiàng)目的管理,和項(xiàng)目的分配。

二、主要思路

而這些需求被分成了四個(gè)部分,1.用戶注冊(cè)和登錄 2.開(kāi)發(fā)人員管理 3.開(kāi)發(fā)團(tuán)隊(duì)調(diào)度 4.開(kāi)發(fā)項(xiàng)目管理。在,每個(gè)部分下又進(jìn)行了細(xì)分來(lái)實(shí)現(xiàn)我們需要的功能,比如用戶登錄中有用戶的注冊(cè),用戶的登錄以及用戶的修改。

一個(gè)大體的流程和思路圖如下:

?三、系統(tǒng)流程

當(dāng)我們把整個(gè)需求分析成了功能結(jié)構(gòu)后我們就能基本上,畫出我們這個(gè)項(xiàng)目的流程圖,當(dāng)有這個(gè)流程圖之后我們寫代碼的時(shí)候能夠更加的有思路,讓我們知道寫的相對(duì)應(yīng)的代碼是用來(lái)干什么的。

具體流程圖如下:

四、代碼實(shí)現(xiàn)

當(dāng)我們熟悉了我們要寫的整個(gè)流程過(guò)后就可以進(jìn)行代碼的書寫了,我是從前往后一一實(shí)現(xiàn)功能來(lái)寫代碼的,當(dāng)我把每一個(gè)部分的代碼都寫好調(diào)試好了之后再來(lái)進(jìn)行最后的組裝整個(gè)項(xiàng)目。我是將整個(gè)代碼放在了同一個(gè)包之下,而在這個(gè)包下我又分了三個(gè)包來(lái)存放同一個(gè)類型的類。team.view ? ?模塊為主控模塊,負(fù)責(zé)菜單的顯示和處理用戶操作,.team.service ?模塊為實(shí)體對(duì)象(Employee及其子類如程序員等)的管理模塊, NameListService和TeamService類分別用各自的數(shù)組來(lái)管理公司員工和開(kāi)發(fā)團(tuán)隊(duì)成員對(duì)象,ProjectService是對(duì)項(xiàng)目的操作對(duì)象類,domain模塊為Employee及其子類等JavaBean類所在的包。

具體如下:

4.1 登錄

整個(gè)登錄界面我是放在一起的就是LoginView類:

public class TeamService {private static int counter = 1;//用來(lái)為開(kāi)發(fā)團(tuán)隊(duì)新增成員自動(dòng)生成團(tuán)隊(duì)中的唯一IDprivate final int MAX_MEMBER = 5;//表示開(kāi)發(fā)團(tuán)隊(duì)最大成員數(shù)private Programmer[] team = new Programmer[MAX_MEMBER];//用來(lái)保存當(dāng)前團(tuán)隊(duì)中的各成員對(duì)象private int total = 0;//記錄團(tuán)隊(duì)成員的實(shí)際人數(shù)//返回當(dāng)前團(tuán)隊(duì)的所有對(duì)象public Programmer[] getTeam() {Programmer team[] = new Programmer[total];for (int i = 0; i < total; i++) {team[i] = this.team[i];}return team;}//初始化當(dāng)前團(tuán)隊(duì)成員數(shù)組public void clearTeam() {team = new Programmer[MAX_MEMBER];counter = 1;total = 0;this.team = team;}//判斷團(tuán)隊(duì)是否有該成員private boolean isExist(Programmer p) {for (int i = 0; i < total; i++) {if (team[i].getId() == p.getId()) return true;}return false;}//向團(tuán)隊(duì)中添加成員public void addMember(Employee e) throws TeamException {if (total >=MAX_MEMBER) {throw new TeamException("團(tuán)隊(duì)成員已滿!!!");}if (!(e instanceof Programmer)) {throw new TeamException("該員工不是開(kāi)發(fā)人員!!!");}Programmer p = (Programmer) e;if (isExist(p)) {throw new TeamException("該員工已是團(tuán)隊(duì)成員!!!");}if (!p.isStatus()) {throw new TeamException("該員工已是某團(tuán)隊(duì)成員");}int numOfArch = 0, numOfDsgn = 0, numOfPrg = 0;for (int i = 0; i < total; i++) {if (team[i] instanceof Architect) {numOfArch++;} else if (team[i] instanceof Designer) {numOfDsgn++;} else if (team[i] instanceof Programmer) {numOfPrg++;}}if (p instanceof Architect) {if (numOfArch >= 1) {throw new TeamException("團(tuán)隊(duì)中至多只能有一名架構(gòu)師");}} else if (p instanceof Designer) {if (numOfDsgn >= 2) {throw new TeamException("團(tuán)隊(duì)中至多只能有兩名設(shè)計(jì)師");}} else if (p instanceof Programmer) {if (numOfPrg >= 3) {throw new TeamException("團(tuán)隊(duì)中至多只能有三名程序員");}}//添加到數(shù)組p.setStatus(false);p.setMemberId(counter++);team[total++] = p;}//從團(tuán)隊(duì)中刪除成員public void removeMember(int memberId) throws TeamException {int i = 0;for (; i < total; i++) {if (team[i].getMemberId() == memberId) {team[i].setStatus(true);break;}}if (i == total) {throw new TeamException("該團(tuán)隊(duì)沒(méi)有該員工,刪除失敗!!!");}for (int j = i + 1; j < total; j++) {team[j - 1] = team[j];}team[--total] = null;} }

4.2?開(kāi)發(fā)人員管理模塊

而開(kāi)發(fā)人員的管理是在domain包中完成各個(gè)類的實(shí)體類創(chuàng)建,在NameListService類中完成功能操作。

代碼如下:

普通員工類(其他類依次實(shí)現(xiàn)):

//Employee public class Employee {private int id;//員工碼private String name;//姓名private int age;//年紀(jì)private double salary;//薪水public Employee() {}public Employee(int id, String name, int age, double salary) {this.id = id;this.name = name;this.age = age;this.salary = salary;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}protected String getDetails() {return id + "\t" + name + "\t" + age+ "\t\t" +salary;}@Overridepublic String toString() {return getDetails();} }

NameListService類:

public class NameListService {private ArrayList<Employee> employees = new ArrayList<>();//存人員信息private int count = 1;//記錄序號(hào)//初始化人員名單{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, "劉強(qiáng)東", 24, 7300, new PC("戴爾", "三星 17寸")));employees.add(new Designer(++count, "雷軍 ", 50, 10000, new Printer("激光", "佳能2900"), 5000));employees.add(new Programmer(++count, "任志強(qiáng)", 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("針式", "愛(ài)普生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, "張朝陽(yáng) ", 35, 7100, new PC("華碩", "三星 17寸")));employees.add(new Designer(++count, "楊致遠(yuǎn)", 38, 9600, new NoteBook("惠普m6", 5800), 3000));}public void view() {char keySec = 0;char yn = 0;do {System.out.println("---------------開(kāi)發(fā)人員管理主菜單--------------");System.out.println(" 1.<開(kāi)發(fā)人員的添加> ");System.out.println(" 2.<開(kāi)發(fā)人員的查看> ");System.out.println(" 3.<開(kāi)發(fā)人員的修改> ");System.out.println(" 4.<開(kāi)發(fā)人員的刪除> ");System.out.println(" 5.<退出當(dāng)前菜單> ");System.out.println("?請(qǐng)選擇: ");keySec = TSUtility.readMenuSelectionPro();switch (keySec) {case '1':addEmployee();break;case '2':getAllEmployees2();break;case '3':setEmployees();break;case '4':deleteEmployee();break;case '5':System.out.print("確認(rèn)是否退出(Y/N):");yn = TSUtility.readConfirmSelection();}} while (yn != 'Y');}//得到所有員工public ArrayList<Employee> getAllEmployees() {return employees;}//遍歷所有員工public void getAllEmployees2() {System.out.println("ID" + "\t姓名" + " \t年齡" + "\t\t工資" + " \t職位" + " \t狀態(tài)" + "\t\t獎(jiǎng)金" + "\t\t\t股票" + "\t\t設(shè)備");for (int i = 0; i < employees.size(); i++) {System.out.println(employees.get(i));}}//查詢指定員工public Employee getEmployee(int id) throws TeamException {if (id > count) {try {throw new TeamException("用戶不存在!!!");} catch (TeamException e) {System.out.println("用戶不存在!!!");return null;}}return employees.get(id - 1);}//增加員工public void addEmployee() {char b = 0;do {Scanner sc = new Scanner(System.in);System.out.println("-----------------增加界面-----------------");System.out.println(" 1 普通員工 ");System.out.println(" 2 程序員 ");System.out.println(" 3 設(shè)計(jì)師 ");System.out.println(" 4 架構(gòu)師 ");System.out.println(" 5 退出 ");char a = TSUtility.readMenuSelectionPro();switch (a) {case '1':System.out.print("請(qǐng)輸入姓名:");String name = TSUtility.readKeyBoard(4);System.out.print("請(qǐng)輸入年齡:");int age = TSUtility.readInt();System.out.print("請(qǐng)輸入工資:");double salary = sc.nextDouble();employees.add(new Employee(++count, name, age, salary));System.out.println("添加成功!!!");break;case '2':System.out.print("請(qǐng)輸入姓名:");String name1 = TSUtility.readKeyBoard(4);System.out.print("請(qǐng)輸入年齡:");int age1 = TSUtility.readInt();System.out.print("請(qǐng)輸入工資:");double salary1 = sc.nextInt();System.out.print("請(qǐng)輸入臺(tái)式電腦型號(hào):");String model = sc.next();System.out.print("請(qǐng)輸入臺(tái)式電腦顯示器名稱:");String display = sc.next();employees.add(new Programmer(++count, name1, age1, salary1, new PC(model, display)));System.out.println("添加成功!!!");break;case '3':System.out.print("請(qǐng)輸入姓名:");String name2 = TSUtility.readKeyBoard(4);System.out.print("請(qǐng)輸入年齡:");int age2 = TSUtility.readInt();System.out.print("請(qǐng)輸入工資:");double salary2 = sc.nextDouble();System.out.print("請(qǐng)輸入獎(jiǎng)金:");double bonus = sc.nextDouble();System.out.print("請(qǐng)輸入打印機(jī)名字:");String dyjmz = sc.next();System.out.print("請(qǐng)輸入打印機(jī)類型:");String type = sc.next();employees.add(new Designer(++count, name2, age2, salary2, new Printer(dyjmz, type), bonus));System.out.println("添加成功!!!");break;case '4':System.out.print("請(qǐng)輸入名字:");String name3 = TSUtility.readKeyBoard(4);System.out.print("請(qǐng)輸入年齡:");int age3 = TSUtility.readInt();System.out.print("請(qǐng)輸入工資:");double salary3 = sc.nextDouble();System.out.print("請(qǐng)輸入獎(jiǎng)金:");double bonus1 = sc.nextDouble();System.out.print("請(qǐng)輸入股票:");int stock = sc.nextInt();System.out.print("請(qǐng)輸入筆記本電腦型號(hào):");String model2 = sc.next();System.out.print("請(qǐng)輸入筆記本電腦價(jià)格:");double price = sc.nextDouble();employees.add(new Architect(++count, name3, age3, salary3, new NoteBook(model2, price), bonus1, stock));System.out.println("添加成功!!!");break;case '5':System.out.println("是否確認(rèn)退出(輸入Y/N):");b = TSUtility.readConfirmSelection();}} while (b != 'Y');}//刪除員工public void deleteEmployee() {Scanner sc = new Scanner(System.in);System.out.print("請(qǐng)輸入需要?jiǎng)h除的ID:");int a = sc.nextInt();if (a > count) {try {throw new TeamException("用戶不存在!!!");} catch (TeamException e) {System.out.println("用戶不存在!!!");}return;}if (a <= 0) {try {throw new TeamException("輸入有誤!!!");} catch (TeamException e) {System.out.println("輸入有誤!!!");}return;}employees.remove(a - 1);for (int i = a - 1; i < employees.size(); i++) {employees.get(i).setId(employees.get(i).getId() - 1);}System.out.println("刪除成功!!!");}//修改員工信息(只能修改名字、年齡、工資)public void setEmployees() {Scanner sc = new Scanner(System.in);System.out.print("請(qǐng)輸入需要修改的ID:");int a = sc.nextInt();if (a > count) {try {throw new TeamException("用戶不存在!!!");} catch (TeamException e) {System.out.println("用戶不存在!!!");}return;}Employee b = employees.get(a - 1);System.out.print("請(qǐng)輸入新的姓名(" + employees.get(a - 1).getName() + "):");String naem = TSUtility.readString(4, b.getName());System.out.print("請(qǐng)輸入新的年齡(" + b.getAge() + "):");int age = Integer.parseInt(TSUtility.readString(2, b.getAge() + ""));System.out.print("請(qǐng)輸入新的工資(" + b.getSalary() + "):");double salary = Double.parseDouble(TSUtility.readString(10, b.getSalary() + ""));b.setName(naem);b.setAge(age);b.setSalary(salary);employees.set(a - 1, b);System.out.println("修改成功!!!");} }

4.3開(kāi)發(fā)團(tuán)隊(duì)調(diào)度管理模塊

這個(gè)模塊分成了兩個(gè)類分別是TeamService類和TeamView類,是進(jìn)行團(tuán)隊(duì)成員的管理:添加、刪除等。

public class TeamView {private NameListService listSvc = new NameListService();private TeamService teamSvc = new TeamService();private ArrayList<Programmer[]> team = new ArrayList<>();//團(tuán)隊(duì)調(diào)度主界面public void enterMainMenu(ArrayList<Employee> employees) {char b = 0;char a = 0;do {if (a != '1') {listAllEmployees(employees);}System.out.print("1-團(tuán)隊(duì)列表 2-添加團(tuán)隊(duì)成員 3-刪除團(tuán)隊(duì)成員 4-退出 請(qǐng)選擇(1-4):");a = TSUtility.readMenuSelection();switch (a) {case '1':getTeam();break;case '2':addMember();break;case '3':deleteMember();break;case '4':System.out.println("是否確認(rèn)退出(輸入Y/N):");b = TSUtility.readConfirmSelection();if (b == 'Y') {team.add(teamSvc.getTeam());}teamSvc.clearTeam();}} while (b != 'Y');}//以表格形式列出公司所有成員public void listAllEmployees(ArrayList<Employee> employees) {System.out.println("-----------------------------------------開(kāi)發(fā)團(tuán)隊(duì)調(diào)度軟件---------------------------------------");ArrayList<Employee> emps = employees;if (emps.size() == 0) {System.out.println("沒(méi)有客戶記錄!");} else {System.out.println("ID\t姓名\t 年齡\t 工資\t 職位\t 狀態(tài)\t 獎(jiǎng)金\t\t 股票\t 領(lǐng)用設(shè)備");}for (int i = 0; i < emps.size(); i++) {System.out.println(" " + emps.get(i));}System.out.println("---------------------------------------------------------------------------------------------");}//顯示團(tuán)隊(duì)成員列表操作public void getTeam() {System.out.println("\n--------------------團(tuán)隊(duì)成員列表---------------------\n");Programmer tame[] = teamSvc.getTeam();if (tame.length == 0) {System.out.println("開(kāi)發(fā)團(tuán)隊(duì)目前沒(méi)有成員!");} else {System.out.println("TID/ID\t姓名\t\t年齡\t 工資\t 職位\t 獎(jiǎng)金\t 股票");}for (int i = 0; i < tame.length; i++) {System.out.println(" " + tame[i].getDetailsForTeam());}}//實(shí)現(xiàn)添加成員操作public void addMember() {System.out.println("---------------------添加成員---------------------");System.out.print("請(qǐng)輸入要添加的員工ID:");int id = TSUtility.readInt();try {Employee e = listSvc.getEmployee(id);teamSvc.addMember(e);System.out.println("添加成功");} catch (TeamException e) {System.out.println("添加失敗,原因:" + e.getMessage());}// 按回車鍵繼續(xù)...TSUtility.readReturn();}//實(shí)現(xiàn)刪除成員操作public void deleteMember() {System.out.println("---------------------刪除成員---------------------");System.out.print("請(qǐng)輸入要?jiǎng)h除員工的TID:");int id = TSUtility.readInt();System.out.print("確認(rèn)是否刪除(Y/N):");char yn = TSUtility.readConfirmSelection();if (yn == 'N')return;try {teamSvc.removeMember(id);System.out.println("刪除成功");} catch (TeamException e) {System.out.println("刪除失敗,原因:" + e.getMessage());}// 按回車鍵繼續(xù)...TSUtility.readReturn();}//增加更多團(tuán)隊(duì)public ArrayList<Programmer[]> getManyTeam(ArrayList<Employee> employees) {char a = 0;char b = 0;do {System.out.println("----------------團(tuán)隊(duì)調(diào)度界面---------------");System.out.println(" 1-添加團(tuán)隊(duì) ");System.out.println(" 2-查看團(tuán)隊(duì) ");System.out.println(" 3-刪除團(tuán)隊(duì) ");System.out.println(" 4-退出 ");System.out.println("?請(qǐng)選擇: ");a = TSUtility.readMenuSelection();switch (a) {case '1':enterMainMenu(employees);break;case '2':System.out.println("---------------團(tuán)隊(duì)列表--------------");for (Programmer[] team : team) {for (int i = 0; i < team.length; i++) {System.out.println(team[i]);}System.out.println("------------------");}break;case '3':System.out.print("請(qǐng)輸入要?jiǎng)h除第幾個(gè)團(tuán)隊(duì)(從上往下數(shù)是第幾個(gè)就是幾號(hào)團(tuán)隊(duì)):");int num = TSUtility.readInt();if (num <= team.size()) {System.out.print("確認(rèn)是否刪除(Y/N):");char de = TSUtility.readConfirmSelection();if (de == 'Y') {team.remove(num - 1);} else {System.out.println("請(qǐng)考慮清楚!");}} else {System.out.println("沒(méi)有該團(tuán)隊(duì),請(qǐng)正常輸入!" + "目前團(tuán)隊(duì)只有" + team.size() + "個(gè)");}break;case '4':System.out.println("是否確認(rèn)退出(輸入Y/N):");b = TSUtility.readConfirmSelection();if (b == 'Y') {return team;}}} while (b != 'Y');return team;}public ArrayList<Programmer[]> tame() {return team;} } public class TeamService {private static int counter = 1;//用來(lái)為開(kāi)發(fā)團(tuán)隊(duì)新增成員自動(dòng)生成團(tuán)隊(duì)中的唯一IDprivate final int MAX_MEMBER = 5;//表示開(kāi)發(fā)團(tuán)隊(duì)最大成員數(shù)private Programmer[] team = new Programmer[MAX_MEMBER];//用來(lái)保存當(dāng)前團(tuán)隊(duì)中的各成員對(duì)象private int total = 0;//記錄團(tuán)隊(duì)成員的實(shí)際人數(shù)//返回當(dāng)前團(tuán)隊(duì)的所有對(duì)象public Programmer[] getTeam() {Programmer team[] = new Programmer[total];for (int i = 0; i < total; i++) {team[i] = this.team[i];}return team;}//初始化當(dāng)前團(tuán)隊(duì)成員數(shù)組public void clearTeam() {team = new Programmer[MAX_MEMBER];counter = 1;total = 0;this.team = team;}//判斷團(tuán)隊(duì)是否有該成員private boolean isExist(Programmer p) {for (int i = 0; i < total; i++) {if (team[i].getId() == p.getId()) return true;}return false;}//向團(tuán)隊(duì)中添加成員public void addMember(Employee e) throws TeamException {if (total >= MAX_MEMBER) {throw new TeamException("團(tuán)隊(duì)成員已滿!!!");}if (!(e instanceof Programmer)) {throw new TeamException("該員工不是開(kāi)發(fā)人員!!!");}Programmer p = (Programmer) e;if (isExist(p)) {throw new TeamException("該員工已是團(tuán)隊(duì)成員!!!");}if (!p.isStatus()) {throw new TeamException("該員工已是某團(tuán)隊(duì)成員");}int numOfArch = 0, numOfDsgn = 0, numOfPrg = 0;for (int i = 0; i < total; i++) {if (team[i] instanceof Architect) {numOfArch++;} else if (team[i] instanceof Designer) {numOfDsgn++;} else if (team[i] instanceof Programmer) {numOfPrg++;}}if (p instanceof Architect) {if (numOfArch >= 1) {throw new TeamException("團(tuán)隊(duì)中至多只能有一名架構(gòu)師");}} else if (p instanceof Designer) {if (numOfDsgn >= 2) {throw new TeamException("團(tuán)隊(duì)中至多只能有兩名設(shè)計(jì)師");}} else if (p instanceof Programmer) {if (numOfPrg >= 3) {throw new TeamException("團(tuán)隊(duì)中至多只能有三名程序員");}}//添加到數(shù)組p.setStatus(false);p.setMemberId(counter++);team[total++] = p;}//從團(tuán)隊(duì)中刪除成員public void removeMember(int memberId) throws TeamException {int i = 0;for (; i < total; i++) {if (team[i].getMemberId() == memberId) {team[i].setStatus(true);break;}}if (i == total) {throw new TeamException("該團(tuán)隊(duì)沒(méi)有該員工,刪除失敗!!!");}for (int j = i + 1; j < total; j++) {team[j - 1] = team[j];}team[--total] = null;} }

4.4開(kāi)發(fā)項(xiàng)目管理模塊

而這個(gè)模塊就是在domain包中完成項(xiàng)目實(shí)體類Project的創(chuàng)建,在service包中完成項(xiàng)目操作類ProjectService的創(chuàng)建

public class Project {private int proId;//項(xiàng)目號(hào)private String projectName;//項(xiàng)目名稱private String desName;//項(xiàng)目描述private Programmer[] team;//開(kāi)發(fā)團(tuán)隊(duì)private String teamName;//開(kāi)發(fā)團(tuán)隊(duì)名稱private boolean status = false;//開(kāi)發(fā)狀態(tài) true為開(kāi)發(fā)中,false為未開(kāi)發(fā)中public Project() {}public Project(int proId, String projectName, String desName, Programmer[] team, String teamName, boolean status) {this.proId = proId;this.projectName = projectName;this.desName = desName;this.team = team;this.teamName = teamName;this.status = status;}public int getProId() {return proId;}public void setProId(int proId) {this.proId = proId;}public String getProjectName() {return projectName;}public void setProjectName(String projectName) {this.projectName = projectName;}public String getDesName() {return desName;}public void setDesName(String desName) {this.desName = desName;}public Programmer[] getTeam() {return team;}public void setTeam(Programmer[] team) {this.team = team;}public String getTeamName() {return teamName;}public void setTeamName(String teamName) {this.teamName = teamName;}public boolean isStatus() {return status;}public void setStatus(boolean status) {this.status = status;}public String des() {return "項(xiàng)目{" +"項(xiàng)目號(hào)='" + proId + '\'' +"項(xiàng)目名='" + projectName + '\'' +", 項(xiàng)目描述='" + desName + '\'' +", 開(kāi)發(fā)團(tuán)隊(duì)名稱='" + teamName + '\'' +", 開(kāi)發(fā)狀態(tài)=" + status +'}' + "\n";}@Overridepublic String toString() {des();if (status) {return "項(xiàng)目【" + projectName + "】" + "---->正在被團(tuán)隊(duì)【" + teamName + "】開(kāi)發(fā)中!";} else {return des() + "項(xiàng)目【" + projectName + "】---->" + "未被開(kāi)發(fā)!";}} } public class ProjectService {private ArrayList<Project> pro = new ArrayList<>();//用來(lái)存項(xiàng)目的集合private int count = 1;//添加項(xiàng)目的標(biāo)號(hào)public void ProjectManage(ArrayList<Programmer[]> manyTeam) throws InterruptedException, TeamException {Scanner sc = new Scanner(System.in);char a = 0;char b = 0;do {System.out.println("-----------------開(kāi)發(fā)項(xiàng)目管理主菜單--------------------");System.out.println(" 1 項(xiàng)目的添加 ");System.out.println(" 2 項(xiàng)目分配開(kāi)發(fā)團(tuán)隊(duì) ");System.out.println(" 3 項(xiàng)目的查看 ");System.out.println(" 4 項(xiàng)目的刪除 ");System.out.println(" 5 退出當(dāng)前菜單 ");System.out.println("?請(qǐng)選擇: ");a = TSUtility.readMenuSelectionPro();switch (a) {case '1':addProject();break;case '2':if (manyTeam == null) {System.out.println("沒(méi)有團(tuán)隊(duì),請(qǐng)先添加團(tuán)隊(duì)!!!");break;}for (Programmer[] pro : manyTeam) {dealingPro(pro);}break;case '3':showPro();break;case '4':System.out.println("是否確認(rèn)刪除團(tuán)隊(duì)(輸入Y/N):");char c = TSUtility.readConfirmSelection();if (c == 'Y') {System.out.println("選擇你要?jiǎng)h除的團(tuán)隊(duì)ID:");int d = TSUtility.readInt();delPro(d);break;} else break;case '5':System.out.println("是否確認(rèn)退出(輸入Y/N):");b = TSUtility.readConfirmSelection();}} while (b != 'Y');}//新項(xiàng)目添加public void addProject() throws InterruptedException {System.out.println("項(xiàng)目參考:--------------------------------------------------");System.out.println("1.小米官網(wǎng):開(kāi)發(fā)完成類似于小米官網(wǎng)的web項(xiàng)目.");System.out.println("2.公益在線商城:貓寧Morning公益商城是中國(guó)公益性在線電子商城.");System.out.println("3.博客系統(tǒng):Java博客系統(tǒng),讓每一個(gè)有故事的人更好的表達(dá)想法!");System.out.println("4.在線協(xié)作文檔編輯系統(tǒng):一個(gè)很常用的功能,適合小組內(nèi)的文檔編輯。");System.out.println("------------------------------------------------------------");TSUtility.readReturn();System.out.println("請(qǐng)輸入需要添加的項(xiàng)目:");char a = TSUtility.readMenuSelection();switch (a) {case '1':Project p1 = new Project();p1.setProId(count++);p1.setProjectName("小米官網(wǎng)");p1.setDesName("開(kāi)發(fā)完成類似于小米官網(wǎng)的web項(xiàng)目。");pro.add(p1);TSUtility.loadSpecialEffects();System.out.println("已添加項(xiàng)目:" + p1.getProjectName());break;case '2':Project p2 = new Project();p2.setProId(count++);p2.setProjectName("公益在線商城");p2.setDesName("貓寧Morning公益商城是中國(guó)公益性在線電子商城。");pro.add(p2);TSUtility.loadSpecialEffects();System.out.println("已添加項(xiàng)目:" + p2.getProjectName());break;case '3':Project p3 = new Project();p3.setProId(count++);p3.setProjectName("博客系統(tǒng)");p3.setDesName("Java博客系統(tǒng),讓每一個(gè)有故事的人更好的表達(dá)想法!");pro.add(p3);TSUtility.loadSpecialEffects();System.out.println("已添加項(xiàng)目:" + p3.getProjectName());break;case '4':Project p4 = new Project();p4.setProId(count++);p4.setProjectName("在線協(xié)作文檔編輯系統(tǒng)");p4.setDesName("一個(gè)很常用的功能,適合小組內(nèi)的文檔編輯。");pro.add(p4);TSUtility.loadSpecialEffects();System.out.println("已添加項(xiàng)目:" + p4.getProjectName());break;default:System.out.println("沒(méi)有該項(xiàng)目!!!");break;}}//項(xiàng)目分配團(tuán)隊(duì)開(kāi)發(fā)public void dealingPro(Programmer[] team) {if (pro == null) {System.out.println("沒(méi)有項(xiàng)目,請(qǐng)先添加項(xiàng)目!!!");return;}System.out.println("當(dāng)前團(tuán)隊(duì)有人員:");for (int i = 0; i < team.length; i++) {System.out.println(team[i]);}System.out.println("請(qǐng)為當(dāng)前團(tuán)隊(duì)創(chuàng)建一個(gè)團(tuán)隊(duì)名稱:");String teamName = TSUtility.readKeyBoard(6, false);Random ra = new Random();int ranNum = ra.nextInt(pro.size());Project project = this.pro.get(ranNum);project.setTeamName(teamName);project.setTeam(team);project.setStatus(true);pro.set(ranNum, project);}//查看項(xiàng)目當(dāng)前狀態(tài)public void showPro() throws InterruptedException {TSUtility.loadSpecialEffects();if (pro.size() == 0) {System.out.println("當(dāng)前沒(méi)有項(xiàng)目,請(qǐng)?zhí)砑禹?xiàng)目!!!");}for (int i = 0; i < pro.size(); i++) {System.out.println(pro.get(i));}}//刪除選擇的項(xiàng)目public void delPro(int id) throws TeamException {boolean a = false;for (int i = 0; i < pro.size(); i++) {if (i == (id - 1)) {pro.remove(i);for (i = id; i <= pro.size(); i++) {pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);}a = true;}}if (a) {System.out.println("刪除成功!!!");} else {try {throw new TeamException("該團(tuán)隊(duì)不存在!!!");} catch (TeamException e) {System.out.println("該團(tuán)隊(duì)不存在!!!");}}}//得到所有項(xiàng)目數(shù)據(jù)集合public ArrayList<Project> getAllPro() {return pro;} }

4.5 IndexView類的設(shè)計(jì)

當(dāng)我們把每一個(gè)模塊的東西都實(shí)現(xiàn)好了以后就需要進(jìn)行模塊的組裝,而我又是把每個(gè)模塊的界面就寫在了對(duì)應(yīng)的模塊調(diào)度類里面了所以最后只需要在IndexView類中寫一個(gè)總的界面然后再將每個(gè)模塊調(diào)度起來(lái)就行了。

具體如下:

public class IndexView {/*** 顏色特效*/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 LoginView loginVi = new LoginView();private NameListService nameListSer = new NameListService();private TeamView teamVi = new TeamView();private ProjectService projectSer = new ProjectService();private ArrayList<Programmer[]> manyTeam = null;private ArrayList<Employee> employees = new ArrayList<>();public void menu() throws TeamException, InterruptedException {char key = 0;char a = 0;System.out.println(ANSI_PURPLE);System.out.println("###########################################");System.out.println("# #");System.out.println("# 歡迎來(lái)到項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)分配管理軟件 #");System.out.println("# #");System.out.println("###########################################");System.out.println("-----------<請(qǐng)您先進(jìn)行登錄>-------------");System.out.println("");System.out.println("");System.out.println("");TSUtility.readReturn();try {System.out.println(ANSI_BLUE);loginVi.view();} catch (InterruptedException e) {e.printStackTrace();}do {System.out.println(ANSI_RESET + ANSI_CYAN);System.out.println("---------------軟件主菜單---------------");System.out.println(" 1. <用戶信息修改> ");System.out.println(" 2. <開(kāi)發(fā)人員管理> ");System.out.println(" 3. <開(kāi)發(fā)團(tuán)隊(duì)調(diào)度管理> ");System.out.println(" 4. <開(kāi)發(fā)項(xiàng)目管理> ");System.out.println(" 5. <退出軟件> ");System.out.println("?請(qǐng)選擇: ");System.out.print(ANSI_RESET);key = TSUtility.readMenuSelectionPro();switch (key) {case '1':System.out.println(ANSI_GREEN + ANSI_YELLOW);loginVi.revise();break;case '2':System.out.println(ANSI_CYAN + ANSI_RESET);nameListSer.view();employees = nameListSer.getAllEmployees();break;case '3':System.out.println(ANSI_RESET + ANSI_CYAN);teamVi.getManyTeam(employees);manyTeam = teamVi.tame();break;case '4':System.out.println(ANSI_RESET);projectSer.ProjectManage(manyTeam);break;case '5':System.out.println(ANSI_CYAN);System.out.println("是否確認(rèn)退出(輸入Y/N):");a = TSUtility.readConfirmSelection();}} while (a != 'Y');}public ArrayList<Programmer[]> getManyTeam() {return manyTeam;}public static void main(String[] args) throws TeamException, InterruptedException {IndexView indexView = new IndexView();indexView.menu();} }

五、總結(jié)

在我寫這個(gè)項(xiàng)目的過(guò)程中遇到了許許多多的問(wèn)題,比如人員為什么存不進(jìn)去,為什么分配給了團(tuán)隊(duì)相關(guān)的成員之后再查看團(tuán)隊(duì)的時(shí)候卻一個(gè)都沒(méi)有等等。這些問(wèn)題在一次次的嘗試中都得到了解決,而我們?cè)趯戫?xiàng)目的時(shí)候不要把整個(gè)項(xiàng)目都寫完了再來(lái)調(diào)試,如果寫完了整個(gè)項(xiàng)目再進(jìn)行調(diào)試的話就可能面臨著從每一個(gè)類進(jìn)行修改,而我覺(jué)得我們可以每一個(gè)模塊的來(lái)進(jìn)行調(diào)試,專門建立一個(gè)測(cè)試的包來(lái)裝測(cè)試的類,當(dāng)我們將每一個(gè)模塊寫完都調(diào)試完了之后再來(lái)組裝就會(huì)調(diào)試的比較輕松不用去修改每一個(gè)類。

所有代碼在網(wǎng)盤:

鏈接:https://pan.baidu.com/s/1RiWxfHllU0nM-CY9F9xmVA?
提取碼:1234

以上就是我寫的第一個(gè)獨(dú)立的項(xiàng)目的所有過(guò)程,如有錯(cuò)誤歡迎指正。

總結(jié)

以上是生活随笔為你收集整理的项目开发团队分配管理软件总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。