4、功能要求:
(1)需要在程序開始的注釋中注明班級、學號、姓名。(1 分)
(2)程序開始運行顯示登錄界面(5 分)
提示用戶按照下列格式依次輸入用戶名和密碼:
Username:
Password:
用戶名和密碼全部正確,進入系統主界面,如果用戶名錯誤:拋出異常提
示“用戶名錄入錯誤”;密碼錯誤,拋出異常提示“密碼錄入錯誤”,如果密碼
錄入三次錯誤,拋出異常提示“該用戶三次錄入錯誤,已被系統鎖定”。
正確的用戶名和密碼事前保存在用戶 user.txt 文件中(2 分)。
(3)登錄成功后,進入系統主界面。(5 分)
第 4 頁 共 6 頁
定義一個輸入界面如下圖所示,選擇相應的數字執行相應的功能
***************************************************************
河北省重大技術需求征集系統
****************************************************************
1、 錄入技術需求信息;
2、 刪除技術需求信息;
3、 審核技術需求信息
4、 顯示技術需求信息
5、 查詢技術需求信息
6、 統計技術需求信息;
****************************************************************
(4)定義 addInformation (infonumber,infoname,infocontent,
infosum,infostate,infoyear)方法錄入一條技術需求信息。(5 分)
錄入格式如下所示:
當前的技術需求信息編號為:001(根據數據文件中的最大編號自動加 1,
如果信息文件為空,則編號為 001)
技術需求名稱:
技術需求內容: (如果錄入字符超過 20 個,則拋出異常提示用戶“錄入內
容超過最大字符限制”,不允許顯示下一個錄入項)
技術需求投資金額:(允許用戶錄入浮點數)
技術需求年份: (需要判斷技術需求年份大於等於當前年份 2016,否則拋
出異常提示“技術需求年份不對”)
技術需求狀態不需要錄入,直接缺省為 0 即未審核狀態。
數據文件存儲在 TechInformation.txt 數據文件中(3 分) 。
文件中存儲的內容如下表所示:
第 5 頁 共 6 頁
(5)定義 deleteInformation(infonumber)方法刪除一條技術需求信
息;(2 分)
(6)定義 examInfomation (infonumber)方法審核技術需求信息; (5 分)
如果該編號信息狀態為 1,則提示用戶“該信息已通過審核”,提示用
戶輸入新的編號,用戶輸入編號為 000,則返回主界面;
如果該編號信息狀態為 2,則提示用戶“該信息已被退回”,提示用戶輸
入新的編號,用戶輸入編號為 000,則返回主界面;
如果該編號信息狀態為 0,則顯示下面操作界面:
***************************************************************
審核技術需求信息
****************************************************************
1、 返回主界面;
2、 通過審核;
3、 退回審核;
技術需求編號:
技術需求名稱:
技術需求內容:
技術需求投資金額;
技術需求年份:
****************************************************************
選擇 1:返回系統主界面;
選擇 2:修改該編號的需求狀態,將狀態由 0 改為 1,其余不變;
選擇 3:修改該編號的需求狀態,將狀態由 0 改為 2,其余不變;。
(7)定義 showInforamtion()方法打印顯示所有的技術需求信息; (3
分)
第 6 頁 共 6 頁
(8)定義 selectInforamtion()查詢該條技術需求信息的詳細內容。 (2
分)
提示用戶輸入技術需求信息編號:
根據輸入編號,顯示該條技術信息的詳細內容。(需求狀態為 0 時
顯示“未審核”,1 時顯示“通過審核”,2 時顯示“未通過審核”)
(9)定義 countInformation()方法統計需求信息征集。(3 分)
按照下列格式分別顯示三種狀態的需求信息數量。
未審核的需求信息:
通過審核的需求信息: 未通過審核的需求信息
package Demo; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; public class ceshi1 { static String username,password; static int n=0,c=0; static Scanner scan=new Scanner(System.in); static Infomation []a1=new Infomation[100]; static userinfo []a2=new userinfo[100]; public static void main(String[] args) throws IOException { caozuo(); } public static void caozuo() throws IOException { //輸入賬號,如果賬號輸入錯誤,就進入循環,直到輸入正確為止。 //賬戶密碼設計用文件存儲,暫時不采用嵌套的try catch ,賬戶輸入正確后才能輸入密碼。 read1();//讀入存取賬戶密碼的內容 //驗證賬號。賬號錯誤會一直循環下去 int z3=0,z4=0; char ch4='a'; while(ch4=='a') { System.out.println("請選擇是注冊還是登陸,1是注冊,2是登陸");//對內容增加注冊功能,可以實現多個賬號登錄 int m1=scan.nextInt(); if(m1==1) { System.out.println("請輸入需要注冊的賬號"); String m2=scan.next(); int z1=0; for(int i=0;i<c;i++) { if(a2[i].username.equals(m2)) { z1++; System.out.println("注冊失敗,該用戶名已存在"); } } if(z1==0) { System.out.println("請輸入密碼"); String m3=scan.next(); System.out.println("請再次輸入密碼"); String m4=scan.next(); if(m3.equals(m4)) { c++; a2[c-1]=new userinfo(m2,m3); write1(); } else { System.out.println("兩次密碼不一致"); } } } else { try{ System.out.println("請輸入賬號"); String s1=scan.next(); for(int i=0;i<c;i++) { if(a2[i].username.equals(s1)) { z3++; z4=i; } } if(z3==0)//如果賬號不對,拋出異常,開始循環 { throw new Exception("賬號輸入錯誤"); } else { ch4='b';//退出這個循環 } } catch(Exception w) { System.out.println(w); } } } //驗證密碼,密碼只允許錯誤3次 char ch1='a'; try{ System.out.println("請輸入密碼"); String s2=scan.next(); if(!s2.equals(a2[z4].password)) { throw new Exception("密碼輸入錯誤"); } else { ch1='b'; } } catch(Exception e) { int m=1;//用m來記錄密碼錯誤的次數。 System.out.println(e); while(ch1=='a') { System.out.println("請重新輸入密碼"); String s2=scan.next(); if(s2.equals(a2[z4].password)) { ch1='b'; } else { try{ if(m>=2) { throw new Exception("密碼輸入錯誤3次,已被系統鎖定"); } else { m++; } } catch(Exception e1) { System.out.println(e); return; } } } } //進入主系統 char ch2='a'; while(ch2=='a') { ch2=menu(ch2); } } public static char menu(char ch2) throws IOException{//主界面 System.out.println("****************************************************************"); System.out.println("\t\t\t河北省重大技術需求征集系統"); System.out.println("****************************************************************"); System.out.println("\t\t\t1、 錄入技術需求信息"); System.out.println("\t\t\t2、 刪除技術需求信息"); System.out.println("\t\t\t3、 審核技術需求信息"); System.out.println("\t\t\t4、 顯示技術需求信息"); System.out.println("\t\t\t5、 查詢技術需求信息"); System.out.println("\t\t\t6、 統計技術需求信息"); System.out.println("\t\t\t7、退出"); System.out.println("****************************************************************"); System.out.print("請輸入:"); int p = scan.nextInt(); switch(p){ case 1: { addInfo(); break; } case 2: { deleteInfo(); break; } case 3: { examInfo(); break; } case 4: { showInfo(); break; } case 5: { selectInfo(); break; } case 6: { countInfo(); break; } case 7: { ch2='c'; break; } default: { System.out.println("輸入錯誤!"); } } return ch2; } public static void addInfo() throws IOException{//添加信息功能 read(); System.out.println("請輸入需要添加的信息"); String s1=scan.next(); String s2=scan.next(); double s3=scan.nextDouble(); int s4=scan.nextInt(); n++; a1[n-1]=new Infomation(s1,s2,s3,0,s4); write(); } public static void deleteInfo() throws IOException{//刪除信息功能 System.out.println("請輸入想要刪除的編號"); String s1=scan.next(); read(); int m=0,z=0; for(int i=0;i<n;i++) { if(a1[i].getInfonumber().equals(s1)) { m++; z=i; } } if(m==0) { System.out.println("不存在這個人"); } else { if(n==1) { n=0; } else { for(int j=z-1;j>z;j--) { a1[j-1]=a1[j]; } } n--; write(); } } public static void examInfo() throws IOException{//審核信息功能 read(); char ch3='a'; while(ch3=='a')//使用while循環實現多次信息的審核。 {//不管審核是否成功,或者是否通過審核,都應該有選擇是否再次審核的提示語句,這樣才能減少對鼠標的使用,只用鍵盤的小鍵盤即可。 System.out.println("請輸入需要審核的編號"); String m=scan.next(); int m1=0,k=0; for(int i=0;i<n;i++) { if(a1[i].getInfonumber().equals(m)) { k=i; m1++; break; } } if(m1==1) { if(a1[k].getInfostate()==1) { System.out.println("該信息已通過審核"); System.out.println("請選擇繼續審核還是返回主界面,如果返回主界面就輸入000"); String m2=scan.next(); if(m2.equals("000")) { ch3='b' ; } } else if(a1[k].getInfostate()==2) { System.out.println("該信息已被退回"); System.out.println("請選擇繼續審核還是返回主界面,如果返回主界面就輸入000"); String m2=scan.next(); if(m2.equals("000")) { ch3='b' ; } } else { System.out.println("**************************"); System.out.println("審核技術需求信息"); System.out.println("**************************"); System.out.println("1.返回主界面"); System.out.println("2.通過審核"); System.out.println("3.退回審核"); System.out.println("技術需求編號"+a1[k].getInfonumber()); System.out.println("技術需求名稱"+a1[k].getInfoname()); System.out.println("技術需求內容"+a1[k].getInfocontent()); System.out.println("技術需求投資金額"+a1[k].getInfosum()); System.out.println("技術需求年份"+a1[k].getInfoyear()); System.out.println("***************************"); int m4=scan.nextInt(); if(m4==1) { ch3='b'; return ; } else if(m4==2) { a1[k].setInfostate(1); } else { a1[k].setInfostate(2); } System.out.println("審核完成"); write(); System.out.println("請選擇繼續審核還是返回主界面,如果返回主界面就輸入000"); String m2=scan.next(); if(m2.equals("000")) { ch3='b' ; } } } else { System.out.println("不存在這個編號"); System.out.println("請選擇繼續審核還是返回主界面,如果返回主界面就輸入000"); String m2=scan.next(); if(m2.equals("000")) { ch3='b' ; } } } } public static void showInfo() throws IOException{//顯示信息。便於用戶查看。 read(); String m=""; for(int i=0;i<n;i++) { if(a1[i].getInfostate()==0) { m="未審核"; } else if(a1[i].getInfostate()==1) { m="已通過"; } else { m="未通過審核"; } System.out.println(a1[i].toString()+m); } } public static void selectInfo() throws IOException{//查詢信息功能 System.out.println("請輸入需要查詢的序號"); String s1=scan.next(); int z=0; String m=""; for(int i=0;i<n;i++) { if(s1.equals(a1[i].getInfonumber())) { z++; if(a1[i].getInfostate()==0) { m="未審核"; } else if(a1[i].getInfostate()==1) { m="已通過"; } else { m="未通過審核"; } System.out.println(a1[i].toString()+m); } } if(z==0) { System.out.println("不存在這個人"); } } public static void countInfo() throws IOException{//統計功能 System.out.println("未審核的人"); int m1=0,m2=0,m3=0; for(int i=0;i<n;i++) { if(a1[i].getInfostate()==0) { System.out.println(a1[i].toString()); m1++; } } System.out.println("通過審核的人"); for(int i=0;i<n;i++) { if(a1[i].getInfostate()==1) { m2++; System.out.println(a1[i].toString()); } } System.out.println("未通過審核的人"); for(int i=0;i<n;i++) { if(a1[i].getInfostate()==2) { m3++; System.out.println(a1[i].toString()); } } System.out.println("未審核的人有"+m1+"個人"); System.out.println("通過審核的人有"+m2+"個人"); System.out.println("未通過審核的人有"+m3+"個人"); } static void read1() throws FileNotFoundException//讀取賬戶密碼等信息 { Scanner in=new Scanner(new FileReader("user.txt")); c=Integer.parseInt(in.nextLine()); for(int i=0;i<c;i++) { a2[i]=new userinfo(); a2[i].readdata(in); } in.close(); } static void write1() throws IOException//對用戶賬號密碼的存取 { PrintWriter out=new PrintWriter(new FileWriter("user.txt")); out.println(c); for(int i=0;i<c;i++) { a2[i].writedata(out); } out.close(); } public static void read() throws IOException {//寫文件 Scanner in = new Scanner(new FileReader("TechInfomation.txt")); n = Integer.parseInt(in.nextLine()); System.out.println(n); for(int i = 0;i < n;i++){ a1[i]=new Infomation();//注意在讀取的時候要開辟好空間 a1[i].readData(in); } in.close();//注意關閉文件流 } public static void write() throws IOException{//讀文件 PrintWriter out = new PrintWriter(new FileWriter("TechInfomation.txt")); out.println(n); for(int i = 0;i < n;i++){ out.print("00"+(i+1)+" "); a1[i].writeData(out); } out.close(); } } class Infomation{//信息類 private String infonumber,infoname,infocontent; private double infosum; private int infostate,infoyear; public Infomation(){ } public Infomation(String infoname, String infocontent,double infosum, int infostate, int infoyear) { this.infoname = infoname; this.infocontent = infocontent; this.infosum = infosum; this.infostate = infostate; this.infoyear = infoyear; } public String getInfonumber() { return infonumber; } public void setInfonumber(String infonumber) { this.infonumber = infonumber; } public String getInfoname() { return infoname; } public void setInfoname(String infoname) { this.infoname = infoname; } public String getInfocontent() { return infocontent; } public void setInfocontent(String infocontent) { this.infocontent = infocontent; } public double getInfosum() { return infosum; } public void setInfosum(double infosum) { this.infosum = infosum; } public int getInfostate() { return infostate; } public void setInfostate(int infostate) { this.infostate = infostate; } public int getInfoyear() { return infoyear; } public void setInfoyear(int infoyear) { this.infoyear = infoyear; } public void writeData(PrintWriter out){ out.println(infoname + " " + infocontent + " " + infosum + " " + infostate + " " + infoyear); } public void readData(Scanner in){ infonumber = in.next(); infoname = in.next(); infocontent = in.next(); infosum = Double.parseDouble(in.next()); infostate = Integer.parseInt(in.next()); infoyear = Integer.parseInt(in.next()); } @Override public String toString() { return "Infomation [infonumber=" + infonumber + ", infoname=" + infoname + ", infocontent=" + infocontent + ", infosum=" + infosum + ", infostate=" + infostate + ", infoyear=" + infoyear + "]"; } } class userinfo{//用戶登錄 String username,password; userinfo(){} userinfo(String u,String p) { username=u; password=p; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } void writedata(PrintWriter out) { out.println(username+" "+password); } void readdata(Scanner in) { username=in.next(); password=in.next(); } @Override public String toString() { return "userinfo [username=" + username + ", password=" + password + "]"; } }
