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 + "]"; } }