用文件实现一个简单的系统。包括增删改查,和内容的审核

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("			河北省重大技术需求征集系统");
        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、退出");
        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 + "]";
    }
}