广 西 科 技 大 学
课程设计报告
课程名称 《数 据 结 构》
学 院 计算机科学与通信工程学院
专 业 软 件 工 程 班 级 软件181班 学 号
姓 名 冯孔丽
成 绩
学 期 2019-2020-1
指导教师
1课题:.将学生信息以学号为关键字存储在二叉搜索树中,然后按照学号查询
和删除指定学生的信息。
2设计要求:
(1)从键盘输入学生的学号、姓名、英语和数学成绩,计算每个学生的成绩总分,存储在二叉排序树中。
(2)按照输入的学号查询指定的学生信息,若找到,则输出找到的学生信息,否则输出“查找失败”提示信息。
(3)按照输入的学号删除指定的学生信息,若二叉排序树中存储指定学号的学生信息,则删除此学生信息,否则,输出“删除失败”提示信息。
3 程序设计
(1)数据设计:二叉搜索树 (2)编码
○1Main.java
package com.gkd;
import com.binaryNode.BinaryNode; import com.binaryTree.BinaryTree; import java.util.Scanner; public class Main {
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); BinaryTree binarytree=new BinaryTree(); boolean iscontinue=true; while(iscontinue) { printOperate();
int userInput=scanner.nextInt(); switch(userInput) { case 1:
System.out.println(\请输入学生的学号:\ int stuNumber = scanner.nextInt(); System.out.println(\请输入学生的姓名:\ String stuName = scanner.next();
1
System.out.println(\请输入学生的数学成绩:\
double math=scanner.nextDouble();
System.out.println(\请输入学生的英语成绩:\
double english=scanner.nextDouble(); binarytree.insertNode(stuNumber,stuName,math,english); System.out.println(\目前学生人数为:\ break; case 2:
System.out.println(\你要删除哪位学生的信息(请输入该学生的学号)\
int deleteKey = scanner.nextInt(); boolean
isDeleteNode=binarytree.removeNode(deleteKey); if (isDeleteNode){
System.out.println(\成功删除学生信息\
}
else {
System.out.println(\删除学生信息失败\
}
break; case 3:
System.out.println(\请输入你要查询学生的学号\
int key = scanner.nextInt();
BinaryNode node=binarytree.find(key); if(node==null){ break; }
System.out.println(node); break;
2
case 4:
System.out.println(\您已退出学生信息管理系统退出系统\
iscontinue=false; break; case 5:
binarytree.traversal(); break; default:
System.out.println(\请输入正确数字!\ break; } } }
public static void printOperate(){
System.out.println(\ System.out.println(\请输入操作 *\ System.out.println(\存储学生信息 *\ System.out.println(\删除学生信息 *\ System.out.println(\查询学生信息 *\ System.out.println(\退出系统 *\ System.out.println(\查找所有学生信息 *\ System.out.println(\ } } ○2BinaryTree.java
package com.binaryTree;
import com.binaryNode.BinaryNode; public class BinaryTree{
private BinaryNode root;//根节点的引用 private int nodeAmount;//二叉树节点数量 public BinaryTree() { }
private BinaryNode find(int stuNumber,BinaryNode node) {
3
if (node == null) { return null; }
if (stuNumber return find(stuNumber,node.getLeftChild()); } else if (stuNumber>node.getStuNumber()) { returnfind(stuNumber,node.getRightChild()); } else { return node; } } public BinaryNode find(int stuNumber) { return find(stuNumber, root); } public boolean insertNode(int stuNumber,String stuName, double math, double english){ if(root==null){ root = new BinaryNode(stuNumber,stuName,math,english); root.setParent(null); nodeAmount++; return true; } BinaryNode currentNode = root;//当前节点 BinaryNode insertedNode = root; while(currentNode!=null){ if(stuNumber==currentNode.getStuNumber()){ System.out.println(\已有该学号\); return false; } insertedNode = currentNode; if(stuNumber 4