Java综合练习小项目——快递柜

快递柜


前言

这是针对基础部分的综合练习,需要了解的知识有变量、数据类型、数组。
取快递是现在大部分人都会做的事情,那么小白该怎么写出一个简单的取快递的程序呢?那么请按照以下功能条件来写出一个简单的快递柜小项目吧。


一、项目介绍

1.功能介绍

  1. 身份选择(快递员和普通用户)
    在这里插入图片描述
    在这里插入图片描述

2.存快递
在这里插入图片描述
3.删除快递
在这里插入图片描述

4.修改快递信息
在这里插入图片描述
5.查看快递信息
在这里插入图片描述
6.取快递
在这里插入图片描述

注意:因为快递柜是一个系统,那么完成每一步操作后,都会返回到欢迎界面。

2.注意点

随机数:Math.random()
1.生成从0到n的随机整数 即返回值[0,n]
	int number=(int)(Math.random()*(n+1);
2.生成从a到b的随机整数 即返回值[a,b]
	int num=a+(int)(Math.random()*(b-a+1)); 

二、相关代码


/*
    需求:身份:1 快递员 2 用户
        1.快递员=》功能:1.存快递 2.删除快递 3.修改快递 4.查看快递
        2.用户=》功能:1.取快递

 */

import java.util.Scanner;

public class kd {

    public static void main(String[] args) {


        //欢迎界面和提示:输入角色




        //定义数组,存放快递信息
        //创建数组,存放取件码
        int[] code=new int[50];
        //存放快递单号
        String id[] = new String[50];
        //存放快递公司名称
        String[] company = new String[50];

        //进入快递E栈
        while (true){
            System.out.println("====欢迎来到快递E栈====");
            System.out.println("请输入你的身份:1-快递员 2-用户");
            Scanner input = new Scanner((System.in));
            int role = input.nextInt();

            if (role==1){
                System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
                int num=input.nextInt();

                if (num==1){
                        //存快递操作
                        System.out.println("请输入快递单号");
                        String sid=input.next();
                        System.out.println("请输入公司名称");
                        String scompany=input.next();
                        //Math.random():产生一个随机数[0.0,1.0)
                        //(数据类型)(Math.random()*(最大值-最小值)+最小值)
                        int scode=(int)(Math.random()*(1000-100)+100);  //生成100~1000之间的随机数

                        //首先判断是否快递柜存满
                        int index=-1;//数组下标暂为-1,若快递柜没满,那么赋值给index,即需要存的快递为index(因为数组下标从0开始);
                        for (int i=0;i<id.length;i++){
                            if (id[i]==null){
                                index=i;
                                break;
                            }
                        }
                        //
                        if(index==-1){
                            System.out.println("快递柜已满");
                        }else {
                            //即上述for查询中,快递柜index已改变,快递柜未满,那么就添加数据
                            id[index]=sid;  //快递单号
                            company[index] = scompany;  //快递公司
                            code[index]=scode;  //取件码
                            //添加成功之后,显示成功
                            System.out.println("快递添加成功,"+"取件码:"+scode);
                        }

                }else if (num==2){
                    //删除快递
                    System.out.println("请输入要删除的快递单号");
                    String sid2 = input.next();
                    //进行数据匹配
                    int index=-1;
                    for (int i=0;i<id.length;i++){
                        //判断单号是否为空,且输入和数组中的数据是否相等
                        if (id[i].equals(sid2) && id[i]!=null){
                            //符合数据
                            index=i;
                            break;
                        }
                    }
                    //进行判断操作=》是否删除
                    if (index==-1){
                        System.out.println("没有该快递信息");
                    }//存在该快递信息
                    else {
                        //符合数据库,进行删除和移动位置操作
                        //移位(因为需要删除该index 上的数据,且不用index占据的位置,所以id.length-1)
                       //用后面的覆盖前面的内容
                        for (int i=index;i<id.length-1;i++){
                            id[i]=id[i+1];
                            code[i]=code[i+1];
                            company[i]=company[i+1];
                        }
                        //把最后的位置设置为空,因为都向前移动一位(id.length-1是因为现存数组长度比原数组长度少1,所以需要-1)
                        id[id.length-1]=null;
                        company[company.length-1]=null;
                        code[code.length-1]=0;
                        System.out.println("删除成功");
                    }

                }else if (num==3){
                    //修改快递信息
                    System.out.println("请输入要修改的快递单号");
                    String sid3=input.next();


                    //循环遍历单号
                    int index=-1;//用该变量来匹配是否有对应的快递单号
                    for (int i=0;i<id.length;i++){
                        //存在该单号
                        if (id[i].equals(sid3) && id[i]!=null){
                            index=i;
                            break;
                        }

                    }
                    //操作
                    if (index==-1){
                        System.out.println("没有该快递信息");
                    }
                    else {
                        //存在该快递,那么就开始修改
                        System.out.println("请输入新的快递单号");
                        String sid4=input.next();
                        id[index]=sid4; //赋值
                        System.out.println("请输入新的公司名称");
                        String scompany2=input.next();
                        company[index]=scompany2;
                        //取件码不变,输出显示
                        System.out.println("修改成功!");
                    }

                }else if (num==4){
                    //查看快递
                    //1.判断是否数组内容为空
                    int index=-1;   //用该变量来查看数组是否为空
                    System.out.println("所有快递信息如下:");
                    for (int i=0;i<id.length;i++){
                        if (id[i]!=null && company[i]!=null && code[i]!=0){
                            //该数组不为空
                            System.out.println("快递单号:"+id[i]+",快递公司:"+company[i]+",取件码:"+code[i]);
                            index=i;    //赋值,并继续

                        }else if (index==-1){
                            System.out.println("快递柜没有快递");
                        }
                    }
                }else {
                    System.out.println("请输入正确的编号");
                }
            }
            else if(role==2){
                System.out.println("请输入取件码");
                int scode2=input.nextInt();
                //循环遍历
                int index=-1;
                for (int i=0;i<id.length;i++){
                    if (code[i]==scode2 && code[i]!=0){
                        index=i;
                        break;
                    }
                }
                //操作
                if (index==-1){
                    System.out.println("没有该快递信息");
                }
                else {
                    //存在该快递,取件
                    id[index]=null;
                    code[index]=0;
                    company[index]=null;
                    System.out.println("取件成功");
                }


            }else {
                System.out.println("请输入正确的选项");
            }

        }
    }
}

<think>嗯,用户之前问过作为小白应该从哪里开始学编程,我推荐了Python,但现在用户说想先学C语言。我需要调整之前的建议,但保持同样的结构。用户可能对底层感兴趣,或者有特定目标,比如嵌入式系统、操作系统开发。不过作为小白,C语言可能比较难,需要更详细的指导。 首先,我得确认用户了解C语言的挑战,比如指针和内存管理,但也要鼓励他们,说明学习C的好处,比如打好基础。然后,按照之前的步骤结构,分阶段引导,从环境搭建到基础语法,再到项目练习,最后进阶内容。可能需要更多的比喻和简单例子,避免用户被吓到。 要注意用户是小白,所以例子要更简单,解释更详细。比如,变量部分用储物柜的比喻,指针用房间号的例子。项目方面,选择计算器、温度转换、成绩统计这些贴近生活的例子。同时,避坑指南部分要针对C常见错误,比如分号忘记、头文件缺失等。 还要比较C和Python的不同,说明为什么从C开始可能有挑战,但如果有兴趣和坚持是可以的。最后,鼓励用户,强调动手实践的重要性,并提供资源链接,比如编译器安装、在线学习平台。确保整个回答结构清晰,步骤明确,语言浅显易懂。</think>好的!想从C语言入门是个很棒的选择——它就像编程世界的「骨架」,能帮你深入理解计算机底层原理。不过要注意,C语言的学习曲线比Python陡峭(像直接骑两轮自行车),需要更多耐心。以下是**针对小白的C语言学习路线**,用生活化案例拆解: --- ### **C语言特点先知道**(心理准备) 1. **贴近硬件**:直接操作内存(像自己管理仓库库存) 2. **高效但复杂**:需要手动管理细节(像开手动挡汽车) 3. **影响深远**:C++/Java/Python等语言都借鉴了它的设计 --- ### **第一阶段:搭建「工作台」(第1天)** **工具准备**(就像木匠需要锯子和锤子): 1. **编译器安装**: - Windows:下载[MinGW](https://sourceforge.net/projects/mingw/) - Mac/Linux:系统自带`gcc`(终端输入`gcc --version`测试) 2. **编辑器推荐**: - [VS Code](https://code.visualstudio.com/)(安装C/C++扩展) - [Code::Blocks](http://www.codeblocks.org/)(新手友好) **验证安装**:写第一个程序(就像学做菜先煮鸡蛋) ```c #include <stdio.h> // 包含标准输入输出库 int main() { // 程序入口(像房子的主门) printf("Hello, 世界!\n"); // \n代表换行 return 0; // 告诉系统程序正常结束 } ``` ➔ 保存为`hello.c`,终端执行: ```bash gcc hello.c -o hello # 编译 ./hello # 运行(Windows用hello.exe) ``` --- ### **第二阶段:掌握「基础语法」(第2-7天)** **核心四件套**(像学做菜的刀工和火候): 1. **变量与数据类型**(储物柜分类管理) ```c int age = 20; // 整数柜(-2147483648 ~ 2147483647) float price = 9.8; // 小数柜(精确到6位) char grade = 'A'; // 字符柜(单引号) char name[] = "小明"; // 字符串(双引号+方括号) ``` 2. **输入输出**(与用户对话) ```c int score; printf("请输入分数:"); // 显示提示 scanf("%d", &score); // %d对应整数,&符号不能少! printf("你输入的是:%d\n", score); ``` 3. **条件语句**(if-else决策树) ```c int temperature; printf("当前温度:"); scanf("%d", &temperature); if (temperature > 30) { printf("建议开空调\n"); } else if (temperature < 10) { printf("记得穿羽绒服\n"); } else { printf("天气舒适\n"); } ``` 4. **循环结构**(重复劳动自动化) ```c // for循环:精确控制次数(像微波炉定时) for(int i=1; i<=5; i++) { printf("第%d次浇水\n", i); } // while循环:条件满足就执行(像烧水等沸腾) int water = 0; while(water < 100) { printf("当前水温:%d℃\n", water); water += 10; } ``` --- ### **第三阶段:攻克「难点关卡」(第2-3周)** **三大重点难点**(像学自行车时的刹车和平衡): 1. **数组**(批量数据管理) ```c // 存储一周温度 float temperatures[7] = {22.5, 23.0, 24.3, 21.7, 20.9, 25.1, 19.8}; printf("周三温度:%.1f℃\n", temperatures[2]); // 输出24.3 ``` 2. **函数**(代码模块化) ```c // 声明函数(像菜谱目录) float convertFtoC(float fahrenheit); int main() { float f = 77.0; printf("%.1f华氏度 = %.1f摄氏度\n", f, convertFtoC(f)); return 0; } // 定义函数(具体做菜步骤) float convertFtoC(float fahrenheit) { return (fahrenheit - 32) * 5 / 9; } ``` 3. **指针**(C语言精髓,像掌握仓库的钥匙) ```c int num = 10; // 定义一个变量 int *p = &num; // p存储num的地址(像记下储物柜编号) printf("num的值:%d\n", num); // 输出10 printf("通过指针访问:%d\n", *p); // *p表示取该地址的值 *p = 20; // 通过指针修改值 printf("修改后:%d\n", num); // 输出20 ``` --- ### **第四阶段:实战小项目(第4周)** **推荐项目清单**(从简单到复杂): 1. **智能计算器**(支持加减乘除) ```c #include <stdio.h> int main() { char op; double num1, num2; printf("输入运算符(+ - * /): "); scanf("%c", &op); printf("输入两个数字: "); scanf("%lf %lf", &num1, &num2); switch(op) { case '+': printf("%.1lf + %.1lf = %.1lf", num1, num2, num1+num2); break; case '-': printf("%.1lf - %.1lf = %.1lf", num1, num2, num1-num2); break; case '*': printf("%.1lf * %.1lf = %.1lf", num1, num2, num1*num2); break; case '/': if(num2 != 0) printf("%.1lf / %.1lf = %.1lf", num1, num2, num1/num2); else printf("除数不能为0"); break; default: printf("无效运算符"); } return 0; } ``` 2. **温度单位转换器**(摄氏←→华氏) 3. **学生成绩管理系统**(存储多科成绩,计算平均分) --- ### **C语言常见问题急救包** | 问题 | 解决方法 | 类比解释 | |-----------------------|--------------------------|----------------------| | 编译报错`undefined reference` | 检查是否漏写main函数 | 像房子没装门 | | 程序闪退 | 在return前加`getchar();` | 让程序等待用户按回车 | | `scanf`不读取输入 | 检查变量前是否漏写`&`符号 | 像填快递单不写地址 | | 死循环 | 确认循环条件有终止机会 | 像烧水不关火 | --- ### **学习资源推荐** 1. **书籍**: - 《C Primer Plus》(详细全面) - 《啊哈C语言》(漫画风格入门) 2. **网站**: - [菜鸟教程C语言](https://www.runoob.com/cprogramming/c-tutorial.html) - [Learn-C.org](https://www.learn-c.org/)(在线练习) 3. **视频**: - B站【C语言入门到精通】[浙江大学翁恺课程](https://www.bilibili.com/video/BV1dr4y1j7Mz) --- ### **关键学习建议** 1. **从模仿开始**:先抄写代码,再逐步修改 2. **理解内存模型**:画图辅助理解指针和数组 3. **坚持调试**:使用`printf`打印中间值(像给程序做X光检查) 现在就可以尝试这个指针练习: ```c #include <stdio.h> int main() { int a = 5; int *p = &a; printf("a的地址:%p\n", p); printf("通过指针改值前:%d\n", a); *p = 10; printf("改值后:%d\n", a); return 0; } ``` 你会看到通过指针可以直接修改变量的值——这就是C语言的魔法!✨
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值