当前位置: 首页 > news >正文

java idea中做一个简易的图书管理系统(控制台输入输出,无数据库)

1:先创建增删改查四个接口

(1)QueryBook查询接口

package com.by.dao;import com.by.entity.Book;public interface QueryBook {/*** 查询所有图书信息* @param bs*/void selectBook(Book[] bs);/*** 根据名字查询一个图书信息* @param bookName* @param bs*/void selectBookByBookname(String bookName,Book[] bs);
}

(2)AddBook 增加接口

package com.by.dao;import com.by.entity.Book;public interface AddBook {/*** 在原图书数组末尾添加一个图书信息* @param book   被添加的图书对象* @param bs     图书数组* @return*/Book [] insertBook(Book book,Book[] bs);
}

(3)RemoveBook删除接口

package com.by.dao;import com.by.entity.Book;public interface RemoveBook {/*** 删除指定图书对象* @param bookName  删除的图书名,图书对象* @param bs   返回的数组* @return*/Book[] deleteBooksByName(String bookName, Book[] bs);
}

(4)UpdateBook修改接口

package com.by.dao;import com.by.entity.Book;public interface UpdateBook {/*** 根据图书名修改图书信息* @param bookName 图书名* @param bs   数组中内容改变*/void setBookByName(String bookName,Book book,Book []bs);
}

2:创建用户类实现查询接口

package com.by.entity;import com.by.dao.QueryBook;import java.util.Scanner;public class User implements QueryBook {private String userName;private String password;public User() {}public User(String userName, String password) {this.userName = userName;this.password = password;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic void selectBook(Book[] bs) {for (int i = 0; i <bs.length; i++) {System.out.println("图书名"+bs[i].getBookName()+" , "+"作者名"+bs[i].getBookAuthor()+" , "+"价格"+bs[i].getBookPrice()+" , "+"库存"+bs[i].getBookInventory());}}@Overridepublic void selectBookByBookname(String bookName, Book[] bs) {for (int i = 0; i <bs.length ; i++) {if (bookName.equals(bs[i].getBookName())){System.out.println("图书名"+bs[i].getBookName()+" , "+"作者名"+bs[i].getBookAuthor()+" , "+"价格"+bs[i].getBookPrice()+" , "+"库存"+bs[i].getBookInventory());}}}/*  Scanner sc=new Scanner(System.in);public void login(){System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc=new Scanner(System.in);System.out.println("请输入用户名:");String name=sc.nextLine();if (name.equals(this.userName)){System.out.println("请输入密码:");String password=sc.nextLine();if(password.equals(this.password)){System.out.println("登录成功");}else{System.out.println("用户名或密码有误");}}else{System.out.println("请输入密码:");String password1=sc.nextLine();System.out.println("用户名或密码错误");}*//*else {System.out.println("用户名错误");}*//*}*//* public void selectBook(){System.out.println("请输入操作指令");int num=sc.nextInt();switch (num){case 1:case 2:}}*/
}

3:创建普通用户继承用户,管理员账户继承用户类并实现增删改接口

(1)普通用户NormalUser类

package com.by.entity;import com.by.dao.QueryBook;import java.util.Scanner;public class NormalUser extends User {public NormalUser() {}public NormalUser(String userName, String password) {super(userName, password);}/* @Overridepublic void login() {System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc=new Scanner(System.in);System.out.println("请输入用户名:");String name=sc.nextLine();if (name.equals(this.getUserName())){System.out.println("请输入密码:");String password=sc.nextLine();if(password.equals(this.getPassword())){System.out.println("登录成功");}else{System.out.println("用户名或密码有误");}}else{System.out.println("请输入密码:");String password1=sc.nextLine();System.out.println("用户名或密码错误");}}*/
}

(2)管理员用户AdminUser类

package com.by.entity;import com.by.dao.AddBook;
import com.by.dao.QueryBook;
import com.by.dao.RemoveBook;
import com.by.dao.UpdateBook;import java.util.Scanner;public class AdminUser extends User implements AddBook, UpdateBook, RemoveBook {public AdminUser() {}public AdminUser(String userName, String password) {super(userName, password);}Scanner sc = new Scanner(System.in);@Overridepublic Book[] insertBook(Book book, Book[] bs) {Book[] bs1 = new Book[bs.length + 1];for (int i = 0; i < bs.length; i++) {bs1[i] = bs[i];}bs1[bs.length] = book;return bs1;}@Overridepublic Book[] deleteBooksByName(String bookName, Book[] bs) {Book[] bs2 = new Book[bs.length - 1];for (int i = 0; i < bs.length; i++) {if (bs[i].getBookName().equals(bookName)) {for (int i1 = i; i1 < bs2.length; i1++) {bs2[i] = bs[i + 1];}} else {bs2[i] = bs[i];}}return bs2;}/* @Overridepublic void setBookByName(String bookName,Book[] bs) {for (int i=0;i< bs.length;i++){if (bookName.equals(bs[i].getBookName())){bs[i]=book;}}}*/@Overridepublic void setBookByName(String bookName, Book book, Book[] bs) {for (int i = 0; i < bs.length; i++) {if (bookName.equals(bs[i].getBookName())) {bs[i] = book;}}//    @Override
//    public void setBookByName(String bookName, Book[] bs) {
//
//    }/* @Overridepublic void login() {System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc=new Scanner(System.in);System.out.println("请输入用户名:");String name=sc.nextLine();if (name.equals(this.getUserName())){System.out.println("请输入密码:");String password=sc.nextLine();if(password.equals(this.getPassword())){System.out.println("登录成功");System.out.println("请输入操作:1:添加图书");insertBook();}else{System.out.println("用户名或密码有误");}}else{System.out.println("请输入密码:");String password1=sc.nextLine();System.out.println("用户名或密码错误");}}@Overridepublic void selectBook() {System.out.println("请输入操作指令");int num=sc.nextInt();switch (num) {case 1:case 2:case 3:case 4:case 5:}}*/}
}

4:创建图书类存放图书的属性 

package com.by.entity;public class Book {private String bookName;private String bookAuthor;private double bookPrice;private int bookInventory;//库存public Book(){}public Book(String bookName,String bookAuthor,double bookPrice,int bookInventory){this.bookName=bookName;this.bookAuthor=bookAuthor;this.bookPrice=bookPrice;this.bookInventory=bookInventory;}public String getBookName(){return bookName;}public void setBookName(String bookName){this.bookName=bookName;}public String getBookAuthor() {return bookAuthor;}public void setBookAuthor(String bookAuthor) {this.bookAuthor = bookAuthor;}public double getBookPrice() {return bookPrice;}public void setBookPrice(double bookPrice) {this.bookPrice = bookPrice;}public int getBookInventory() {return bookInventory;}public void setBookInventory(int bookInventory) {this.bookInventory = bookInventory;}
}

5:创建测试类测试

package com.by.test;import com.by.entity.AdminUser;
import com.by.entity.NormalUser;
import com.by.entity.User;
import com.by.entity.Book;import java.sql.SQLOutput;
import java.util.Scanner;public class MainTest {public static void main(String[] args) {User[] users = {new AdminUser("张三", "123"), new NormalUser("李四", "321"),new NormalUser("王五", "456"), new NormalUser("haha", "123")};Book[] bs = {new Book("西游记", "吴承恩", 49.9, 999),new Book("三国演义", "罗贯中", 48.9, 888),new Book("水浒传", "施耐庵", 47.9, 777),new Book("红楼梦", "曹雪芹", 46.9, 666)};User user = login(users);fonction(user, bs);}public static User login(User[] users) {boolean result = false;System.out.println("欢迎使用图书管理系统,请先登录");Scanner sc = new Scanner(System.in);System.out.println("请输入用户名:");String name = sc.nextLine();System.out.println("请输入密码:");String password = sc.nextLine();for (int i = 0; i < users.length; i++) {if (name.equals(users[i].getUserName()) && password.equals(users[i].getPassword())) {System.out.println("登录成功");result = true;return users[i];}}System.out.println("用户名或密码错误,登录失败!");return null;}public static void fonction(User user, Book[] bs) {boolean a=true;while(a) {System.out.println("请选择你要进行的操作:1,查看所有图书信息  2。查看指定图书信息  " +" 3,添加图书信息   4,修改图书信息    5,删除图书信息    6,退出");Scanner scanner = new Scanner(System.in);int sum = scanner.nextInt();switch (sum) {case 1:user.selectBook(bs);break;case 2:System.out.println("请输入图书名:");String name = scanner.next();user.selectBookByBookname(name, bs);break;case 3:if (isAdmin(user)) {AdminUser adminUser = (AdminUser) user;System.out.println("请输入书名:");String bookName = scanner.next();System.out.println("作者");String author = scanner.next();System.out.println("请输入价格");double price = scanner.nextDouble();System.out.println("请输入库存");int kucun = scanner.nextInt();Book book = new Book(bookName, author, price, kucun);Book[] bs1 = adminUser.insertBook(book, bs);user.selectBook(bs1);} else {System.out.println("对不起,您太拉了,权限不够");}break;case 4:if (isAdmin(user)) {System.out.println("请输入你要修改的图书");String byname = scanner.next();AdminUser adminUser = (AdminUser) user;System.out.println("请输入改成的图书名");String gaiName=scanner.next();System.out.println("请输入作者");String author=scanner.next();System.out.println("请输入价格");double price=scanner.nextDouble();System.out.println("请输入库存");int kucun=scanner.nextInt();Book book=new Book(gaiName,author,price,kucun);adminUser.setBookByName(byname, book,bs);user.selectBook(bs);} else {System.out.println("对不起,您太拉了,权限不够");}break;case 5:if (isAdmin(user)) {System.out.println("请输入要删除的图书");String deleteName = scanner.next();AdminUser adminUser = (AdminUser) user;Book[] bs2=adminUser.deleteBooksByName(deleteName, bs);user.selectBook(bs2);break;}case 6:System.out.println("欢饮下次使用!");a=false;break;default:System.out.println("输入有误,请重新输入");break;}}}public static boolean isAdmin(User user) {if (user instanceof AdminUser) {return true;} else {return false;}}}

 

相关文章:

java idea中做一个简易的图书管理系统(控制台输入输出,无数据库)

1&#xff1a;先创建增删改查四个接口 &#xff08;1&#xff09;QueryBook查询接口 package com.by.dao;import com.by.entity.Book;public interface QueryBook {/*** 查询所有图书信息* param bs*/void selectBook(Book[] bs);/*** 根据名字查询一个图书信息* param bookN…...

C# PrinterSettings修改打印机纸张类型,paperType

需求&#xff1a;直接上图&#xff0c;PrinterSettings只能改变纸张大小&#xff0c;打印质量&#xff0c;无法更改打印纸类型 爱普生打印机打印照片已经设置了最高质量&#xff0c;打印图片仍不清晰&#xff0c;需要修改打印纸类型&#xff0c;使用PrintDialog调出对话框&…...

TV端Web页面性能优化实践

01 背景 随着互联网技术的持续创新和电视行业的高速发展&#xff0c;通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一&#xff0c;为广大用户提供了丰富的内容播放服务&#xff0c;除此之外&#xff0c;同样有会员运营、…...

2023年终总结

前言&#xff1a; 嘻嘻&#xff0c;12月底广州降温了又到了写年终总结的时间&#xff0c;这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获&#xff0c;也是我尝试走出校园&#xff0c;接触社会的第一年&#xff08;感触…...

深入探索MongoDB集群模式:从高可用复制集

MongoDB复制集概述 MongoDB复制集主要用于实现服务的高可用性&#xff0c;与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。 复制集的主要功能 数据复制&#xff1a;数据写入主节点&#xff08;Primary&#xff09;时&#xff0c;自动复制到一个或多个副本节…...

gem5学习(8):创建一个简单的缓存对象--Creating a simple cache object

目录 一、SimpleCache SimObject 二、Implementing the SimpleCache 1、getSlavePort() 2、handleRequest() 3、AccessEvent() 4、accessTiming() &#xff08;1&#xff09;缓存命中&#xff1a;sendResponse() &#xff08;2&#xff09;缓存未命中&#xff1a; 三、…...

【PTA-C语言】实验七-函数与指针I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离&#xff08;分数 10&#xff09;6-2 使用函数输出一个整数的逆序数&#xff08;分数 10&#xff09;6-3 使用函数求最大公约数&#xff08;分数 10&#xff09;6-4…...

C# 让数据保留小数后两位,不足的补充0

在C#中&#xff0c;可以使用Math.Floor、Math.Ceiling或者Math.Round方法结合字符串格式化来实现小数点后两位的保留&#xff0c;并在不足的情况下补充0。 以下是一个例子&#xff1a; double value 1.2345; string formattedValue value.ToString("0.00"); // 输…...

RK3568驱动指南|第九篇 设备模型-第92章 引用计数器实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…...

苹果电脑Dock栏优化软件 mac功能亮点

hyperdock mac是一款Dock优化软件&#xff0c;hyperdock支持使用窗口自动排列功能&#xff0c;您可以直接通过将窗口拖拉至屏幕上方来快速最大化至全屏&#xff0c;又或者拖动到左右来进行左分屏和右分屏。而且Dock优化软件还有一个特色便是对Dock的强大管理哪里能力&#xff0…...

【UE5蓝图】读取本地json文件修改窗口大小

效果 插件 蓝图 1.判断文件存在 2.1文件不存在&#xff0c;生成文件 {"ResolutionX":540, "ResolutionY":960} 2.2文件存在&#xff0c;直接读取 3.设置窗口大小 遇到的坑 1.分辨率太大&#xff0c;导致效果不理想&#xff0c;建议先往小填写。 2.选对…...

ACM32F403/F433 12 位多通道国产芯片,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…...

2024最新前端React面试题:JSX是什么,它和JS有什么区别

JSX是什么&#xff0c;它和JS有什么区别 回答思路&#xff1a;1.编写方式--->2.分别是什么&#xff1f;--->3.分别是怎么编译的&#xff1f;1.编写方式2.分别是什么&#xff1f;3.分别是怎么编译的&#xff1f; 回答思路&#xff1a;1.编写方式—>2.分别是什么&#x…...

3d导入模型怎样显示原本材质---模大狮模型网

要在导入3D模型时保留原本的材质&#xff0c;您可以尝试以下方法&#xff1a; 导入前检查文件格式&#xff1a;确保您所使用的3D软件支持导入模型的文件格式。不同的软件对文件格式的支持有所差异&#xff0c;选择正确的文件格式可以更好地保留原始材质。 使用正确的材质库&am…...

web前端开发网页制作html/css结课作业

效果图展示&#xff1a; 注意事项&#xff1a; 引用JQuery文件地址和图片地址要更换一下。 百度网盘链接&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1wYkmLr7csjBwQY6GmlYm4Q?pwd4332 提取码&#xff1a;4332 html界面展示&#xff1a; main.css代码部…...

工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)

工业相机如何实现实时和本地Raw图像和Bitmap图像的保存和相互转换&#xff08;C#代码&#xff0c;UI界面版&#xff09; 工业相机图像格式工业相机实现Raw图像和Bitmap图像的保存和转换的技术背景在相机SDK中获取图像转换图像的代码分析工业相机回调函数里保存Bitmap图像数据工…...

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…...

深度学习核心技术与实践之自然语言处理篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分。 自然语言处理简介 NLP的难点 &#xff08;1&#xff09;语言有很多复杂的情况&#xff0c;比如歧义、省略、指代、重复、更正、倒序、反语等 &#xff08;2&#xff09;歧义至少有如下几种&#xff1a; …...

AI-ChatGPTCopilot

ChatGPT chatGPT免费网站列表&#xff1a;GitHub - LiLittleCat/awesome-free-chatgpt: &#x1f193;免费的 ChatGPT 镜像网站列表&#xff0c;持续更新。List of free ChatGPT mirror sites, continuously updated. Copilot 智能生成代码工具 安装步骤 - 登录 github&am…...

网络安全-真实ip获取伪造与隐藏挖掘

目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip&#xff0c;隐藏自己的ip&#xf…...

CMake入门教程【核心篇】添加子目录(add_subdirectory)

文章目录 1.概述2.添加子目录3.指定二进制目录4.排除子目录5.使用别名6.传递变量7.检查子目录是否存在 1.概述 add_subdirectory是 CMake 中的一个命令&#xff0c;用于向当前项目添加一个子目录。它的语法如下&#xff1a; #mermaid-svg-9zKJ3AvoVRln9hon {font-family:"…...

Prototype原型模式(对象创建)

原型模式&#xff1a;Prototype 链接&#xff1a;原型模式实例代码 注解 模式定义 使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。 ——《设计模式》GoF 目的 在软件系统中&#xff0c;经常面临这“某些结构复杂的对象”的创建工作&am…...

[Redis实战]分布式锁

四、分布式锁 4.1 基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xf…...

SpingBoot的项目实战--模拟电商【2.登录】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …...

http——https实现指南

第一部分&#xff1a;HTTPS安全证书简介 什么是HTTPS安全证书&#xff1f; 在网络通信中&#xff0c;HTTPS安全证书是一种由可信任的证书颁发机构&#xff08;CA&#xff09;签发的数字证书&#xff0c;用于保障网站与用户之间的数据传输安全。通过加密和身份验证&#xff0c…...

ROS仿真R2机器人之安装运行及MoveIt的介绍

R2(Robonaut 2)是NASA美国宇航局与GM通用联合推出的宇航人形机器人&#xff0c;能在国际空间站使用&#xff0c;可想而知其价格是非常昂贵&#xff0c;几百万美刀吧&#xff0c;还好NASA发布了一个R2机器人的Gazebo模型&#xff0c;使用模型就不需要花钱了&#xff0c;由于我们…...

【linux 多线程并发】线程属性设置与查看,绑定CPU,线程分离与可连接,避够多线程下的内存泄漏

线程属性设置 ​专栏内容&#xff1a; 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构&#xff0c;以及如何实现多机的数据库节点的多读多写&#xff0c;与传统主备&#xff0c;MPP的区别&#xff0c;技术难点的分析&#xff0c;数据元数据同步&#xff0c;多主节点的情况…...

70.乐理基础-打拍子-三连音

上一个内容&#xff1a;69.乐理基础-打拍子-大切分与变体-CSDN博客 62-66是总拍数为一拍的节奏型&#xff0c;一共有七个&#xff0c;68-69是两拍的节奏型。 三连音说明&#xff1a; 1.三连音的总拍数可以是一拍、两拍、四拍。。。。 2.打拍子比较难&#xff0c;或许需要用V字…...

100天精通Python(实用脚本篇)——第111天:批量将PDF转Word文档(附上脚本代码)

文章目录 专栏导读1. 将PDF转Word文档需求2. 模块安装3. 模块介绍4. 注意事项5. 完整代码实现6. 运行结果书籍推荐 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#xff1a;本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教…...

如何在 NAS 上安装 ONLYOFFICE 文档?

文章作者&#xff1a;ajun 导览 ONLYOFFICE 文档 是一款开源办公套件&#xff0c;其是包含文本文档、电子表格、演示文稿、表单、PDF 查看器和转换工具的协作性编辑工具。它高度兼容微软 Office 格式&#xff0c;包括 .docx、.xlsx 、.pptx 、pdf等文件格式&#xff0c;并支持…...

网站在线答题怎么做/网站维护工程师

jQuery中attr()设置属性&#xff0c;css()设置style里的样式。属性如Html标签内部的title&#xff0c;src&#xff0c;style这些&#xff0c;style本身是标签的属性。转载于:https://www.cnblogs.com/npk19195global/p/4535630.html...

简约大气网站欣赏/如何让新网站被收录

cookie&#xff0c;localStorage&#xff0c;sessionStorage 相同点&#xff1a;cookie&#xff0c;localStorage&#xff0c;sessionStorage都是在客户端保存数据的&#xff0c;存储数据的类型&#xff1a;都是字符串。 不同点&#xff1a; 1、生命周期&#xff1a; 1&…...

全国建设信息网站/新站整站快速排名

展开全部一32313133353236313431303231363533e59b9ee7ad9431333337393463般在处理Web应用下的文件创建与移动等时&#xff0c;会涉及到很多关于java中相对路径&#xff0c;绝对路径等问题。以下是一些总结。希望大家遇到类似的问题&#xff0c;可以更有效的解决。1.基本概念的理…...

100M家用宽带可做网站服务器吗/seo详细教程

批量更改数据的方法有很多&#xff0c;今天为您介绍的是使用Renamer这款专门为批量重命名文件而设计的一款工具&#xff0c;使用Renamer可以批量重命名文件&#xff0c;还可以批量更改文件的数据&#xff0c;操作简单&#xff0c;可快速地同时更改多个文件名称&#xff0c;支持…...

外网代理ip/武汉seo关键字推广

看过OpenCV源代码的朋友&#xff0c;肯定都知道很多函数的接口都是InputArray或者OutputArray型的&#xff0c;这个接口类还是很强大的&#xff0c;今个就来说说它们的那些事。 InputArray这个接口类可以是Mat、Mat_、Mat_<T, m, n>、vector、vector<vector>、vec…...

优美网站源码/哈尔滨百度推广联系人

目录 一、内存布局 二、ptmalloc内存管理器 1. 设计假设 2. 主分配区和非主分配区 3. chunk 内存块的基本组织单元 4. 内存分配malloc流程 5. 内存释放free流程 6. mallopt 参数调优 7. 使用注意事项 一、内存布局 了解ptmalloc内存管理器&#xff0c;就必须得先了解操…...