前言
开发团队分配管理软件项目解析
提示:以下是本篇文章正文内容,下面案例可供参考
一、了解目的
开发团队分配管理软件要实现什么?
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、注意一些代码结构,一定要清晰,不然出错误之后很难查找。