前言 10-16周java学习总结
近几周PTA的作业以电信收费为主,考试内容涉及正则表达式,字符串的比较.输入.分割代码的复用性.面向对象设计,ArrayList的使用等等。题目量和难度都适中。
期末考试主要考察了对课本知识的运用,例如多态,继承,抽象类,抽象类ArrayList的用法等等.难度题量都适中。
同时实验五考察了javafx的应用。
设计与分析
|
实现南昌市电信分公司的计费程序,假设该公司针对手机和座机用户分别采取了两种计费方案,分别如下: 输入: 注意:以上两类信息,先输入所有开户信息,再输入所有通讯信息,最后一行以“end”结束。 输出: |
输入样例:在这里给出一组输入。例如:
|
输出样例:在这里给出相应的输出。例如:
|
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
import java.util.Comparator;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in);
ArrayList<User> x = new ArrayList<User>();
// UserRecords y = new UserRecords();
ArrayList<CallRecord> z = new ArrayList<CallRecord>();
LandlinePhoneCharging cost1 = new LandlinePhoneCharging();
MobilelinePhoneCharging cost2 = new MobilelinePhoneCharging();
while(true) {
String a = in.nextLine();
if(a.equals("end")) {
break;
}
if(jug(a)==3) {
User b = new User();
String[] strarray=a.split(" ");
b.setNumber(strarray[0].substring(2));
b.setChargeMode(strarray[1]);
x.add(b);
for (int i = 0; i < x.size(); i++) {
for (int j = 0; j < x.size(); j++) {
if (i != j && x.get(i).number.equals(x.get(j).number)) {
x.remove(x.get(j));
}
}
}
}
else if(jug(a)==2){
User b = new User();
String[] strarray=a.split(" ");
b.setNumber(strarray[0].substring(2));
b.setChargeMode(strarray[1]);
x.add(b);
for (int i = 0; i < x.size(); i++) {
for (int j = 0; j < x.size(); j++) {
if (i != j && x.get(i).number.equals(x.get(j).number)) {
x.remove(x.get(j));
}
}
}
}
else if(jug(a)==1) {
CallRecord b = new CallRecord();
String[] strarray=a.split(" ",6);
b.setCallingAddressAreaCode(strarray[0].substring(2, 6));
b.setAnswerAddressAreaCode(strarray[1].substring(0, 4));
b.setCallingNumber(strarray[0].substring(2));
b.setAnswerNumber(strarray[1]);
b.setStartTime(strarray[2].concat(" ").concat(strarray[3]));
b.setEndTime(strarray[4].concat(" ").concat(strarray[5]));
z.add(b);
}
else if(jug(a)==4) {
CallRecord b = new CallRecord();
String[] strarray=a.split(" ",7);
b.setCallingAddressAreaCode(strarray[0].substring(2, 6));
b.setAnswerAddressAreaCode(strarray[2]);
b.setCallingNumber(strarray[0].substring(2));
b.setAnswerNumber(strarray[1]);
b.setStartTime(strarray[3].concat(" ").concat(strarray[4]));
b.setEndTime(strarray[5].concat(" ").concat(strarray[6]));
z.add(b);
}else if(jug(a)==5) {
CallRecord b = new CallRecord();
String[] strarray=a.split(" ",8);
b.setCallingAddressAreaCode(strarray[1]);
b.setAnswerAddressAreaCode(strarray[3]);
b.setCallingNumber(strarray[0].substring(2));
b.setAnswerNumber(strarray[2]);
b.setStartTime(strarray[4].concat(" ").concat(strarray[5]));
b.setEndTime(strarray[6].concat(" ").concat(strarray[7]));
z.add(b);
}else if(jug(a)==6) {
CallRecord b = new CallRecord();
String[] strarray=a.split(" ",7);
b.setCallingAddressAreaCode(strarray[1]);
b.setAnswerAddressAreaCode(strarray[2].substring(0, 4));
b.setCallingNumber(strarray[0].substring(2));
b.setAnswerNumber(strarray[2]);
b.setStartTime(strarray[3].concat(" ").concat(strarray[4]));
b.setEndTime(strarray[5].concat(" ").concat(strarray[6]));
z.add(b);
}
}
for(int i=0;i<x.size();i++) {
for(int j =0;j<z.size();j++) {
if(x.get(i).ChargeMode.equals("0")) {
if(z.get(j).answerAddressAreaCode.equals("NC")) {
if(x.get(i).number.equals(z.get(j).callingNumber))
x.get(i).userRecords.addCallingInCityRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("JX")) {
if(x.get(i).number.equals(z.get(j).callingNumber))
x.get(i).userRecords.addCallingInProvinceRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("ZG")){
if(x.get(i).number.equals(z.get(j).callingNumber))
x.get(i).userRecords.addCallingInLandRecords(z.get(j));
}
}else {
if(z.get(j).answerAddressAreaCode.equals("NC")) {
if(x.get(i).number.equals(z.get(j).callingNumber)) {
if(z.get(j).callingAddressAreaCode.equals("NC")) {
x.get(i).userRecords.addPhonecallingInCityRecords(z.get(j));
}else if(z.get(j).callingAddressAreaCode.equals("JX")){
x.get(i).userRecords.addPhonecallingInProvinceRecords(z.get(j));
}else if(z.get(j).callingAddressAreaCode.equals("ZG")){
x.get(i).userRecords.addPhonecallingInLandRecords(z.get(j));
}
}
if(x.get(i).number.equals(z.get(j).answerNumber)) {
if(z.get(j).answerAddressAreaCode.equals("NC")) {
x.get(i).userRecords.addAnswerInInCityRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("JX")){
x.get(i).userRecords.addAnswerInInProvinceRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("ZG")){
x.get(i).userRecords.addAnswerInInLandRecords(z.get(j));
}
}
}else if(z.get(j).answerAddressAreaCode.equals("JX")) {
if(x.get(i).number.equals(z.get(j).callingNumber)) {
if(z.get(j).callingAddressAreaCode.equals("NC")) {
x.get(i).userRecords.addPhonecallingInCityRecords(z.get(j));
}else if(z.get(j).callingAddressAreaCode.equals("JX")){
x.get(i).userRecords.addPhonecallingInProvinceRecords(z.get(j));
}else if(z.get(j).callingAddressAreaCode.equals("ZG")){
x.get(i).userRecords.addPhonecallingInLandRecords(z.get(j));
}
}
if(x.get(i).number.equals(z.get(j).answerNumber)) {
if(z.get(j).answerAddressAreaCode.equals("NC")) {
x.get(i).userRecords.addAnswerInInCityRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("JX")){
x.get(i).userRecords.addAnswerInInProvinceRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("ZG")){
x.get(i).userRecords.addAnswerInInLandRecords(z.get(j));
}
}
}else if(z.get(j).answerAddressAreaCode.equals("ZG")){
if(x.get(i).number.equals(z.get(j).callingNumber)) {
if(z.get(j).callingAddressAreaCode.equals("NC")) {
x.get(i).userRecords.addPhonecallingInCityRecords(z.get(j));
}else if(z.get(j).callingAddressAreaCode.equals("JX")){
x.get(i).userRecords.addPhonecallingInProvinceRecords(z.get(j));
}else if(z.get(j).callingAddressAreaCode.equals("ZG")){
x.get(i).userRecords.addPhonecallingInLandRecords(z.get(j));
}
}
if(x.get(i).number.equals(z.get(j).answerNumber)) {
if(z.get(j).answerAddressAreaCode.equals("NC")) {
x.get(i).userRecords.addAnswerInInCityRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("JX")){
x.get(i).userRecords.addAnswerInInProvinceRecords(z.get(j));
}else if(z.get(j).answerAddressAreaCode.equals("ZG")){
x.get(i).userRecords.addAnswerInInLandRecords(z.get(j));
}
}
}
}
}
}
Collections.sort(x, new MyComparatorToUser());
for(int i =0;i<x.size();i++) {
if(x.get(i).ChargeMode.equals("0")) {
x.get(i).balance = 100- cost1.calCost(x.get(i).userRecords);
double q = 80-x.get(i).balance;
if(i==x.size()-1) {
System.out.print(x.get(i).number+" "+String.format("%.1f", q)+" "+String.format("%.1f", x.get(i).balance));
}
else {
System.out.println(x.get(i).number+" "+String.format("%.1f", q)+" "+String.format("%.1f", x.get(i).balance));
}
}
else {
x.get(i).balance = 100- cost2.calCost(x.get(i).userRecords);
double q = 85-x.get(i).balance;
if(i==x.size()-1) {
System.out.print(x.get(i).number+" "+String.format("%.1f", q)+" "+String.format("%.1f", x.get(i).balance));
}
else {
System.out.println(x.get(i).number+" "+String.format("%.1f", q)+" "+String.format("%.1f", x.get(i).balance));
}
}
}
in.close();
}
static class MyComparatorToUser implements Comparator<User>{
@Override
public int compare(User u1, User u2) {
double p = Double.parseDouble(u1.number);
double q = Double.parseDouble(u2.number);
if(u1.number.charAt(0)=='0'&&u2.number.charAt(0)=='0') {
return (int)(p-q);
}
if(u1.number.charAt(0)=='0') {
p=0;
}
if(u2.number.charAt(0)=='0') {
q=0;
}
return (int)(p-q);
}
}
public static int jug(String a) {
String parrten1 = "t-0791[0-9]{7,8} [0-9]{3,4}[0-9]{7,8} [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d";
String parrten2 = "u-0791[0-9]{7,8}[ ]0";//开户
String parrten3 = "u-(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])//d{8} 1";//开户
String parrten4 = "t-[0-9]{3,4}[0-9]{7,8} (13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])//d{8} [0-9]{3,4} [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d";
String parrten5 = "t-(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])//d{8} [0-9]{3,4} (13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])//d{8} [0-9]{3,4} [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d";
String parrten6 = "t-(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])//d{8} [0-9]{3,4} [0-9]{3,4}[0-9]{7,8} [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d [1-9]//d{3}.([1-9]|1[0-2]).([1-9]|[1-2][0-9]|3[0-1])//s(20|21|22|23|[0-1]//d):[0-5]//d:[0-5]//d";
if(a.matches(parrten1)) {
return 1;
}
else if(a.matches(parrten2)) {
return 2;
}else if(a.matches(parrten3)) {
return 3;
}else if(a.matches(parrten4)) {
return 4;
}else if(a.matches(parrten5)) {
return 5;
}else if(a.matches(parrten6)) {
return 6;
}
return 0;
}
}
class UserRecords {
ArrayList<CallRecord> callingInCityRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> callingInProvinceRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> callingInLandRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> phonecallingInCityRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> phonecallingInProvinceRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> phonecallingInLandRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> answerInCityRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> answerInProvinceRecords = new ArrayList<CallRecord>();
ArrayList<CallRecord> answerInLandRecords = new ArrayList<CallRecord>();
ArrayList<MessageRecord> sendMessageRecords = new ArrayList<MessageRecord>();
ArrayList<MessageRecord> reciveMessageRecords = new ArrayList<MessageRecord>();
public void addCallingInCityRecords(CallRecord callRecord) {
callingInCityRecords.add(callRecord);
}
public void addCallingInProvinceRecords(CallRecord callRecord) {
callingInProvinceRecords.add(callRecord);
}
public void addCallingInLandRecords(CallRecord callRecord) {
callingInLandRecords.add(callRecord);
}
public void addAnswerInInCityRecords(CallRecord answerRecord) {
answerInCityRecords.add(answerRecord);
}
public void addAnswerInInProvinceRecords(CallRecord answerRecord) {
answerInProvinceRecords.add(answerRecord);
}
public void addAnswerInInLandRecords(CallRecord answerRecord) {
answerInLandRecords.add(answerRecord);
}
public void addSendMessageRecords(MessageRecord sendMessageRecord) {
sendMessageRecords.add(sendMessageRecord);
}
public void addReciveMessageRecords(MessageRecord reciveMessageRecord) {
reciveMessageRecords.add(reciveMessageRecord);
}
public ArrayList<CallRecord> getCallingInCityRecords() {
return callingInCityRecords;
}
public ArrayList<CallRecord> getCallingInProvinceRecords() {
return callingInProvinceRecords;
}
public ArrayList<CallRecord> getCallingInLandRecords() {
return callingInLandRecords;
}
public ArrayList<CallRecord> getAnswerInCityRecords() {
return answerInCityRecords;
}
public ArrayList<CallRecord> getAnswerInProvinceRecords() {
return answerInProvinceRecords;
}
public ArrayList<CallRecord> getAnswerInLandRecords() {
return answerInLandRecords;
}
public ArrayList<CallRecord> getPhonecallingInCityRecords() {
return phonecallingInCityRecords;
}
public void addPhonecallingInCityRecords(CallRecord callRecord) {
phonecallingInCityRecords.add(callRecord);
}
public ArrayList<CallRecord> getPhonecallingInProvinceRecords() {
return phonecallingInProvinceRecords;
}
public void addPhonecallingInProvinceRecords(CallRecord callRecord) {
phonecallingInProvinceRecords.add(callRecord);
}
public ArrayList<CallRecord> getPhonecallingInLandRecords() {
return phonecallingInLandRecords;
}
public void addPhonecallingInLandRecords(CallRecord callRecord) {
phonecallingInLandRecords.add(callRecord);
}
public ArrayList<MessageRecord> getSendMessageRecords() {
return sendMessageRecords;
}
public ArrayList<MessageRecord> getReciveMessageRecords() {
return reciveMessageRecords;
}
}
class User {
UserRecords userRecords = new UserRecords();
double balance = 100;
String ChargeMode;
String number;
public User() {
}
public double calBalance() {
return 100-calCost();
}
public double calCost() {
return 0;
}
public UserRecords getUserRecords() {
return userRecords;
}
public void setUserRecords(UserRecords userRecords) {
this.userRecords = userRecords;
}
public double getBalance() {
return balance;
}
public void setChargeMode(String chargeMode) {
ChargeMode = chargeMode;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
class MobilePhoneInProvinceCallRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.1;
}else {
cost = cost + ((a-b)/60+1)*0.3;
}
}
return cost;
}
}
class MobilePhoneInProvinceAnswerRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
return cost;
}
}
class MobilePhoneInlandCallRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.1;
}else {
cost = cost + ((a-b)/60+1)*0.6;
}
}
return cost;
}
}
class MobilePhoneInlandAnswerRule extends CallChargeRule{
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
if(callRecords.get(i).answerAddressAreaCode.equals("ZG")) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.1;
}else {
cost = cost + ((a-b)/60+1)*0.3;
}
}
}
return cost;
}
}
class MobilePhoneInCityCallRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.1;
}else {
if(callRecords.get(i).answerAddressAreaCode.equals("NC"))
cost = cost + ((a-b)/60+1)*0.1;
else if(callRecords.get(i).answerAddressAreaCode.equals("JX"))
cost = cost + ((a-b)/60+1)*0.2;
else
cost = cost + ((a-b)/60+1)*0.3;
}
}
return cost;
}
}
class MobilePhoneInCityAnswerRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
return cost;
}
}
class MobilelinePhoneCharging extends ChargeMode{
double monthlyRent = 15;
public MobilelinePhoneCharging() {
super();
}
@Override
public double calCost(UserRecords userRecords) {
MobilePhoneInCityCallRule a = new MobilePhoneInCityCallRule();
MobilePhoneInlandCallRule b = new MobilePhoneInlandCallRule();
MobilePhoneInProvinceCallRule c = new MobilePhoneInProvinceCallRule();
MobilePhoneInCityAnswerRule d = new MobilePhoneInCityAnswerRule();
MobilePhoneInProvinceAnswerRule e = new MobilePhoneInProvinceAnswerRule();
MobilePhoneInlandAnswerRule f = new MobilePhoneInlandAnswerRule();
return a.calCost(userRecords.getPhonecallingInCityRecords())+c.calCost(userRecords.getPhonecallingInProvinceRecords())+b.calCost(userRecords.getPhonecallingInLandRecords())+
f.calCost(userRecords.getAnswerInLandRecords())+15;
}
@Override
public double getMonthlyRent() {
return monthlyRent;
}
}
class MessageRecord {
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
class LandPhoneInProvinceRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.3;
}else {
cost = cost + ((a-b)/60+1)*0.3;
}
}
return cost;
}
}
class LandPhoneInlandRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.6;
}else {
cost = cost + ((a-b)/60+1)*0.6;
}
}
return cost;
}
}
class LandPhoneInCityRule extends CallChargeRule{
@Override
public double calCost(ArrayList<CallRecord> callRecords) {
double cost=0;
if(callRecords.size()==0) {
return 0;
}
for(int i=0;i<callRecords.size();i++) {
long a = (callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())/1000;
long b = a%60;
if(b==0&&
(callRecords.get(i).endTime.getTime()-callRecords.get(i).startTime.getTime())>0) {
cost = cost + (a/60)*0.1;
}else {
cost = cost + ((a-b)/60+1)*0.1;
}
}
return cost;
}
}
class LandlinePhoneCharging extends ChargeMode{
double monthlyRent = 20;
public LandlinePhoneCharging() {
super();
}
@Override
public double calCost(UserRecords userRecords) {
LandPhoneInCityRule a = new LandPhoneInCityRule();
LandPhoneInlandRule b = new LandPhoneInlandRule();
LandPhoneInProvinceRule c = new LandPhoneInProvinceRule();
return a.calCost(userRecords.getCallingInCityRecords())+b.calCost(userRecords.getCallingInLandRecords())+c.calCost(userRecords.getCallingInProvinceRecords())+20;
}
@Override
public double getMonthlyRent() {
return monthlyRent;
}
}
abstract class CommunicationRecord {
String callingNumber;
String answerNumber;
public String getCallingNumber() {
return callingNumber;
}
public void setCallingNumber(String callingNumber) {
this.callingNumber = callingNumber;
}
public String getAnswerNumber() {
return answerNumber;
}
public void setAnswerNumber(String answerNumber) {
this.answerNumber = answerNumber;
}
}
abstract class ChargeRule {
}
abstract class ChargeMode {
ArrayList<ChargeRule> chargeRules = new ArrayList<ChargeRule>();
public ArrayList<ChargeRule> getChargeRules() {
return chargeRules;
}
public void setChargeRules(ArrayList<ChargeRule> chargeRules) {
this.chargeRules = chargeRules;
}
public double calCost(UserRecords userRecords) {
return 0;
}
public double getMonthlyRent() {
return 0;
}
}
class CallRecord extends CommunicationRecord{
Date startTime;
Date endTime;
String callingAddressAreaCode;
String answerAddressAreaCode;
SimpleDateFormat a = new SimpleDateFormat ("yyyy.MM.dd HH:mm:ss");
public CallRecord() {
super();
// TODO 自动生成的构造函数存根
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
try {
this.startTime = a.parse(startTime);
} catch (ParseException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
try {
this.endTime = a.parse(endTime);
} catch (ParseException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public String getCallingAddressAreaCode() {
return callingAddressAreaCode;
}
public void setCallingAddressAreaCode(String callingAddressAreaCode) {
if(callingAddressAreaCode.matches("0791"))
this.callingAddressAreaCode = "NC";
else if(callingAddressAreaCode.matches("(079[0-9]|0701)")){
this.callingAddressAreaCode = "JX";
}else {
this.callingAddressAreaCode = "ZG";
}
}
public String getAnswerAddressAreaCode() {
return answerAddressAreaCode;
}
public void setAnswerAddressAreaCode(String answerAddressAreaCode) {
if(answerAddressAreaCode.matches("0791"))
this.answerAddressAreaCode = "NC";
else if(answerAddressAreaCode.matches("(079[0-9]|0701)")){
this.answerAddressAreaCode = "JX";
}else {
this.answerAddressAreaCode = "ZG";
}
}
public boolean isMobilePhoneNumber(String Number) {
if(Number.matches("(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])//d{8})")) {
return true;
}
return false;
}
}
abstract class CallChargeRule extends ChargeRule{
public double calCost(ArrayList<CallRecord> callRecords) {
return 0;
}
}
本次作业难度较大,代码写的有点乱,首先用while循环确保循环输入,直到end退出程序,输入一条语句立刻进行判断,执行开户,或者记录操作,如果输入两个相同的号码,将取消开户,对于计费,使用的是记录操作,记录下后传入ArrayLis的用户中储存起来,最后用costcal函数进行计算,再返回结果并保留两位小数,在这之前使用comperto进行排序,再将用户的信息按顺序输出。中间过程比较繁杂,细节比较多,就不再一一赘述。类图如下。

|
一、实验目的 1、了解JavaFX的基本原理和基本组件; 2、能够熟练应用JavaFX组件进行界面设计; 3、掌握Java的事件驱动机制、lambda表达式; 4、掌握shape形状类的使用。 |
一、实验目的 1、了解JavaFX的基本原理和基本组件; 2、能够熟练应用JavaFX组件进行界面设计; 3、掌握Java的事件驱动机制、lambda表达式; 4、掌握shape形状类的使用。 |
一、实验步骤 1、 请修改实验四农夫过河游戏的代码,将用户界面改为图形界面,界面效果自行设计。 2、 请画出修改后的类图,并说明在界面中使用了哪些技巧以达到较好地界面效果。 3、 途中遇见了图片无法加载的问题图3-1,经过寻找,发现图片路径输入有误,修改路径后,程序正常运行。 4、 类图见代码末尾。图1-1 |
途中遇见了图片无法加载的问题,经过寻找,发现图片路径输入有误,修改路径后,程序正常运行。
通过按顺序点击农夫带羊过河—农夫独自过河—农夫带狼过河—农夫带羊过河—农夫带白菜过河—农夫独自过河—农夫带羊过河后,程序执行完毕,最终得到结果如见代码末尾2-1,程序正常运行,输出结果正常,点击农夫独自过河,得到结果如2-2,程序正常运行,输出正常。
通过javafx的实验让我掌握了基本的图形界面程序,让非专业用户能够一目了然程序的操作。将算法和用户操作分开,让程序维护和修改更容易,减少以后代码的修改量。过程中遇到了图片为空,无法加载的问题,后来发现是因为路径搞错了,修改路径以后正常运行。
类图及相关运行界面如下。



踩坑心得:
实验中存在不少细节问题,例如狼先吃羊,故羊无法再吃白菜,白菜存活,故需判断当羊进食时是否活着等等问题。本题可将农夫,狼,羊,白菜的共有属性放入一个父类中,用船来执行过河的操作,降低代码的耦合度,提高代码的复用性,方便日后修改添加新类。途中遇见了图片无法加载的问题,经过寻找,发现图片路径输入有误,修改路径后,程序正常运行。
改进建议:
建议多提供输入样例,方便进行判断,修善代码,多出些和所学契合的题目。
总结:
学会了使用抽象类,抽象方法继承与多态,使用容器类,降低代码的耦合度,提高复用性。同时学会了流的运用,文件流的读入写出等等操作,学会了使用异常处理,声明,抛出,抓取异常,优雅的终止错误。对于以上学习内容,对于容器类应该进一步学习和研究熟练的使用ArrayList , 学会了使用fx中的类,例如button等。希望老师能够提供答案或者上课讲一讲这些题目。
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/268241.html