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. ...
随机推荐
- 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- Git (常用命令)
某程序猿退休后决定练习书法,于是花重金买下文房四宝.某日,饭后突生雅兴,一番磨墨拟纸 并点上上好檀香.定神片刻,泼墨挥毫,郑重地写下一行:Hello World 斯~ 有被冷到吗哈哈哈 Git常用命令 ...
- 百万数据 mysql count(*)优化
一.故事背景有一张 500w 左右的表做 select count(*) 速度特别慢. 二.原 SQL 分析Server version: 5.7.24-log MySQL Community Ser ...
- Redis设计与实现2.1:数据库和事件
数据库和事件 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 数据库 数据库的结构定义在 redis.h/redisServer 这个结构体中,这个结构体有许多 ...
- 最佳案例 | 游戏知几 AI 助手的云原生容器化之路
作者 张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作. 游戏知几 随着业务不断的拓展,游戏知几AI智能问答机器人业务已经覆盖了自研游戏.二方.海外的多款游戏.游戏知几研发团 ...
- 个人冲刺(一)——体温上报app(二阶段)
冲刺任务:完成app登录和注册页面的布局 activity_register.xml <?xml version="1.0" encoding="utf-8&quo ...
- 【单片机】CH32V103v8t6 - PA5-外部中断测试程序
main.c文件内容 /* *@Note 外部中断线例程: EXTI_Line5(PA5) PA5设置上拉输入,下降沿触发中断. */ #include "debug.h" /** ...
- Activate-or-Not:learning-customized-activation
关于activate-or-Not的PPT paper code step1 step2 step3 step4 step5 step6 step7 step8 step9 step10
- 缓存&PWA实践
缓存&PWA 实践 一.背景 从上一篇<前端动画实现与原理分析>,我们从 Performance 进行动画的性能分析,并根据 Performance 分析来优化动画.但,前端不仅仅 ...
- 详解TCP四次挥手(断开TCP连接过程)
在讲述TCP四次挥手,即断开TCP连接的过程之前,需要先介绍一下TCP协议的包结构. TCP协议包结构: 这里只对涉及到四次挥手过程的字段做解释 (1) 序号(Sequence number) 我们通 ...