开发团队分配管理软件

news/2024/10/18 18:25:33/

前言

开发团队分配管理软件项目解析

提示:以下是本篇文章正文内容,下面案例可供参考

一、了解目的

开发团队分配管理软件要实现什么?
1、软件启动时,首先进入登录界面进行注册和登录功能。
2、当登陆成功后,进入菜单,首先就可以对开发人员账户和密码进行修改。
3、然后可以对开发人员进行增删改操作。
4、人员添加成功后,根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目。
5、组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表,开发团队成员包括架构师、设计师和程序员。
6、团队组建成功,则可以进入项目模块,添加项目,分配开发团队进行开发。

二、列出功能结构

在这里插入图片描述

三、分析软件设计结构

(需要有几个模块,模块的分类又是怎么样的?)
我们可以这样看:
1、首先需要显示和操作。-------这是一个模块,为viem块,它是主控模块,来实现显示和进行一些处理操作。
2、然后,我们再看,需要有一些管理操作,那我们将他们拿出来,放到单独的模块,可以使编译时更加简明和方便。-------这是一个模块,为service,它是实体对象,实现管理作用。
3、最后,我们实现以上操作需要对象吧,其中有属性和行为吧,这个我们可以集中放到一个模块里面。------这是一个模块,为domain,用来存放一些对象和方法,或者接口。

四、操作

(根据需要和所给的一些信息,初步的将模块和类创建好,再按每一个模块或功能来编写,要有条理性!)
在这里插入图片描述

1.domain类

其中,Employee为父类,在类中使用有参和无参构造方法来创建所需的对象,最后,一定要记得重写toString方法,来得到规定的输出内容。(没有重写toString,输出是一个虚拟地址)
根据关系以及功能信息,再将Architect类、Designer类、Employee类、NoteBook类、PC类、Printer类、Programmer类、Programmer类
补充完整。

接下来,从信息可知,除了普通员工以外都有设备,而表格后面都显示设备信息,所以每一个设备类都应该有一个功能就是返回自身信息,所以我们将它设计成接口。(接口实现呈现并列关系,当然都需要重写了getDescription方法)

//接口Equipment类
public interface Equipment {/*** 接口实现呈现并列关系(都重写了getDescription方法)** @return 自身信息*/String getDescription();}

2.service类

NameListService

public class NameListService {public NameListService(){}//用来装员工的数据集合private  static ArrayList<Employee> employees = new ArrayList<>();//添加员工的idprivate static int count = 1;//初始化默认值,static {employees.add(new Employee(count, "马云 ", 22, 3000));employees.add(new Architect(++count, "马化腾", 32, 18000, new NoteBook("联想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));}//    得到所有员工数据集合public ArrayList<Employee> getAllEmployees() {return employees;}//得到当前员工(id想得到的员工的ID)public Employee getEmployee(int id) throws TeamException {//for循环集合for (int i = 0; i < employees.size(); i++) {//if判断集合中是否存在输入的ID号//存在,输出//不存在,报异常“该员工不存在”if (employees.get(i).getId() == id) {return employees.get(i);}}throw new TeamException("该员工不存在");}//员工的增加public void addEmployee() throws InterruptedException {System.out.println("请输入需要添加的雇员的职位:");System.out.println("1(无职位)");System.out.println("2(程序员)");System.out.println("3(设计师)");System.out.println("4(架构师)");//输入选择,并用工具类判断输入是否正确为1-4String c = String.valueOf(TSUtility.readMenuSelection());//用if判断输入的是哪个选择,判断相等的实现相应的职位人员添加if (c.equals("1")) {System.out.println("`当前雇员职位分配为:无`");System.out.println("请输入当前雇员的姓名:");String name = TSUtility.readKeyBoard(4, false);System.out.println("请输入当前雇员的年龄:");int age = TSUtility.readInt();System.out.println("请输入当前雇员的工资:");Double salary = TSUtility.readDouble();Employee employee = new Employee(++count, name, age, salary);employees.add(employee);System.out.println("人员添加成功!");TSUtility.readReturn();} else if (c.equals("2")) {System.out.println("`当前雇员职位分配为:程序员`");System.out.println("请输入当前雇员的姓名:");String name = TSUtility.readKeyBoard(4, false);System.out.println("请输入当前雇员的年龄:");int age = TSUtility.readInt();System.out.println("请输入当前雇员的工资:");Double salary = TSUtility.readDouble();System.out.println("请为当前程序员配一台好的台式电脑!");PC pc = new PC().addPC();Programmer programmer = new Programmer(++count, name, age, salary, pc);employees.add(programmer);System.out.println("人员添加成功!");TSUtility.readReturn();} else if (c.equals("3")) {System.out.println("`当前雇员职位分配为:设计师`");System.out.println("请输入当前雇员的姓名:");String name = TSUtility.readKeyBoard(4, false);System.out.println("请输入当前雇员的年龄:");int age = TSUtility.readInt();System.out.println("请输入当前雇员的工资:");Double salary = TSUtility.readDouble();System.out.println("请为当前设计师配一台好的笔记本电脑!");NoteBook noteBook = new NoteBook().addNoteBook();System.out.println("请输入当前设计师的奖金:");Double bonus = TSUtility.readDouble();Designer designer = new Designer(++count, name, age, salary, noteBook, bonus);employees.add(designer);System.out.println("人员添加成功!");TSUtility.readReturn();} else {System.out.println("`当前雇员职位分配为:架构师`");System.out.println("请输入当前雇员的姓名:");String name = TSUtility.readKeyBoard(4, false);System.out.println("请输入当前雇员的年龄:");int age = TSUtility.readInt();System.out.println("请输入当前雇员的工资:");Double salary = TSUtility.readDouble();System.out.println("请为当前架构师配一台好的打印设备:");Printer printer = new Printer().addPrinter();System.out.println("请输入当前架构师的奖金:");Double bonus = TSUtility.readDouble();System.out.println("请输入当前架构师的股票:");Integer stock = TSUtility.readstock();Architect architect = new Architect(++count, name, age, salary, printer, bonus, stock);employees.add(architect);System.out.println("人员添加成功!");TSUtility.readReturn();}}//员工的删除/***本部分实现对开发人员的删除功能* @param  id* 删除指定id的员工*/public void delEmployee(int id)  {boolean flag = false;//for循环实现对集合是查找for (int i = 0; i < employees.size(); i++) {//判断集合中是否存在id的员工if (employees.get(i).getId() == id) {//存在,删除此id数据employees.remove(i);//再用for循环,对id之后的集合数据进行查找,并将之后的Id数据往前放一位for (i = id; i <= employees.size(); i++) {employees.get(i - 1).setId(employees.get(i - 1).getId() - 1);}flag = true;}}//如果集合中有数据,并删除的话,初始的flag将为true,来将集合的计数值count-1,同时输出提醒语句if (flag) {System.out.println("删除成功!");count--;} else {//如果没有输入id,那么将报异常,且退回菜单try {throw new TeamException("该员工不存在");} catch (TeamException e) {e.printStackTrace();}}}/***  员工的查看,将集合所有数据输出展示*/public void showEmployee() throws InterruptedException {TSUtility.loadSpecialEffects();System.out.println("ID\t \t姓名\t\t年龄\t\t 工资\t \t职位\t \t状态\t \t奖金\t\t 股票\t \t领用设备");//for循环访问集合,并输出for (int i = 0; i < employees.size(); i++) {System.out.println(" " + employees.get(i));}}/*** 实现对员工成员的修改,通过参数,对指定成员进行姓名、年龄、工资的修改* @param id* @throws InterruptedException*/public void modifyEmployee(int id) throws  InterruptedException {boolean flag = false;// for循环访问集合,然后声明emp,并初始化,得到指定id的数据然后修改for (int i = 0; i < employees.size(); i++) {Employee emp = employees.get(i);if (employees.get(i).getId() == id) {System.out.print("姓名(" + emp.getName() + "):");String name = TSUtility.readString(4, emp.getName());System.out.print("年龄(" + emp.getAge() + "):");int age = Integer.parseInt(TSUtility.readString(2,emp.getAge()+""));System.out.print("工资(" + emp.getSalary() + "):");double salary =Double.parseDouble(TSUtility.readString(10, emp.getSalary()+""));emp.setName(name);emp.setAge(age);emp.setSalary(salary);employees.set(i,emp);flag = true;}}//如果集合中有数据,并修改的话,初始的flag将为true,同时输出提醒语句if (flag) {System.out.println("修改成功!");} else {//如果没有输入id,那么将报异常,无法修改,且退回菜单try {throw new TeamException("该员工不存在");} catch (TeamException e) {e.printStackTrace();}}}}

ProjectService

public class ProjectService {private ArrayList<Project> pro=new ArrayList<>();private int count=1;//添加项目public void  addProject() throws InterruptedException {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("5.自定义项目");System.out.println("------------------------------------------------------------");TSUtility.readReturn();System.out.println("请输入你想添加的项目名: ");char c = TSUtility.readMenuSelectionPro();/*** 输入选择项目c通过switch来将项目的信息完整填入集合*/switch (c) {case '1':Project p1 = new Project();p1.setProId(count++);p1.setProName("小米官网");p1.setDesName("开发完成类似于小米官网的web项目.");pro.add(p1);TSUtility.loadSpecialEffects();System.out.println("已添加项目:"+p1.getProName());break;case '2':Project p2 = new Project();p2.setProId(count++);p2.setProName("公益在线商城");p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城.");pro.add(p2);TSUtility.loadSpecialEffects();System.out.println("已添加项目:"+p2.getProName());break;case '3':Project p3 = new Project();p3.setProId(count++);p3.setProName("博客系统");p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");pro.add(p3);TSUtility.loadSpecialEffects();System.out.println("已添加项目:"+p3.getProName());break;case '4':Project p4 = new Project();p4.setProId(count++);p4.setProName("在线协作文档编辑系统");p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");pro.add(p4);TSUtility.loadSpecialEffects();System.out.println("已添加项目:"+p4.getProName());break;case'5':Scanner sc=new Scanner(System.in);Project p5 =new Project();p5.setProId(count++);System.out.print("请输入自定义项目名称:");p5.setProName(sc.nextLine());System.out.println("请输入自定义项目内容:");p5.setDesName(sc.nextLine());pro.add(p5);TSUtility.loadSpecialEffects();System.out.println("已添加项目:"+p5.getProName());break;default:System.out.println("项目不存在");break;}}/***  给项目分配团队*  情况如下:*  1.添加项目没有队伍*  正常查看,只是没有队伍开发,开发状态为false*  2.有队伍但是没有项目*  无法分配,无法查看*  3.添加项目后分配队伍*  正常查看分配开发情况**/public void dealingPro(Programmer[] team){System.out.println("当前团队有人员:");//判断是否添加队伍for (int i = 0; i < team.length; i++) {if(team.length==0) {System.out.println("当前没有团队!");break;}System.out.println(team[i]);}System.out.println("请为当前团队创建一个团队名称:");String teamName = TSUtility.readKeyBoard(8, false);//随机分配项目//先判断是否添加项目if (pro.size()==0) {System.out.println("当前未添加项目,无法进行项目分配!");}else{System.out.println("正在进行项目分配!");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);System.out.println("项目分配完成!");}}/*** 查看目前项目情况* @throws InterruptedException*/public void showPro() throws InterruptedException {TSUtility.loadSpecialEffects();//判断项目开发情况//如果没有项目输出相应语句if(pro.size()!=0) {for (int i = 0; i < pro.size(); i++) {System.out.println(pro.get(i));}}else{System.out.println("当前没有项目信息,请先配置项目!" +"");}}/*** 删除选择的项目*/public void delPro(){//判断是否有项目if (pro.size()!=0) {System.out.println("请输入需要删除的项目id:");int id  = TSUtility.readInt();boolean flag = false;//for循环查找指定要删除的id存不存在for (int i = 0; i < pro.size(); i++) {if (pro.get(i).getProId() == id) {pro.remove(i);//在已经删除项目后,将之后的项目消息往前放for (i = id; i <= pro.size(); i++) {pro.get(i - 1).setProId(pro.get(i - 1).getProId() - 1);}flag = true;}}//删除基础上将计数count减一if (flag) {System.out.println("删除成功!");count--;} else {//没有项目就报异常try {throw new TeamException("该项目不存在");} catch (TeamException e) {e.printStackTrace();}}}else {System.out.println("项目为空,无法删除!");}}//得到所有项目数据集合public ArrayList<Project> getAllPro() {return pro;}
}

TeamException
我们自定义异常,为了更完整的实现我们需要的功能

public class TeamException extends Exception{public TeamException() {}//自定义异常,实现一些异常操作public TeamException(String e) {super(e);}}

TeamService

public class TeamService {//用于自动生成团队成员的memberIdprivate static int counter = 1;//团队人数上限private final int MAX_MEMBER = 6;//保存当前团队成员private Programmer[] team = new Programmer[MAX_MEMBER];//团队实际人数private int total = 0;public TeamService() {}/*** 返回team中所有程序员构成的数组,total为数组的长度* @return*/public Programmer[] getTeam() {Programmer[] team = new Programmer[total];for (int i = 0; i < total; i++) {team[i] = this.team[i];}return team;}//初始化当前团队成员数组public void clearTeam() {team = new Programmer[MAX_MEMBER];counter=1;total=0;this.team = team;}//增加团队成员public void addMember(Employee e) throws TeamException {//判断团队数组是否为空if (total >= MAX_MEMBER){throw new TeamException("成员已满,无法添加");}//判断添加的成员是否为开发人员if (!(e instanceof Programmer)) {throw new TeamException("该成员不是开发人员,无法添加");}Programmer p = (Programmer)e;//方法判断人员是否已经添加进团队if (isExist(p)) {throw new TeamException("该员工已在本团队中");}//判断添加人员状态是否为false,是,则已经是某团队成员if(!p.getStatus()) {throw new TeamException("该员工已是某团队成员");}/*** 判断添加开发成员是否满足团队组成要求*/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("团队中至多只能有一名架构师");}} else if (p instanceof Designer) {if (numOfDsgn >= 2){throw new TeamException("团队中至多只能有两名设计师");}} else if (p instanceof Programmer) {if (numOfPrg >= 3){throw new TeamException("团队中至多只能有三名程序员");}}//添加到数组p.setStatus(false);p.setMemberId(counter++);team[total++] = p;}/*** 方法判断人员是否已经添加进团队* @param p* @return*/private boolean isExist(Programmer p) {for (int i = 0; i < total; i++) {if (team[i].getId() == p.getId()) return true;}return false;}/*** 删除指定memberId的员工* @param memberId* @throws TeamException*/public void removeMember(int memberId) throws TeamException {int n = 0;//找到指定memberId的员工,并删除for (; n < total; n++) {if (team[n].getMemberId() == memberId) {team[n].setStatus(true);break;}}//如果遍历一遍,都找不到,则报异常if (n == total)throw new TeamException("找不到该成员,无法删除");//后面的元素覆盖前面的元素for (int i = n + 1; i < total; i++) {team[i - 1] = team[i];}team[--total] = null;}
}

3.view类

LogView

public class LogView {private static String name="";private static String password="";//注册public  void zhuce() throws InterruptedException{TSUtility.loadSpecialEffects();System.out.println("✿✿✿✿✿-----开始注册------✿✿✿✿✿");System.out.println();System.out.print("输入注册账户名称:");name=TSUtility.readKeyBoard(8,false);System.out.print("输入注册账户密码:");password=TSUtility.readKeyBoard(16,false);System.out.println();System.out.println(" ☀ ---------------------- ☀ ");System.out.println("注册成功!请重新登录!");TSUtility.loadSpecialEffects();}//登录public  void log() throws InterruptedException{Scanner sc=new Scanner(System.in);int count=5;boolean flag=true;while (flag){System.out.println("✿✿✿✿✿-----登录页面------✿✿✿✿✿");System.out.println();System.out.print("输入登录账户名称:");String name1=TSUtility.readKeyBoard(8,false);System.out.print("输入登录密码:");String password1= TSUtility.readKeyBoard(16,false);System.out.println();System.out.println(" ☀ ---------------------- ☀ ");TSUtility.loadSpecialEffects();//判断是否注册if(name.equals("")&&password.equals("")){System.out.println();System.out.println("账号不存在,请您先注册!");zhuce();continue;}//注册后登录if (name.equals(name1)&&password.equals(password1)) {System.out.println("✔✔✔登录成功!✔✔✔");System.out.println();System.out.print("是否想要修改用户登录信息?(Y/N):");char sure=TSUtility.readConfirmSelection();if (sure == 'Y' || sure == 'y') {xiugailog();}else{System.out.println("欢迎进入软件菜单!");break;}System.out.println();System.out.println("✔✔✔登录成功!✔✔✔");TSUtility.loadSpecialEffects();break;//判断输入是否正确}else if(name.equals(name1)){count--;System.out.println("✖✖✖密码错误,你还剩"+count+"次输入机会!✖✖✖");if (count==0){System.out.println("✖错误次数超过5次,退出系统!");break;}}else{System.out.println("✖✖✖用户名错误!✖✖✖");}}}//修改public void xiugailog() throws InterruptedException{String name2;String password2;System.out.println();System.out.println("✿✿✿✿✿-----修改页面------✿✿✿✿✿");System.out.println("☀-----(不修改内容可按回车键)------☀");System.out.println();System.out.print("请输入新的用户名("+name+"):");name2 =  TSUtility.readKeyBoard1(8,false);System.out.print("请输入新的密码(" + password + "):");password2 = TSUtility.readKeyBoard1(16,false);System.out.println();System.out.println("☀----------------------☀");//判断是否修改,修改的话将原先的数据替换if(name2.length()!=0){name=name2;}if(password2.length()!=0){password=password2;}System.out.println();System.out.println("修改成功,请重新登录!");log();}
}

TeamView

public class TeamView {private static Scanner sc = new Scanner(System.in);private TeamService ts = new TeamService();private NameListService  nameListSer = new NameListService();private TeamService t = new TeamService();private ArrayList<Programmer[]> team = new ArrayList<>();//团队人员操作主界面public void enterMainMenu() throws TeamException{boolean b = true;//显示员工成员列表while (b) {System.out.println("1-团队列表 2-添加团队成员 3-删除团队成员 4-退出");System.out.print("请选择(1-4):");char c = TSUtility.readMenuSelection();switch (c) {case '1':listTeam();break;case '2':listAllEmployees();addMember();break;case '3'://团队列表listTeam();deleteMember();break;case '4':System.out.print("确认是否退出(Y/N):");char c1 = TSUtility.readConfirmSelection();if (c1 == 'Y') {//在集合中添加一个团队team.add(ts.getTeam());//格式化团队ts.clearTeam();b = false;}break;}}}//返回集合中的团队public ArrayList<Programmer[]> getTeam() {return team;}//显示团队列表private void listAllTeam(){System.out.println("\n-------------------团队列表-------------------\n");ArrayList<Employee> allTeam =  nameListSer.getAllEmployees();}//显示员工成员列表private void listAllEmployees() {System.out.println("\n-------------------开发团队调度软件-------------------\n");//获取所有员工数据集合ArrayList<Employee> allEmployees = nameListSer.getAllEmployees();if (allEmployees.size() == 0) {System.out.println("无员工信息!");} else {System.out.println("ID\t\t 姓名\t\t年龄\t \t工资\t \t职位\t \t状态\t \t奖金\t \t股票\t \t领用设备");//循环输出员工信息for ( Employee emp: allEmployees) {System.out.println(" " + emp);}}System.out.println("------------------------------------------------------");}//显示团队成员列表private void listTeam() {System.out.println("------------------团队成员列表------------------");//获取team中所有程序员构成的数组Programmer[] team = ts.getTeam();if (team.length == 0) {System.out.println("开发团队目前没有成员!");} else {System.out.println("TID/ID\t姓名\t\t年龄\t 工资\t 职位\t 奖金\t 股票");//循环输出团队成员信息for (int i = 0; i < team.length; i++) {System.out.println(" " + team[i].getDetailsForTeam());}}System.out.println("----------------------------------------------");}//添加团队成员private void addMember() {System.out.println("-------------添加成员-------------");System.out.println("请输入要添加的员工ID:");String s = sc.next();int id = TSUtility.printInt(s);//定义一个中间变量,用于判断输入的id值是否存在int index = -1;//判断输入的id值是否有意义for (int i = 0; i <  nameListSer.getAllEmployees().size(); i++) {//获取成员集合中的id,看是否存在该idif ( nameListSer.getAllEmployees().get(i).getId() == id) {//找到的id值赋值给indexindex = id;break;}}if (index == -1) {System.out.println("此id的开发成员不存在");} else {//用户输入的值减1index--;try {//获取成员集合中的元素信息Employee e =  nameListSer.getAllEmployees().get(index);//添加ts.addMember(e);System.out.println("添加成功");} catch (TeamException e) {System.out.println("添加失败," + e.getMessage());}}TSUtility.readReturn();}//删除团队成员private void deleteMember() {if (ts.getTeam().length == 0) {System.out.println("当前无任何团队!");} else {System.out.println("-------------删除成员-------------");System.out.println("请输入要删除的员工TID:");String s = sc.next();int memberId = TSUtility.printInt(s);int index = -1;//判断输入的id值是否有意义for (int i = 0; i < ts.getTeam().length; i++) {if (ts.getTeam()[i].getMemberId() == memberId) {index = memberId;break;}}//初始没有变化if (index == -1) {System.out.println("此id的团队成员不存在");} else {//初始的index变化System.out.print("确认是否删除(Y/N):");char c = TSUtility.readConfirmSelection();//对输入字符判断if (c == 'Y') {try {ts.removeMember(index);System.out.println("删除成功");} catch (TeamException e) {System.out.println("删除失败," + e.getMessage());}} else System.out.println("已取消删除");}}TSUtility.readReturn();}//查看团队public void showTeam() {System.out.println("-----------团队列表-----------");if (team.size() == 0) {System.out.println("当前无团队信息");System.out.println("-----------------------------");} else {//循环团队集合for (Programmer[] t : team) {/*创建数组,团队集合赋值循环集合中的数组(增强for循环)输出数组中的成员列表*/for (Programmer programmer : t) System.out.println(programmer);System.out.println("-----------------------------");}
//            for (int i = 0; i < team.size(); i++) {
//                //创建数组,团队集合赋值
//                Programmer[] t = team.get(i);
//                //循环集合中的数组
//                for (int j = 0; j < team.get(i).length; j++) {
//                    //输出数组中的成员列表
//                    System.out.println(t[j]);
//                }
//                System.out.println("-----------------------------");
//            }}}//删除团队public void deleteTeam() {if (team.size()==0){System.out.println("当前无团队信息!");}else {System.out.print("请输入想要删除第几个团队:");String s = sc.next();int num = TSUtility.printInt(s);if (num <= 0 || num > team.size()) {System.out.println("输入错误,当前共有" + team.size() + "个团队");} else {//输入的值减1num--;System.out.print("确认是否删除(Y/N):");char c = TSUtility.readConfirmSelection();if (c == 'Y') {//创建数组,集合中的团队赋值Programmer[] t = team.get(num);for (int i = 0; i < team.get(num).length; i++) {//修改数组中成员的状态值t[i].setStatus(true);}team.remove(num);System.out.println("删除成功");} else System.out.println("已取消删除");}}TSUtility.readReturn();}
}

TSUtility
这是一个工具类,主要是一个对输入的一个判断,这个可以根据需要来自己定义

IndexView
这个是最后的显示和操作的处理,里面是一些选择和方法的调度。

public  void menu() {boolean loopFlag = true;char key = 0;System.out.println(ANSI_PURPLE);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_PURPLE);try {loginVi.log();} catch (InterruptedException e) {e.printStackTrace();}do {System.out.println(ANSI_RESET + ANSI_CYAN);System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");System.out.println("🔣                                         🔣");System.out.println("🔣              ~软件主菜单~               🔣");System.out.println("🔣                                         🔣");System.out.println("🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣🔣");System.out.println("🐻1. <用户信息修改>                *");System.out.println("🐘2. <开发人员管理>                *");System.out.println("🦁3. <开发团队调度管理>            *");System.out.println("🐻4. <开发项目管理>                *");System.out.println("🦊5. <退出软件>                    *");System.out.println("⬇请选择:  ");System.out.print(ANSI_RESET);key = TSUtility.readMenuSelectionPro();switch (key) {case '1':try {System.out.println(ANSI_RESET);loginVi.xiugailog();} catch (InterruptedException e) {e.printStackTrace();}break;case '2':try {nameListSer.showEmployee();} catch (InterruptedException e) {e.printStackTrace();}boolean loopFlagSec = true;char keySec = 0;do {System.out.print(ANSI_RESET + ANSI_YELLOW);System.out.println("🔣        ~开发人员管理主菜单~            🔣");System.out.println("🐕1.     <开发人员的添加>           *");System.out.println("🐖2.     <开发人员的查看>           *");System.out.println("🐱3.     <开发人员的修改>           *");System.out.println("🐂4.     <开发人员的删除>           *");System.out.println("🐇5.     <退出当前菜单>             *");System.out.println("⬇请选择:  ");keySec=TSUtility.readMenuSelectionPro();switch (keySec) {case '1':try {nameListSer.addEmployee();} catch (InterruptedException e) {e.printStackTrace();}break;case '2':try {nameListSer.showEmployee();} catch (InterruptedException e) {e.printStackTrace();}break;case '3':try {nameListSer.showEmployee();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("请输入需要修改的员工id:");int id = TSUtility.readInt();try {nameListSer.modifyEmployee(id);} catch (InterruptedException e) {e.printStackTrace();}break;case '4':System.out.println("请输入需要删除的员工id:");int id2  = TSUtility.readInt();nameListSer.delEmployee(id2);break;case '5':System.out.print("确认是否退出(Y/N):");char yn = TSUtility.readConfirmSelection();if (yn == 'Y') {loopFlagSec = false;}break;default:System.out.println("输入有误!请重新输入!");break;}} while (loopFlagSec);break;case '3':boolean loopFlagThr = true;char keyThr = 0;do {System.out.print(ANSI_RESET + ANSI_GREEN);System.out.println("🔣      ~团队管理主菜单~            🔣");System.out.println("🐕1.     <添加团队>           *");System.out.println("🐱2.     <查看团队>           *");System.out.println("🐂3.     <删除团队>           *");System.out.println("🐇4.     <退出当前菜单>             *");System.out.print("请选择:  ");System.out.println(ANSI_RESET);keyThr=TSUtility.readMenuSelectionPro();switch (keyThr) {case '1':try {teamVi.enterMainMenu();} catch (TeamException e) {throw new RuntimeException(e);}break;case '2':teamVi.showTeam();break;case '3':System.out.println("确定要删除团队吗?(Y/N)");char su = TSUtility.readConfirmSelection();if (su == 'Y'|| su =='y') {teamVi.deleteTeam();break;}System.out.println("已经取消删除操作!");break;case '4':System.out.print("确认是否退出(Y/N):");char yn = TSUtility.readConfirmSelection();if (yn == 'Y'|| yn =='y') {loopFlagThr = false;System.out.println("退出成功!");}break;default:System.out.println("输入有误!请重新输入!");break;}} while (loopFlagThr);break;case '4':boolean loopFlagFlo = true;char keyFlo = 0;do {System.out.print(ANSI_RESET + ANSI_GREEN);System.out.println("🔣      ~开发项目管理主菜单~            🔣");System.out.println("🐕1.     <项目的添加>           *");System.out.println("🐖2.     <项目分配开发团队>           *");System.out.println("🐱3.     <项目的查看>           *");System.out.println("🐂4.     <项目的删除>           *");System.out.println("🐇5.     <退出当前菜单>             *");System.out.println("⬇请选择:  ");System.out.print(ANSI_RESET + ANSI_YELLOW);keyFlo=TSUtility.readMenuSelectionPro();switch (keyFlo) {case '1':try {projectSer.addProject();} catch (InterruptedException e) {e.printStackTrace();}break;case '2':for (Programmer[] pro : manyTeam) {projectSer.dealingPro(pro);}if(manyTeam.size()==0){System.out.println("尚未添加团队,请先添加团队再进行项目分配!");System.out.println("是否退出,转至主菜单?(Y/N):");char z=TSUtility.readConfirmSelection();if (z == 'Y'||z=='y') {loopFlagFlo = false;break;}}break;case '3':try {projectSer.showPro();} catch (InterruptedException e) {e.printStackTrace();}break;case '4':projectSer.delPro();break;case '5':System.out.print("确认是否退出(Y/N):");char yn = TSUtility.readConfirmSelection();if (yn == 'Y') {loopFlagFlo = false;}break;default:System.out.println("输入有误!请重新输入!");break;}} while (loopFlagFlo);break;case '5':System.out.println(ANSI_RESET);System.out.print("确认是否退出(Y/N):");char yn = TSUtility.readConfirmSelection();if (yn == 'Y') {loopFlag = false;}break;default:break;}} while (loopFlag);}public static void main(String[] args) {System.out.println(ANSI_BLUE+ANSI_CYAN);new IndexView().menu();}}

五、总结

在本次项目中的一些问题:
1、在domain类中,注意对toString方法的重写,根据需要来编写;
2、在项目编写中每部分分开来编写,在梳理清楚流程之后,每个模块功能完全后,最后再实现主控模块的编写;
3、在使用代码块时,注意区分有static和无static的区别;
4、注意一些代码结构,一定要清晰,不然出错误之后很难查找。


http://www.ppmy.cn/news/330578.html

相关文章

【Java】项目开发团队分配管理软件

项目目标 模拟实现一个基于文本界面的《项目开发团队分配管理软件》。 通过该项目&#xff0c;熟悉Java面向对象的特性&#xff0c;可以进一步掌握编程和调试的技巧。 项目的系统功能结构如下图所示&#xff1a; 系统流程图如下图所示&#xff1a; 项目需求 软件启动时&#xf…

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

目录 1. 项目需求&#xff1a; 2. 项目的结构图&#xff08;mvc&#xff09;&#xff1a; 3.部分效果展示&#xff1a; 4. 项目的整体思路&#xff1a; 4.1 实体类及数据存储 4.2 界面类 4.3 服务类 5.项目代码及部分解释&#xff1a; 5.1 代码结构图&#xff1a;​编辑 5…

Java面向对象实践--开发团队调度软件

开发团队调度软件 前言开发团队调度软件一、需求说明1.添加成员2.开发团队人员组成要求3.添加失败显示原因 二、软件设计架构Equipment接口及其实现子类的设计Employee类及其子类的设计Status类NameListService类的设计TeamService类的设计TeamView类的设计 三、代码实现项目结…

Java学习笔记——正则表达式(Pattern类、Matcher类和PatternSyntaxException)

目录 一、Pattern类 &#xff08;一&#xff09;Pattern 介绍 &#xff08;二&#xff09;Pattern 方法 二、Matcher类 &#xff08;一&#xff09;Matcher 类介绍 &#xff08;二&#xff09;Matcher 类方法 三、PatternSyntaxException 四、代码 Java中与正则表达式…

佳能MOV视频恢复方法

随着佳能机器的普及以及用户使用量越来越大&#xff0c;佳能机器在使用过程中则容易出现各种情况的数据丢失以及录制过程中断电导致的损坏&#xff0c;因为佳能机器在录制过程中会产生不连续存储&#xff0c;所以数据出现丢失之后&#xff0c;市面上普通的恢复软件都无法直接恢…

【MySQL学习笔记】update,delete,select语句

1.SQL语句 1.1 UPDATE UPDATE更新原表中的各列 SET修改哪列和要赋什么值&#xff0c; WHERE指定修改哪行&#xff0c;没写WHERE则更新所有行 UPDATE employee SET salary WHERE user_name #更新多个列&#xff0c;逗号隔开 UPDATE employee SET salary 100,emp_email …

【算法系列 | 5】深入解析排序算法之——快速排序

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 决定开一个算法专栏&#xff0c;希望能帮助大…

【LINGO】求七个城市最小连线图,使天然气管道价格最低

目录 1、问题描述 2、问题求解 1、问题描述 2、问题求解 model: sets: cities/A,B1,B2,C1,C2,C3,D/; roads(cities,cities)/A B1,A B2,B1 C1,B1 C2,B1 C3,B2 C1, B2 C2,B2 C3,C1 D,C2 D,C3 D/:w,x; endsets data: w2 4 3 3 1 2 3 1 1 3 4; enddata nsize(cities); !城市的个数…