实验1 基于线性表的图书信息管理.docx
- 文档编号:17857757
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:28
- 大小:31.69KB
实验1 基于线性表的图书信息管理.docx
《实验1 基于线性表的图书信息管理.docx》由会员分享,可在线阅读,更多相关《实验1 基于线性表的图书信息管理.docx(28页珍藏版)》请在冰点文库上搜索。
实验1基于线性表的图书信息管理
北京林业大学
实验任务书
学长的话:
记住一定看了要理解,不要只抄
北京林业大学
学年—学年第学期数据结构实验任务书
专业名称:
实验学时:
4
课程名称:
数据结构A任课教师:
实验题目:
基于线性表的图书信息管理
实验环境:
实验目的:
1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
分别定义一个包含图书信息(书号,书名,定价)的顺序表和链表,使其具有如下功能:
(1)从给定的文件book.txt逐个读入图书信息;////ok
(2)逐个显示图书表中所有图书的相关信息;//////ok
(3)统计表中图书个数;///////ok
(4)输出图书价格最低的图书信息(考虑可能有多个);////////ok
(5)计算所有图书的平均价格;//////////////////ok
(6)根据书名进行查找,返回相应书名的图书的书号和定价(考虑重名情况);
(7)根据指定的位置,返回相应位置的图书的全部信息;
(8)给定一本图书相关信息,插入到表中指定的位置,将插入后的结果重新写入文件book.txt;
(9)删除指定位置的图书记录,将删除后的结果重新写入文件book.txt;
(10)将图书表信息读入后逆序存储,然后将逆序的图书信息写入文件book_inverser.txt中。
(11)按照图书价格升序进行排序,将排序的图书信息写入文件book_sort.txt中。
(12)将价格小于30元的图书价格提高20%,价格大于等于30元的图书价格提高30%,将修改后的图书信息写入文件book_new.txt中。
选做内容(利用链表实现):
实现两个一元多项式的加法、减法、乘法运算。
我只给代码,这个我写了将近一个月才写完的。
。
。
。
。
。
。
。
。
。
。
链表:
importjava.io.*;
importjava.util.*;
publicclass数据结构试验一{
publicstaticvoidmain(Stringargs[])
{
FilereadFile=newFile("book.txt");
//Bookbook=newBook();
Scannerread=newScanner(System.in);//String的输入
ScannerreadOne=newScanner(System.in);//int的输入
ScannerreadTwo=newScanner(System.in);//double输入
Mylistlist=newMylist();
Mylistlist2=newMylist();//逆序
Mylistlist3=newMylist();//排序
Mylistlist4=newMylist();//价格变动
try
{
FileReaderinOne=newFileReader(readFile);
BufferedReaderinTwo=newBufferedReader(inOne);
Strings=null;
intj=0,x=0;
while((s=inTwo.readLine())!
=null)
{
//System.out.println(s);
if(x==0)
{
x=1;
System.out.println(s);
}
else
{
Bookbook1=newBook();
Stringss[]=s.split("\\t");
for(j=0;j<3;j++)
{
book1.no=ss[0];
book1.name=ss[1];
book1.price=Integer.parseInt(ss[2]);
}//这种字符串的解析不会用
list.addTail(book1);
list2.Inverser(book1);
list3.Sort(book1);
}
}
inTwo.close();
inOne.close();
list.Output();//输出
System.out.println("------------逆序链表的输出-----------");
list2.Output();
System.out.println("-------------排序的链表的输出-----------");
list3.Output();
System.out.println("-------------价格变化的输出-----------");
list.New();
list.Output();
//list4.Output();
FileWritertoOne=newFileWriter(readFile);
BufferedWritertoTwo=newBufferedWriter(toOne);
FileWritertoOne1=newFileWriter(readFile);
BufferedWritertoTwo1=newBufferedWriter(toOne1);
System.out.println("--------------输出图书的本数-----------");
System.out.println("本数是:
"+(list.length-1));
System.out.println("--------------输出最低价格的图书-----------");
list.Minprice();
System.out.println("--------------输出平均价格-----------");
doubleave=list.head.next.date.price;
System.out.println("书的平均价格是:
"+list.Aveprice(ave,list.head.next,list.length-1));
//list.Output();
System.out.println("--------------按书名查找-----------");
System.out.println("请输入你要查找的书名:
");
Stringname=read.nextLine();
list.SearchName(name);
System.out.println("--------------按位置查找-----------");
System.out.println("请输入你要查找的位置");
inti=readOne.nextInt();
list.SearchID(i);
System.out.println("--------------插入-----------");
Pointtemp=newPoint();
System.out.println("请输入要插入的位置");
intt=readOne.nextInt();
System.out.println("请输入书的信息");
Booktbook=newBook();
tbook.no=read.nextLine();
tbook.name=read.nextLine();
tbook.price=readTwo.nextDouble();
list.Insert(t,tbook);
toTwo.write("ISBN书名定价");
toTwo.newLine();
for(temp=list.head.next;temp!
=null;temp=temp.next)
{
toTwo.write(temp.date.no+""+temp.date.name+""+temp.date.price);
toTwo.newLine();
}
toTwo.flush();
toTwo.close();
toOne.close();
System.out.println("-------------删除-----------");
System.out.println("请输入你要删除的书名");
Stringtname=read.nextLine();
list.Delete(tname);
list.Output();
temp=newPoint();
//temp=list.head;
toTwo1.write("ISBN书名定价");
toTwo1.newLine();
for(temp=list.head.next;temp!
=null;temp=temp.next)
{
toTwo1.write(temp.date.no+""+temp.date.name+""+temp.date.price);
toTwo1.newLine();
}
toTwo1.flush();
toTwo1.close();
toOne1.close();
System.out.println("-------------逆序存放写入另一个文件中-----------");
Filefile1=newFile("book_inverser.txt");
FileWritertoOne2=newFileWriter(file1);
BufferedWritertoTwo2=newBufferedWriter(toOne2);
temp=newPoint();
temp=list2.head;
toTwo2.write("ISBN书名定价");
toTwo2.newLine();
for(temp=list2.head.next;temp!
=null;temp=temp.next)
{
toTwo2.write(temp.date.no+""+temp.date.name+""+temp.date.price);
toTwo2.newLine();
}
toTwo2.flush();
toTwo2.close();
toOne2.close();
System.out.println("-------------价格升序排序写入新文件-----------");
Filefile2=newFile("book_sort.txt");
FileWritertoOne3=newFileWriter(file2);
BufferedWritertoTwo3=newBufferedWriter(toOne3);
temp=newPoint();
temp=list3.head;
toTwo3.write("ISBN书名定价");
toTwo3.newLine();
for(temp=list3.head.next;temp!
=null;temp=temp.next)
{
toTwo3.write(temp.date.no+""+temp.date.name+""+temp.date.price);
toTwo3.newLine();
}
toTwo3.flush();
toTwo3.close();
toOne3.close();
System.out.println("-------------价格变动-----------");
Filefile3=newFile("book_new.txt");
FileWritertoOne4=newFileWriter(file3);
BufferedWritertoTwo4=newBufferedWriter(toOne4);
temp=newPoint();
temp=list4.head;
toTwo4.write("ISBN书名定价");
toTwo4.newLine();
for(temp=list4.head.next;temp!
=null;temp=temp.next)
{
toTwo4.write(temp.date.no+""+temp.date.name+""+temp.date.price);
toTwo4.newLine();
}
toTwo4.flush();
toTwo4.close();
toOne4.close();
}catch(IOExceptione)
{System.out.println(e);}
}
}
classBook
{
Stringno;
Stringname;
doubleprice=0;
publicBook(Stringno,Stringname,doubleprice)
{
this.no=no;
this.name=name;
this.price=price;
}
publicBook(){}
}
classPoint
{
Bookdate=newBook();
Pointnext=null;
publicPoint(Bookdate,Pointnext)
{
this.date=date;
this.next=next;
}
publicPoint(){}
publicBookgetDate()
{
returndate;
}
publicvoidsetDate(Bookdate)
{
this.date=date;
}
publicPointgetNext()
{
returnnext;
}
publicvoidsetNext(Pointnext)
{
this.next=next;
}
publicvoidOutbook(Pointtemp)
{
System.out.println(temp.date.no+""+temp.date.name+""+temp.date.price);
}
}
classMylist
{
//Bookdate=newBook();
publicPointhead=null;
Pointtail=null;
intlength=0;
intlength1=0;
publicMylist()
{
this.head=newPoint();
length=0;
length1=0;
}
publicvoidaddHead(Bookdate)
{
head=newPoint(date,head);
}
publicvoidaddTail(Bookdate)
{
Pointtail=newPoint(date,null);
Pointtemp=newPoint();
temp=head;
while(temp.next!
=null)
{
temp=temp.next;
//temp=tail;
}
temp.setNext(tail);
length++;
}
publicvoidOutput()
{
Pointtemp=newPoint();
temp=head.next;
while(temp!
=null)
{
System.out.println(temp.date.no+""+temp.date.name+""+temp.date.price);
temp=temp.next;
}
}//输出
publicvoidMinprice()
{
Pointtemp=newPoint();
temp=head.next;
Pointch=newPoint();
ch.date=head.next.date;
for(inti=0;i { if(temp.date.price { ch.date=temp.date; } temp=temp.next; }//找到最低价格的书 System.out.println("最低价格书的信息是: "); Pointtemp1=head.next; for(inti=0;i { if(temp1.date.price==ch.date.price) { temp1.Outbook(temp1); } temp1=temp1.next; }//查找和最低价格书一样价格的 }//最低价格的图书(考虑有多本的情况) publicdoubleAveprice(doubleave,Pointtemp,intlength) { //System.out.println("平均价格是;"); //Pointtemp=newPoint(); //temp=head; //inti=1; //doubleave=temp.date.price; if(temp.next! =null) { ave=(Aveprice(temp.next.date.price,temp.next,length-1)*(length-1)+temp.date.price)/(length); returnave; } else { returntemp.date.price; } }//图书平均价格 publicvoidSearchName(Stringname) { Pointtemp=newPoint(); temp=head.next; intch=0; for(inti=0;i { if(temp.date.name.equals(name)) { temp.Outbook(temp); ch=1; } temp=temp.next; } if(ch==0) { System.out.println("没有找到您要找的书"); } }//书名查找,返回书的信息,考虑有书名一样的情况 publicvoidSearchID(inti) { Pointtemp=head.next; if(i>length) { System.out.println("您的输入有误"); } else { for(intj=0;j { temp=temp.next; } } temp.Outbook(temp); }//按位置查找 publicvoidInsert(inti,Bookbook) { Pointtemp=head.next; Pointp=newPoint(book,null); if(i>length) { System.out.println("您的输入有误"); } else { for(intj=0;j { temp=temp.next; } p.next=temp.next; temp.next=p; } }//插入,给定位置和输的信息,插入后重新写入文件 publicvoidDelete(Stringname) { Pointtemp=head; //temp=head.next; intch=0; for(inti=0;i { if(temp.next.date.name.equals(name)) { temp.next=temp.next.next; ch=1; break; } else{} temp=temp.next; } if(ch==1) { System.out.println("删除完毕"); } else{System.out.println("没有找到你要删除的书");} }//删除。 删除后重新写入文件 publicvoidInverser(Bookbook) { Pointtemp=newPoint(); temp.date=book; temp.next=head.next; head.next=temp; }//逆序存储,写入新的文件 publicvoidSort(Bookbook) { Pointtemp=newPoint(); temp.date=book; if(length1==0) { temp.next=head.next; head.next=temp; } if(length1==1) { Pointtemp1=newPoint(); temp1=head.next; if(temp.date.price>temp1.date.price) { temp.next=head.next; head.next=temp; } else { temp1.setNext(temp); } } else { Pointtemp1=newPoint(); temp1=head; intch=0; while(temp1.next! =nu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验1 基于线性表的图书信息管理 实验 基于 线性 图书 信息管理