博主介绍:✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
文末获取源码联系
精彩专栏推荐订阅 不然下次找不到哟
java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
目录
一、前言介绍:
二、主要技术:
2.1 Spring Boot框架:
2.2 微信小程序:
三、系统设计:
3.1 系统研究方案
3.2 功能结构设计:
3.3 登录时序图设计:
四、小程序端:
4.1 登录注册
4.2 系统首页
4.3 短视频新闻信息
4.4 个人中心
五 、管理后端:
5.1 短视频信息管理
5.2 新闻信息管理
5.3 用户信息管理
六、主要SQL文件
七、代码参考
八、项目总结:
九、源码获取:
一、前言介绍:
现如今,信息种类变得越来越多,信息的容量也变得越来越大,这就是信息时代的标志。近些年,计算机科学发展得也越来越快,而且软件开发技术也越来越成熟,因此,在生活中的各个领域,只要存在信息管理,几乎都有计算机的影子,可以说很多行业都采用计算机的方式管理信息。信息计算机化处理相比手工操作,有着保密性强,效率高,存储空间大,成本低等诸多优点。针对高校教师成果信息管理,采用经济新闻资讯可以有效管理,使信息管理能够更加科学和规范。
总之,在实际中使用经济新闻资讯,其意义如下:
第一点:经济新闻资讯的实际运用,可以帮助管理人员在短时间内完成信息处理工作;
第二点:通过系统页面的合理排版布局,可以更加直观的展示系统的内容,并且使用者可以随时阅读页面信息,随时操作系统提供的功能;
第三点:可以实现信息管理计算机化;
第四点:可以降低信息管理成本。
二、主要技术:
在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spring Boot应用本质上就是一个基于Spring框架的应用,它是Spring对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于Spring生态圈的应用。
那Spring Boot有何魔法?自动配置、起步依赖、Actuator、命令行界面(CLI) 是Spring Boot最重要的4大核心特性,其中CLI是Spring Boot的可选特性,虽然它功能强大,但也引入了一套不太常规的开发模型,因而这个系列的文章仅关注其它3种特性。如文章标题,本文是这个系列的第一部分,将为你打开Spring Boot的大门,重点为你剖析其启动流程以及自动配置实现原理。要掌握这部分核心内容,理解一些Spring框架的基础知识,将会让你事半功倍。
小程序并非凭空冒出来的一个概念。当微信中的 微信小程序View 逐渐成为移动 微信小程序 的一个重要入口时,微信就有相关的 JS API 了。
实际上,微信官方是没有对外暴露过如此调用的,此类 API 最初是提供给腾讯内部一些业务使用,很多外部开发者发现了之后,依葫芦画瓢地使用了,逐渐成为微信中网页的事实标准。2015年初,微信发布了一整套网页开发工具包,称之为 JS-SDK,开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API。给所有的 微信小程序 开发者打开了一扇全新的窗户,让所有开发者都可以使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情。
JS-SDK是对之前的 WeixinJSBrige 的一个包装,以及新能力的释放,并且由对内开放转为了对所有开发者开放,在很短的时间内获得了极大的关注。从数据监控来看,绝大部分在微信内传播的移动网页都使用到了相关的接口。
JS-SDK 解决了移动网页能力不足的问题,通过暴露微信的接口使得 微信小程序 开发者能够拥有更多的能力,然而在更多的能力之外,JS-SDK 的模式并没有解决使用移动网页遇到的体验不良的问题。用户在访问网页的时候,在浏览器开始显示之前都会有一个的白屏过程,在移动端,受限于设备性能和网络速度,白屏会更加明显。我们团队把很多技术精力放置在如何帮助平台上的微信小程序开发者解决这个问题。因此我们设计了一个 JS-SDK 的增强版本,其中有一个重要的功能,称之为“微信 微信小程序 资源离线存储”。
三、系统设计:
软件系统结构计划方案:因为系统务必在不同设备上运行,计算机服务器配置要求越小越好。要实现这一要求,B/S结构已经成为最好的选择。运用B/S结构的系统基本可以在大多数计算机中运行。只需计算机电脑浏览器可以正常运行,系统就能正常的运行,维护费用和二次修改比较容易符合要求。操作过程系统方案:Windows10操作过程系统是微软发布最新发布的系统。目前市面上绝大部分计算机都使用这种系统,功能齐全,兼容模式好。开发工具:挑选IDEA。Java语言研发设计。
四、小程序端:
五 、管理后端:
系统后台是对数据的维护,功能都是齐全的,这里就不做一一截图了。
六、主要SQL文件
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50727
Source Host : localhost:3306
Source Database : xiaoyuanyikatongmiyaoguanli
Target Server Type : MYSQL
Target Server Version : 50727
File Encoding : 65001
Date: 2023-05-22 21:22:07
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for config
-- ----------------------------
DROP TABLE IF EXISTS `config`;
CREATE TABLE `config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) NOT NULL COMMENT '配置参数名称',
`value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='配置文件';
-- ----------------------------
-- Table structure for dictionary
-- ----------------------------
DROP TABLE IF EXISTS `dictionary`;
CREATE TABLE `dictionary` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`dic_code` varchar(200) DEFAULT NULL COMMENT '字段',
`dic_name` varchar(200) DEFAULT NULL COMMENT '字段名',
`code_index` int(11) DEFAULT NULL COMMENT '编码',
`index_name` varchar(200) DEFAULT NULL COMMENT '编码名字 Search111 ',
`super_id` int(11) DEFAULT NULL COMMENT '父字段id',
`beizhu` varchar(200) DEFAULT NULL COMMENT '备注',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COMMENT='字典';
-- ----------------------------
-- Table structure for miyao
-- ----------------------------
DROP TABLE IF EXISTS `miyao`;
CREATE TABLE `miyao` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
`miyao_uuid_number` varchar(200) DEFAULT NULL COMMENT '密钥编号',
`miyao_name` varchar(200) DEFAULT NULL COMMENT '密钥名称 Search111 ',
`miyao_types` int(11) DEFAULT NULL COMMENT '密钥类型 Search111',
`yonghu_id` int(11) DEFAULT NULL COMMENT '员工',
`miyao_content` text COMMENT '密钥介绍 ',
`miyao_yesno_types` int(11) DEFAULT NULL COMMENT '密钥审核 Search111',
`miyao_yesno_text` text COMMENT '审核结果',
`insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='密钥';
-- ----------------------------
-- Table structure for miyaofafang
-- ----------------------------
DROP TABLE IF EXISTS `miyaofafang`;
CREATE TABLE `miyaofafang` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
`miyao_id` int(11) DEFAULT NULL COMMENT '密钥',
`xuesheng_id` int(11) DEFAULT NULL COMMENT '学生',
`miyaofafan_time` timestamp NULL DEFAULT NULL COMMENT '密钥有效期 Search111 ',
`miyaofafang_types` int(11) DEFAULT NULL COMMENT '访问权限 Search111',
`insert_time` timestamp NULL DEFAULT NULL COMMENT '分配时间',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='密钥发放';
-- ----------------------------
-- Table structure for miyaorizhi
-- ----------------------------
DROP TABLE IF EXISTS `miyaorizhi`;
CREATE TABLE `miyaorizhi` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`miyaorizhi_name` varchar(200) DEFAULT NULL COMMENT '日志标题 Search111 ',
`miyaorizhi_types` int(11) DEFAULT NULL COMMENT '日志类型 Search111 ',
`miyaofafang_id` int(11) DEFAULT NULL COMMENT '密钥',
`yonghu_id` int(11) DEFAULT NULL COMMENT '员工',
`insert_time` timestamp NULL DEFAULT NULL COMMENT '添加时间',
`miyaorizhi_content` text COMMENT '日志详情',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 nameShow',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='日志信息';
-- ----------------------------
-- Table structure for news
-- ----------------------------
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`news_name` varchar(200) DEFAULT NULL COMMENT '公告标题 Search111 ',
`news_types` int(11) DEFAULT NULL COMMENT '公告类型 Search111 ',
`news_photo` varchar(200) DEFAULT NULL COMMENT '公告图片',
`insert_time` timestamp NULL DEFAULT NULL COMMENT '添加时间',
`news_content` text COMMENT '公告详情',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 nameShow',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='公告信息';
-- ----------------------------
-- Table structure for token
-- ----------------------------
DROP TABLE IF EXISTS `token`;
CREATE TABLE `token` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`userid` bigint(20) NOT NULL COMMENT '用户id',
`username` varchar(100) NOT NULL COMMENT '用户名',
`tablename` varchar(100) DEFAULT NULL COMMENT '表名',
`role` varchar(100) DEFAULT NULL COMMENT '角色',
`token` varchar(200) NOT NULL COMMENT '密码',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
`expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='token表';
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(100) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码',
`role` varchar(100) DEFAULT '管理员' COMMENT '角色',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='管理员';
-- ----------------------------
-- Table structure for xuesheng
-- ----------------------------
DROP TABLE IF EXISTS `xuesheng`;
CREATE TABLE `xuesheng` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(200) DEFAULT NULL COMMENT '账户',
`password` varchar(200) DEFAULT NULL COMMENT '密码',
`xuesheng_name` varchar(200) DEFAULT NULL COMMENT '学生姓名 Search111 ',
`sex_types` int(11) DEFAULT NULL COMMENT '性别 Search111',
`xuesheng_photo` varchar(200) DEFAULT NULL COMMENT '学生头像',
`xuesheng_id_number` varchar(200) DEFAULT NULL COMMENT '身份证号',
`xuesheng_phone` varchar(200) DEFAULT NULL COMMENT '联系方式',
`xuesheng_email` varchar(200) DEFAULT NULL COMMENT '电子邮箱',
`xuexiao_types` int(11) DEFAULT NULL COMMENT '学校 Search111',
`xueyuan_types` int(11) DEFAULT NULL COMMENT '学院 Search111',
`zhuanye_types` int(11) DEFAULT NULL COMMENT '专业 Search111',
`xuesheng_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='学生';
-- ----------------------------
-- Table structure for yonghu
-- ----------------------------
DROP TABLE IF EXISTS `yonghu`;
CREATE TABLE `yonghu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(200) DEFAULT NULL COMMENT '账户',
`password` varchar(200) DEFAULT NULL COMMENT '密码',
`yonghu_name` varchar(200) DEFAULT NULL COMMENT '工作人员姓名 Search111 ',
`sex_types` int(11) DEFAULT NULL COMMENT '性别 Search111',
`yonghu_photo` varchar(200) DEFAULT NULL COMMENT '工作人员头像',
`yonghu_id_number` varchar(200) DEFAULT NULL COMMENT '身份证号',
`yonghu_phone` varchar(200) DEFAULT NULL COMMENT '联系方式',
`yonghu_email` varchar(200) DEFAULT NULL COMMENT '电子邮箱',
`yonghu_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='工作人员';
七、代码参考
/**
* 新闻收藏
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/newsCollection")
public class NewsCollectionController {
private static final Logger logger = LoggerFactory.getLogger(NewsCollectionController.class);
private static final String TABLE_NAME = "newsCollection";
@Autowired
private NewsCollectionService newsCollectionService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;//字典
@Autowired
private DuanshipinService duanshipinService;//短视频信息
@Autowired
private DuanshipinCollectionService duanshipinCollectionService;//短视频收藏
@Autowired
private DuanshipinLiuyanService duanshipinLiuyanService;//短视频留言
@Autowired
private ForumService forumService;//论坛
@Autowired
private GonggaoService gonggaoService;//公告信息
@Autowired
private NewsService newsService;//新闻信息
@Autowired
private NewsLiuyanService newsLiuyanService;//新闻留言
@Autowired
private YonghuService yonghuService;//用户
@Autowired
private UsersService usersService;//管理员
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
CommonUtil.checkMap(params);
PageUtils page = newsCollectionService.queryPage(params);
//字典表数据转换
List list =(List)page.getList();
for(NewsCollectionView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
NewsCollectionEntity newsCollection = newsCollectionService.selectById(id);
if(newsCollection !=null){
//entity转view
NewsCollectionView view = new NewsCollectionView();
BeanUtils.copyProperties( newsCollection , view );//把实体数据重构到view中
//级联表 新闻信息
//级联表
NewsEntity news = newsService.selectById(newsCollection.getNewsId());
if(news != null){
BeanUtils.copyProperties( news , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
view.setNewsId(news.getId());
}
//级联表 用户
//级联表
YonghuEntity yonghu = yonghuService.selectById(newsCollection.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsCollectionEntity newsCollection, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,newsCollection:{}",this.getClass().getName(),newsCollection.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
newsCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper queryWrapper = new EntityWrapper()
.eq("news_id", newsCollection.getNewsId())
.eq("yonghu_id", newsCollection.getYonghuId())
.eq("news_collection_types", newsCollection.getNewsCollectionTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
NewsCollectionEntity newsCollectionEntity = newsCollectionService.selectOne(queryWrapper);
if(newsCollectionEntity==null){
newsCollection.setInsertTime(new Date());
newsCollection.setCreateTime(new Date());
newsCollectionService.insert(newsCollection);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsCollectionEntity newsCollection, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
logger.debug("update方法:,,Controller:{},,newsCollection:{}",this.getClass().getName(),newsCollection.toString());
NewsCollectionEntity oldNewsCollectionEntity = newsCollectionService.selectById(newsCollection.getId());//查询原先数据
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// newsCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
newsCollectionService.updateById(newsCollection);//根据id更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
List oldNewsCollectionList =newsCollectionService.selectBatchIds(Arrays.asList(ids));//要删除的数据
newsCollectionService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
List newsCollectionList = new ArrayList<>();//上传的东西
Map> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List data:dataList){
//循环
NewsCollectionEntity newsCollectionEntity = new NewsCollectionEntity();
// newsCollectionEntity.setNewsId(Integer.valueOf(data.get(0))); //新闻 要改的
// newsCollectionEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
// newsCollectionEntity.setNewsCollectionTypes(Integer.valueOf(data.get(0))); //类型 要改的
// newsCollectionEntity.setInsertTime(date);//时间
// newsCollectionEntity.setCreateTime(date);//时间
newsCollectionList.add(newsCollectionEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
newsCollectionService.insertBatch(newsCollectionList);
return R.ok();
}
}
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
八、项目总结:
通过对新闻资讯平台的开发,让我深刻明白开发一个程序软件需要经历的流程,当确定要开发一个新闻资讯平台管理的程序时,我在开发期间,对其功能进行合理的需求分析,然后才是程序软件的功能的框架设计,数据库的实体与数据表设计,程序软件的功能详细界面实现,以及程序的功能测试等进行全方位的细致考虑,虽然在此过程中,各个环节都遇到了大大小小的困难,但是通过对这些问题进行反复的分析,深入的思考,借助各种相关文献资料提供的方法与解决思路成功解决面临的各个问题,最后成功的让我开发的绿色蔬菜销售管理得以正常运行。
新闻资讯平台管理在功能上面是基本可以满足用户对系统的操作,但是这个程序软件也有许多方面是不足的,因此,在下一个时间阶段,有几点需要改进的地方需要提出来,它们分别是:
(1)操作页面可以满足用户简易操作的要求,但是在页面多样化设计层面上需要把一些比较丰富的设计结构考虑进来。
(2)程序软件的总体安全性能需要优化,例如程序的退出安全性,以及程序的并发性等问题都需要进行安全性升级,让开发的绿色蔬菜销售管理与现实中的相关网站更贴合。
(3)需要对程序的数据结构方面,程序的代码方面等进行优化,让运行起来的程序可以保持稳定运行,也让程序能够保证短时间内处理相关事务,节省处理事务的时间,提高事务处理的效率,同时对服务器上资源占用的比例进行降低。
新闻资讯平台管理的开发一方面是对自身专业知识技能进行最终考核,另一方面也是让自己学会独立解决程序开发过程中所遇到的问题,掌握将理论知识运用于程序开发实践的方法。绿色蔬菜销售管理的开发最终目标就是让系统更具人性化,同时在逻辑设计上,让系统能够更加的严谨。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看获取联系方式
精彩专栏推荐订阅:在下方专栏
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》