嗖嗖移动大厅系统(1.注册2.登陆3.退出)

 

工具类要定义电话卡的判断方法:是否存在此卡

public boolean isExistCard(String number, String passWord) {
Set<String> numbers = cards.keySet();//从Set集合取值
Iterator<String> it = numbers.iterator();
while (it.hasNext()) {
String searchNum = it.next();//判断如果有下一项,就收下
if (searchNum.equals(number)
&& (cards.get(searchNum)).getPassWord().equals(passWord)) {
return true;
}
}
return false;否则返回方法顶部
}

/**
* 创建卡号(以139开头 11位)
*
* @return 生成的随机手机卡号
*/
public String createNumber() {
Random random = new Random();//创建随机数 对象
boolean isExist = false; // 记录现有用户中是否存在此卡号用户 是:true 否:false
String number = "";
int temp = 0;
do {
isExist = false; // 标志位重置为false,用于控制外重循环,当生成了
// 生成的随机数是8位 不能小于10000000,否则重新生成
do {
temp = random.nextInt(100000000);
} while (temp < 10000000);
// 生成之前,前面加“139”
number = "139" + temp;
// 和现有用户的卡号比较,不能是重复
Set<String> cardNumbers = cards.keySet();
for (String cardNumber : cardNumbers) {
if (number.equals(cardNumber)) {
isExist = true;
break;
}
}
} while (isExist);
return number;
}

/**
* 生成指定个数的新卡号列表
*
* @param count
* 指定个数
* @return 卡号列表
*/
public String[] getNewNumbers(int count) {

String[] numbers = new String[count];
for (int i = 0; i < count; i++) {
numbers[i] = createNumber();
}
return numbers;
}

SoSoMgr类里定义添加注册方法当用户选2项注册的时候出来下列方法便历出来的

/**
* 添加新卡
*
* @param card
* 新卡
*/
public void addCard(MobileCard card) {
cards.put(card.getCardNumber(), card);
System.out.print("注册成功!");
card.showMeg();
}

* 注册新卡流程
*/
public void registCard(){
String[] newNumbers = utils.getNewNumbers(9);
//显示可供选择的手机号列表
System.out.println("*****可选择的卡号*****");

for(int i=0;i<9;i++){
System.out.print((i+1)+"."+newNumbers[i]+" ");
if((i+1)%3==0){
System.out.println();
}
}
//选择手机号
System.out.print("请选择卡号(输入1~9的序号):");
String number = newNumbers[input.nextInt()-1];

//选择套餐类型
System.out.print("1.话唠套餐 2.网虫套餐 3.超人套餐, ");
System.out.print("请选择套餐(输入序号):");
//utils.getPackList();
//获取套餐对象
ServicePackage pack = utils.createPack(input.nextInt());//父类对象

//输入用户名
System.out.print("请输入姓名:");
String name = input.next();

//输入密码
System.out.print("请输入密码:");
String password = input.next();

//输入预存话费金额
double money = 0;
System.out.print("请输入预存话费金额:");
money = input.nextDouble();
while(money<pack.getPrice()){
System.out.print("您预存的话费金额不足以支付本月固定套餐资费,请重新充值:");
money = input.nextDouble();
}

//创建新卡对象并添加
MobileCard newCard = new MobileCard(name,password,number,pack,pack.getPrice(),money-pack.getPrice());
utils.addCard(newCard);
}

 效果:注册

*************欢迎使用嗖嗖移动业务大厅***************
1.用户登录 2.用户注册 3.使用嗖嗖 4.话费充值 5.资费说明 6.退出系统
请选择:2
*****可选择的卡号*****//生成的随机数
1.13913029123 2.13955940273 3.13961424905
4.13916240074 5.13987220001 6.13910284583
7.13943305752 8.13913287929 9.13973381870
请选择卡号(输入1~9的序号):2
1.话唠套餐 2.网虫套餐 3.超人套餐, 请选择套餐(输入序号):2
请输入姓名:士大夫
请输入密码:1234
请输入预存话费金额:56
您预存的话费金额不足以支付本月固定套餐资费,请重新充值:90
注册成功!卡号:13955940273 用户名:士大夫 当前余额:22.0元。
网虫套餐:上网流量是3GB/月,月资费是68.0元/月。

public TalkPackage() {
//套餐数据初始化
this.talkTime = 500;
this.smsCount = 30;
this.price = 58.0;
}

如果你输入的充值数小于58.0就显示您预存的话费金额不足以支付本月固定套餐资费,请重新充值:大于或等于就注册成功

话唠套餐:通话时长为500分钟/月,短信条数为30条/月,资费为58.0元/月。这是根据话唠套餐给出的基本数据

public SuperPackage(){
//套餐数据初始化
this.talkTime = 200;
this.smsCount = 50;
this.flow = 1*1024;
this.price = 78.0;
}

@Override
public void showInfo() {
System.out.println("超人套餐:通话时长为"+this.talkTime+"分钟/月,短信条数为"+this.smsCount+"条/月,上网流量为"+this.flow/1024+"GB/月。");
}数据都是从本类获取/当前类

工具类专门为获取三类套餐创建的方法如果1就是话唠套餐2.网虫3.超人他们就会自动调取到各自类的方法

public ServicePackage createPack(int packId) {
ServicePackage pack = null;
switch (packId) {
case 1:
pack = new TalkPackage();
break;
case 2:
pack = new NetPackage();
break;

就是读入流就用到了IO流,先放入文本文件再用这个方法读到文件路径,自然也就读到文本内容了。

/**
* 显示资费说明
*/
public void showDescription(){
Reader rd = null;
try {
rd = new FileReader("套餐资费说明.txt");
char[] content = new char[1024];
int len = 0;
StringBuffer sb = new StringBuffer();
while((len=rd.read(content))!=-1){
sb.append(content,0,len); //拼接字符串
}
System.out.println(sb);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


case 3:
pack = new SuperPackage();
break;
}
return pack;
}

case 3:
//使用嗖嗖
System.out.print("请输入手机卡号:");
mobileNumber = input.next();

if(utils.isExistCard(mobileNumber)){

System.out.println("****使用之前****");
utils.showDescription();
}


*************欢迎使用嗖嗖移动业务大厅***************
1.用户登录 2.用户注册 3.使用嗖嗖 4.话费充值 5.资费说明 6.退出系统
请选择:3
请输入手机卡号:13960056547
****使用之前****
套餐类型:话唠套餐
通话时长:200分钟
短信条数:50条
月资费:58元
——————————————
套餐类型:网虫套餐
上网流量:5GB
月资费:68元
——————————————
套餐类型:超人套餐
通话时长:200分钟
短信条数:100条
上网流量:1GB
月资费:78元
——————————————
超出套餐计费:
通话时长:0.2元/分钟
短信条数:0.1元/分钟
上网流量:0.1元/分钟
谢谢使用!

case 1:
//用户登录
System.out.print("请输入手机卡号:");
mobileNumber = input.next();
System.out.print("请输入密码:");
password = input.next();
if (utils.isExistCard(mobileNumber, password)) {
cardMenu(mobileNumber);
}else{
System.out.println("对不起,您输入的信息有误,无法登录!");
}
continue;

util的判断卡存在方法

public boolean isExistCard(String number, String passWord) {
Set<String> numbers = cards.keySet();
Iterator<String> it = numbers.iterator();
while (it.hasNext()) {
String searchNum = it.next();

为了确保你是注册过的才能登陆做了这个判断如果存在这张卡就登陆否则打印System.out.println("对不起,您输入的信息有误,无法登录!");
if (searchNum.equals(number)
&& (cards.get(searchNum)).getPassWord().equals(passWord)) {
return true;
}
}
return false;

原文地址:https://www.cnblogs.com/hualishu/p/8608710.html