
目录
一、引言 :
大家好啊!学习java这几个月以来,例如系统这样的增删改查小项目满打满算也做了三四个了,总体做下来,在一开始接触的时候会感觉比较难下手,颇有种拔剑四顾心茫然的意思,只能一步一步的跟着ppt走,一点一点的入手,就像拼图一样,拼到最后,哦~原来是这样啊,也不是很难嘛。所以,我的最大感受就是,一开始胆子要大,步子迈开,后面就能逐渐上手。这次的这个实践项目,我个人觉得本质上就是一个大的系统,里面的四个功能分化为具体的四个小系统,难点在于一开始的入手和最后的bug和优化。

二、项目需求:
三、功能实现:


小注意:将不同的类按包来分类放置会方便寻找和操作哦。
四、具体实现:
1、用户和注册登录模块:
这个模块是本项目的第一个系统了,和之前做过的差不多,要注意工具包的理解和使用。如果不想再另外创建测试类,可以直接创建测试方法。
public class LoginView {
private String accountNumber;//账号
private String password;//密码
public String getAccountNumber() {
return accountNumber;
}
public String getPassword() {
return password;
}
//注册
public void register() {
System.out.println("开始注册");
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的注册账号名称:");
accountNumber = TSUtility.readKeyBoard(7, false);
/*this.accountNumber = accountNumber;*/
System.out.println("请输入你的注册密码:");
password = TSUtility.readKeyBoard(7, false);
System.out.println("注册成功!请登录!");
}
//登录
public void enter() throws InterruptedException {
int count = 5;
while (count > 0) {
System.out.println("********************🐱");
System.out.println("*** <登录界面> ***");
System.out.println("*** (*/ω\*) ***🐱");
System.out.println("********************🐱");
System.out.println("请输入你的登录账户名称:");
String accountNumber = TSUtility.readKeyBoard(7, false);
System.out.println("请输入你的登录密码:");
String password = TSUtility.readKeyBoard(7, false);
//判断是否进行过注册
if (this.accountNumber == null && this.password == null) {
System.out.println("未检测到您的账号!请您先注册!");
register();
continue;
}
//注册完正式进入登录
if (accountNumber.equals(this.accountNumber)) {
if (password.equals(this.password)) {
TSUtility.loadSpecialEffects();
System.out.println("登录成功!欢迎您:" + getAccountNumber());
break;
} else {
count--;
if (count == 0) {
System.out.println("登录次数不足!退出!");
return;
}
System.out.println("您输入的密码错误,登录次数还剩" + count + "次,请重新输入");
}
} else {
count--;
if (count == 0) {
System.out.println("登录次数不足!退出!");
return;
}
System.out.println("您输入的账号错误,登录次数还剩" + count + "次,请重新输入");
}
}
System.out.println("进入软件菜单");
}
//修改
public void amend() {
while (true) {
System.out.println("********************🐱");
System.out.println("*** <修改界面> ****");
System.out.println("*** o( =•ω•= )m ***🐱");
System.out.println("********************🐱");
System.out.println("请输入您需要修改的类型:");
System.out.println("1(修改账号)");
System.out.println("2(修改密码)");
System.out.println("3(修改账号和密码)");
System.out.println("4(不修改,退出)");
char c = TSUtility.readMenuSelection();
switch (c) {
case '1':
System.out.println("请输入您的新账号");
this.accountNumber = TSUtility.readKeyBoard(7, false);
System.out.println("修改账号成功!");
break;
case '2':
System.out.println("请输入您的新密码");
this.password = TSUtility.readKeyBoard(7, false);
System.out.println("修改密码成功!");
break;
case '3':
System.out.println("请输入您的新账号");
this.accountNumber = TSUtility.readKeyBoard(7, false);
System.out.println("修改账号成功!");
System.out.println("请输入您的新密码");
this.password = TSUtility.readKeyBoard(7, false);
System.out.println("修改密码成功!");
break;
case '4':
System.out.println("退出中。。。");
try {
TSUtility.loadSpecialEffects();
} catch (InterruptedException e) {
e.printStackTrace();
}
return;
}
}
}
//测试
public static void main(String[] args) {
LoginView l = new LoginView();
try {
l.enter();
} catch (InterruptedException e) {
e.printStackTrace();
}
l.amend();
}
}
2、开发人员管理模块:
这个模块主要是创建雇员、程序员和接口等等这些类,加上创建NameListService类,任务会比较重,要实现员工的增删改查的功能。这个模块开始就要详细注意其中的功能优化和bug了,例如员工的id在删除之后要动态,当捕捉到异常时只需要输出异常的原因即可等等。专家建议将功能完善好了在进行下个模块的创建,最后bug太多,改起来还是很头疼的。
特别提示:在这个模块中要进行数据互通,这个是非常重要的,在对全体员工进行增删改查的操作之后,开发团队添加程序员时,却发现没有变化,这就是没进行数据互通了,我这里采用了其中的一种方法。用static修饰全体员工的集合,使他变得唯一,其他类在使用到它的时候就不会创建新对象。然后给普通代码块加个是否为空的条件语句,这样在类加载的时候就不会重复加载了。
private static ArrayList<Employee> employees = new ArrayList<Employee>();
{
if (employees.isEmpty()) {
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));
}
}
3、开发团队调度模块:
这个模块也是先对类进行设计,然后在对它的功能进行完善和优化,其中团队id也要和全体员工的id一样,在增删改查之后要动态变化。
这个模块的删除功能要格外注意,该模块包含了两个系统,其中开发团队人员系统包含在开发团队调度系统内的,首先进行删除功能时,因为工具包无法排除0和负数的选择,所以对于待删除对象的id或者团队序号应该进行判断,否则将会出现索引越界等等问题。其次是对删除之后的团队员工状态也要及时更新,尤其是在团队删除之后,其中的员工状态也应回归true。最后是团队某一成员删除之后,表示团队实际成员数的total要进行更新。添加功能也是同理。
4、开发项目管理模块:
这个模块需要创建一个对项目进行操作的类,其中也包含了增删改查的功能,索引越界和更新状态的问题和上个模块一样,该系统中格外要注意不能对一个项目进行重复添加。我采取的方式是在每个项目添加前进行遍历判断是否重复,但是感觉显得冗余。最后,这个模块对整个项目的类进行了整合。建议大家在进行最终测试前,对每个小系统分别进行测试。
//添加新项目
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("------------------------------------------------------------");
TSUtility.readReturn();
System.out.println("请输入你想添加的项目序号: ");
char c = TSUtility.readMenuSelection();
switch (c) {
case '1':
Project p1 = new Project();
p1.setProId(count++);
p1.setProjectName("小米官网");
p1.setDesName("开发完成类似于小米官网的web项目.");
if (pro.size() == 0) {//项目集合没有项目直接添加
pro.add(p1);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p1.getProjectName());
} else {//项目集合有项目进行判断是否重复
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProjectName().equals("小米官网")) {
System.out.println("项目:小米官网\t已添加,请勿重复添加!");
} else {
pro.add(p1);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p1.getProjectName());
break;
}
}
}
break;
case '2':
Project p2 = new Project();
p2.setProId(count++);
p2.setProjectName("公益在线商城");
p2.setDesName("猫宁Morning公益商城是中国公益性在线电子商城.");
if (pro.size() == 0) {
pro.add(p2);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p2.getProjectName());
} else {
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProjectName().equals("公益在线商城")) {
System.out.println("项目:公益在线商城\t已添加,请勿重复添加!");
} else {
pro.add(p2);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p2.getProjectName());
break;
}
}
}
break;
case '3':
Project p3 = new Project();
p3.setProId(count++);
p3.setProjectName("博客系统");
p3.setDesName("Java博客系统,让每一个有故事的人更好的表达想法!");
if (pro.size() == 0) {
pro.add(p3);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p3.getProjectName());
} else {
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProjectName().equals("博客系统")) {
System.out.println("项目:博客系统\t已添加,请勿重复添加!");
} else {
pro.add(p3);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p3.getProjectName());
break;
}
}
}
break;
case '4':
Project p4 = new Project();
p4.setProId(count++);
p4.setProjectName("在线协作文档编辑系统");
p4.setDesName("一个很常用的功能,适合小组内的文档编辑。");
if (pro.size() == 0) {
pro.add(p4);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p4.getProjectName());
} else {
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProjectName().equals("在线协作文档编辑系统")) {
System.out.println("项目:在线协作文档编辑系统\t已添加,请勿重复添加!");
} else {
pro.add(p4);
TSUtility.loadSpecialEffects();
System.out.println("已添加项目:" + p4.getProjectName());
break;
}
}
}
break;
default:
System.out.println("项目不存在");
break;
}
}
求关注!
求收藏!
求评论!

本文档详细介绍了使用Java实现一个基于文本界面的项目开发团队分配管理软件的过程,涵盖用户注册登录、开发人员管理、团队调度和项目管理四大模块。通过面向对象编程,实现类的继承、多态性、接口等高级特性,并强调了数据互通和异常处理的重要性。在每个模块中,作者都提供了具体的代码实现和注意事项,帮助读者理解如何逐步构建这样一个系统。

被折叠的 条评论
为什么被折叠?



