图书管理系统代码

Test测试

package LibraryManagement;

import java.util.Scanner;
/
public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Users users = new Users();
        boolean flag = false;
        boolean loop = true;
        boolean loop1 = true;
        while (loop) {
            System.out.println("1:用户注册");
            System.out.println("2:用户登录");
            System.out.println("3:用户退出");
            int key = scanner.nextInt();
            scanner.nextLine();
            switch (key) {
                case 1:
                    System.out.printf("请输入你想要注册的用户名:\n");
                    // scanner.nextLine();
                    String name = scanner.nextLine();
                    System.out.printf("请输入你想要注册的用户的密码:\n");
                    String passward = scanner.nextLine();
                    InformationNode user = new InformationNode(name, passward);
                    users.register(user);
                    break;
                case 2:
                    System.out.printf("请输入你想要登录的用户名:\n");
                    //scanner.nextLine();
                    String Uname = scanner.nextLine();
                    System.out.printf("请输入你想要登录的用户的密码:\n");
                    String Upassward = scanner.nextLine();
                    users.Loogin(Uname, Upassward);
                    break;
                case 3:
                    scanner.close();
                    loop = false;
                    break;
                default:
                    break;
            }         
        }
    }
}

用户

package LibraryManagement;

import java.lang.annotation.ElementType;
import java.util.Scanner;

public class Users {
    Scanner scanner = new Scanner(System.in);
    Library library = new Library();
    private InformationNode head = new InformationNode("", "");

    public void register(InformationNode users_informationNode) {
        //因为head节点不能动,因此我们需要一个辅助遍历:定义为temp用来遍历
        InformationNode temp = head;
        boolean flag = false;
        //遍历链表,找到最后
        while (true) {
            //找到链表的最后
            if (temp.next == null) {
                break;
            }
            if (temp.next.getUser_name().equals(users_informationNode.getUser_name())) {
                flag = true;
                break;
            }
            //如果没有找到最后,将temp后移
            temp = temp.next;
        }
        //当我们退出while循环时,temp就指向了链表的最后
        if (flag) {
            System.out.printf("用户注册失败:%s 已经有该用户存在\n", users_informationNode.getUser_name());
        } else {
            temp.next = users_informationNode;
            System.out.printf("用户注册成功:%s\n", users_informationNode.getUser_name());
        }
    }

    //登录方法
    public void Loogin(String name, String passward) {
        InformationNode temp = head;
        boolean flag = false;
        boolean flag1 = false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.getUser_name().equals(name)){
                flag=true;
            }
            if (temp.next.getUser_password().equals(passward)) {
                //找到了待查看的节点
                flag1 = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            if (flag1) {
                System.out.println("登入成功");
                boolean loop1=true;
                        while (loop1) {
                System.out.println("s(show):查询所有书籍");
                System.out.println("N(show by name):根据图书名称查询书籍");
                System.out.println("n(show by numbers):根据图书编号查询书籍");
                System.out.println("a(add):添加书籍");
                System.out.println("r(revise):修改书籍");
                System.out.println("D(Delet by book name):根据图书名删除书籍");
                System.out.println("d(delet by book numbers):根据图书编号删除书籍");
                System.out.println("e(exit):退出程序");
                char keys = scanner.next().charAt(0);//接收一个字符
                switch (keys) {
                    case 's':
                        library.Look_All_Book();
                        break;
                    case 'N':
                        System.out.printf("请输入你想要查询的书籍名称:\n");
                        String lname = scanner.next();
                        library.look_book_by_names(lname);
                        break;
                    case 'n':
                        System.out.printf("请输入你想要查询的书的编号:\n");
                        scanner.nextLine();
                        if (scanner.hasNextInt()){
                            int numbers = scanner.nextInt();
                            library.look_book_by_numbers(numbers);
                            break;
                        }else {
                            System.out.println("编号输入有误,请输入整数");
                            break;
                        }
                    case 'a':
                        System.out.printf("请输入你想要添加的书籍编号:\n");
                        scanner.nextLine();
                        if (scanner.hasNextInt()){
                            int bnumbers = scanner.nextInt();
                            System.out.printf("请输入你想要添加的书籍名称:\n");
                            scanner.nextLine();
                            String bname = scanner.next();
                            System.out.println("请输入你想要添加的书籍的作者:");
                            String author = scanner.next();
                            System.out.println("请输入你想要添加的书的价格:");
                            if (scanner.hasNextInt()){
                                int price = scanner.nextInt();
                                BookNode book = new BookNode(bnumbers, bname, author, price);
                                library.add(book);
                                break;
                            }
                            else {
                                System.out.printf("价格输入有误!,请重新输入\n");
                                break;
                            }
                        }else {
                            System.out.printf("编号输入有误!,请重新输入\n");
                            break;
                        }
                    case 'r':
                        System.out.printf("请输入你想要修改的书籍编号:\n");
                        scanner.nextLine();
                        if (scanner.hasNextInt()){
                            int rnumbers = scanner.nextInt();
                            System.out.printf("请输入你想要修改的书籍名称:\n");
                            scanner.nextLine();
                            String rname = scanner.next();
                            System.out.println("请输入你想要修改的书籍的作者:");
                            scanner.nextLine();
                            String rauthor = scanner.next();
                            System.out.println("请输入你想要修改的书的价格:");
                            scanner.nextLine();
                            if (scanner.hasNextInt()){
                                int rprice = scanner.nextInt();
                                BookNode rbook = new BookNode(rnumbers, rname, rauthor, rprice);
                                library.revise(rbook);
                                break;
                            }else {
                                System.out.printf("修改的价格格式有误!,要修改请重新修改!");
                                break;
                            }
                        }else {
                            System.out.printf("编号输入有误,要修改请重新修改!");
                            break;
                        }        
                    case 'D':
                        System.out.println("请输入你想删除的书籍的名称:");
                        scanner.nextLine();
                        String dname = scanner.next();
                        library.deletebookbyname(dname);
                        break;
                    case 'd':
                        System.out.println("请输入你想要删除的书籍的编号:");
                        scanner.nextLine();
                        if (scanner.hasNextInt()){
                            int dnumbers = scanner.nextInt();
                            library.deletebookbynumbers(dnumbers);
                            break;
                        }else {
                            System.out.printf("输入的编号格式有误,要删除请重新删除!");
                            break;
                        }     
                    case 'e':
                        loop1 = false;
                        break;
                    default:
                        break;
                }


            }

            } else {
                System.out.println("密码输入错误,请重新登录");
            }
        } else {
            System.out.printf("用户名:%s,不存在\n", name);
        }
    }
}

用户信息

package LibraryManagement;

public class InformationNode {
    private String User_name;
    private String User_password;
    public InformationNode next;//指向下一个节点

    public InformationNode(String user_name, String user_password) {
        this.User_name = user_name;
        this.User_password = user_password;
    }

    public String getUser_name() {
        return User_name;
    }

    public void setUser_name(String user_name) {
        User_name = user_name;
    }

    public String getUser_password() {
        return User_password;
    }

    public void setUser_password(String user_password) {
        User_password = user_password;
    }

    @Override
    public String toString() {
        return "Users{" +
                "User_name='" + User_name + '\'' +
                ", User_password='" + User_password + '\'' +
                '}';
    }
}

图书信息类

package LibraryManagement;

public class BookNode {

    private int numbers;//图书的编号
    private String name;//图书的名称
    private String author;//图书的作者
    private int price;//图书的价格
    public BookNode next;//指向下一个节点

    public BookNode(int numbers,String name,String author,int price){
        this.numbers=numbers;
        this.name=name;
        this.author=author;
        this.price=price;
    }
    //ToString方法
    @Override
    public String toString() {
        return "BookNode{" +
                "numbers=" + numbers +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }

    //get set
    public int getNumbers() {
        return numbers;
    }

    public void setNumbers(int numbers) {
        this.numbers = numbers;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

图书类

package LibraryManagement;


//用Library来管理图书!
public class Library {
    private BookNode head = new BookNode(0, "", "", 0);//初始化头节点

    public void add(BookNode bookNode) {
        //因为头节点不能动,
        // 通过辅助指针来找到需要添加
        //temp需要找到的是需要添加节点的前一个节点!!否则插入不了!!!
        BookNode temp = head;
        boolean flag = false;//标识,添加的编号是否存在,默认为flase.
        boolean flag2 = false;//标识,添加的书名是否存在,默认为flase.
        while (true) {
            if (temp.next == null) {//说明temp已经在链表的最后了
                break;
            }                     //bookNode.numbers表示的是需要插入的书的序号
            if (temp.next.getNumbers() > bookNode.getNumbers()) {//位置找到,就在temp的后边。
                break;
            } else if (temp.next.getNumbers() == bookNode.getNumbers()) {//说明希望添加的bookNode的编号已然存在
                flag = true;//说明编号存在
                break;
            }else if (temp.next.getName().equals(bookNode.getName())) {//说明希望添加的书名的编号已然存在
                flag2 = true;//说明书名存在
                break;
            }
            temp = temp.next;//后移,遍历当前链表
        }
        //判断flag的值
        if (flag) {//不能添加,说明编号存在
            System.out.printf("准备输入的书的编号%d,已经存在不能加入\n", bookNode.getNumbers());
        } else if (flag2){
            System.out.printf("准备输入的书的书名%s,已经存在不能加入\n", bookNode.getName());
        }else {
            //插入到链表中,temp的后面(步骤2)
            bookNode.next = temp.next;
            //步骤3
            temp.next = bookNode;
            System.out.printf("添加成功\n");
        }
    }

    public void Look_All_Book() {//查询所有图书
        if (head.next == null) {
            System.out.println("没有书籍");
            return;
        }
        //因为头节点,不能动,因此我们需要一个辅助变量来遍历
        BookNode temp = head.next;
        while (true) {
            //判断是否到链表最后
            if (temp == null) {
                break;
            }
            //输出节点信息
            System.out.println(temp);
            //将next后移,一定要后移,不然是死循环
            temp = temp.next;
        }
    }
    public void look_book_by_numbers(int numbers){
        BookNode temp=head;
        boolean flag=false;//标志是否找到
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.next.getNumbers()==numbers){
                //找到了待查看的节点
                flag=true;
                break;
            }
            temp=temp.next;
        }
        //判断flag
        if (flag){
            System.out.println(temp.next);
        }else {
            System.out.printf("查看的书籍编号:%d不存在\n",numbers);
        }
    }
    public void look_book_by_names(String name){
        BookNode temp=head;
        boolean flag=false;//标志是否找到
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.next.getName().equals(name)){
                //找到了待查看的节点
                flag=true;
                break;
            }
            temp=temp.next;
        }
        //判断flag
        if (flag){
            System.out.println(temp.next);
        }else {
            System.out.printf("要查看的书籍《%s》,不存在\n",name);
        }
}
    public void deletebookbynumbers(int numbers){
        BookNode temp=head;
        boolean flag=false;//标志是否找到待删除节点
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.next.getNumbers()==numbers){
                //找到了待删除的节点的前一个节点
                flag=true;
                break;
            }
            temp=temp.next;//temp后移
        }
        //判断flag
        if (flag){//找到
            //可以删除
            temp.next=temp.next.next;
            System.out.printf("删除成功\n");
        }else {
            System.out.printf("删除的书籍编号:%d不存在\n",numbers);
        }
    }
    public void deletebookbyname(String name){
        BookNode temp=head;
        boolean flag=false;//标志是否找到待删除节点
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.next.getName().equals(name)){
                //找到了待删除的节点的前一个节点
                flag=true;
                break;
            }
            temp=temp.next;//temp后移
        }
        //判断flag
        if (flag){//找到
            //可以删除
            temp.next=temp.next.next;
            System.out.printf("删除成功\n");
        }else {
            System.out.printf("删除的书籍名称:《%s》不存在\n",name);
        }
    }
    //修改节点的信息,根据numbers编号来修改,及numbers编号不能改动。
    //根据newBookNode的no来修改
    public void revise(BookNode newbookNode){
        if (head.next==null){
            System.out.println("链表为空");
            return;
        }
        //找到需要修改的节点,根据numbers编号
        //定义一个辅助变量
        BookNode temp=head.next;
        boolean flag=false;//表示是否找到该节点
        while (true){
            if (temp==null){
                break;//链表遍历结束。
            }
            if (temp.getNumbers()== newbookNode.getNumbers()){
                //找到
                flag=true;
                break;
            }
            temp=temp.next;
        }
        //根据flag判断是否找到要修改的节点
        if (flag){
            temp.setName(newbookNode.getName());
            temp.setAuthor(newbookNode.getAuthor());
            temp.setPrice(newbookNode.getPrice());
            System.out.printf("修改成功\n");
        }else {//没有找到
            System.out.printf("没有找到编号%d的节点,不能修改\n",newbookNode.getNumbers());
        }
    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值