一.任务清单
- 实现商品管理系统,要求具有以下功能:
(1) 查询所有书籍信息 (2) 按书籍编号查询 (3) 购买书籍 (4) 取消购买 (5) 查询购买情况 (6) 退出
注:一人一辆购物车,购物车中保存被购买的书籍以及书籍的购买数量,购物车中保存的书籍不能重复,如果一本书籍被购买多次,购物车中的数量需发生变化。(难度系数为 5)
- 实现学生成绩管理系统,要求具有以下功能:
(1)、信息录入,包括记录的追加和插入 (2) 信息删除 (3) 信息修改 (4)信息排序和查询 (5)、信息的保存和加载 (6)简单的说明和帮助。(难度系数为5)
- 实现航班订票系统,要求具有以下功能:
(1) 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) (2) 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓) (3) 可以输入起飞抵达城市,查询飞机航班情况;(4) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班 (5)退票: 可退票,退票后修改相关数据文件 (6) 修改航班信息:当航班信息改变可以修改航班数据文件 (7)客户资料有姓名,证件号,订票数量及航班情况,订单要有编号(难度系数为5)
4.实现景区景点查询及导游系统,要求具有以下功能:
(1)景区介绍 (2)相关信息录入及显示 (3)景区相关景点等信息查询 (4)根据景区游客的实际需求为游客提供景区导游功能 (5) 景区活动等查询(难度系数为5)
- 数据结构相关操作及算法实现
(1)、建立二叉树实现中序遍历 (含递归和非递归算法实现)。要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链表存储表示,输出中序遍历结果。(难度系数为2)
(2)、快速排序。任务:用程序实现线性表基础上的冒泡和快速排序,并输出排序结果,数据可通过随机函数随机生成。(难度系数为3)
(3)、堆排序
任务:编程实现线性表基础上的堆排序,并输出排序结果数据可通过随机函数随机生成。(难度系数为3)
(4)、直接插入排序
任务:编程序实现线性表基础上的排序,并输出排序结果。数据可通过随机函数随机生成,也可通过键盘直接输入。(难度系数为2)
(5)、建立二叉树实现后序遍历(含递归和非递归算法实现)。要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链表存储表示,输出后序遍历结果。(难度系数为3)
(6)、建立二叉树,实现中序线索二叉树存储结构,并实现在此基础上的中序遍历。
要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的线索化的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的线索二叉链存储表示,并输出中序遍历结果。(难度系数为3)
(7)、连通网络的最小生成树
要求:通过输入图的顶点和边的信息,建立连通网络的邻接表或邻接矩阵存储结构,求出其最小生成树。 (难度系数为3)
(8)、拓扑排序
任务:编写函数实现图的拓扑排序。(难度系数为2)
(9)、实现Dijkstra算法
要求:对有向网络用Dijkstra算法求出单源最短路径。(难度系数为3)
(10)、实现单链表上的选择排序。(难度系数为2)
(11)、单链表的逆置
要求:逆置后的单链表是一个新的单链表,但表中的结点不是新生成的,而是从原链表中得到。(难度系数为2)
(12)、有向图采用邻接矩阵存储,编写算法求出图中各个顶点的入度和出度。(难度系数为3)
(13)、建立顺序存储的循环队列,并实现其上的in入队、出队以及输出队列中的所有元素等操作。(难度系数为2)
(14)、建立二叉树,实现层次遍历。 要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链存储表示,输出层次遍历结果。(难度系数为2)
(15)、一元多项式计算。 要求:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;(难度系数为2)
(16)、joseph环。 任务:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。(难度系数为2)
(17)、猴子选大王。任务:一堆猴子都有编号,编号是1,2,3 …m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。要求:输入m, n,其中 m, n 为整数,n<m,按照m个猴子,数n 个数的方法,输出为大王的猴子的编号。(难度系数为2)
(18)、已知有序表中的元素以值递增有序排列,并以带头结点的单链表作存储结构。试编写算法删除表中所有值大于mink且小于maxk的元素,同时释放被删结点空间,并分析算法的时间复杂度。(难度系数为2)
(19)、将两个有序的单链表合并成一个有序的单链表。(难度系数为2)
(20)、背包问题求解
假设有一个能装入总体积为T的背包和n件体积分别为w1 、w2、w3、w4、w5…wn的物品,能否从n件物品中挑选若干件恰好填满背包,即使w1 +w2+w3+w4+w5+wn =T,要求找出所有满足上述条件的解。(难度系数为3)
(21)、假设哈希表长为m,哈希函数为H(x),用链地址法处理冲突,使编写输入一组关键字并建造哈希表的算法。(难度系数为2)
(22)、以排序为主题相关排序算法。(难度系数为7,最少包含直接插入排序、简单选择排序、冒泡排序、堆排序、快速排序、归并排序)
(23)、以树为主题的树相关算法。(难度系数为10,最少包含树的二叉链表存储、树的三种递归遍历算法、树的中序非递归遍历算法、二叉排序树的建立和二叉排序树上的静态查找)
(24)、以图为主题的图相关算法。(难度系数为10,最少包含图的一种存储方式、图的深度或广度优先遍历、图的最小生成树、有向图的拓扑排序)
二.代码实现
2. 实现学生成绩管理系统,要求具有以下功能:(5)
(1)、信息录入,包括记录的追加和插入 (2) 信息删除 (3) 信息修改 (4)信息排序和查询 (5)、信息的保存和加载 (6)简单的说明和帮助。(难度系数为5)
package com.课程实践;
import java.util.Objects;
public class StudentNode implements Comparable<StudentNode>{
private String name;
private Integer score;
private Integer StudentNo;
private Integer age;
private char sex;
private StudentNode next;
public StudentNode(String name, int studentNo, int age, char sex,int score, StudentNode next) {
this.name = name;
this.score = score;
StudentNo = studentNo;
this.age = age;
this.sex = sex;
this.next = next;
}
public Integer getStudentNo() {
return StudentNo;
}
public void setStudentNo(Integer studentNo) {
StudentNo = studentNo;
}
public StudentNode getNext() {
return next;
}
public void setNext(StudentNode next) {
this.next = next;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public int compareTo(StudentNode o) {
return this.score - o.score;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StudentNode that = (StudentNode) o;
return score == that.score &&
StudentNo == that.StudentNo &&
age == that.age &&
sex == that.sex &&
Objects.equals(name, that.name) &&
Objects.equals(next, that.next);
}
@Override
public int hashCode() {
return Objects.hash(name, score, StudentNo, age, sex, next);
}
@Override
public String toString() {
return "学生学号: " + this.getStudentNo() +" 学生姓名: " + this.getName()+ " 性别 "+ getSex()+ " 本次成绩: " + getScore();
}
}
package com.课程实践;
import javax.net.ssl.SNIHostName;
import java.util.InputMismatchException;
import java.util.Scanner;
public class StudentList {
StudentNode head;
int N;
public StudentList() {
this.head = null;
N = 0;
}
public void addStudent(String name,Integer score ,int studentNo,int age,char sex){
StudentNode student = new StudentNode(name,studentNo,age,sex,score,null);
if (head == null){
head = student;
this.N++;
System.out.println("添加成功");
return;
}
if (score.compareTo(head.getScore()) > 0) {
student.setNext(head);
head = student;
this.N++;
System.out.println("添加成功");
return;
}
StudentNode node = head.getNext();
StudentNode preNode = head;
if (node == null){
head.setNext(student);
this.N++;
System.out.println("添加成功");
return;
}
while(node != null){
if (score.compareTo(node.getScore()) > 0){
preNode.setNext(student);
student.setNext(node);
this.N++;
System.out.println("添加成功");
return;
}else{
node = node.getNext();
preNode = preNode.getNext();
}
}
preNode.setNext(student);
this.N++;
System.out.println("添加成功");
return;
}
public void addStudent(StudentNode student){
if (head == null){
head = student;
this.N++;
System.out.println("添加成功");
return;
}
if (student.getScore().compareTo(head.getScore()) > 0) {
student.setNext(head);
head = student;
this.N++;
System.out.println("添加成功");
return;
}
StudentNode node = head.getNext();
StudentNode preNode = head;
if (node == null){
head.setNext(student);
this.N++;
System.out.println("添加成功");
return;
}
while(node != null){
if (student.getScore().compareTo(node.getScore()) > 0){
preNode.setNext(student);
student.setNext(node);
this.N++;
System.out.println("添加成功");
return;
}else{
node = node.getNext();
preNode = preNode.getNext();
}
}
preNode.setNext(student);
this.N++;
System.out.println("添加成功");
return;
}
public void deleteStudent(Integer studentNo){
StudentNode node = head.getNext();
StudentNode preNode = head;
if (studentNo.equals(preNode.getStudentNo())) {
head = head.getNext();
this.N --;
System.out.println("删除成功");
System.out.println("删除后学生个数 ");
return;
}
while(node != null){
if (studentNo.equals(node.getStudentNo())){
preNode.setNext(node.getNext());
System.out.println("删除成功");
this.N --;
System.out.println();
return;
}else{
node = node.getNext();
preNode = preNode.getNext();
}
}
System.out.println("删除失败,无此学生");
System.out.println("删除后学生个数 ");
}
public void modifyStudent(Integer studentNo,String newName){
StudentNode node = head;
while(node != null){
if (studentNo.equals(node.getStudentNo())){
node.setName(newName);
System.out.println("修改姓名成功");
System.out.println("删除后学生个数 ");
return;
}else{
node = node.getNext();
}
}
System.out.println("修改失败,无此学生");
System.out.println("删除后学生个数 ");
}
public void modifyStudent(Integer studentNo,int score) {
StudentNode node = head;
while (node != null) {
if (studentNo.equals(node.getStudentNo())) {
node.setScore(score);
deleteStudent(studentNo);
addStudent(node);
System.out.println("修改成绩成功,并重新排名");
System.out.println("删除后学生个数 ");
return;
} else {
node = node.getNext();
}
}
System.out.println("修改失败,无此学生");
System.out.println("删除后学生个数 ");
}
public void showAllStudents(){
StudentNode currentNode = head;
int count = 1;
while (currentNode != null){
System.out.print(currentNode);
System.out.println(" 本次排名 " + count);
count++;
currentNode = currentNode.getNext();
}
}
public void findStudent(Integer studentNo){
StudentNode currentNode = head;
int count = 1;
while(currentNode != null){
if (studentNo.equals(currentNode.getStudentNo())){
System.out.print(currentNode);
System.out.println(" 本次排名 " + count);
return;
}else{
currentNode = currentNode.getNext();
count++;
}
}
System.out.println("查询失败,没有此学生");
System.out.println("删除后学生个数 ");
}
public Integer getAns(){
Scanner scanner = new Scanner(System.in);
Integer ans;
try {
ans = scanner.nextInt();
}catch (InputMismatchException e){
System.out.println("请正确输入您要选择的编号");
ans = getAns();
}
return ans;
}
public Integer getTrueStudentNo(){
Scanner scanner = new Scanner(System.in);
Integer No;
try {
No = scanner.nextInt();
}catch (InputMismatchException e){
System.out.println("请正确输入学号");
No = getTrueStudentNo();
}
return No;
}
public Integer getTrueAge(){
Scanner scanner = new Scanner(System.in);
Integer age;
try {
age = scanner.nextInt();
}catch (InputMismatchException e){
System.out.println("请正确输入年龄");
age = getTrueAge();
}
return age;
}
public Integer getTrueScore(){
Scanner scanner = new Scanner(System.in);
Integer ans;
try {
ans = scanner.nextInt();
}catch (InputMismatchException e){
System.out.println("请正确输入分数");
ans = getTrueScore();
}
return ans;
}
public String getTrueName(){
Scanner scanner = new Scanner(System.in);
String name;
try {
name = scanner.next();