基于线性表的图书管理系统(java)-创新互联
目录
创新互联在网站设计、网站制作、重庆APP软件开发、网站运营等方面均有出色的表现,凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,我们更提供一系列成都全网营销推广,网站制作和网站推广的服务,以推动各中小企业全面信息化,并利用创新技术帮助各行业提升企业形象和运营效率。
1、简介
2、代码
(1)ManageSystem类
(2)book类
3、测试程序运行结果截图
(1)登录和创建
(2)输出
(3)查找
(4)插入
(5)删除
(6)修改
(7)排序
(8)计数
(9)导出
(10)读入
(11)菜单
4、存在的问题与思考
基于线性表的图书管理系统 1、项目简介
顺序表是线性表的顺序存储结构,是指用一组连续的存储单元依次存放线性表的数据元素。在顺序存储结构下,逻辑关系相邻的两个元素在物理位置上也相邻,这是顺序表的特点。
顺序表适宜于做查找这样的静态操作,顺序存储的优点是存储密度大,存储空间利用率高。缺点是插入或删除元素时不方便,需要移动大量元素o(n),预先分配空间需按大空间分配,利用不充分,表容量难以扩充。
要完成这个题目,主要是建立图书信息的存储。本项目采用线性表的顺序存储结构。以图书信息为例,本项目的数据是一组图书信息,每条图书信息由图书ISBN号、图书名称、作者名称、出版社名称等信息组成,这组图书信息具有相同特性,属于同一数据对象,相邻元素之间存在序偶关系,这些数据具有线性表中数据元素的性质,所以该系统的数据采用线性表来存储。本图书管理系统分为两个结构体,一个是图书结构体,用于存放图书的基本信息,另一个是图书管理结构体,实现管理图书的功能。图书的存储结构用ArrayList实现。
具体存储操作:在ManageSystem类中获取一本书籍的具体信息,通过book类初始化方法实例化为一个book实例,然后存入ManageSystem类中的ArrayList列表中。
2、项目代码 (1)ManageSystem类package dataStructure;
import java.io.*;
import java.util.*;
public class ManageSystem {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayListlibrary = new ArrayList<>();
// 判断登录是否成功
String LibName = null;
boolean login = false;
String[] admin = {"a","b","c","d"};
String[] password = {"a","b","c","d"};
while (!login){
System.out.print("请输入图书管理系统名字:");
LibName = sc.nextLine();
System.out.print("请输入图书管理系统密码:");
String LibPW = sc.nextLine();
for (String s: admin){
if (s.equals(LibName) && password[Arrays.binarySearch(admin,s)].equals(LibPW)){
library=create();
System.out.println("登录成功!当前图书管理系统:"+LibName);
System.out.println();
login=true;
}
}
if (!login) System.out.println("登录失败!账号或密码有误,请重新输入!");
}
boolean exist = true;
while(exist){
System.out.println("当前图书管理系统:"+LibName);
System.out.println(
"1、输出图书信息表\n"+
"2、查找图书\n"+
"3、插入图书信息\n"+
"4、删除图书信息\n"+
"5、修改指定图书信息\n"+
"6、图书排序\n"+
"7、图书数量统计\n"+
"8、导出图书信息\n"+
"9、读入图书信息\n");
System.out.print("请输入你的选择(输入-1退出系统):");
if (!sc.hasNextInt()) {
String string = sc.next();
System.out.println("输入有误!");
System.out.println();
}else {
int how = sc.nextInt();
switch(how){
case -1:
exist = false;
break;
case 1://显示:输出
output(library);
break;
case 2: //根据ISBN或书名查找图书
search(library);
break;
case 3: //插入
book insert = insert();
library.add(insert);
break;
case 4: //根据ISBN号删除图书信息
library = delete(library);
break;
case 5: //根据ISBN修改价格
change(library);
break;
case 6://按照价格排序
compare(library);
break;
case 7: //计数
System.out.println("图书馆内一共有" + calculate(library) + "册图书。");
break;
case 8: //导出
try{
outputData(library);
} catch (IOException e){}
break;
case 9: //读入
try{
library=importData(library);
} catch (IOException e){}
break;
}
System.out.println();
}
}
}
public static ArrayListcreate(){
ArrayListlibrary = new ArrayList<>();
printTitle();
return library;
}
public static void output(ArrayListlibrary){
printTitle();
for(book b: library){
printContent(b);
}
}
public static void search(ArrayListlibrary){
Scanner sc = new Scanner(System.in);
System.out.print("请输入您想查询的书籍的ISBN号或名称:");
String search = sc.nextLine();
boolean flag = false;
for(book b : library) {//原本判断条件里面有break,但是考虑到可能有多本相同的图书入库,需要全部输出,因而删除break
if (search.equals(b.getISBN()) || search.equals(b.getName())) {
if (!flag){
System.out.println("您所查询的图书信息为:");
printTitle();
flag=true;
}
printContent(b);
}
}
if (!flag){
System.out.println("抱歉!未能找到您想查询的图书。");
}
}
// 0000000010 微观经济学 王陆 中国人民出版社 2003-04-28 54.00 经济类 在架上
public static book insert(){
Scanner sc = new Scanner(System.in);
printTitle();
System.out.println("请输入新增的书籍的具体信息:");
String all = sc.nextLine();
String[] content = all.split(" ");
book a = new book(content[0],content[1],content[2],content[3],content[4],Double.parseDouble(content[5]),content[6],content[7]);
System.out.println("书籍加入成功!");
return a;
}
public static ArrayListdelete(ArrayListlibrary) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入您想删除的书籍的ISBN号:");
String delete = sc.nextLine();
boolean flag = false;
for (int i = 0; i< library.size(); i++) {
book b = library.get(i);
if (delete.equals(b.getISBN()) && b.getIson().equals("在架上")) {
printTitle();
printContent(b);
library.remove(i);
flag = true;
System.out.println("删除成功!");
break;
}
}
if (!flag) {
System.out.println("删除失败!失败原因可能有:1、未能找到您想删除的图书;2、该书不在架上。");
}
return library;
}
public static ArrayListchange(ArrayListlibrary){
Scanner sc = new Scanner(System.in);
System.out.print("请输入您想修改价格的图书的ISBN号:");
String ISBN = sc.nextLine().trim();
double c = 0;
boolean right = true;
for(book a: library){
if(ISBN.equals(a.getISBN())){
if (right){
System.out.print("请输入修改的价格:");
c = sc.nextDouble();
right = false;
}
a.setPrice(c);
}
}
if(right){
System.out.println("对不起,找不到您想修改的图书。");
}
else {
System.out.println("修改成功!");
}
return library;
}
public static void compare(ArrayListlibrary){
ArrayListcpLibrary = new ArrayList<>(library.size());
for (book o:library) cpLibrary.add(o);
cpLibrary.sort(book::compareTo);
output(cpLibrary);
}
public static int calculate(ArrayListlibrary){
return library.size();
}
public static void outputData(ArrayListlibrary) throws IOException {
File file = new File("book.txt");
if (file.exists()){
file.delete();
}
file.createNewFile();
OutputStream fos = new FileOutputStream(file);
for (book a:library) {
String str = a.getISBN()+"\t"+a.getName()+"\t"+a.getAuthor()+"\t"+a.getPublish()+"\t"+a.getDate()+"\t"+a.getPrice()+"\t"+a.getType()+"\t"+a.getIson()+"\n";
fos.write(str.getBytes("UTF-8"));
}
fos.close();
System.out.println("已成功输出至book.txt文件。");
}
public static ArrayListimportData(ArrayListlibrary) throws IOException {
File file = new File("book.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String len;
while((len = br.readLine()) != null) {
String[] content = len.split("\t");
book a = new book(content[0],content[1],content[2],content[3],content[4],Double.parseDouble(content[5]),content[6],content[7]);
library.add(a);
}
fis.close();
System.out.println("已成功导入。");
return library;
}
public static void printTitle(){
String[] title = {"ISBN","书籍名称","作者","出版社","出版日期","价格","类型","状态"};
for(int i=0;i
(2)book类package dataStructure;
public class book implements Comparable{
private String ISBN;
private String name;
private String author;
private String publish;
private String date;
private double price;
private String type;
private String ison;
public String getISBN() {
return ISBN;
}
public void setISBN(String ISBN) {
this.ISBN = ISBN;
}
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 getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getIson() {
return ison;
}
public void setIson(String ison) {
this.ison = ison;
}
public book(String ISBN,String name,String author,String publish,String date,double price,String type,String ison){
this.ISBN = ISBN;
this.name = name;
this.author = author;
this.publish = publish;
this.date = date;
this.price = price;
this.type = type;
this.ison = ison;
}
public int compareTo(book o){
return Double.compare(getPrice(), o.getPrice());
}
}
3、测试数据集ISBN | name | author | publish | date | price | type | ison |
0000000001 | 大学计算机基础 | 陈建勋 | 高等教育出版社 | 2007-08-10 | 58.00 | 计算机类 | 在架上 |
0000000002 | C语言 | 王远林 | 电子工业出版社 | 2000-04-12 | 48.00 | 计算机类 | 已借阅 |
0000000003 | 组织行为学 | 刘烨 | 中国人民出版社 | 1997-09-28 | 76.00 | 管理类 | 在架上 |
0000000004 | 管理学 | 高敏 | 清华大学出版社 | 2020-05-01 | 57.00 | 管理类 | 已借阅 |
0000000005 | 统计学 | 贺天 | 北京大学出版社 | 2018-03-23 | 38.00 | 数统类 | 正在订购 |
0000000006 | 概率论 | 李毅 | 中国工业出版社 | 2004-05-16 | 39.00 | 数统类 | 在架上 |
0000000007 | 糖尿病的正确饮食 | 钟娅 | 中国轻工出版社 | 2020-10-01 | 89.00 | 医学类 | 在架上 |
0000000008 | 人体构造 | 黄远 | 河北科学出版社 | 2016-08-13 | 99.00 | 医学类 | 正在订购 |
0000000009 | 宏观经济学 | 刘叶 | 清华大学出版社 | 2015-03-10 | 67.00 | 经济类 | 正在订购 |
0000000010 | 微观经济学 | 王陆 | 中国人民出版社 | 2003-04-28 | 54.00 | 经济类 | 已借阅 |
0000000010 | 微观经济学 | 王陆 | 中国人民出版社 | 2003-04-28 | 54.00 | 经济类 | 已借阅 |
(7)排序(8)计数(9)导出(10)读入(11)菜单5、存在的问题与思考
(1)没有考虑完整异常情况:由于时间原因,在编写代码的时候基本只考虑了输入正确的情况,除了文件导入导出外没有考虑异常情况的处理(try-catch)。但是在代码编写过程中,尽量把可以考虑的情况考虑进去,如在执行功能选择switch语句前,判断输入是否为整数,如果不为整数就输出报错,输入为整数才获取输入,进入switch语句,尽可能保持无异常情况的发生。
(2)功能不够丰富:由于时间原因,完成了基本的要求后只增加了登录功能,其余都是在原有代码基础上进行修改,使得交互更加舒适。
(3)交互效果有待提高:由于没有时间将系统以可视化的方式展现,希望能够在命令行的演示下尽量提高交互效果。在调整交互效果的过程中除了加入很多提示信息,修改图书信息表示方式(尽量模仿表格方式)外,在适当的地方加入了空行以达到分割显示的效果。
(4)没能活用现有类对程序进行简化:我们在考虑“图书出版日期”这一属性时,曾经考虑过采用Date类进行记录,但是由于它的toString方法是转换成一个16进制的数值字符串,不方便在别的方法中进行调用,所以我们直接采用了String类进行记录。但这样不利于后期的改进,对于一些时间记录上的处理也会更麻烦。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文题目:基于线性表的图书管理系统(java)-创新互联
标题URL:http://ybzwz.com/article/dgpiid.html