欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:【javaSE】圖書管理系統(tǒng)

柚子快報(bào)激活碼778899分享:【javaSE】圖書管理系統(tǒng)

http://yzkb.51969.com/

??????前言~拾???

hellohello~,大家好??,這里是E綿綿呀???,如果覺得這篇文章還不錯(cuò)的話還請(qǐng)點(diǎn)贊????收藏????關(guān)注??,如果發(fā)現(xiàn)這篇文章有問題的話,歡迎各位評(píng)論留言指正,大家一起加油!一起chin up!???

?個(gè)人主頁:E綿綿的博客 ?所屬專欄:JAVASE題目練習(xí)??JAVASE知識(shí)點(diǎn)專欄??c語言知識(shí)點(diǎn)專欄? ?c語言題目練習(xí)

? ? ? 現(xiàn)在我們將把之前學(xué)過的知識(shí)點(diǎn)總結(jié)做成一個(gè)小項(xiàng)目?,叫圖書管理系統(tǒng),來看一下吧。?

?設(shè)計(jì)思路

?我們?cè)谠O(shè)計(jì)系統(tǒng)前要遵循面向?qū)ο蟮脑瓌t:

1.找到對(duì)象

2.創(chuàng)建對(duì)象

3.使用對(duì)象

所以我們需要先理清自己的思緒,想明白需要?jiǎng)?chuàng)建的對(duì)象和需要實(shí)現(xiàn)的功能。

?

1. 首先,想清楚系統(tǒng)的界面。系統(tǒng)對(duì)于圖書管理員來說是管理系統(tǒng),對(duì)于普通用戶來說是服務(wù)系統(tǒng)。所以我們針對(duì)管理員和普通用戶所展示的界面是不同的。

?2.書的屬性有書名,作者,價(jià)格,類型,是否被借出。所以我們可以將書的屬性進(jìn)行封裝,同時(shí)設(shè)置一個(gè)書架類,用于存放書籍。設(shè)置一個(gè)書的數(shù)組可以解決。

3.管理員界面上,我們可以添加書籍,查找書籍,刪除書籍,顯示書籍和退出系統(tǒng)。

4.普通用戶界面上,我們可以查找書籍,借閱書籍,歸還書籍和退出系統(tǒng)。

5.所以我們可以將這些操作封裝起來,設(shè)計(jì)成單獨(dú)的類,但可以通過一些操作將這些功能分成兩部分。

書籍和書架

? ????首先我們面對(duì)對(duì)象時(shí),找對(duì)象書肯定是一個(gè)對(duì)象,所以我們創(chuàng)建跟書有關(guān)的對(duì)象,如書和書架?,F(xiàn)在我們就先來創(chuàng)建這兩個(gè)對(duì)象吧:

書(Book)

????我們創(chuàng)建一個(gè)book的包,用于存放與書有關(guān)的類。根據(jù)上述思路,我們可以在Book包中創(chuàng)建一個(gè)Book的類和一個(gè)Booklist (書架) 的類。首先創(chuàng)建一個(gè)book類,在book中寫入書的有關(guān)屬性,書名 (name) ,作者 (author) ?,價(jià)格 (price) ?,類型 (type) 以及是否被借出。我們通過封裝,將屬性前的訪問修飾符設(shè)置為private權(quán)限,然后通過提供相應(yīng)的get方法和set方法以及一個(gè)不包含是否被借出的構(gòu)造方法(我們將是否被借出屬性的類型設(shè)置為boolean,因?yàn)锽oolean類型默認(rèn)為false,所以可以不初始化),然后通過快捷鍵提供相應(yīng)的toString方法的重寫。

注意這些方法很多都能通過快捷鍵去生成,代碼如下:

public class Book {

private String name;

private String author;

private String type;

private int price;

private boolean isborrowed;

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 String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

之所以用private修飾其書的屬性,是為了體現(xiàn)書的密封性(書架中的屬性也同理)

書架(BookList)

??我們首先設(shè)置一個(gè)private權(quán)限的Book數(shù)組books,同時(shí)設(shè)置一個(gè)usedSize的變量,用于記錄當(dāng)前書架上存放了多少本書。我們寫一個(gè)BookList的構(gòu)造方法,同時(shí)將數(shù)組的長(zhǎng)度初始化為10,然后通過快捷鍵設(shè)置userSize的getter and setter方法。注意不要使用編譯器生成的Book數(shù)組books的getter and setter 方法,因?yàn)樗槍?duì)的是books數(shù)組,并不是針對(duì)數(shù)組中存放的書,那并不是我們想要的。所以我們單獨(dú)設(shè)置一個(gè)名為pos的數(shù)組下標(biāo)參數(shù),在getter方法中返回books的數(shù)組下標(biāo)pos,在setter方法中,我們將 books數(shù)組的pos下標(biāo)設(shè)置為一本書 。這樣就能通過這兩個(gè)方法去訪問該數(shù)組的書成員。

現(xiàn)在請(qǐng)看以下代碼:

public class BookList {

private Book[] books;

private int usedsize;//書架上目前存放的書量

public BookList() {

this.books=new Book[10];

usedsize=4;

this.books[0] = new Book("三國(guó)演義","羅貫中",20,"小說");

this.books[1] = new Book("西游記","吳承恩",9,"小說");

this.books[2] = new Book("紅樓夢(mèng)","曹雪芹",19,"小說");

this.books[3]=new Book("Java","xx",18,"學(xué)習(xí)資料");

}

public int getUsedsize() {

return usedsize;

}

public void setUsedsize(int usedsize) {

this.usedsize = usedsize;

}

public Book getBook(int i){

return books[i];

}

public void setBook(int i,Book book){

books[i]=book;

}

}

這里的屬性也是用private修飾,呈封裝性。

?用戶

???除此之外,除了書是對(duì)象,圖書管理系統(tǒng)也要人使用對(duì)吧,所以人也是個(gè)對(duì)象。并且因?yàn)樯矸莸牟煌?,分為普通用戶和管理員。而又因?yàn)槎际侨?,所以?huì)有一些相同點(diǎn)。所以我們就創(chuàng)建一個(gè)子類user ,兩個(gè)父類。

user(用戶抽象類)(子類)?

??在普通用戶和管理員用戶中存在許多共性,因此我們這里設(shè)置一個(gè)抽象類供普通用戶和管理員用戶來繼承使用,并且將其變?yōu)槌橄箢惛奖憷^承。

abstract public class User {

protected String name;

protected IOperation[] iOperations;

abstract public int menu();

public User(String name) {

this.name = name;

}

public void useoperation(int choice,BookList bookList){

IOperation iOperation = iOperations[choice];

iOperation.work(bookList);

}

}

?管理員類(Administrator)

??我們?cè)O(shè)置管理用戶的菜單,再對(duì)應(yīng)著菜單在構(gòu)造方法中設(shè)置接口類型的數(shù)組的具體操作

?

public class Administrator extends User{

public Administrator(String name) {

super(name);

iOperations = new IOperation[]{

new ExitOperation(),

new FindOperation(),

new AddOperation,

new DeleteOperation(),

new ShowOperation()

};

}

@Override

public int menu() {

System.out.println("********管理員菜單********");

System.out.println("1.查找圖書");

System.out.println("2.新增圖書");

System.out.println("3.刪除圖書");

System.out.println("4.顯示圖書");

System.out.println("0.退出系統(tǒng)");

System.out.println("************************");

System.out.println("請(qǐng)輸入你的操作:");

Scanner scanner = new Scanner(System.in);

int choice = scanner.nextInt();

return choice;

}

}

?

?普通用戶(NormalUser)

??它和管理員類的操作大致相同,這里就不過多講述了,直接上代碼

?

public class NormalUser extends User {

public NormalUser( String name){

super(name);

iOperations=new IOperation[] {

new ExitOperation(),

new FindOperation(),

new BorrowOperation(),

new RetrunOperation()

};

}

public int menu() {

System.out.println("********普通用戶菜單********");

System.out.println("1.查找圖書");

System.out.println("2.借閱圖書");

System.out.println("3.歸還圖書");

System.out.println("0.退出系統(tǒng)");

System.out.println("***************************");

System.out.println("請(qǐng)輸入你的操作");

Scanner scanner=new Scanner(System.in);

int choice=scanner.nextInt();

return choice;

}

}

?

?對(duì)書籍的相關(guān)操作

????我們知道面對(duì)對(duì)象分為三步,最后一步是使用對(duì)象,而這里就是對(duì)于對(duì)象的使用。其中有很多操作,我們來看一下吧。

操作接口(IOperation)

????所有的操作都是要對(duì)于書架進(jìn)行操作的,所以我們?cè)谶@里提供一個(gè)接口供不同操作來實(shí)現(xiàn),并且給他們傳入書架類的參數(shù),代碼如下:

?

public interface IOperation {

public void work(BookList bookList);

}

?

?借閱圖書(BorrowOperation)

????首先,我們需要讓用戶輸入想要借閱的圖書的名字,然后我們挨個(gè)遍歷書架上的書,如果有,那就可以借,將書籍的借閱狀態(tài)改為true就可以,如果沒有就告訴用戶沒有此書,無法借閱。

public class BorrowOperation implements IOperation{

@Override

public void work(BookList bookList) {

System.out.println("該操作進(jìn)行中,請(qǐng)輸入要借閱的書");

Scanner scanner=new Scanner(System.in);

String name =scanner.nextLine();

for (int i = 0; i < bookList.getUsedsize() ; i++) {

if ((bookList.getBook(i).getName()).equals(name)){

if(bookList.getBook(i).getIsborrowed()==true) {

System.out.println("該書已被借出,現(xiàn)在沒有這本書");

return;

}else {

System.out.println("該書借出后請(qǐng)及時(shí)歸還");

bookList.getBook(i).setIsborrowed(true);

return;

}

}

if(i== bookList.getUsedsize()-1){

System.out.println("未查找到該書");

}

}

}

}

歸還圖書(ReturnOperation)

?????和借閱圖書思路相似,這里不多說了。直接上代碼:

public class RetrunOperation implements IOperation {

@Override

public void work(BookList bookList) {

System.out.println("該操作進(jìn)行中,請(qǐng)輸入要?dú)w還的書");

Scanner scanner=new Scanner(System.in);

String name =scanner.nextLine();

for (int i = 0; i < bookList.getUsedsize() ; i++) {

if ((bookList.getBook(i).getName()).equals(name)) {

bookList.getBook(i).setIsborrowed(false);

System.out.println("該書歸還成功");

return;

}

}

System.out.println("不存在該書");

}

}

?查找圖書(FindOperation)

?????查找功能和遍歷類似,只要利用equals關(guān)鍵字比較字符串輸出就行。在 Findioperation?類中,先輸入要查找的書名,遍歷所有的書,比較書名,書名一樣輸出即可。?

public class FindOperation implements IOperation {

@Override

public void work(BookList bookList) {

System.out.println("該操作進(jìn)行中,請(qǐng)輸入要查找的書");

Scanner scanner = new Scanner(System.in);

String name = scanner.nextLine();

for (int i = 0; i < bookList.getUsedsize(); i++) {

if ((bookList.getBook(i).getName()).equals(name)) {

System.out.println("找到該書");

System.out.println(bookList.getBook(i));

return;

}

}

System.out.println("沒找到該書");

}

}

顯示圖書 (ShowOperation)

?????遍歷整個(gè)書架,然后挨個(gè)打印輸出圖書信息就可以了。

public class ShowOperation implements IOperation{

@Override

public void work(BookList bookList) {

System.out.println("該操作進(jìn)行中,將展示所有書的信息");

for (int i = 0; i < bookList.getUsedsize() ; i++) {

System.out.println(bookList.getBook(i));

}

}}

?添加圖書(AddOperation)

????首先,我們需要讓用戶輸入想要添加的圖書的相關(guān)信息,然后我們?yōu)橛脩糨斎氲膱D書新建一個(gè)對(duì)象,接下來就是合法性判斷,我們拿剛才新建的圖書對(duì)象和書架上的每一個(gè)圖書對(duì)象進(jìn)行遍歷對(duì)比,如果沒有重復(fù)的圖書就可以存入這本書,要存入這本書就調(diào)用剛才書架類中提供的方法setBooks,在新加一本書籍后,對(duì)應(yīng)的書籍?dāng)?shù)量也得增加,也就是調(diào)用setUesdSize方法來增加書籍的數(shù)量。

public class AddOperation implements IOperation {

@Override

public void work(BookList bookList) {

System.out.println("該操作進(jìn)行中,請(qǐng)輸入要添加的書");

Scanner scanner = new Scanner(System.in);

System.out.println("請(qǐng)輸入書名");

String name = scanner.nextLine();

if(bookList.getUsedsize()==10) {

System.out.println("書架滿了,無法添加");

return;

}

for (int i = 0; i < bookList.getUsedsize(); i++) {

if ((bookList.getBook(i).getName()).equals(name)) {

System.out.println("該書在書架中已有,無需添加");

return;

}}

System.out.println("請(qǐng)輸入作者名");

String author=scanner.nextLine();

System.out.println("請(qǐng)輸入其書種類");

String type=scanner.nextLine();

System.out.println("請(qǐng)輸入價(jià)格");

int price=scanner.nextInt();

Book book=new Book(name,author,price,type);

bookList.setBook(bookList.getUsedsize(),book );

System.out.println("添加成功");

bookList.setUsedsize(bookList.getUsedsize()+1);

}}

這里有個(gè)重要的點(diǎn),對(duì)于新建對(duì)象時(shí)的輸入,必須nextint在最后面,否則會(huì)導(dǎo)致以下現(xiàn)象。

這里只接受了三個(gè),第四個(gè)還沒輸入就結(jié)束了。所以應(yīng)該把nextint放在最后,這樣就不會(huì)有異?,F(xiàn)象。

對(duì)于其原因,這里有篇文章可以解釋以上現(xiàn)象java中程序邏輯控制-CSDN博客,在這部分有提到過該現(xiàn)象。

刪除圖書 (DeleteOperation)

????思路:首先找到有沒有這本書,如果找到了,這書后邊的書就從后往前直接覆蓋掉之前的書數(shù)據(jù),然后將usedsize減一就行了,從而最后一個(gè)數(shù)據(jù)我們就使用不了(之后的其他操作會(huì)將最后一個(gè)數(shù)據(jù)覆蓋掉)。

所以在循環(huán)時(shí),i 要小于usedSize - 1,,如果大于等于usedsize-1的話,就會(huì)越界訪問數(shù)組之外的數(shù)據(jù),從而報(bào)錯(cuò)。

public class DeleteOperation implements IOperation{

@Override

public void work(BookList bookList) {

System.out.println("該操作進(jìn)行中,請(qǐng)輸入要?jiǎng)h除的書");

Scanner scanner = new Scanner(System.in);

String name = scanner.nextLine();

int deletesize=0;

for (int i = 0; i < bookList.getUsedsize(); i++) {

if ((bookList.getBook(i).getName()).equals(name)) {

deletesize=i;

break;

}

if(i== bookList.getUsedsize()-1)

{

System.out.println("該書架中不存在該書");

return;

}

}

for (int i = deletesize; i < bookList.getUsedsize()-1 ; i++) {

bookList.setBook(i,bookList.getBook(i+1));

}

bookList.setUsedsize(bookList.getUsedsize()-1);

System.out.println("刪除"+name+"成功");

}}

退出系統(tǒng)?

????最簡(jiǎn)單的一個(gè)操作,System.exit(0)代表著結(jié)束程序,所以我們只需要使用該方法就能退出系統(tǒng)。

public class ExitOperation implements IOperation{

@Override

public void work(BookList bookList) {

System.out.println("系統(tǒng)已退出");

System.exit(0);//作用是結(jié)束該程序

}

}

?main類

所以有了前面的這些基礎(chǔ),我們就將它們組合起來利用,形成這個(gè)main類。

我們?cè)趍ain類中除了有main方法外,還要設(shè)置一個(gè)登錄程序的方法,登錄管理員我們就新建一個(gè)管理員對(duì)象,登錄普通用戶我們就新建一個(gè)普通用戶對(duì)象,然后我們根據(jù)用戶的輸入來調(diào)用我們菜單中的選項(xiàng),我們通過設(shè)置接口數(shù)組從而來操作它。

public class Main {

public static User login() {

System.out.println("請(qǐng)輸入你的名字");

Scanner scanner = new Scanner(System.in);

String name = scanner.nextLine();

System.out.println("請(qǐng)確認(rèn)你的身份 1:普通用戶 2:管理員 ");

while (true) {

int choice = scanner.nextInt();

if (choice == 1) {

return new NormalUser(name);

} else if (choice == 2) {

return new Administrator(name);

} else {

System.out.println("只能輸入1或2,請(qǐng)重新輸入");

continue;

}

}

}

public static void main(String[] args) {

BookList bookList=new BookList();

User user =login();

while (true){

int choice= user.menu();

user.useoperation(choice,bookList);

}

}

總結(jié)?

?所以這就是我們的圖書管理系統(tǒng),如果想看完整的代碼,我這里有我碼云的鏈接,大家可以看一下:

_2024_4_6/src · Eason綿綿/JAVASE代碼倉庫 - 碼云 - 開源中國(guó) (gitee.com)

本篇文章制作不易,還請(qǐng)各位大佬給個(gè)三連,點(diǎn)點(diǎn)關(guān)注,點(diǎn)點(diǎn)贊,評(píng)評(píng)論,謝謝各位大佬們呀,一起加油????~拾???

柚子快報(bào)激活碼778899分享:【javaSE】圖書管理系統(tǒng)

http://yzkb.51969.com/

相關(guān)文章

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18856090.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄