# 資料結構 20221024_Queue
>撰寫人[name=AmiYaku1049] [首頁--天空路1049號](https://skys-kid-lai.github.io/1004/)
>>最後編輯[time=Wed, Jan 18, 2023 8:04 PM]
___
## 題目敘述
- 請設計一個佇列結構,此結構用來記錄急診室七個診間病人的叫號順序
可選擇使用陣列、也可選擇使用串列
可使用一般佇列、也可使用環狀佇列、也可使用雙向佇列
- 病人資料
時間序號(202210240900)
身分證號碼(一碼英文+九碼數字)
連絡電話(十碼數字)
- 功能
1.新增叫號病人
2.移除結束看診之病人
3.顯示候診順序
## 程式碼
```java=
import java.io.*;
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
class ClassWork_1110832059_1024_Queue
{
private String password, phonenum, datetime;
//checking for charters and length of Date time is correct
public String MathDate(String datetime)
{
Scanner scn = new Scanner(System.in);
this.datetime = datetime;
int rite = 0;
//looking for which charter is not a number or input's length is not correct
for(int i = 0; i < datetime.length(); i++)
{
rite = datetime.charAt(i);
if((rite < 47 || rite > 58) || datetime.length() < 12)
{
System.out.println(" Format is not correct ! !\n");
System.out.print(" input yyyyddddtttt: ");
datetime = scn.next();
return MathDate(datetime);
}
}
return datetime;
}
//checking for first word and another words of ID number are correct
public String MathPass(String password)
{
Scanner scn = new Scanner(System.in);
this.password = password;
int rite = 0, sum = 0;
for(int i = 0; i < password.length(); i ++)
{
rite = password.charAt(i);
//checing for first charter is a word at english
if(i == 0 && (rite > 64 && rite < 91))
sum ++;
//checking for other of first word are number
else if(i >= 1 && (rite > 47 && rite < 58))
sum ++;
else
{
System.out.println(" Format is not correct !\n" );
System.out.print(" input ex:A123456789: ");
password = scn.next();
return MathPass(password);
}
if(password.length() != 10)
{
System.out.println(" Format is not correct !\n" );
System.out.print(" input ex:A123456789: ");
password = scn.next();
return MathPass(password);
}
}
return password;
}
//checking for length and charters of phone number are correct
public String MathPhone(String phonenum)
{
Scanner scn = new Scanner(System.in);
this.phonenum = phonenum;
int rite = 0;
//checking for length of phone number is correct
if(phonenum.length() != 10)
{
System.out.println(" Format is not correct !\n" );
System.out.print(" input 09xxxxxxxx: ");
phonenum = scn.next();
return MathPhone(phonenum);
}
//checking for charters of phone number are correct
for(int i = 0; i < phonenum.length(); i++)
{
rite = phonenum.charAt(i);
if(rite < 47 || rite > 58)
{
System.out.println(" Format is not correct !\n");
System.out.print(" input 09xxxxxxxx: ");
phonenum = scn.next();
return MathPhone(phonenum);
}
}
return phonenum;
}
//Main
public static void main(String[] args) throws IOException
{
ClassWork_1110832059_1024_Queue sequl = new ClassWork_1110832059_1024_Queue();
Queue<String> queue = new LinkedList<String>();
Scanner scn = new Scanner(System.in);
String time,password,phonenum;
while(1 == 1)
{
System.out.print("insert[n], see all[a], delete[d], over program[b]: ");
String choise = scn.next();
System.out.println();
switch(choise)
{
//Select
case "n":
if(queue.size() < 21)
{
//date
System.out.print(" input yyyyddddtttt: ");
time = scn.next();
time = sequl.MathDate(time);
queue.offer(time);
//password
System.out.print(" input ex:A123456789: ");
password = scn.next();
password = sequl.MathPass(password);
queue.offer(password);
//phone number
System.out.print(" input 09xxxxxxxx: ");
phonenum = scn.next();
phonenum = sequl.MathPhone(phonenum);
queue.offer(phonenum);
//********list.insert(time,password,phonenum); //Node
System.out.println("------------------");
}
else if(queue.size() >= 21)
{
System.out.println("List is full ! Please delete some data !");
}
System.out.println();
break;
//Watch all in queue
case "a":
System.out.println("Disp List");
//list.print(); //Node
System.out.println();
int train = 0;
for(String q : queue)
{
if(train < 3)
System.out.print(q +" ");
if(train == 3)
{
System.out.println();
System.out.print(q +" ");
train = 0;
}
train ++;
}
System.out.println("\n------------------");
System.out.println("\n");
break;
//Delete one which at queue first sit
case "d":
if(queue.peek() != null)
{
System.out.println("Delete this data now: ");
for(int i = 0; i < 3; i++)
{
//System.out.print(queue.remove() +" ");
System.out.print(queue.poll() +" ");
}
System.out.println();
}
else if(queue.peek() == null)
System.out.println("No data here now, please insert data !");
System.out.println("\n");
break;
//end program
case "b":
System.exit(1);
break;
}
}
}
}
```
## 結果圖示

## 用書資訊:
>書名:圖解資料結構 使用java(第三版)
>作者:吳燦銘、胡昭民
>出版社:博碩文化
>出版年份:2018年05月