문제. 전화번호등록 프로그램만들기
작성
Main.java
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Controller wc = new Controller();
wc.setHashMap(new HashMap<>()); //wc를 이용해 한객체를 공유
wc.setList(new ArrayList<>()); //wc를 이용해 한객체를 공유
String bookfile = "numberbook.txt";
wc.read(bookfile); //bookfile 의 스트링값을 wc로전달
while(true){
System.out.println("📞☎📞☎📞☎전화번호부 프로그램📞☎📞☎📞☎");
System.out.println("메뉴번호를 입력하세요");
System.out.println("1.등록");
System.out.println("2.수정");
System.out.println("3.삭제");
System.out.println("4.목록");
System.out.println("5.검색");
System.out.println("6.저장");
System.out.println("7.종료");
String num = sc.next(); // 메뉴 번호를 받는다
if(num.equals("7")||num.equals("종료")||num.equals("7.종료"))break; //종료
switch (num){
case "1": case"등록": case"1.등록":
wc.insert();
break;
case "2": case"수정": case"2.수정":
wc.update();
break;
case "3": case"삭제": case"3.삭제":
wc.delete();
break;
case "4": case"목록": case"4.목록":
wc.list();
break;
case "5": case"검색": case"5.검색":
wc.search();
break;
case "6": case"저장": case"6.저장":
wc.save();
break;
default:
System.out.println("잘못된 메뉴번호입니다. 다시 입력해 주세요");
break;
}
}
}
}
Controller.java
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Controller {
//필드
String sw = "ª"; //구분용 특수문자
String errmsg = "특수문자(ª)는 입력할 수 없습니다";
String blank = "none"; //빈칸은 None 으로 출력
Scanner sc = new Scanner(System.in);
private HashMap<String, Detail> hashMap;
//게터&세터
public ArrayList<Detail> getList() {
return list;
}
public void setList(ArrayList<Detail> list) {
this.list = list;
}
private ArrayList<Detail> list;
public HashMap<String, Detail> getHashMap() {
return hashMap;
}
public void setHashMap(HashMap<String, Detail> hashMap) {
this.hashMap = hashMap;
}
//메소드 시작
//입력메소드
public void insert() {
String name, number, address, memo, date;
Detail d;
String n;
System.out.println("전화번호 등록");
System.out.print("* 이름 : ");
while (true) {
name = sc.nextLine();
if (name.indexOf(sw) != -1) {
System.out.println(errmsg); //특수문자가 포함되어있으면 에러메시지
continue;
} else if (name.length() == 0) {
name = blank; //아무것도 쓰지않으면 none 삽입
break;
} else {
break;
}
}
System.out.print("* 연락처 : ");
while (true) {
number = sc.nextLine();
if (number.indexOf(sw) != -1) {
System.out.println(errmsg); //특수문자가 포함되어있으면 에러메시지
continue;
} else if (number.length() == 0) {
number = blank; //아무것도 쓰지않으면 none 삽입
break;
} else {
break;
}
}
System.out.print("* 주소 : ");
while (true) {
address = sc.nextLine();
if (address.indexOf(sw) != -1) {
System.out.println(errmsg); //특수문자가 포함되어있으면 에러메시지
continue;
} else if (address.length() == 0) {
address = blank; //아무것도 쓰지않으면 none 삽입
break;
} else {
break;
}
}
System.out.print("* 메모 : ");
while (true) {
memo = sc.nextLine();
if (memo.indexOf(sw) != -1) {
System.out.println(errmsg); //특수문자가 포함되어있으면 에러메시지
continue;
} else if (memo.length() == 0) {
memo = blank; //아무것도 쓰지않으면 none 삽입
break;
} else {
break;
}
}
System.out.print("* 등록날짜 : ");
while (true) {
date = sc.nextLine();
if (date.indexOf(sw) != -1) {
System.out.println(errmsg); //특수문자가 포함되어있으면 에러메시지
continue;
} else if (date.length() == 0) {
date = blank; //아무것도 쓰지않으면 none 삽입
break;
} else {
break;
}
}
if (hashMap.get(number) == null) { //입력한 번호가 없는 번호(null)이면 등록가능
d = new Detail(name, number, address, memo, date);
n = number;
hashMap.put(n, d);
System.out.println("등록이 완료되었습니다");
} else { //null아니면 등록불가
System.out.println("동일한 번호가 존재합니다");
}
}
//검색메소드
public void search() {
while (true) {
String num;
System.out.println(" - 전화번호 검색 - ");
System.out.print("검색할 전화번호를 입력해 주세요 : ");
num = sc.nextLine();
if(num.length()==0){
num=blank; //아무것도 쓰지않으면 none 삽입
}
System.out.println("---------검색결과----------");
try {
System.out.println(hashMap.get(num).toString());
}catch(NullPointerException e) {
System.out.println("\n일치하는 정보가 없습니다.\n");
}
System.out.print("다시 입력을 원하시면 1번, 뒤로가기는 아무키나 입력하세요 : ");
String input = sc.nextLine();
if (input.equals("1") || input.equals("1번")) {
continue;
} else {
break;
}
}
}
// 목록메소드
//String 값을 유니코드 값으로 전환 후 오름차순 정렬
public void list() {
if (hashMap.size() == 0) {
System.out.println(" - 전화번호 목록 - ");
System.out.println("\n등록된 전화번호가 하나도 없습니다.\n");
} else {
System.out.println(" - 전화번호 목록 - ");
int[] sizearr = new int[hashMap.size()];
int p=0;
for(String k : hashMap.keySet()){
int sum=0;
for(int j =0;j<hashMap.get(k).getName().length();j++){
sum+=(int)hashMap.get(k).getName().charAt(j);
}
sizearr[p]=sum;
p++;
}
for(String k : hashMap.keySet()){
list.add(hashMap.get(k));
}
Detail temp;
for(int i=0; i<hashMap.size();i++){
for(int j=i+1; j<hashMap.size();j++) {
if(sizearr[i]>sizearr[j]){
temp = list.get(i);
list.set(i,list.get(j));
list.set(j,temp);
}
}
}
for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}
list.clear();
}
}
//삭제메소드
public void delete() {
String num;
String ans;
System.out.println(" - 전화번호 삭제 - ");
if (hashMap.size() == 0) {
System.out.println("\n등록된 전화번호가 하나도 없습니다.\n");
} else {
System.out.print("삭제할 전화번호를 입력해 주세요 : ");
while (true) {
num = sc.nextLine();
if (num.indexOf(sw) != -1) {
System.out.println(errmsg);
continue;
} else if (num.length() == 0) {
num = blank;
break;
} else {
break;
}
}
System.out.print(hashMap.get(num).getName() + "님의 연락처를 삭제하시겠습니까? 1.삭제 2.취소 : ");
ans = sc.nextLine();
while (true) {
if (ans.equals("1") || ans.equals("삭제")) {
hashMap.remove(num);
System.out.println("삭제가 완료되었습니다");
break;
} else if (ans.equals("2") || ans.equals("취소")) {
System.out.println("삭제를 취소하였습니다");
break;
} else {
System.out.println("(1,2) 혹은 (삭제,취소) 로 입력해주세요 ");
continue;
}
}
}
}
//수정메소드.
public void update() {
if (hashMap.size() == 0) {
System.out.println("\n 등록된 전화번호가 하나도 없습니다.\n");
} else {
String name, number, address, memo, date;
Detail d;
String n;
System.out.println("연락처 수정");
System.out.print("수정하실 전화번호를 입력해주세요 : ");
while (true) {
number = sc.nextLine();
if (number.indexOf(sw) != -1) {
System.out.println(errmsg);
continue;
} else if (number.length() == 0) {
number = blank;
break;
} else {
break;
}
}
System.out.println(hashMap.get(number).getName() + "님의 연락처를 수정합니다");
System.out.print("* 이름 : ");
while (true) {
name = sc.nextLine();
if (name.indexOf(sw) != -1) {
System.out.println(errmsg);
continue;
} else if (name.length() == 0) {
name = blank;
break;
} else {
break;
}
}
System.out.print("* 주소 : ");
while (true) {
address = sc.nextLine();
if (address.indexOf(sw) != -1) {
System.out.println(errmsg);
continue;
} else if (address.length() == 0) {
address = blank;
break;
} else {
break;
}
}
System.out.print("* 메모 : ");
while (true) {
memo = sc.nextLine();
if (memo.indexOf(sw) != -1) {
System.out.println(errmsg);
continue;
} else if (memo.length() == 0) {
memo = blank;
break;
} else {
break;
}
}
System.out.print("* 등록날짜 : ");
while (true) {
date = sc.nextLine();
if (date.indexOf(sw) != -1) {
System.out.println(errmsg);
continue;
} else if (date.length() == 0) {
date = blank;
break;
} else {
break;
}
}
System.out.println("수정이 완료되었습니다!");
n = number;
d = new Detail(name, number, address, memo, date);
hashMap.put(n, d);
}
}
//저장 메소드
public void save() {
String a = "numberbook.txt";
File file = new File(a);
if (file.exists()) { //파일존재하면 그 위에 저장
try {
FileWriter fr = new FileWriter(a);
for (String k : hashMap.keySet()) {
fr.write(hashMap.get(k).getName() + "ª" + hashMap.get(k).getNum() + "ª" + hashMap.get(k).getAddress() + "ª" + hashMap.get(k).getMemo() + "ª" + hashMap.get(k).getDate() + "\n");
}
fr.close();
System.out.println("저장을 성공하였습니다");
} catch (IOException e) {
e.printStackTrace();
System.out.println("저장에 실패하였습니다");
}
} else {
try {
file.createNewFile(); //파일생성 후 그 위에 저장
FileWriter fr = new FileWriter(a);
for (String k : hashMap.keySet()) {
fr.write(hashMap.get(k).getName() + "ª" + hashMap.get(k).getNum() + "ª" + hashMap.get(k).getAddress() + "ª" + hashMap.get(k).getMemo() + "ª" + hashMap.get(k).getDate() + "\n");
}
fr.close();
System.out.println("저장을 성공하였습니다");
} catch (IOException e) {
e.printStackTrace();
System.out.println("저장에 실패하였습니다");
}
}
}
//읽기메소드
//numberbook이 없으면 새로생성
//있으면 그위에 작성
public void read(String file) { //string 파일을 받아온다
Scanner sc = null;
String temp;
String[] arr;
String name, number, address, memo, date;
Detail d;
String n;
File f = new File(file);
while(true){
if (f.exists()) { //numberbook.txt이 존재한다면 그위에 작성
try {
sc = new Scanner(new FileInputStream(file));
while (sc.hasNextLine()) {
temp = sc.nextLine();
arr = temp.split(sw);
d = new Detail(arr[0], arr[1], arr[2], arr[3], arr[4]);
n = arr[1];
hashMap.put(n, d);
}
break;
} catch (FileNotFoundException e) {
e.printStackTrace();
continue;
}
} else {
try {
f.createNewFile(); //numberbook.txt가 없으면 새로생성
continue;
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
}
}
PhoneNumber.java
public class PhoneNumber {
private String phoneNumber;
public PhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
Detail.java
public class Detail {
Detail(){};
private String name;
private String address;
private String memo;
private String date;
private String num;
public Detail(String name, String num, String address, String memo, String date) {
this.name = name;
this.address = address;
this.memo = memo;
this.date = date;
this.num= num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
@Override
public String toString() {
return "이름 : "+ name +"\n연락처 : "+num+"\n주소 : "+address+"\n메모 : "+memo+"\n저장날짜 : "+date+"\n";
}
}
반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
Java,MySQL | JDBC,JDBC Driver,DBMS,Statement (0) | 2022.10.19 |
---|---|
Java,MySQL | JDBC Driver설치,JDBC API연결,Statement (0) | 2022.10.19 |
Java | Thread,동기화,join,wait,notify,notifyall (0) | 2022.10.07 |
Java | 중첩클래스,예외처리,파일처리 (0) | 2022.10.06 |
Java | 제네릭, 컬렉션프레임워크 (1) | 2022.10.05 |