目录
一 项目背景和目标
在学习完java基础和mysql , jdbc这几个阶段后,我们也迎来了本次的一个阶段性项目总结。本次项目的意义在于对前面知识点的一个总结以及熟悉一下项目的架构。
项目需求如下:
二 项目实施过程
在项目开始阶段,我们首先进行了需求分析和设计。我们确定了系统的基本架构,包括数据收集、数据处理、模型训练和推荐生成等模块。在开发过程中,我们采用敏捷开发的方法,每周进行迭代和评审,确保项目按计划进行。
然后在项目完成的过程中 , 针对每一个功能需求,我也做了对应的代码设计。
1.用户登录功能
代码如下:
public static void login() throws SQLException, ParseException {
Scanner input = new Scanner(System.in);
System.out.println("请输入手机号:");
String cardNumber = input.nextLine();
System.out.println("请输入密码:");
String password = input.nextLine();
String message = moboleCardService.login(cardNumber,password);
System.out.println("【友情提示】:"+message);
if(message.equals("登录成功!")){
boolean bool = true ;
while (bool){
System.out.println("*************** 搜搜移动用户菜单 ***************");
System.out.println("1.本月账单插查询\n2.套餐余量查询\n3.打印消费详单\n4.套餐变更\n5.办理退网");
System.out.println("请选择(输入1~5选择功能,其他键返回上一级)");
String in = input.nextLine() ;
switch (in){
case "1":
findNowmothMenu(cardNumber) ;
break ;
case "2":
findRestTime(cardNumber) ;
break;
case "3":
findConsumInfo(cardNumber) ;
break;
case "4":
break;
case "5":
break;
default:
bool = false ;
break;
}
}
}
}
2.注册功能
代码如下:
public static void register(){
MoboleCard moboleCard = new MoboleCard();
while(true){
Scanner input = new Scanner(System.in);
System.out.println("*************** 可选择的卡号 ***************");
List<Card> cardList = cardService.findAllIsOk();
for(int i = 0 ; i < cardList.size();i++){
System.out.println((i+1)+"."+cardList.get(i).getCardNumber());
}
System.out.println("*************** 请选择你的卡号 ***************");
if(!input.hasNextInt()){
System.out.println("输入错误,请重新输入");
continue;
}
int select = input.nextInt();
if(select < 0 || select > cardList.size()){
System.out.println("序号错误,请重新输入");
continue;
}
//注册卡号
Card card = cardList.get(select-1);
//设置手机号
moboleCard.setCard_number(card.getCardNumber());
//获取所有套餐
List<SerPackage> serPackageList = serPackageService.findAllSerPackage();
for(int i = 0 ; i < serPackageList.size();i++){
System.out.print((i+1)+"."+serPackageList.get(i).getName());
}
System.out.println("*************** 请选择你的套餐 ***************");
if(!input.hasNextInt()){
System.out.println("输入错误,请重新输入");
continue;
}
select = input.nextInt();
if(select < 0 || select > serPackageList.size()){
System.out.println("序号错误,请重新输入");
continue;
}
//所选套餐
SerPackage serPackage = serPackageList.get(select-1);
//设置套餐
moboleCard.setSer_package(serPackage.getId());
Scanner scanner = new Scanner(System.in);
System.out.println("请输入姓名:");
moboleCard.setUsername(scanner.nextLine());
System.out.println("请输入密码:");
moboleCard.setPassword(scanner.nextLine());
System.out.println("请输入预存话费金额:");
if(!input.hasNextDouble()){
System.out.println("输入错误,请重新输入");
continue;
}
double money = input.nextDouble();
if(money < serPackage.getPrice()){
System.out.println("您预存话费不足以支付本月的套餐资费,请重新输入!");
continue;
}
moboleCard.setMoney(money-serPackage.getPrice());
moboleCard.setStatus(0);
//调用业务方法完成注册
System.out.println(moboleCardService.register(moboleCard));
System.out.println("卡号:"+moboleCard.getCard_number());
System.out.println("用户名:"+moboleCard.getUsername());
System.out.println("当前余额:"+moboleCard.getMoney());
System.out.println(serPackage.getName()+serPackage.getTalk_time()+"分钟/月");
return;
}
}
3.账单查询功能
代码如下:
/*本月账单查询*/
private static void findNowmothMenu(String carNumber) throws SQLException {
NowMothMenu nowMonthMenu = monthlyConsumptionRecords.findNowMonthMenu(carNumber);
System.out.println("您的卡号:"+carNumber+",当月账单:");
System.out.println("套餐资费:"+nowMonthMenu.getSerPackageCost()+"\n"
+"合计:"+nowMonthMenu.getSumCost()+"\n"+"账户余额:"+nowMonthMenu.getYue());
}
后面还有很多功能 , 这里就不做一一展示了。
在数据处理阶段,我们遇到了数据量巨大和数据质量参差不齐的问题。为了解决这些问题,我们采用了分布式计算框架,对数据进行清洗、去重和转换。在模型训练阶段,我们尝试了多种机器学习算法,并通过交叉验证确定了最佳的模型参数。
三 项目挑战和解决方案
在项目推进过程中,我们遇到了几个关键挑战。首先,数据量巨大导致计算资源紧张。为了解决这个问题,我们优化了数据处理流程,减少了不必要的计算。其次,模型训练时间过长,影响开发进度。我们通过分布式训练和优化算法参数来加快训练速度。最后,推荐结果的多样性不足。我们引入了混合推荐算法,结合用户画像和商品属性,提高了推荐结果的多样性。
四 项目成果和收获
经过几个月的努力,我们成功地开发出这个推荐系统。系统上线后,用户满意度明显提高,平台的销售额也实现了显著增长。这个项目的成功让我深刻认识到团队协作和项目管理的重要性。只有明确目标和分工,及时沟通和调整,才能确保项目的顺利进行。此外,面对挑战时,我们要勇于尝试和创新,不断优化解决方案。