データ構造 - コースデザイン

/* 电子投票系统
本项目功能多,可以由2-3名同学合作完成。鼓励同学合作进行开发,可获得各10分的加分,但答辩时,要明确分出各自的工作。由1人完成时,可以自行去除其中的一些非核心功能。
投票人主要功能如下:
(1)投票人输入要选举的候选人编号,即可完成投票。
(2)投票人可以浏览候选人列表、输入序号查询候选人介绍。
管理员的主要功能如下:
(1)初始化候选人信息:在系统投入使用前需要先将需要投票选举的候选人信息录入系统中,以便投票和查看。管理员的初始化工作就是将候选人的序号、姓名和简介录入系统。
(2)浏览候选人简介:为随时掌握候选人的信息,以便进行修改,管理员有权浏览候选人简介。浏览的顺序按照候选人序号即可。
(3)修改候选人简介:当系统更新或候选人信息有所变化时,输入候选人序号对其信息进行修改。
(4)查询投票情况:管理员有权查询当前各个候选人得票情况,以便得出最终被选出的候选人信息。
(5)清除投票信息:当投票工程结束后,管理员选择清除投票信息即清除系统中所有候选人的票数,使之归零。
(6)管理员可以对投票人进行管理,投票人只有用管理员规定的用户名和密码才能进入系统进行投票。管理员还可以更改用户名、密码和权限,并对投票人信息进行增加、删除、查询、排序和初始化等操作。
*/
import java.util.*;
import java.io.*;`
public class VoteSystem
{   static Administrator dir2=new Administrator();
    static votemansystem dir1=new votemansystem();
    static safety dir3=new safety();
    static Scanner In=new Scanner(System.in);
    public static void main(String[] args) 
    {
        
        //安全监测
        System.out.println("电子投票系统");
        System.out.println("==请选择进入方式:==");
        System.out.println("==1.投票人 2.管理员==");
        int mi_select=In.nextInt();
        while(flag){
            if(mi_select==1||mi_select==2){
                flag=false;
            switch(mi_select){
                case 1:
                    dir3.user_certification();//用户验证
                    break;
                case 2:
                    dir3.administrator_certification();//管理员验证
                    break;
                case 3:
                    break;
            }
            }
            else{
                System.out.println("");
                System.out.println("您的输入不合法,请重新输入");
                }
        //进入系统
        System.out.println("~~~欢迎进入电子投票系统~~~");
        while(true){
        
        int in_num=In.nextInt();
        if(in_num==1||in_num==2){
        switch(in_num){
            case 1:
                voteman_manu();
            break;
            case 2:
                Administrator_manu();
            break;
            default:break;
        }
        }
        else{
            System.out.println("您的输入不合法,请重新输入");
        }
        }
        
    }

    public static void Administrator_manu(){
        Scanner In=new Scanner(System.in);
        //Administrator dir2=new Administrator();
        boolean flag=true;
        while(flag){
            System.out.println("请输入要查询的管理员功能序号:");
            System.out.printf("1.初始化候选人信息\n2.浏览候选人简介\n3.修改候选人简介\n4.查询投票情况\n5.清除投票信息\n6.退出管理员系统\n");
            switch(In.nextInt()){
            case 1: 
                dir2.Initialize_message();
            break;
            case 2:
                System.out.println("请输入要查询的选手序号:");
                dir2.visit_message(In.nextLong());
            break;
            case 3: 
                System.out.println("请输入要修改的选手序号:");
                dir2.modify_message(In.nextLong());
            break;
            case 4: 
                dir2.getmaxvote();
            break;
            case 5: 
                dir2.clearvote();
            break;
            case 6:
                flag=false;
            break;
            default: break;
            }
        }
    }

    public static void voteman_manu(){
        Scanner In=new Scanner(System.in);
        //votemansystem dir1=new votemansystem();
        boolean flag=true;
        while(flag){
            System.out.println("请输入要查询的投票人功能序号:");
            System.out.println("1.浏览候选人列表 2.输入序号查询候选人介绍 3.退出投票人系统");
            switch(In.nextInt()){
            case 1: 
                dir1.show_all_message();
            break;
            case 2:
                System.out.println("请输入要查询的选手序号:");
                dir1.show_single_message(In.nextLong());
            break;
            case 3:
                flag=false;
            break;
            default: break;
            }
        }
    }
}
class votemansystem  extends Administrator
{
    long num;
    String name;
    String sex;
    String status;//职业
    int sumOfvote;
    votemansystem next;
    //votemansystem root;
    //Scanner In=new Scanner(System.in);

    public votemansystem(long num,String name,String sex,String status,int sumOfvote){
        this.num=num;
        //System.out.println("this.num="+num);
        this.name=name;
        this.sex=sex;
        this.status=status;
        this.sumOfvote=sumOfvote;
    }
    public votemansystem(){
    }
    public void vote(){
        Scanner In=new Scanner(System.in);
        System.out.println("请输入您想投的选手序号:");
        long s_num=In.nextLong();//s_num为:选手序号
        votemansystem issearch=search(s_num);
        if(issearch!=null){//先查找,不在则提示,在则加票
            System.out.println("该选手不存在,请重新输入:");
        }
        else{
            issearch.sumOfvote++;
            System.out.println("投票成功!");
        }
    }
    
    public void show_all_message(){
        //System.out.println("成功");
        //System.out.println(root);
        votemansystem p=super.root;//不用super也可以
        while(p!=null){
            System.out.println("序号:"+p.num+" 姓名:"+p.name+" 性别:"+p.sex+" 职业:"+p.status+" 票数为:"+p.sumOfvote);
            p=p.next;
        }
        if(root==null){
            System.out.println("没有选手数据");
        }
    }
    public void show_single_message(long ss_num){
        votemansystem p=root;
        while(p!=null){
            if(ss_num==p.num){
            System.out.println("序号:"+p.num+" 姓名:"+p.name+" 性别:"+p.sex+" 职业:"+p.status+" 票数为:"+p.sumOfvote);
            }
            p=p.next;
        }
        System.out.println("该选手不存在");
    }

}

class Administrator
{   Scanner In=new Scanner(System.in);
    public static votemansystem root;//必须加static 才能和子类共享
    public Administrator(){
    }
    public votemansystem search(long s_num){
        
        votemansystem p=root;
        while(p!=null){
            if(s_num==p.num){
                return p;
            }
            p=p.next;
        }
        return null;
    }
    public  void Initialize_message(){//初始化数据
        Scanner In=new Scanner(System.in);
        //root=null;
        votemansystem p=null;
        p=root;
        boolean flag=true;
        while(flag){
            System.out.println("是否继续添加数据:y:是  n:否");
            String judge=In.nextLine();
            if(judge.equals("y")){
                System.out.println("请按照格式录入投票者信息:序号-姓名-性别-职业-票数");
                    long num=In.nextLong();
                    In.nextLine();//吃掉"\n"
                    String name=In.nextLine();
                    String sex=In.nextLine();
                    String status=In.nextLine();//职业
                    int sumOfvote=In.nextInt();
                    In.nextLine();//吃掉"\n"
                    //System.out.println("数据添加完毕");
                if(root==null){
                    votemansystem node=new votemansystem(num,name,sex,status,sumOfvote);
                    System.out.println("num="+num);
                    p=node;
                    root=node;
                    root.next=null;
                }
                else{
                    votemansystem node=new votemansystem(num,name,sex,status,sumOfvote);
                    p.next=node;
                    p=p.next;
                    p.next=null;
                }
            }
            else if(judge.equals("n")){
                flag=false;
                System.out.println("==添加用户信息退出==");
            }
            else{
                System.out.println("输入不正确,请重新输入:");
            }
        }
    }
    public void visit_message(long ss_num){
        votemansystem p=root;
        while(p!=null){
            if(ss_num==p.num){
            System.out.println("序号:"+p.num+" 姓名:"+p.name+" 性别:"+p.sex+" 职业:"+p.status+" 票数为:"+p.sumOfvote);
            return ;
            }
            p=p.next;
        }
            System.out.println("该选手不存在");
    }
    public void modify_message(long sss_num){
        votemansystem p=root;
        System.out.println("请按照格式修改投票者信息:序号-姓名-性别-职业-票数");
        //votemansystem pre=root;
        long num=In.nextLong();
        In.nextLine();//吃掉"\n"
        String name=In.nextLine();
        String sex=In.nextLine();
        String status=In.nextLine();//职业
        int sumOfvote=In.nextInt();
        In.nextLine();//吃掉"\n"
        votemansystem node=new votemansystem(num,name,sex,status,sumOfvote);
        node.next=null;
        if(root.num==sss_num){
            node.next=root.next;
            root=node;
        }
        else{
        while(p.next!=null){
            if(p.next.num==sss_num){
                p.next=node;
                node.next=p.next.next;
            }
        }
        System.out.println("该选手不存在");
    }
    }
    public void getmaxvote(){
        votemansystem p=root;
        int max=-1;
        long s_num=-1;
        while(p!=null){
            System.out.println(p.num+"号选手的票数为:"+p.sumOfvote);
            if(p.sumOfvote>max){
                max=p.sumOfvote;
                s_num=p.num;
            }
            p=p.next;
        }
        System.out.println("~~票数最多的选手为"+s_num+",总票数为:"+max);
    }
    public void clearvote(){
        votemansystem p=root;
        while(p!=null){
            p.sumOfvote=0;
            p=p.next;
            }
        System.out.println("==票数重置完毕==");
        }
}
class safety
{
    public safety(){
    }
    public void user_certification(){
        System.out.println("请输入用户账号":);
        String user_count=In.nextLine();
        File file = new File("D:/safety/safe.txt");
        char[] tempchars = new char[30];
        Reader in = null;
        try {
            in = new InputStreamReader(new FileInputStream(file),"utf8");
            int i = 0;
            while ((i = in.read(tempchars)) != -1) {
                System.out.print(tempchars);
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
    }
}

おすすめ

転載: www.cnblogs.com/DongChenYi/p/12025074.html