基于Java的嗖嗖移动大厅
一、展示效果
需求分析:
- 面向对象思想;
- 集合框架的使用;
- 接口的使用;
- JDBC连接数据库;
二、整体架构
三、具体实现
1、编写db.properties文件,用于配置数据库连接信息。存储数据库连接的详细信息,如驱动程序类名、URL、用户名和密码等。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/soso?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false
jdbc.username=数据库名
jdbc.password=数据库密码
注意:
我的数据库是8.0,因此额外设置了参数(5.0不需要设置):allowPublicKeyRetrieval=true&
2、实体类与接口
- Card(电话号码类)
- cardNumber 卡号
- status 状态
- MoboleCard(嗖嗖移动卡类)
- cardNumber 卡号
- username 用户名
- password 密码
- serPackage 所属套餐
- money 账户余额
- status 状态
- monthlyConsumptionRecords(月消费记录类)
- cardNumber 卡号
- consumAmount 当月消费金额
- realTalkTime 当月实际通话时长
- realSMSCount 当月实际发送短信条数
- realFlow 当月实际上网流量
- consumeDate 消费日期
- SerPackage(套餐类)
- talkTime 通话时长
- smsCount 短信条数
- price 套餐月资费
- flow 上网流量
- type 套餐类型
- SerPackageType(套餐类型类)
- name 套餐名称
- ConsumInfo(消费信息类)
- cardNumber 卡号
- type 消费类型
- consumData 消费数据
- consumeDate 消费日期
- Scene(使用场景类)
- type 场景类型
- data 场景消费数据
- description 场景说明
- RechargeRecord(充值记录类)
- amount 充值金额
- rechargeDate 充值日期
- cardNumber 卡号
3、功能实现
SosoApp:
public class SosoApp {
public static String loginCardNumber = null; //保存当前登录的用户的手机号码
private SoSoService soSoService = new SoSoService();
public static void main(String[] args) {
new SosoApp().ShowFirstMenu();
}
/**
* 显示一级菜单方法
*/
public void ShowFirstMenu(){
System.out.println("********************欢迎使用嗖嗖移动业务大厅!!!********************");
System.out.println("1.用户登录\t2.用户注册\t3.使用嗖嗖\t4.话费充值\t5.资费说明\t6.申请解冻\t7.退出系统");
System.out.print("请选择数字进行操作:");
Scanner input = new Scanner(System.in);
int choose = input.nextInt();
switch (choose){
case 1://登录
MoboleCard currentUser = soSoService.login();
loginCardNumber = currentUser.getCardNumber();
if (currentUser != null){
//显示二级菜单
ShowSecondMenu();
}else{ //登录失败
//显示一级菜单
ShowFirstMenu();
}
break;
case 2://注册
soSoService.register();
//显示一级菜单
ShowFirstMenu();
break;
case 3://使用嗖嗖
soSoService.useSoso();
ShowFirstMenu();
break;
case 4://话费充值
soSoService.recharge();
ShowFirstMenu();
break;
case 5://资费说明
soSoService.description();
ShowFirstMenu();
break;
case 6://申请解冻
soSoService.applyThawing();
ShowFirstMenu();
break;
case 7://退出系统
soSoService.exitSystem();
break;
default:
System.out.println("【错误提示】:没有该选项,请重新输入");
//回调
ShowFirstMenu();
break;
}
}
/**
* 二级菜单
*/
public void ShowSecondMenu(){
System.out.println("********************嗖嗖移动用户菜单********************");
System.out.println("1.本月账单查询\n2.套餐余量查询\n3.打印消费详单\n4.套餐变更\n5.办理退网\n6.修改密码");
System.out.print("请选择数字进行操作(输入1~6选择功能,其他键返回上一级):");
Scanner input = new Scanner(System.in);
int choose = input.nextInt();
switch(choose){
case 1:
soSoService.queryCurrMonthRecord();
ShowSecondMenu();
break;
case 2:
soSoService.queryBalance();
ShowSecondMenu();
break;
case 3:
soSoService.printlist();
ShowFirstMenu();
break;
case 4:
soSoService.changeSerpackage();
ShowSecondMenu();
break;
case 5:
soSoService.handlenetwork();
ShowFirstMenu();
break;
case 6:
soSoService.changepassword();
ShowSecondMenu();
break;
default:
//返回上级菜单
ShowFirstMenu();
break;
}
}
}
SoSoService:
public class SoSoService {
Scanner input = new Scanner(System.in);
//1.登录
public MoboleCard login() {
System.out.println("******************************用户登录******************************");
System.out.println("请输入手机卡号:");
String cardNo = input.next();
System.out.println("请输入密码:");
String password = input.next();
//调用dao层类的方法
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(cardNo);
if (moboleCard == null) {//没有该手机号
System.out.println("【友情提示】:卡号或密码错误!");
} else {//有该手机号码
//判断密码
if (!moboleCard.getPassword().equals(password)) {
System.out.println("【友情提示】:卡号或密码错误!");
} else if (moboleCard.getStatus().intValue() == SystemConstant.MOBOLE_STATUS_FREEZE) { //冻结状态 1: 魔法数字, 可读性差, 容易出错, 使用常量替换
// public static final
System.out.println("【友情提示:】该手机号码已冻结,请联系工作人员!");
System.exit(0);
} else {
return moboleCard;
}
}
return null;
}
//2.用户注册
public void register(){
System.out.println("******************************用户注册******************************");
//显示可用的卡
System.out.println("******************************可选的卡号******************************");
CardDao cardDao = new CardDaoImpl();
List<Card> cards = cardDao.queryByStatus(SystemConstant.CARD_STATUS_NORMAL);
for (int i = 0; i < cards.size(); i++) {
System.out.print((i+1)+"."+cards.get(i).getCardNumber()+"\t");
if ((i+1)%3 == 0) {
System.out.println();
}
}
System.out.println();
//选择卡
System.out.print("请选择您心仪的卡号:");
int cardIndex = input.nextInt();
Card card = cards.get(cardIndex - 1);
//显示所有套餐
SerpackageTypeDao serpackageTypeDao = new SerpackageTypeDaoImpl();
List<SerpackageType> serpackageTypes = serpackageTypeDao.queryAll();
for (int i = 0; i < serpackageTypes.size(); i++) {
System.out.println((i+1)+"."+serpackageTypes.get(i).getName()+"\t");
}
//选择套餐
System.out.print("\n请选择套餐:");
int serpackageTypeIndex = input.nextInt();
SerpackageType serpackageType = serpackageTypes.get(serpackageTypeIndex-1);
//根据套餐类型查询套餐明细
SerpackageDao serpackageDao = new SerpackageDaoImpl();
Serpackage serpackage = serpackageDao.queryByType(serpackageType.getId());
System.out.print("请输入姓名:");
String name = input.next();
System.out.print("请输入密码:");
String pwd = input.next();
double money;
do{
System.out.print("请输入预存话费金额:");
money = input.nextDouble();
if(money < serpackage.getPrice() ){
System.out.println("您预存的话费不足以支付本月套餐资费,请重新输入!");
}
}while (money < serpackage.getPrice() );
//往用户卡添加一条记录
MoboleCard moboleCard = new MoboleCard();
moboleCard.setCardNumber(card.getCardNumber());
moboleCard.setPassword(pwd);
moboleCard.setSerPackage(serpackageType.getId());
moboleCard.setStatus(SystemConstant.MOBOLE_STATUS_NORMAL);
moboleCard.setUsername(name);
moboleCard.setMoney(money - serpackage.getPrice() );
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
moboleCardDao.insert(moboleCard);
//修改卡的状态
card.setStatus(SystemConstant.CARD_STATUS_FREEZE);
cardDao.update(card);
//往充值记录表添加一条充值记录
RechargeRecord rechargeRecord = new RechargeRecord();
rechargeRecord.setAmount(money);
rechargeRecord.setRechargeDate(new Date());
rechargeRecord.setCardNumber(card.getCardNumber());
RechargeRecordDao rechargeRecordDao = new RechargeRecordDaoImpl();
rechargeRecordDao.insert(rechargeRecord);
System.out.println("【友情提示】:注册成功!!!");
System.out.println("您的卡的基本信息如下:");
System.out.println("卡号:"+moboleCard.getCardNumber()+",用户名:"+moboleCard.getUsername()+",当前余额:"+moboleCard.getMoney()+"元");
System.out.println("套餐信息:");
System.out.println(serpackageType.getName()+"通话时长:"+serpackage.getTalkTime()+"分钟/月");
}
//3.使用嗖嗖
public void useSoso(){
System.out.println("******************************使用嗖嗖******************************");
System.out.print("请输入手机卡号:");
String cardNumber = input.next();
//根据手机卡号查询用户卡信息
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(cardNumber);
if (moboleCard == null) {//卡号不存在
System.out.println("【错误提示】:该卡号不存在,请重新输入!!!");
useSoso();
}else if (moboleCard.getStatus().intValue() == SystemConstant.MOBOLE_STATUS_FREEZE) {//卡号存在但处于冻结状态
System.out.println("【错误提示】:该卡号已被冻结,请联系工作人员!!!");
applyThawing();
}else{
//查询卡的套餐
SerpackageDao serpackageDao = new SerpackageDaoImpl();
Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());
//查询所有场景
SceneDao sceneDao = new SceneDaoImpl();
List<Scene> scenes = sceneDao.queryAll();
//随机一个场景
Random random = new Random();
int index = random.nextInt(scenes.size());
Scene scene = scenes.get(index);
//根据手机号码与日期查询卡当月月消费情况
MonthlyConsumptionRecordsDao mcrDao = new MonthlyConsumptionRecordsDaoImpl();
Date firstDay = DateUtil.getFirstDayDate(new Date());
MonthlyConsumptionRecords mcr = mcrDao.queryCurrentMonthRecprdByCardNo(cardNumber,firstDay);
if (mcr == null) {//如果没有月消费记录
//初始化该卡当月消费记录
mcr = new MonthlyConsumptionRecords();
mcr.setCardNumber(cardNumber);
mcr.setRealFlow(0);
mcr.setConsumAmount(0.0);
mcr.setRealTalkTime(0);
mcr.setRealSmsCount(0);
mcr.setConsumeDate(firstDay);
//保存到数据
mcrDao.insert(mcr);
//再查询一次,保证得到新添加的月消费记录有id
mcr = mcrDao.queryCurrentMonthRecprdByCardNo(cardNumber,firstDay);
}
//计算卡里的剩余余量
String type = "";//场景类型
int free = 0;//套餐中时长剩余量
if (scene.getType().equals("通话")) {
//计算通话的余量
type = "通话";
free = serpackage.getTalkTime() - mcr.getRealTalkTime();
//更新月记录表中使用的通话时长:月记录表中原有数据+场景本次使用时长
mcr.setRealTalkTime(mcr.getRealTalkTime() + scene.getData());
} else if (scene.getType().equals("短信")) {
//计算短信的余量
type = "短信";
free = serpackage.getSmsCount() - mcr.getRealSmsCount();
//更新月记录表中使用的短信时长
mcr.setRealSmsCount(mcr.getRealSmsCount() + scene.getData());
}else if (scene.getType().equals("上网")) {
//计算上网的余量
type = "上网";
free = serpackage.getFlow() - mcr.getRealFlow();
//更新月记录表中上网情况
mcr.setRealFlow(mcr.getRealFlow() + scene.getData());
}
//计算额外消费金额
double cost = 0.0;
//判断余量是否大于0:大于0则有余量,否则没有
if (free <= 0) {//没有余量
cost = calcCost(type,scene.getData());
}else {//有余量,但余量不足以支撑本次使用)
if (free - scene.getData() < 0) {
cost = calcCost(type,scene.getData() - free);
}
}
//修改月消费记录:原本的金额+本次消费金额
mcr.setConsumAmount(mcr.getConsumAmount() + cost);
//保存到数据库
mcrDao.update(mcr);
//修改用户卡余额:原有话费-本次消费金额
if (cost > 0) {
moboleCard.setMoney(moboleCard.getMoney() - cost);
//保存到数据库
moboleCardDao.update(moboleCard);
}
//往消费记录表中添加一条新的数据
Consuminfo consuminfo = new Consuminfo();
consuminfo.setCardNumber(cardNumber);
consuminfo.setType(type);
consuminfo.setConsumeData(scene.getData());
consuminfo.setConsumeDate(new Date());
//保存到数据库
ConsuminfoDao consuminfoDao = new ConsuminfoDaoImpl();
consuminfoDao.insert(consuminfo);
//打印消费信息
System.out.println(scene.getDescription());
}
}
/**
* 计算消费金额
* @param type: 消费类型
* @param num: 数量
* @return
*/
private double calcCost(String type, int num){
double cost = 0.0;
if(type.equals("通话")){
cost = 0.2 * num;
}else if(type.equals("短信")){
cost = 0.1 * num;
}else if(type.equals("上网")){
cost = 0.1 * num;
}
return cost;
}
//4.话费充值
public void recharge(){
System.out.println("******************************话费充值******************************");
System.out.print("请选择您要充值的卡号:");
String cardNumber = input.next();
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(cardNumber);
if (moboleCard == null) {
System.out.println("【错误提示】:该手机号不存在,请重新输入!!!");
recharge();
}else{
System.out.print("请输入您需要充值的金额:");
double money = input.nextDouble();
if (money < 0) {
System.out.println("【错误提示】:充值金额必须为正数!!!");
recharge();
}else{
Double balance = moboleCardDao.queryByCardNo(cardNumber).getMoney();
//往用户卡添加一条记录,修改money的值
moboleCard.setMoney(money + balance);
moboleCard.setCardNumber(cardNumber);
moboleCardDao.update(moboleCard);
//往充值记录表添加一条充值记录
RechargeRecord rechargeRecord = new RechargeRecord();
rechargeRecord.setAmount(money);
rechargeRecord.setRechargeDate(new Date());
rechargeRecord.setCardNumber(cardNumber);
RechargeRecordDao rechargeRecordDao = new RechargeRecordDaoImpl();
rechargeRecordDao.insert(rechargeRecord);
System.out.println("【友情提示】:充值成功!\n卡上余额:"+(money+balance));
}
}
}
//5.资费说明
public void description(){
System.out.println("******************************资费说明******************************");
System.out.println("序号\t\t套餐名称\t\t通话时长(分/月)\t短信条数(条/月)\t上网流量(MB/月)");
SerpackageDao s = new SerpackageDaoImpl();
SerpackageTypeDao st = new SerpackageTypeDaoImpl();
for (int i = 0; i < st.queryByAll().size(); i++) {
System.out.println(st.queryByAll().get(i).getId()+"\t\t"+st.queryByAll().get(i).getName()+"\t\t"+s.queryAll().get(i).getTalkTime()+"\t\t\t\t"
+s.queryAll().get(i).getSmsCount()+"\t\t\t\t"
+s.queryAll().get(i).getFlow());
}
}
//6.申请解冻
public void applyThawing() {
System.out.println("******************************申请解冻******************************");
System.out.print("请输入手机号:");
String cardNo = input.next();
//在数据库中查找手机号
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard mc = moboleCardDao.queryByCardNo(cardNo);
if (cardNo.equals(mc.getCardNumber())) {//手机号存在数据库中
System.out.print("请输入密码:");
String pwd = input.next();
if (pwd.equals(mc.getPassword())) {//密码正确
mc.setStatus(SystemConstant.MOBOLE_STATUS_NORMAL);
moboleCardDao.updateStatus(mc);
System.out.println("【友情提示】:申请成功!!!");
login();
}else{//密码错误
System.out.println("【错误提示】:密码错误,请确认后重新输入!!!");
applyThawing();
}
}else{//手机号不存在数据库中
System.out.println("【错误提示】:该用户不存在!!!");
exitSystem();
}
}
//7.退出系统
public void exitSystem() {
System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
System.out.println("退出系统成功!!!");
System.exit(0);
}
//二级菜单
//1.本月账单查询
public void queryCurrMonthRecord(){
System.out.println("******************************本月账单查询******************************");
//查询当前登录的手机号码对应的MoboleCard对象
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
//查询套餐
SerpackageDao serpackageDao = new SerpackageDaoImpl();
Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());
MonthlyConsumptionRecordsDao mcrDao = new MonthlyConsumptionRecordsDaoImpl();
MonthlyConsumptionRecords mcr = mcrDao.queryCurrentMonthRecprdByCardNo(SosoApp.loginCardNumber,DateUtil.getFirstDayDate(new Date()));
System.out.println("您的卡号: "+moboleCard.getCardNumber()+",当月账单:");
System.out.println("套餐资费: "+ serpackage.getPrice()+"元");
double total = serpackage.getPrice();//合计
if (mcr != null) {
total += mcr.getConsumAmount();
}
System.out.println("合计: "+total+"元");
System.out.println("账户余额: "+moboleCard.getMoney());
if (moboleCard.getMoney() < 0) {
System.out.println("【友情提示】:您的号码已欠费,请尽快充值!!!");
}
}
//2.套餐余额查询
public void queryBalance(){
System.out.println("******************************套餐余额查询******************************");
//查询当前登录的手机号码对应的MoboleCard对象
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
//查询套餐
SerpackageDao serpackageDao = new SerpackageDaoImpl();
Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());
MonthlyConsumptionRecordsDao mcrDao = new MonthlyConsumptionRecordsDaoImpl();
MonthlyConsumptionRecords mcr = mcrDao.queryCurrentMonthRecprdByCardNo(SosoApp.loginCardNumber,DateUtil.getFirstDayDate(new Date()));
//计算余量
int talkTime = serpackage.getTalkTime();
int smsCount = serpackage.getSmsCount();
int flow = serpackage.getFlow();
if(mcr != null){
talkTime = talkTime - mcr.getRealTalkTime() > 0?talkTime - mcr.getRealTalkTime():0;
smsCount = smsCount - mcr.getRealSmsCount() > 0?smsCount - mcr.getRealSmsCount():0;
flow = flow - mcr.getRealFlow() >0 ?flow - mcr.getRealFlow():0 ;
}
System.out.println("您的卡号: "+moboleCard.getCardNumber()+",套餐内剩余:");
System.out.println("通话时长: "+talkTime);
System.out.println("短信条数: "+smsCount);
System.out.println("上网流量: "+flow/1024+"GB");
}
//3.添加和打印消费者清单
public void printlist(){
System.out.println("******************************打印消费清单******************************");
System.out.print("请输入本年需要查询的月份(1~12):");
int month = input.nextInt();
int year = DateUtil.getYear(new Date());
//查询所有客户信息
ConsuminfoDao consuminfoDao = new ConsuminfoDaoImpl();
List<Consuminfo> consuminfos = consuminfoDao.queryByCardNo(SosoApp.loginCardNumber,year,month);
if (consuminfos.size() == 0) {
System.out.println("【友情提示】:对不起,不存在本卡号"+month+"月消费记录!!!");
}else{
System.out.println("序号\t\t类型\t\t数据\t\t日期");
for (int i = 0; i < consuminfos.size(); i++) {
System.out.printf("%-8s%-7s%-8s%-25s",(i+1),consuminfos.get(i).getType(),consuminfos.get(i).getConsumeData(),consuminfos.get(i).getConsumeDate());
System.out.println();
}
}
}
//4.套餐变更
public void changeSerpackage() {
System.out.println("******************************套餐变更******************************");
//1.查询所有的套餐类型
SerpackageTypeDao serpackageTypeDao = new SerpackageTypeDaoImpl();
List<SerpackageType> serpackageTypes = serpackageTypeDao.queryAll();
//2.根据当前登录的手机号码, 查询当前用户卡信息
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
//3.用户选择套餐类型
//根据用户套餐明细id查询套餐明细
SerpackageDao serpackageDao = new SerpackageDaoImpl();
Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());
//根据用户现在的套餐明细得到套餐类型
SerpackageType serpackageType = serpackageTypes.stream()
.filter(stype -> stype.getId().intValue() == serpackage.getType().intValue())
.collect(Collectors.toList()).get(0);
System.out.println("***************套餐变更***************");
System.out.println("您现在的套餐:" + serpackageType.getName());
//输出所有套餐
for (int i = 0; i < serpackageTypes.size(); i++) {
System.out.print((i + 1) + "." + serpackageTypes.get(i).getName() + "\t");
}
System.out.print("\n请输入对应数字更换套餐:");
int choose = input.nextInt();
//4.判断用户选择的套餐是否是用户卡现在套餐,如果是,提示,
if (serpackageTypes.get(choose - 1).equals(serpackageType)) {
System.out.println("【友情提示:】您已经是该套餐用户,无需更换!!!");
System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
System.exit(0);
} else {
//5.如果不是,根据用户选择的套餐类型,查询对应的套餐明细
Serpackage chooseSerpackage = serpackageDao.queryByType(serpackageTypes.get(choose - 1).getId());
//6.判断用户卡的余额是否满足该套餐的月租, 如果不满足, 提示
if (moboleCard.getMoney().doubleValue() < chooseSerpackage.getPrice().doubleValue()) {
System.out.println("【友情提示:】对不起,您的余额不足以支付新套餐本月资费,请充值后办理变更套餐业务!!!");
recharge();
changeSerpackage();
} else {
//7.如果满足, 更换套餐, 修改用户卡信息(套餐,余额)
moboleCard.setSerPackage(chooseSerpackage.getId());
moboleCard.setMoney(moboleCard.getMoney() - chooseSerpackage.getPrice());
moboleCardDao.update(moboleCard);
//8.打印用户新套餐的明细
System.out.println("【友情提示:】更换套餐成功!" + serpackageTypes.get(choose - 1).getName()
+ ":通话时长:" + chooseSerpackage.getTalkTime() + "分钟/月,短信条数:"
+ chooseSerpackage.getSmsCount() + "条/月,上网流量:"
+ chooseSerpackage.getFlow() / 1024 + "GB/月,月租:"
+ chooseSerpackage.getPrice() + "元/月");
}
}
}
//5.办理退网
public void handlenetwork(){
System.out.println("******************************办理退网******************************");
System.out.println("是否确定办理退网(Y/N)?");
String choose = input.next();
if (choose.equals("Y")) {
CardDao cardDao = new CardDaoImpl();
Card card = cardDao.queryByCardNo(SosoApp.loginCardNumber);
//修改卡的状态
card.setStatus(SystemConstant.CARD_STATUS_NORMAL);
cardDao.update(card);
//删除用户表的信息
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
moboleCardDao.deleteById(moboleCard.getCardNumber());
System.out.println("【友情提示】:卡号"+moboleCard.getCardNumber()+"办理退网成功!!!");
}else{
System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
System.exit(0);
}
}
//6.修改密码
public void changepassword() {
System.out.println("******************************修改密码******************************");
System.out.print("是否确定修改密码(Y/N)?");
String choose = input.next();
if (choose.equals("Y")) {//确定修改密码
System.out.print("请输入原密码:");
String psw = input.next();
MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
MoboleCard mc = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
if (psw.equals(mc.getPassword())) {//原密码正确
System.out.print("请输入新密码:");
String password = input.next();
if (password.equals(psw)) {//原密码与新密码一致
System.out.println("【错误提示】:新密码不能与原密码一致,请确认后重新输入!!!");
changepassword();
}else{
System.out.print("请确认新密码:");
String passwords = input.next();
if (password.equals(passwords)) {//两次输入的新密码一致
//更新数据库中的密码
mc.setPassword(password);
//保存到数据库
moboleCardDao.updatePwd(mc);
System.out.println("【友情提示】:卡号"+mc.getCardNumber()+"修改密码成功!!!");
System.out.println("请重新登录...");
login();
}else{
System.out.println("【错误提示】:两次输入的密码不一致,请确认后重新输入!!!");
changepassword();
}
}
}else{
System.out.println("【错误提示】:密码错误,请确认后重新输入!!!");
changepassword();
}
}else{
System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
System.exit(0);
}
}
}
四、总结
1、编写JDBC的sql语句时要列名需要取别名,因为数据库命名是使用下划线连接,而Java使用的是小驼峰命名法,不取别名执行sql语句时会报异常(空指针异常)。
2、消费记录从每月1号开始记录,所以日期格式要转换成年月日(yyyy-MM-dd)
五、完整代码
链接:https://pan.baidu.com/s/1mgUM3L0IWUlg0NAQzpTrSw
提取码:wmj5