一、实验目的
1. 掌握线性表的顺序存储表示和链式存储表示。
2. 掌握顺序表和链表的基本操作,包括创建、查找、插入和删除等算法。
3. 明确线性表两种不同存储结构的特点及其适用场合,明确它们各自的优缺点。
二、实验内容
(1)基于顺序存储结构的基本操作
任务1:基于顺序存储结构的公园资产信息表的创建和输出;
任务2:基于顺序存储结构的公园资产信息表的排序;
任务3:基于顺序存储结构的公园资产信息表的修改;
任务4:基于顺序存储结构的公园资产信息表的最爱图书的查找;
任务5:基于顺序存储结构的公园资产信息表的新资产的入库;
(2)基于链式存储结构的基本操作
任务6:基于链式存储结构的公园资产信息表的创建和输出;
任务7:基于链式存储结构的公园资产信息表的排序;
任务8:基于链式存储结构的公园资产信息表的修改;
任务9:基于链式存储结构的公园资产信息表的最爱图书的查找;
任务10:基于链式存储结构的公园资产信息表的新资产的入库;
注:数据信息自定。
三、实验要求
1、实验报告要求用Java语言实现,2或3人一组。
2、完成“数据结构项目情境实验报告”。
3、完成项目程序代码的编写,并能正确运行
四、开发环境及人员分工
集成开发环境(IDE) | Eclipse JAVA |
项目成员 | 分工 |
五、实现过程详细说明
1.创建顺序存储结构和链式存储结构,用于存储公园资产信息
2.系统首页界面设计
3.系统功能设计
4.维护公园资产信息
六、实验总结
在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。培养了基本的、良好的程序设计技能以及合作能力。这次课程设计同样提高了我的综合运用所学知识的能力。
七、代码实现(程序粘贴,运行结果截图)
package Libliry;//同一个package可以相互调用类
import java.util.Scanner;//类,实现控制台输入
public class main {//主函数 必须与文件名保持一致
public static void main(String[] args) {//主函数入口
boolean token = true;//布尔值,完成子页面后转到主页面
String a = null;//a是在控制台的输入值
Stack notes = new Stack(50);//notes等于stack对象
Scanner in = new Scanner(System.in);//读取控制台输入
while (token) {System.out.println("欢迎使用公园管理系统");
System.out.println("请选择功能");
System.out.println("1.添加物品");
System.out.println("2.删除物品");
System.out.println("3.查询物品");
System.out.println("4.显示全部");
System.out.println("5.修改信息");
System.out.println("0.退出系统");
a = in.nextLine();//a等于控制台输入值
System.out.println(a);
switch (a) {case "1":
while (true) {Scanner b = new Scanner(System.in);//准备输入信息
System.out.println("请依次输入物品名、物品编号、数量、000输入结束:");
String name = b.nextLine();
if(name.equals("000"))//判断输入,相当于c语言的等于000
break;//如果书名输错按000结束输入
String ISBN = b.nextLine();
float price = b.nextFloat();//浮点型,可以输小数点
boolean token3 = notes.insert(name, ISBN, price);//判断插入是否成功
System.out.println("物品名:《"+name+"》" +"\t 物品编号:"+ ISBN +"\t 数量"+ price);
if (token3 == true)
System.out.println("添加成功");
else:System.out.println("添加失败");//如果失败进入while循环进入输入页面}break;
case "2":boolean token5 = false;//while里token5程序如果失败则循环token5
while (!token5) {System.out.println("请输入要删除的物品编码:");
String dno = in.nextLine();//识别输入的数字并和书架对比相当于寻址
if(dno.equals("000"))break;
token5 = notes.delete(dno);//删除
if (token5 == true)System.out.println("删除成功");
Else:System.out.println("删除失败");}break;
case "3": LinearList tempNode = null;//创建一个实列while (tempNode == null) {
System.out.println("请输入要查询的物品编号:");
String expno = in.nextLine();//识别输入书号
if(expno.equals("000"))break;
tempNode = notes.find(expno);//寻址
if (tempNode != null)
tempNode.display(); else
System.out.println("查询失败"); }
break;case "4":notes.viewall();//显示全部break;
case "5": boolean token7 = false; while (!token7) {
Scanner c = new Scanner(System.in);//创建控制台输入相当于准备输入
System.out.println("请依次输入要修改的项的序号,和修改后的物品名,物品编码,数量");
String no1 = c.nextLine();//输入书号
if(no1.equals("000"))break;
String name = c.nextLine();//输入修改后的名字
String ISBN = c.nextLine();//输入修改后的书号
float price = c.nextFloat();//输入修改后的价格
token7 = notes.modify(no1, name, ISBN, price);//寻址,查找并修改
if (token7)System.out.println("修改成功");
elseSystem.out.println("修改失败");
}
break;
case "0":
token = false;//停止运行程序
System.out.println("bye---bye");
}
}
}
}
package Libliry;
import java.io.Serializable;
//读取文件,相当于结束程序后下次进入还能显示上次页面
public class LinearList implements Serializable {//创建一个框架 implements Serializable继承方法
private String name;
private String no;
private float price;
// 打印节点内容
public void display() {
System.out.print("物品名:《" + name+"》\t");
System.out.print("物品编号:" + no);
System.out.print("\t数量:" + price);
}
public String getName() {
return name;
}//获取string name
public void setName(String name) {
this.name = name;
}
public String getno() {
return no;
}
public void setno(String no) {
this.no = no;
}
public float getprice() {
return price;
}
public void setprice(float price) {
this.price = price;
}
}
package Libliry;
import java.io.*;
import java.io.Serializable;
class Stack implements Serializable {//堆栈继承读写方法
public Stack(int len) {//构造函数,构造方法。
this.maxlen = len;//最大容量
this.len = 0;
LinearLists = new LinearList[len];//创建长度为maxlen长度的书架
}// 初始化
LinearList[] LinearLists;// 声明数组
private int maxlen;// 最大长度
int len;
public LinearList find(String expname) {//查找
for (int i = 0; i < len; i++) {
if (LinearLists[i].getno().equals(expname)) {//用遍历的方法查找书号判断与输入的书号是否一致
System.out.println("找到了");
return LinearLists[i]; } }return null;};// 查找
public boolean insert(String a, String b, float c) {
if(this.len<this.maxlen) {
LinearLists[len] = new LinearList();
LinearLists[len].setName(a);
LinearLists[len].setno(b);
LinearLists[len].setprice(c);
len += 1;
return true;}
else { System.out.println("顺序表已满,请扩容。");
return false; } }// 插入
public boolean delete(String a) {//创建删除方法
for (int i = 0; i < len; i++)
if (LinearLists[i].getno().equals(a)) {//判断序号是否和输入一致
for (int j = i; j < len-1; j++) {
LinearLists[j] = LinearLists[j + 1];//删除后所有书依次往前挪}
LinearLists[len] = null;//序列最后置为空
len -= 1;
return true; }
System.out.println("没找到或输入有误");
return false; }// 删除
public boolean viewall() {
for (int i = 0; i < len; i++) {
LinearLists[i].display();//显示一个物品
System.out.println('\n');}return false; }
// 显示全部
public boolean modify(String itemno, String a, String b, float c) {//创建修改方法
LinearList exp = new LinearList();//创建新的物品
exp = this.find(itemno);//exp替换查找到的物品
if (exp == null)return false; exp.display();exp.setName(a);exp.setno(b);exp.setprice(c);return true; }// 修改
public LinearList[] read() {//创建读取文件方法try {//处理中断,显示错误
String a = "a.txt";
FileInputStream fis = new FileInputStream(a);//输入文件流
ObjectInputStream ois = new ObjectInputStream(fis);//输入对象流
this.LinearLists = (LinearList[]) (ois.readObject());//将对象六转换为书架
for (int i = 0; i < LinearLists.length; i++) {//判断容量
if (LinearLists[i] == null) {this.len = i;break; } } System.out.println(this.len);
System.out.println("读取成功");
ois.close(); } catch (IOException | ClassNotFoundException e) {//扑捉错误中断
System.out.println(e);//e是具体错位对象
} return LinearLists; }// 读取
public boolean write() {//定义写入方法
try {FileOutputStream fos = new FileOutputStream("a.txt");//文件输出流
ObjectOutputStream oos = new ObjectOutputStream(fos);//创建对象输出流
oos.writeObject(LinearLists);//将书架输出为对象输出流oos.close();
} catch (IOException e) {System.out.println(e); }return false; }
// 存储
public boolean similarize() {//判断物品编号
for (int i = 0; i < len; i++) {
for (int j =i+1 ; j <len; j++) {
String a = LinearLists[i].getno();
String b = LinearLists[j].getno();
if(a.equals(b)) {for (int k=j; k<len; k++) {
LinearLists[k] = LinearLists[k + 1];//代替重复}
LinearLists[len] = null;
len -= 1;} } }return true; }}