2022-07-15/16 第一小组 田龙月 管理系统javaSE
JavaSE小项目(基础语法;二分查找;冒泡排序)--还是存在bug:删除一个数组内一组数据后面只有一组后面数据能向前移位 (YY:使用“方法”应该会好很多,代码架构会清晰一点)未找到用户时的提示功能未完成
点击查看代码
import java.util.Scanner;
public class ManageSystem {
public static void main(String[] args) {
int nos[] = new int[3];
String names[] = new String[3];
int rowData=0;
Scanner sc = new Scanner(System.in);
System.out.println("欢迎进入员工管理系统");
mainProgram:for (; ; ) {
System.out.println("请输入数字选择操作: 1.添加员工 2.查询员工信息 3.修改员工信息 4.删除员工信息,按其他任意键退出系统");
String flag = sc.next();
// 分支程序:选择功能
switch (flag) {
case "1":
//添加员工功能
//先查看是否有剩余容量
loopInsert:for (int i = 0; i < 100; i++) {
System.out.println("请输入姓名");
nos[rowData] = 1000 + rowData;
String name = sc.next();
names[rowData] = name;
System.out.println("工号为" + nos[rowData] + "名字是" + names[rowData]);
rowData++;
// ********************数组扩容*****************************
if (names[names.length - 1] != null && nos[nos.length - 1] != 0) {
int[] newNos = new int[nos.length + 2];
String[] newNames = new String[names.length + 2];
for (int no = 0; no < nos.length; no++) {
newNos[no] = nos[no];
}
for (int no = 0; no < names.length; no++) {
newNames[no] = names[no];
}
nos = newNos; //直接复制的话原数组的大小,数据都会被复制过去
names = newNames;
}
System.out.println("继续输入请输入1,查看其它功能任意键");
String exit1 = sc.next();
switch (exit1) {
case "1":
continue loopInsert;
default:
continue mainProgram;//缺少返回总系统标签
}
}
case "2":
System.out.println("欢迎查询员工信息");
search:while (true){
System.out.println("按工号查询员工信息请按‘1’,按姓名查询员工信息请按‘2’,输出所有员工请按‘3’,逆序输出请按‘4’");
String tempSearch=sc.next();
switch (tempSearch){
case "1":
searchNum:for(;;){
System.out.println("请输入想查询的工号");
int no=sc.nextInt();
int left=0;
int right=nos.length-1;
if (no<nos[left]&&no>nos[right]){
System.out.println("您查找的用户不存在");
}else {
// 二分查找(算法)
while (left<=right){
int middle=(right+left)/2; //一定要放在循环里面middle才会变
if (nos[middle]==no){
System.out.println("你查询的员工工号为"+no+"姓名为"+names[middle]);
break;
} else if (nos[middle]>no) {
right=middle-1;
}else {
left=middle+1;
}
}
}
System.out.println("继续输入请输入1,,上一层请按2,返回主菜单任意键");
String exit1= sc.next();
switch(exit1){
case "1":
System.out.println("继续操作");
continue searchNum;
case "2":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
}
}
case "2":
searchName:for (;;){
System.out.println("请输入想查询的员工姓名");
String tempName= sc.next();
for (int i = 0; i < names.length; i++) {
if (names[i].equals(tempName)){
System.out.println("你查询的员工工号为"+nos[i]+"姓名为"+tempName);
}
}
System.out.println("继续输入请输入1,,上一层请按2,返回主菜单任意键");
String exit1= sc.next();
switch(exit1){
case "1":
System.out.println("继续操作");
continue searchName;
case "2":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
}}
case "3":
printAll:for(int i=0;i< nos.length;i++) {
System.out.println("你查询的员工工号为" + nos[i] + "姓名为" + names[i]);
}
System.out.println("返回上一层请按1,返回主菜单任意键");
String exit2= sc.next();
switch(exit2){
case "1":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
}
case "4":
printReverse:for (;;){
System.out.println("员工逆序输出");
int tempNum;
String tempStr;
// 冒泡排序(算法)
for (int i=0;i<nos.length-1;i++){
for (int j=0;j<nos.length-i-1;j++){
if(nos[j]<nos[j+1]){
tempNum=nos[j];
nos[j]=nos[j+1];
nos[j+1]=tempNum;
tempStr=names[j];
names[j]=names[j+1];
names[j+1]=tempStr;
}
}
}
for (int i = 0; i < nos.length; i++) {
System.out.println("你查询的员工工号为"+nos[i]+"姓名为"+names[i]+"(逆序)");
}
System.out.println("返回上一层请按1,返回主菜单任意键");
String exit3= sc.next();
switch(exit3) {
case "1":
System.out.println("已返回上一层");
continue search;
default:
continue mainProgram;//缺少返回总系统标签
}
}
default:
System.out.println("输入错误,请重新选择信息");
continue search;
}
}
case "3": //修改员工功能
change:for (;;) {
System.out.println("输入想要修改的员工的员工姓名");
String tempString = sc.next();
// int tempInt=sc.nextInt();
changeIn:
for (int i = 0; i < nos.length; i++) {
if (tempString.equals(names[i]) ){//想要判断工号还需再加ifelse,执行工号判断,flese,else里写Integer.parseInt(tempString)==nos[i]进行判断
// int flag1 = 1;
// if (flag1 != 1) {
// System.out.println("您输入的信息还有其他额外信息");
// }
System.out.println("你想修改的员工的工号为" + nos[i] + "姓名是" + names[i]);
System.out.println("请输入想要的名字信息");
names[i] = sc.next();
System.out.println("修改后的员工的工号为" + nos[i] + "姓名是" + names[i]);
// flag1++; //这里想做的本来是一个提示还有其他用户姓名与想要查询的员工姓名相同,然后进行提示,那样的话flag要定义在外面,和判断数组中元素是否存在代码结构相同
}
}
System.out.println("返回主菜单任意键");
String exit1= sc.next();
switch(exit1) {
default:
continue mainProgram;//缺少返回总系统标签
}
}
case "4": //删除员工信息
deleteMes:for(;;){
System.out.println("删除前员工信息为");
for (int i = 0; i < nos.length; i++) {
System.out.println("工号:"+nos[i]+"姓名:"+names[i]);
}
System.out.println("输入想要删除的员工的员工姓名");
String tempString=sc.next();
deleteAgain:for (int i= 0;i<nos.length;i++) {
if (tempString.equals(names[i])){
// int flag1=1;
// if(flag1!=1) {
// System.out.println("您输入的信息还有其他额外信息");
// }
askAgain:for (;;){
System.out.println("你想删除的员工的工号为"+nos[i]+"姓名是"+names[i]+",是否删除当前员工?1是2否");
// flag1++;
String judge=sc.next();
if (judge.equals("是")){
// ************************数组移位**************************
for (int j = i; j < nos.length-1; j++) {
names[j]=names[j+1]; //删除数组内元素,元素前移
nos[j]=nos[j+1];
names[j+1]=null;
nos[j+1]=0;
}
continue deleteAgain;
} else if (judge.equals("否")) {
System.out.println("本次操作已完成");
break deleteMes;
}else {
System.out.println("返回主菜单");
continue mainProgram;
}
}
}
}
System.out.println("输入后员工信息为");
for (int i = 0; i < nos.length; i++) {
System.out.println("工号:"+nos[i]+"姓名:"+names[i]);
}
// 选择下一步
System.out.println("返回上一层请按1,返回主菜单任意键");
String exit1= sc.next();
switch(exit1) {
case "1":
System.out.println("已返回上一层");
continue deleteMes;
default:
continue mainProgram;//缺少返回总系统标签
}
}
default:
System.exit(0);
}
}}}
算法
线性查找
线性查找:就是顺序查找,时间复杂度O(1),如果数据在最后一位,效率最差。
二分查找
二分查找的要求:一定要是有序数组才可以进行二分查找,设置左右索引left&right,中间为比较项middle,和数值比较,大于比较项则left=middle+1,小于则right=middle-1,然后middle值会发生变化
点击查看代码
System.out.println("请输入想查询的工号");
int no=sc.nextInt();
int left=0; //左索引
int right=nos.length-1; //右索引
if (no<nos[left]&&no>nos[right]){//判断是否在数组中
System.out.println("您查找的用户不存在");
}else {
// 二分查找(算法)
while (left<=right){
int middle=(right+left)/2; //一定要放在循环里面middle才会变
if (nos[middle]==no){
System.out.println("你查询的员工工号为"+no+"姓名为"+names[middle]);
break;
} else if (nos[middle]>no) {
right=middle-1; //中间小于middle,right左移
}else {
left=middle+1;//中间大于middle,left右移
}
}
}
##冒泡排序
点击查看代码
public class BubbleSort {
public static void main(String[] args) {
int [] arr=new int[]{1,5,3,9,-2};
int tempNum;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j]>arr[j+1]){
tempNum=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tempNum;
}
}
}
for (int i:arr){
System.out.print(i+",");
}
}
}

选择排序
假定我们的第一个元素就是当前最小(大)的,一个一个与后面进行比较,如果后面的比我们的第一元素小,就把他们俩个元素在数组内位置进行交换,然后再拿这个元素往后比较,第一轮比较完成后,在拿第二个元素作为基准重复上面的操作。
点击查看代码
public class SelectSort {
public static void main(String[] args) {
int [] arr=new int[]{-2,-9,5,6,10,-1,0};
int tempInt;
for (int i = 0; i < arr.length-1; i++) { //一个一个拿取元素
for (int j = i+1; j < arr.length ; j++) {
if (arr[i]>arr[j]){//比后面大,准备交换俩个元素在数组中的位置
tempInt=arr[i];
arr[i]=arr[j];
arr[j]=tempInt;
}
}
}
for (int i:arr){
System.out.print(i+",");
}
}
}

2022-07-15/16 第一小组 田龙月 管理系统javaSE的更多相关文章
- 2022 07 13 第一小组 田龙跃 Java再学习笔记
1.类名命名规则: 只能由数字字母,下划线,美元符号组成(不能以数字开头,尽量不要用下划线开头) 2.注释(养成多写注释的好习惯) 单行注释 // ctrl+/ 多行注释 // ctrl+shirt+ ...
- Python Cookbook(第3版)中文版:15.16 不确定编码格式的C字符串
15.16 不确定编码格式的C字符串¶ 问题¶ 你要在C和Python直接来回转换字符串,但是C中的编码格式并不确定. 例如,可能C中的数据期望是UTF-8,但是并没有强制它必须是. 你想编写代码来以 ...
- oracle 日期函数 求年的最后一天、第一天,月的最后一天
add_months(trunc(to_date('2013','yyyy') ,'yyyy'),12)-1 2013年最后一天 trunc(to_date('2013','yyyy') ,'yyy ...
- 剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...
- linux 学习15 16 启动管理,备份和恢复
第十五讲 启动管理 . CentOS .x 启动管理 //此处指6.3 系统运行级别 .运行级别 运行级别 含 义 关机 单用户模式,可以想象为windows的安全模式,主要用于系统修复 //linu ...
- 日报 18/07/15 Java 性能优化
尽量指定类和方法的final修饰符 带有final修饰符的类是不可派生的 在java核心api中 有许多应用final的例子 例如 java.lang.string整个类都是final的 为类指定fi ...
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- 【20171027中】alert(1) to win 第13,14,15,16题
第13题 题目: function escape(s) { var tag = document.createElement('iframe'); // For this one, you get t ...
- 13.14.15.16.17&《一个程序猿的生命周期》读后感
13.TDS 的标准是什么,怎么样才能认为他是一个标准的TDS?? 14.软件的质量包括哪些方面,如何权衡软件的质量? 15.如何解决功能与时间的矛盾,优秀的软件团队会发布有已知缺陷的软件么? 16. ...
随机推荐
- ChCore Lab1 机器启动 实验笔记
本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第一篇. 书籍官网:现代操作系统:原理与实现,里面有实验的参考指南和代码仓 ...
- 多级级联数据的展示-vue递归组件
如果采用普通的for循环方式,没办法确认数据到底有几层,要写几个for循环,所以想到了递归的方法. 那么在vue里然后实现呢? vue递归组件(组件中使用自己) 父组件中把数据以props形式传给子组 ...
- ThinkPHP信息泄露
昨天遇到了一个ThinkPHP日志泄露,然后我就写了个脚本利用shodan搜索批量的来找一下漏洞,估计已经被人撸完了,不过还有一些网站有着此漏洞.ip收集和漏洞验证脚本工具我会放在最下面,需要的直接复 ...
- web框架的本质、MVC框架MTV框架的介绍
1.web框架的本质 所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请 ...
- CSS Diner详解
详细CSS Diner CSS Diner想必很多人听过,这是一个练习CSS中的选择器的不错的网站,最近在学习前端,打算好好写一下 常用英文单词: plates:盘子 bento:盒饭.便当 pick ...
- Mqtt入门:在线调试连接阿里云
近期课设需要做个东西,我想要做个上位机更好的显示. 但是一开始学习一样东西,听没头绪的,不知道从哪里入手,尝试过去B站找视频看,但是感觉视频讲的都是基础的东西,不是说人家up主讲的不好,只是对于入门, ...
- vmware ubuntu 看不到网卡或连接不到网络
执行以下命令就可以重新请求 dhcp 服务器,一般就可以联网了, ens33 是网卡名称,根据自己的情况替换 sudo dhclient ens33 右上角网络图标消失 # 先停止服务 sudo se ...
- 169. Majority Element - LeetCode
Question 169. Majority Element Solution 思路:构造一个map存储每个数字出现的次数,然后遍历map返回出现次数大于数组一半的数字. 还有一种思路是:对这个数组排 ...
- Maven生成可以直接执行的jar包
要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1.在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里: 2.要能 ...
- 好客租房33-事件绑定this指向(总结)
1推荐使用class的实例方法 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // 约 ...