大家好,第一次發文
由於我做了一個學生相關用scaner輸入數據後,關掉程式再打開之後數據都會不見
想請問大家有什麼方法讓數據不會消失,執行程式後還可以對其之前的數據修改.刪除跟調查.保?存
請問我該用什麼方法來實現它呢?
因為沒有用數據庫
等於是我執行程式後輸入數據想要對數據保存,即使重新打開程式數據還是會在,也可以任意修改刪除保存!
謝謝回答
Java新手,查了很多資料自己也是實作試試看了,實在是沒辦法才上來求救!
不知道能不能寫個代碼讓我看看...
public class Client {
private String name;
private String birth;
private String address;
private String phonenumber;
private String email;
public Client(String name, String birth, String address, String phonenumber,String email) {
this.name = name;
this.birth = birth;
this.address = address;
this.phonenumber = phonenumber;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
import java.util.*;
public class ClientManager {
public static void main(String[] args) {
ArrayList<Client> clients = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while (true) {
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.print("番号を入力してください:");
String command = sc.nextLine();
switch (command) {
case "1":
addClient(clients);
System.out.println("情報を入力しました!");
break;
case "2":
deleteClient(clients);
break;
case "3":
updateClient(clients);
break;
case "4":
queryClient(clients);
break;
case "5":
System.out.println("システム終了!");
System.exit(0);
break;
default:
System.out.println("入力を間違えました!");
}
System.out.println("");
}
}
/**
* 情報を入力メソッド
*
* @param clients
*/
public static void addClient(ArrayList<Client> clients) {
System.out.println("=================顧客情報を入力============");
Scanner sc = new Scanner(System.in);
String name;
System.out.println("名前を入力してください:");
name = sc.nextLine();
System.out.println("生年月日を入力してください:");
String birth = sc.nextLine();
System.out.println("住所を入力してください:");
String address = sc.nextLine();
System.out.println("電話番号を入力してください:");
String phonenumber = sc.nextLine();
System.out.println("メールを入力してください:");
String email = sc.nextLine();
Client client = new Client(name, birth, address, phonenumber, email);
// 入力した情報を追加する
clients.add(client);
}
/**
* 情報を削除メソッド
*
* @param clients
*/
public static void deleteClient(ArrayList<Client> clients) {
System.out.println("=================情報を削除============");
while (true) {
System.out.println("削除したい名前:");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
// 名前が存在するかどうかを確認する
Boolean bool = isNameRepeat(name, clients);
if (bool) {
int i = getNamesOf(name, clients);
clients.remove(i);
System.out.println("情報が削除しました。");
break;
} else {
System.out.println("情報が存在しません。");
break;
}
}
}
/**
* 情報を修正するメソッド
*
* @param clients
*/
public static void updateClient(ArrayList<Client> clients) {
System.out.println("=================情報を修正============");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("修正したい名前:");
String name = sc.nextLine();
// 名前を存在するかどうかを確認する
Boolean bool = isNameRepeat(name, clients);
if (bool) {
int names = getNamesOf(name, clients);
// 修正したい情報を入力する
System.out.println("生年月日を入力してください:");
String birth = sc.nextLine();
System.out.println("住所を入力してください:");
String address = sc.nextLine();
System.out.println("電話番号を入力してください:");
String phonenumber = sc.nextLine();
System.out.println("メールを入力してください:");
String email = sc.nextLine();
Client newStu = new Client(name, birth, address, phonenumber, email);
clients.set(names, newStu);
System.out.println("成功しました");
break;
}else {
System.out.println("情報が存在しません。");
break;
}
}
}
/**
* 情報を調べるメソッド
*
* @param clients
*/
private static void queryClient(ArrayList<Client> clients) {
System.out.println("顧客情報:");
if (clients.size() > 0) {
System.out.println("名前\t\t生年月日\t\t住所\t\t電話番号\t\tメール");
for (int i = 0; i < clients.size(); i++) {
Client s = clients.get(i);
StringBuilder sb = new StringBuilder();
System.out.println(sb.append(s.getName()).append("\t\t").append(s.getBirth()).append("\t\t\t").append(s.getAddress()).append("\t\t").append(s.getPhonenumber()).append("\t\t\t").append(s.getEmail()));
}
} else {
System.out.println("情報が存在しない、情報を入力してください!");
}
}
/**
*
* @param name
* @param clients
* @return true
*/
public static boolean isNameRepeat(String name, ArrayList<Client> clients) {
// Array中に同じ名前を確認すること
for (int i = 0; i < clients.size(); i++) {
Client s = clients.get(i);
if (name.equals(s.getName())) {
return true;
}
}
return false;
}
/**
*
* @param name
* @param clients
* @return
*/
public static int getNamesOf(String name, ArrayList<Client> clients) {
for (int i = 0; i < clients.size(); i++) {
Client s = clients.get(i);
if (name.equals(s.getName())) {
return i;
}
}
return -1;
}
}
以上是我寫到現在的代碼
像這樣從程式中輸入進去的資料想要保存修改刪除調查(程式重啟後資料還在狀態下)
謝謝 因為不能回留言區
不好意思第一次使用 謝謝指導已修正
thecomputerpath $ java ClientManager
===========顧客情報システム===========
1. 情報を入力
2. 情報を削除
3. 情報を修正
4. 情報を調査
5. システムが終わる
番号を入力してください:1
=================顧客情報を入力============
名前を入力してください:
Ethan Hunt
生年月日を入力してください:
1977/03/05
住所を入力してください:
Impossible Mission Foundation
電話番号を入力してください:
023939889
メールを入力してください:
ethan.hunt@imf.com
情報を入力しました!
===========顧客情報システム===========
1. 情報を入力
2. 情報を削除
3. 情報を修正
4. 情報を調査
5. システムが終わる
番号を入力してください:5
システム終了!
thecomputerpath $ java ClientManager
1
===========顧客情報システム===========
1. 情報を入力
2. 情報を削除
3. 情報を修正
4. 情報を調査
5. システムが終わる
番号を入力してください:4
顧客情報:
名前 生年月日 住所 電話番号 メール
Ethan Hunt 1977/03/05 Impossible Mission Foundation 023939889 ethan.hunt@imf.com
===========顧客情報システム===========
1. 情報を入力
2. 情報を削除
3. 情報を修正
4. 情報を調査
5. システムが終わる
番号を入力してください:5
システム終了!
你需要這兩個重點動作
1.結束程式的時侯把資料存到檔案 save ArrayList to file
2.程式開始的時侯從檔案讀出資料 read ArrayList from file
我已標示在以下的程式碼中供參考
其他修改的程式碼均標示 here
請自行參考
import java.io.*; /*here*/
public class Client implements Serializable { /*here*/
private String name;
private String birth;
private String address;
private String phonenumber;
private String email;
public Client(String name, String birth, String address, String phonenumber,String email) {
this.name = name;
this.birth = birth;
this.address = address;
this.phonenumber = phonenumber;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
import java.util.*;
import java.io.*; /*here*/
public class ClientManager {
public static void main(String[] args) {
ArrayList<Client> clients = new ArrayList<>();
/* 2.read ArrayList from file */
try {
FileInputStream readData = new FileInputStream("clientdata.ser");
ObjectInputStream readStream = new ObjectInputStream(readData);
clients = (ArrayList<Client>) readStream.readObject();
System.out.println(clients.size());
readStream.close();
} catch (FileNotFoundException e) {
/* System.out.println("檔案不存在"); */
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
/* 2.read ArrayList from file */
Scanner sc = new Scanner(System.in);
while (true) {
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.print("番号を入力してください:");
String command = sc.nextLine();
switch (command) {
case "1":
addClient(clients);
System.out.println("情報を入力しました!");
break;
case "2":
deleteClient(clients);
break;
case "3":
updateClient(clients);
break;
case "4":
queryClient(clients);
break;
case "5":
writeClient(clients); /* here */
System.out.println("システム終了!");
System.exit(0);
break;
default:
System.out.println("入力を間違えました!");
}
System.out.println("");
}
}
/**
* 情報を入力メソッド
*
* @param clients
*/
public static void addClient(ArrayList<Client> clients) {
System.out.println("=================顧客情報を入力============");
Scanner sc = new Scanner(System.in);
String name;
System.out.println("名前を入力してください:");
name = sc.nextLine();
System.out.println("生年月日を入力してください:");
String birth = sc.nextLine();
System.out.println("住所を入力してください:");
String address = sc.nextLine();
System.out.println("電話番号を入力してください:");
String phonenumber = sc.nextLine();
System.out.println("メールを入力してください:");
String email = sc.nextLine();
Client client = new Client(name, birth, address, phonenumber, email);
// 入力した情報を追加する
clients.add(client);
}
/**
* 情報を削除メソッド
*
* @param clients
*/
public static void deleteClient(ArrayList<Client> clients) {
System.out.println("=================情報を削除============");
while (true) {
System.out.println("削除したい名前:");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
// 名前が存在するかどうかを確認する
Boolean bool = isNameRepeat(name, clients);
if (bool) {
int i = getNamesOf(name, clients);
clients.remove(i);
System.out.println("情報が削除しました。");
break;
} else {
System.out.println("情報が存在しません。");
break;
}
}
}
/**
* 情報を修正するメソッド
*
* @param clients
*/
public static void updateClient(ArrayList<Client> clients) {
System.out.println("=================情報を修正============");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("修正したい名前:");
String name = sc.nextLine();
// 名前を存在するかどうかを確認する
Boolean bool = isNameRepeat(name, clients);
if (bool) {
int names = getNamesOf(name, clients);
// 修正したい情報を入力する
System.out.println("生年月日を入力してください:");
String birth = sc.nextLine();
System.out.println("住所を入力してください:");
String address = sc.nextLine();
System.out.println("電話番号を入力してください:");
String phonenumber = sc.nextLine();
System.out.println("メールを入力してください:");
String email = sc.nextLine();
Client newStu = new Client(name, birth, address, phonenumber, email);
clients.set(names, newStu);
System.out.println("成功しました");
break;
}else {
System.out.println("情報が存在しません。");
break;
}
}
}
/**
* 情報を調べるメソッド
*
* @param clients
*/
private static void queryClient(ArrayList<Client> clients) {
System.out.println("顧客情報:");
if (clients.size() > 0) {
System.out.println("名前\t\t生年月日\t\t住所\t\t電話番号\t\tメール");
for (int i = 0; i < clients.size(); i++) {
Client s = clients.get(i);
StringBuilder sb = new StringBuilder();
System.out.println(sb.append(s.getName()).append("\t\t").append(s.getBirth()).append("\t\t\t").append(s.getAddress()).append("\t\t").append(s.getPhonenumber()).append("\t\t\t").append(s.getEmail()));
}
} else {
System.out.println("情報が存在しない、情報を入力してください!");
}
}
/**
1.save ArrayList to file
*/
private static void writeClient(ArrayList<Client> clients) {
try {
FileOutputStream writeData = new FileOutputStream("clientdata.ser");
ObjectOutputStream writeStream = new ObjectOutputStream(writeData);
writeStream.writeObject(clients);
writeStream.flush();
writeStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @param name
* @param clients
* @return true
*/
public static boolean isNameRepeat(String name, ArrayList<Client> clients) {
// Array中に同じ名前を確認すること
for (int i = 0; i < clients.size(); i++) {
Client s = clients.get(i);
if (name.equals(s.getName())) {
return true;
}
}
return false;
}
/**
*
* @param name
* @param clients
* @return
*/
public static int getNamesOf(String name, ArrayList<Client> clients) {
for (int i = 0; i < clients.size(); i++) {
Client s = clients.get(i);
if (name.equals(s.getName())) {
return i;
}
}
return -1;
}
}
有沒有資料庫都無所謂,我用JSON檔也一樣能管理資料,只要資料量不是大到DICTIONARY / LIST會推不動,就行
JSON檔要大到什麼地步才會"推不動"?我試過,2GB以內,不超過16層深度,基本上都推的動
什麼語言能用JSON?
C#、PYTHON、JAVASCRIPT、VB.net、GO、PHP、...........(我想不出來哪個語言不行了)