题目1:学生成绩档案管理系统(实验准备)
数据结构课程实践系列
题目1:学生成绩档案管理系统(实验准备)
题目2:隐式图的搜索问题(A*算法解决八数码)
题目3:文本文件单词的检索与计数(实验准备)
文章目录
- 数据结构课程实践系列
- 题目1:学生成绩档案管理系统(实验准备)
- 题目2:隐式图的搜索问题(A*算法解决八数码)
- 题目3:文本文件单词的检索与计数(实验准备)
- 声明
- 实验要求
- 编程语言以及开发环境的选择
- 所需知识
- 所需知识导出
- DAO运用
- 简单排序算法
- 双向冒泡排序
- 快速排序
- 希尔排序
- 堆排序
声明
实验要求
- 学生信息录入,信息包括学号、姓名、专业、四门课成绩、总分、名次;
- 系统可对学生信息浏览、增加、删除和修改;
- 按学生成绩确定名次及信息输出,双向冒泡排序、希尔排序、快速排序、堆排序
- 要求可对学生信息查询,根据学号或姓名进行查找;
- 信息修改仅可修改四门课成绩;
- 文件存取学生信息。
编程语言以及开发环境的选择
编程语言:java
开发环境:IDE使用的是idea,jdk版本为1.8
所需知识
一些简单排序算法,以及DAO
所需知识导出
DAO运用
DAO
(Database Access Object) 数据访问对象,将数据对象常用的访问方法(增删改查)封装在指定的对象中,该对象就称为DAO对象,DAO对象是数据层构建的基础,由业务层对象进行调用,DAO中定义的数据访问方法和业务无关。
DAO设计模式主要分为三层:
- 显示层:主要使用
JSP/Servlet
进行页面效果的显示 - 业务层:(Business Object,数据对象)会将多个原子性的DAO操作进行组合,组合成一个完整的业务逻辑。
- 数据层:(DAO,Data Access Object,数据库访问对象)提供多个原子性的DAO操作,例如:增、删、改、查,都是原子性操作。
其实也就是利用一个Dao对象,然后这个对象里面实现了相应的增删改查,不让用户去直接接触到数据库。感觉和windows中线性虚拟地址的运用有着相同的味道
简单排序算法
双向冒泡排序
传统冒泡排序运作如下:(从后往前)
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
双向冒泡排序算法的运作如下:
- 传统冒泡气泡排序的双向进行,先让气泡排序由左向右进行,再来让气泡排序由右往左进行,如此完成一次排序的动作
- 使用left与right两个旗标来记录左右两端已排序的元素位置。
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).getSum()<list.get(i).getSum()){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).getSum()>list.get(i).getSum()){student=list.get(i);list.set(i,list.get(right));list.set(right,student);}}right--;}return list;}
快速排序
快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
快速排序算法的运作如下:
- 从数列中挑出一个元素,称为“基准”(pivot),
- 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
- 递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
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.getSum();while(i<j){while((i<j)&&(studentList.get(j).getSum()<x)){j--;}if(i<j){studentList.set(i,studentList.get(j));i++;}while((i<j)&&(studentList.get(i).getSum()>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);}}
希尔排序
希尔排序是非稳定排序算法,把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
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.getSum();for (j = i; j >= gap && tmp>list.get(j-gap).getSum(); j -= gap) {list.set(j,list.get(j-gap));}list.set(j,student);}}return list;}
堆排序
堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
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).getSum() < studentList.get(largest).getSum()) {largest = left;}if (right < len && studentList.get(right).getSum() < studentList.get(largest).getSum()) {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);}
题目1:学生成绩档案管理系统(实验准备)相关推荐
- 学生成绩档案管理系统
学生成绩档案管理系统 实验要求 实验设计 实验分析 初步分析 算法设计 快速排序 双向冒泡排序 堆排序 希尔排序 实验要求 • 学生信息录入,信息包括学号.姓名.专业.四门课成绩.总分.名次: • 系 ...
- 学生成绩档案管理系统(预习)
学生成绩档案管理系统 实验任务 需求分析 开发环境 设计思路 相关算法 实验任务 1.学生信息录入,信息包括学号.姓名.专业.四门课成绩.总分.名次:系统可对学生信息浏览.增加.删除和修改: 2.按学 ...
- 题目1:学生成绩档案管理系统(代码实现)
文章目录 Database Accounts Accounts AccountsInOut Student Student StudentSys DAO AccountsDao StudentDao ...
- 《数据结构课程实践》_01_学生成绩档案管理系统_实现
01_学生成绩档案管理系统_实现 一.实验题目 二.编程语言以及开发环境 三.源代码 1.学生类 2.自定义数据库类 3.数据操作类 4.总服务类 5. main类 四.运行结果 五.实验小结 一.实 ...
- 《数据结构课程实践》_01_学生成绩档案管理系统_准备工作
01_学生成绩档案管理系统_准备工作 一.实验题目与要求 二.编程语言以及开发环境 三.实验思路 1. 思考初始化数据处理 2. 学生对象处理 3. 操作处理 4. 方法描述 四.预习小结 一.实验题 ...
- 学生成绩档案管理系统(准备+结果)
文章目录 一.实验任务及其实现功能 需求分析 二.开发工具及编程语言 1.开发工具 编程语言 三.算法分析 1.双向冒泡排序 2.希尔排序 3.快速排序 4.堆排序 参考资料 四.源代码 Pojo D ...
- #数据结构与算法 第一小题 学生成绩档案管理系统
写了一天,非常得没有效率,比较粗糙,注释不太丰富,但应该足以理解.强调:如有雷同,肯定被我参考了.不会写博客,以后会学习,这次就这样了.io参考链接:https://www.cnblogs.com/p ...
- c语言学生档案管理课设作业,2019-2020年c语言课程设计学生档案管理系统实验报告.doc...
2019-2020年c语言课程设计学生档案管理系统实验报告.doc 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: *********C 语 ...
- 任务2 学生成绩信息管理系统
系列文章 任务2 学生成绩信息管理系统 某班级学生C语言第一次正考的成绩存于数据文件score.txt中,记录了学生学号.姓名和考试成绩,bk.txt文件中记录了补考学生的学号.姓名和补考成绩,编写程 ...
最新文章
- 室内+室外激光SLAM关键算法、代码和实战剖析正式开课(cartographer+LOAM+ LIO-SAM)
- android VectorDrawable使用笔记(二)
- rcp errata
- GDCM:gdcm::UIComp的测试程序
- [NOIP2008 提高组] 笨小猴-map容器用来标记
- sql语句的执行过程和优化
- 白话Word2Vec
- 魔方Newlife.Cube权限系统的使用及模版覆盖详解
- 简笔画花边边框超简单_好看的花边边框简笔画
- python爬虫框架论文开题报告范文_基于Scrapy的分布式网络爬虫的设计与实现.doc...
- 计算机网络教室管理制度
- rxj热血江hsf湖私服_如何使用RxJ进行React性思考和动画化移动对象
- Win7中删除桌面IE图标
- PPT中插入的图片如何铺满整页
- win10下载文件夹变成英文了该怎么办?下载文件夹变成英文的修复方法
- 设计师和程序员必备:全世界最著名的 icon 网站都在这了
- zipfile的压缩和解压缩
- 蓝色基因 p超级计算机,蓝色巨人推出全球最快计算机蓝色基因 代号P
- element UI table合并行合并列(整理)
- springboot集成mongoDB高级聚合查询,关联查询
热门文章
- 成功解决sub_div.insert(points)cv2.error: OpenCV(3.4.1) C:\projects\opencv-python\opencv\modules\imgproc
- 成功解决未授予用户在此计算机上的请求登录类型图文教程
- 成功解决AttributeError: module 'numpy' has no attribute 'integer'
- DL:神经网络算法简介之耗算力的简介、原因、经典模型耗算力计算、GPU使用之详细攻略
- TF之CNN:Tensorflow构建卷积神经网络CNN的简介、使用方法、应用之详细攻略
- CV之IG:图像生成(Image Generation)的简介、使用方法、案例应用之详细攻略
- 实例使用pyhanlp创建中文词云
- [入门]C#语法里面,如何使用 VB的常用函数?(using Microsoft.VisualBasic)
- 苹果也像谷歌一样,玩起了自己的X
- LeetCode 117. Populating Next Right Pointers in Each Node II