01_学生成绩档案管理系统_实现

  • 一、实验题目
  • 二、编程语言以及开发环境
  • 三、源代码
    • 1.学生类
    • 2.自定义数据库类
    • 3.数据操作类
    • 4.总服务类
    • 5. main类
  • 四、运行结果
  • 五、实验小结

一、实验题目

  • 学生信息录入,信息包括学号、姓名、专业、四门课的成绩、总分、名次;

  • 系统可对学生信息浏览,增加,删除和修改;

  • 按学生成绩确定名次以及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序;

  • 要求可对学生信息查询,根据学号或姓名进行查找;

  • 信息修改仅可修改四门课程的成绩

  • 文件存取学生信息

二、编程语言以及开发环境

1. 编程语言:
选择Java,因为在上学期 project 01中对Java进行了一次提高,现在习惯用Java来编写

2. 开发环境:
选择IntelliJ IDEA,使用起来更加方便

三、源代码

1.学生类

package com.Student;/*** 学生类,包含各种属性*/
public class Student {//学号private int Id;//姓名private String username;//专业private String major;//课程1的成绩private double score1;//课程2的成绩private double score2;//课程3的成绩private double score3;//课程4的成绩private double score4;//总分private double scoreAll;//排名private int rank;//含参数public Student(int id, String username, String major, double score1, double score2, double score3, double score4) {Id = id;this.username = username;this.major = major;this.score1 = score1;this.score2 = score2;this.score3 = score3;this.score4 = score4;this.scoreAll = score1 + score2 + score3 + score4 ;}public int getId() {return Id;}public String getUsername() {return username;}public String getMajor() {return major;}public double getScore1() {return score1;}public double getScore2() {return score2;}public double getScore3() {return score3;}public double getScore4() {return score4;}public double getScoreAll() {return scoreAll;}public int getRank() {return rank;}public void setId(int id) {Id = id;}public void setUsername(String username) {this.username = username;}public void setMajor(String major) {this.major = major;}public void setScore1(double score1) {this.score1 = score1;}public void setScore2(double score2) {this.score2 = score2;}public void setScore3(double score3) {this.score3 = score3;}public void setScore4(double score4) {this.score4 = score4;}public void setScoreAll(double scoreAll) {this.scoreAll = scoreAll;}public void setRank(int rank) {this.rank = rank;}
}

2.自定义数据库类

package com.data;import com.Student.Student;import java.util.ArrayList;
import java.util.List;/*** 学生信息,由自己初始化类*/
public class studentData {//私有类型链表private List<Student> studentList = new ArrayList<>();/*构造参数,初始化学生数据*/public studentData() {Student student1 = new Student(1, "张三", "软件工程", 78.2, 63, 91, 68);Student student2 = new Student(2, "李四", "信息安全", 68, 88, 54, 93);Student student3 = new Student(3, "王五", "软件工程", 87, 78, 62, 88);Student student4 = new Student(4, "赵六", "物联网", 92, 69, 79, 77);Student student5 = new Student(5, "陈七", "信息安全", 54, 83, 86, 96);//使用Arrays.asList,可以直接导入多个对象,不用一直add,但是该方法后边不允许使用add方法studentList.add(student1);studentList.add(student2);studentList.add(student3);studentList.add(student4);studentList.add(student5);}public List<Student> getStudentList() {return studentList;}public void setStudentList(List<Student> studentList) {this.studentList = studentList;}}

3.数据操作类

package com.studentDao;import com.Student.Student;
import com.data.studentData;import java.util.List;public class studentDao {//链表类型元素private studentData studentData;/*/构造函数*/public studentDao(studentData studentData) {this.studentData = studentData;}/*** 现有学生信息展示*/public void printLink(){System.out.println();System.out.println("*************************************已经拥有的学生信息如下***************************************");System.out.println("______________________________________________________________________________________________");System.out.println("学号\t\t"+"姓名\t\t"+"专业\t\t\t"+"成绩1\t\t"+"成绩2\t\t"+"成绩3\t\t"+"成绩4\t\t"+"总分\t\t\t");System.out.println("***********************************************************************************************");for (int i = 0; i<studentData.getStudentList().size();i++){int count = i;printStudentTwo(count);}}/*** 得到新的学号,采用当前时间值* @return*//*public int newId(){int newId = (int) System.currentTimeMillis();newId = -newId;return newId;}*//*** 添加学生信息* @param student*/public void addStudentMassage(Student student){studentData.getStudentList().add(student);}/*** 删除学生信息* @param delId*/public void delStudent(int delId){for (int i=0;i<studentData.getStudentList().size();i++){if (studentData.getStudentList().get(i).getId()== delId){studentData.getStudentList().remove(i);break;}}}/*** 修改学生信息* @param modID*/public void modStudent(int modID,double newScore1,double newScore2,double newScore3,double newScore4){for (int i=0;i<studentData.getStudentList().size();i++){if (studentData.getStudentList().get(i).getId() == modID){double allScore = newScore1+newScore2+newScore3+newScore4;studentData.getStudentList().get(i).setScore1(newScore1);studentData.getStudentList().get(i).setScore2(newScore2);studentData.getStudentList().get(i).setScore3(newScore3);studentData.getStudentList().get(i).setScore4(newScore4);studentData.getStudentList().get(i).setScoreAll(allScore);break;}}}/*** 通过姓名搜索* @param SerName*/public void searchStudentByName(String SerName){for (int i=0;i<studentData.getStudentList().size();i++){if (studentData.getStudentList().get(i).getUsername().equals(SerName)){int count = i;printStudent();printStudentTwo(count);}}}/*** 输出显示格式* @param*/public void printStudent(){System.out.println("学号\t\t"+"姓名\t\t"+"专业\t\t\t"+"成绩1\t\t"+"成绩2\t\t"+"成绩3\t\t"+"成绩4\t\t"+"总分\t\t\t");System.out.println("***********************************************************************************************");}/*** 输出显示结果* @param count*/public void printStudentTwo(int count){System.out.println(studentData.getStudentList().get(count).getId()+"\t\t"+studentData.getStudentList().get(count).getUsername()+"\t\t"+studentData.getStudentList().get(count).getMajor()+"\t\t"+studentData.getStudentList().get(count).getScore1()+"\t\t"+studentData.getStudentList().get(count).getScore2()+"\t\t"+studentData.getStudentList().get(count).getScore3()+"\t\t"+studentData.getStudentList().get(count).getScore4()+"\t\t"+studentData.getStudentList().get(count).getScoreAll()+"\t\t");}/*** 通过学号搜索* @param SerID*/public void searchStudentByID(int SerID){for (int i=0;i<studentData.getStudentList().size();i++){if (studentData.getStudentList().get(i).getId()==SerID){int thisCount = i;printStudent();printStudentTwo(thisCount);}}}/*** 排名赋值并打印* @param studentList*/public void showPlace(List<Student> studentList){System.out.println("学号\t\t"+"姓名\t\t"+"专业\t\t\t"+"总分\t\t\t"+"名次\t\t\t");System.out.println("********************************************");for(int i=0;i<studentList.size();i++){studentList.get(i).setRank(i+1);}int i=1;for(Student each:studentList){System.out.println(each.getId()+"\t\t"+each.getUsername()+"\t\t"+each.getMajor()+"\t\t"+each.getScoreAll()+"\t\t"+each.getRank());i++;}}/*** 双向冒泡排序* @param studentList* @return*/public List<Student> doubleBubbleSort(List<Student> studentList){List<Student> list = studentList;Student student = null;int left=0,right = studentList.size()-1;while(left<right){for(int i=left+1;i<=right;i++){if(list.get(left).getScoreAll()<list.get(i).getScoreAll()){student = list.get(i);list.set(i,list.get(left));list.set(left,student);}}left++;for(int i=right-1;i>=left;i--){if(list.get(right).getScoreAll()>list.get(i).getScoreAll()){student=list.get(i);list.set(i,list.get(right));list.set(right,student);}}right--;}return list;}/*** 希尔排序* @param studentList* @return*/public List<Student> shellSort(List<Student> studentList){List<Student> list = studentList;Student student = null;int j;for (int gap = list.size() / 2; gap >  0; gap /= 2) {for (int i = gap; i < list.size(); i++) {student=list.get(i);double tmp=student.getScoreAll();for (j = i; j >= gap && tmp>list.get(j-gap).getScoreAll(); j -= gap) {list.set(j,list.get(j-gap));}list.set(j,student);}}return list;}/*** 快速排序* @param studentList* @return*/public List<Student> quickSort(List<Student> studentList){List<Student> list=studentList;quickSort1(list,0,list.size()-1);return list;}public void quickSort1(List<Student> studentList,int left,int right){if(left<right){int i=left,j=right;Student student=studentList.get(left);double x=student.getScoreAll();while(i<j){while((i<j)&&(studentList.get(j).getScoreAll()<x)){j--;}if(i<j){studentList.set(i,studentList.get(j));i++;}while((i<j)&&(studentList.get(i).getScoreAll()>x)){i++;}if(i<j){studentList.set(j,studentList.get(i));j--;}}studentList.set(i,student);quickSort1(studentList,left,i-1);quickSort1(studentList,i+1,right);}}/*** 堆排序* @param studentList* @return*/public List<Student> heapSort(List<Student> studentList){List<Student> list=studentList;int len = list.size();buildMaxHeap(list, len);for (int i = len - 1; i > 0; i--) {swap(list, 0, i);len--;heapify(list, 0, len);}return list;}private void buildMaxHeap(List<Student> studentList, int len) {for (int i = (int) Math.floor(len / 2); i >= 0; i--) {heapify(studentList, i, len);}}private void heapify(List<Student> studentList, int i, int len) {int left = 2 * i + 1;int right = 2 * i + 2;int largest = i;if (left < len && studentList.get(left).getScoreAll() < studentList.get(largest).getScoreAll()) {largest = left;}if (right < len && studentList.get(right).getScoreAll() < studentList.get(largest).getScoreAll()) {largest = right;}if (largest != i) {swap(studentList, i, largest);heapify(studentList, largest, len);}}private void swap(List<Student> studentList, int i, int j) {Student student=studentList.get(i);studentList.set(i,studentList.get(j));studentList.set(j,student);}
}

4.总服务类

package com.serves;import com.Student.Student;
import com.data.studentData;
import com.studentDao.studentDao;import java.util.List;
import java.util.Scanner;public class serves {Scanner scanner = new Scanner(System.in);//实例化DaostudentData data ;studentDao studentDao ;/*构造函数*/public serves(studentData studentData) {this.data = studentData;studentDao=new studentDao(data);}/*** 系统开关*/public void begin(){//起始界面,调用Dao中打印显示studentDao.printLink();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("6. 学生信息打印");System.out.println("7. 退出系统");int choice1 = scanner.nextInt();//进行功能判断switch (choice1){case 1:addStudent();break;case 2:deleteStudent();break;case 3:modifyStudent();break;case 4:sortStudent();break;case 5:System.out.println("请选择查询方式:1.按姓名查询  2.按学号查询");int search = scanner.nextInt();switch (search){case 1:searchStudentByName();break;case 2:searchStudentByID();break;default:System.out.println("非法输入,已经返回主菜单:");begin();}break;case 6:studentDao.printLink();System.out.println("学生信息成绩已经打印");System.out.println("按5返回主菜单");int count5 = scanner.nextInt();if (count5==5){begin();}else{System.out.println("非法输入,已自动返回主菜单");begin();}break;case 7:System.out.println("你已经退出系统!");break;default:System.out.println("非法输入,请重新输入:");System.out.println("###########################################################################################");begin();}}/*** 新增学生信息*/public void addStudent(){System.out.println("请输入学号:");int newId = scanner.nextInt();System.out.println("请输入学生姓名:");String newName = scanner.next();System.out.println("请输入专业:");String newMajor = scanner.next();System.out.println("请输入成绩1:");double newScore1 = scanner.nextDouble();System.out.println("请输入成绩2:");double newScore2 = scanner.nextDouble();System.out.println("请输入成绩3:");double newScore3 = scanner.nextDouble();System.out.println("请输入成绩4:");double newScore4 = scanner.nextDouble();Student newStudent = new Student(newId,newName,newMajor,newScore1,newScore2,newScore3,newScore4);studentDao.addStudentMassage(newStudent);System.out.println("学生信息添加成功!输入0返回主菜单");int count = scanner.nextInt();if (count==0){begin();}else{System.out.println("非法输入,已自动返回主菜单");begin();}}/*** 删除学生信息*/public void deleteStudent(){System.out.println("请输入你要删除的学生的学号:");int delId = scanner.nextInt();studentDao.delStudent(delId);System.out.println("你已经成功删除该学生的信息!按1返回主菜单");int count2 = scanner.nextInt();if (count2==1){begin();}else{System.out.println("非法输入,已自动返回主菜单");begin();}}/*** 修改学生信息*/public void modifyStudent(){System.out.println("只能修改课程成绩,请输入你要修改的学生的学号:");int modId = scanner.nextInt();System.out.println("请输入新的成绩1:");double newScore1 = scanner.nextDouble();System.out.println("请输入新的成绩2:");double newScore2 = scanner.nextDouble();System.out.println("请输入新的成绩3:");double newScore3 = scanner.nextDouble();System.out.println("请输入新的成绩4:");double newScore4 = scanner.nextDouble();studentDao.modStudent(modId,newScore1,newScore2,newScore3,newScore4);System.out.println("你已经成功修改该学生的信息!按2返回主菜单");int count3 = scanner.nextInt();if (count3==2){begin();}else{System.out.println("非法输入,已自动返回主菜单");begin();}}/*** 通过学生姓名查询学生信息*/public void searchStudentByName(){System.out.println("请输入你要查询的学生的姓名:");String SerName = scanner.next();studentDao.searchStudentByName(SerName);System.out.println("按3返回主菜单");int count4 = scanner.nextInt();if (count4==3){begin();}else{System.out.println("非法输入,已自动返回主菜单");begin();}}/*** 通过学号查询*/public void searchStudentByID(){System.out.println("请输入你要查询的学生的学号:");int  SerId = scanner.nextInt();studentDao.searchStudentByID(SerId);System.out.println("按4返回主菜单");int count5 = scanner.nextInt();if (count5==4){begin();}else{System.out.println("非法输入,已自动返回主菜单");begin();}}/*** 排序总方法*/public void sortStudent(){List<Student> list = null;System.out.println("请选择排序方式:");System.out.println("1.双向冒泡排序");System.out.println("2.希尔排序");System.out.println("3.快速排序");System.out.println("4.堆排序");System.out.println("按0返回主菜单:");int choice2 = scanner.nextInt();switch (choice2){case 0:begin();break;case 1:list=studentDao.doubleBubbleSort(data.getStudentList());studentDao.showPlace(list);sortOutput();break;case 2:list=studentDao.shellSort(data.getStudentList());studentDao.showPlace(list);sortOutput();break;case 3:list=studentDao.quickSort(data.getStudentList());studentDao.showPlace(list);sortOutput();break;case 4:list=studentDao.heapSort(data.getStudentList());studentDao.showPlace(list);sortOutput();break;default:System.out.println("非法输入,请重新选择:");sortStudent();}}/*** 排序成功*/public void sortOutput(){System.out.println("排序成功,按0返回上一菜单:");int dearLiu = scanner.nextInt();if (dearLiu==0){sortStudent();}else{System.out.println("非法输入,已自动返回主菜单");begin();}}
}

5. main类

import com.data.studentData;
import com.serves.serves;
import com.studentDao.studentDao;public class main {public static void main(String[] args) {//实例化studentData data = new studentData();studentDao studentDao = new studentDao(data);serves serves = new serves(data);serves.begin();}
}

四、运行结果

1. 初始界面:

2. 学生信息增加:


3. 学生信息修改:


4. 学生信息查询:

  1. 按姓名查询
  2. 按学号查询

5. 学生信息排序:

  1. 双向冒泡排序

  2. 希尔排序

  3. 快速排序

  4. 堆排序

6. 学生信息删除:

7. 学生信息打印:

五、实验小结

  1. 在本次实验中,有一些细节的地方没有注意到,比如说,在修改学习成绩后,发现因为成绩不是按照参数传递进去的,导致成绩的总分数没有发生修改,所以在修改的方法中又特地添加了计算修改后的总分,使得代码有些麻烦。
  2. 对于排序方法有些陌生,四个排序方法都有查询资料,同时借鉴别人的部分代码才写出来,确实是自己学习的时候没有掌握透彻,在接下来会把这四个排序算法详细的查看理解一遍。
  3. 整个假期没有进行过Java的编写,发现自己的速度慢了很多,也明白了所有的东西都应该是熟能生巧,在接下来的日子里,会多联系,养成好习惯。

今日喜欢的句子:

在做决定之前,你要仔细聆听内心的声音。很多时候其实雨并不大,只是风搞得让人紧张。

@刘英俊

《数据结构课程实践》_01_学生成绩档案管理系统_实现相关推荐

  1. 《数据结构课程实践》_01_学生成绩档案管理系统_准备工作

    01_学生成绩档案管理系统_准备工作 一.实验题目与要求 二.编程语言以及开发环境 三.实验思路 1. 思考初始化数据处理 2. 学生对象处理 3. 操作处理 4. 方法描述 四.预习小结 一.实验题 ...

  2. 题目1:学生成绩档案管理系统(实验准备)

    数据结构课程实践系列 题目1:学生成绩档案管理系统(实验准备) 题目2:隐式图的搜索问题(A*算法解决八数码) 题目3:文本文件单词的检索与计数(实验准备) 文章目录 数据结构课程实践系列 题目1:学 ...

  3. 题目1:学生成绩档案管理系统(代码实现)

    文章目录 Database Accounts Accounts AccountsInOut Student Student StudentSys DAO AccountsDao StudentDao ...

  4. 学生成绩档案管理系统(预习)

    学生成绩档案管理系统 实验任务 需求分析 开发环境 设计思路 相关算法 实验任务 1.学生信息录入,信息包括学号.姓名.专业.四门课成绩.总分.名次:系统可对学生信息浏览.增加.删除和修改: 2.按学 ...

  5. 学生成绩档案管理系统

    学生成绩档案管理系统 实验要求 实验设计 实验分析 初步分析 算法设计 快速排序 双向冒泡排序 堆排序 希尔排序 实验要求 • 学生信息录入,信息包括学号.姓名.专业.四门课成绩.总分.名次: • 系 ...

  6. 数据结构课程设计(学生成绩管理系统)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 200 typedef ...

  7. #数据结构与算法 第一小题 学生成绩档案管理系统

    写了一天,非常得没有效率,比较粗糙,注释不太丰富,但应该足以理解.强调:如有雷同,肯定被我参考了.不会写博客,以后会学习,这次就这样了.io参考链接:https://www.cnblogs.com/p ...

  8. 学生成绩档案管理系统(准备+结果)

    文章目录 一.实验任务及其实现功能 需求分析 二.开发工具及编程语言 1.开发工具 编程语言 三.算法分析 1.双向冒泡排序 2.希尔排序 3.快速排序 4.堆排序 参考资料 四.源代码 Pojo D ...

  9. 数据结构课程设计论文--学生信息管理系统

    数据结构课程设计论文--学生信息管理系统 1.学生成绩分析问题 (1)问题描述.录入并保存一个班级学生多门课程的成绩,并对成绩进行分析. (2)基本要求.a)通过键盘输入各学生的多门课程的成绩,建立相 ...

最新文章

  1. tlb存的什么_什么是MMU,TLB
  2. 异常检测算( OneClassSVM、EllipticEnvelope、IsolationForest、LocalOutlierFactor)法比较,基于四个仿真数据集
  3. 020-请你说一说app测试的工具
  4. mysql 配置分区_Mysql的分区配置实验
  5. http常见状态码详解
  6. XNA 游戏 运行时编辑器
  7. asp.net c# 打开新页面或页面跳转
  8. 当计算机运行死机时 可按,新编2012年会计从业资格考试应试模拟试卷-会计电算化理论(2012电理38卷)(10页)-原创力文档...
  9. 最新SSM完整模板(Spring+SpringMVC+MybatisPlus)
  10. 库克看下!罗永浩深夜再谈收购苹果:还需要点时间
  11. java形参、实参、值传递、引用传递
  12. CES现场直击 AI让你现场获得虚拟双胞胎
  13. 如何处理iOS中照片的方向
  14. 腾讯微博开放平台OAuth1.0授权完整流程(C#)
  15. 阿里本地生活电话面试
  16. qpython3.7.4版本下载_QPython3app下载
  17. mysql select if 使用
  18. 服务器被攻击显示,怎么查看服务器被攻击
  19. 国庆节想吃想玩要不去这? 央视推荐——新疆独库公路
  20. [转贴]Excel操作技巧大全(微软Office技巧大赛获奖作品)

热门文章

  1. Java缓存资料收集
  2. android studio新闻界面,课内资源 - 基于Android Studio实现的新闻APP
  3. 记录 coda装pytorch并不需要单独装cuda和cudnn|李沐评论
  4. Unicode排序编码表全部
  5. 小霸王推出可挖矿的VR眼镜,把IPFS、以太坊技术全用上了
  6. php5.6 php-fpm nginx安装和配置
  7. 十进制小数转为二进制小数
  8. 重新设置用户名之后vscode连接出错
  9. 计算用户输入的日期离1900年1月1日相距多少天。日期要大于1900(注意闰年,每个月份天数不一样)
  10. python简单游戏程序-python基础练习之几个简单的游戏