如何使用ssm实现超市管理系统

news2024/11/24 16:12:16

@TOC

10917ssm超市管理系统

系统概述

进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数据等。而且我们通过总体设计,大致可以划分出了程序的模块,以及功能。但是只是一个初步的分类,并没有真正的实现。

整体设计,只是一个初步设计,而且,对于一个项目,我们可以进行多个整体设计,通过对比,包括性能的对比、成本的对比、效益的对比,来最终确定一个最优的设计方案,选择优秀的整体设计可以降低开发成本,增加公司效益,从这一点来讲,整体设计还是非常重要的。

超市管理系统工作原理图如图4-1所示:

图4-1 系统工作原理图

4.2 系统结构设计

系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。超市管理系统的整体结构设计如图4-2所示。

图4-2 系统结构图

4.3数据库设计

数据库是计算机信息系统的基础。目前,电脑系统的关键与核心部分就是数据库。数据库开发的优劣对整个系统的质量和速度有着直接影响。

4.3.1 数据库设计原则

数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示员工工作环境中所涉及的事物,属性则是对实体特性的描述。在系统设计当中数据库起着决定性的因素。下面设计出这几个关键实体的实体—关系图。

4.3.2 数据库实体

数据模型中的实体(Entity),也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。例如,公司中的每个员工,家里中的每个家具。

本系统的E-R图如下图所示:

1、请假信息管理实体图如图4-3所示:

图4-3请假信息管理实体图

2、员工管理实体图如图4-4所示:

图4-4员工管理实体图

3、商品库存管理实体图如图4-5所示:

图4-5商品库存管理实体图

#########

4.3.3 数据库表设计

数据库的表信息属于设计的一部分,下面介绍数据库中的各个表的详细信息。

表4-1 allusers表

列名数据类型长度约束
idint11NOT NULL
usernamevarchar50default NULL
pwdvarchar50default NULL
cxvarchar50default NULL

表4-2 gongyingshang表

列名数据类型长度约束
idint11NOT NULL
addtimevarchar50default NULL
gongyingshangmingchengvarchar50default NULL
gongyingshangleixingvarchar50default NULL
fuzerenvarchar50default NULL
lianxidianhuavarchar50default NULL
youxiangvarchar50default NULL
xiangxidizhivarchar50default NULL

表4-3:jiaoliuhuifu表

列名数据类型长度约束
idint11NOT NULL
addtimevarchar50default NULL
biaotivarchar50default NULL
gonghaovarchar50default NULL
xingmingvarchar50default NULL
riqivarchar50default NULL
jiaoliuhuifuvarchar50default NULL

表4-4:jiaoliuxinxi表

列名数据类型长度约束
idint11NOT NULL
addtimevarchar50default NULL
biaotivarchar50default NULL
jiaoliuneirongvarchar50default NULL
jiaoliuriqivarchar50default NULL
gonghaovarchar50default NULL
xingmingvarchar50default NULL

表4-5:qingjiaxinxi表

列名数据类型长度约束
idint11NOT NULL
addtimevarchar50default NULL
biaotivarchar50default NULL
qingjiariqivarchar50default NULL
qingjiatianshuvarchar50default NULL
jieshuriqivarchar50default NULL
qingjianeirongvarchar50default NULL
gonghaovarchar50default NULL
xingmingvarchar50default NULL
sfshvarchar50default NULL
shhfvarchar50default NULL

5统详细设计

5.1管理员功能模块

管理员登录,通过填写用户名、密码进行登录,如图5-1所示。

图5-1管理员登录界面图

管理员登录进入超市管理系统可以查看个人中心、员工管理、供应商管理、商品库存管理、商品类型管理、商品进货管理、商品销售管理、上班打卡管理、请假信息管理、交流信息管理、交流回复管理等信息。

员工管理,在员工管理页面中可以通过填写工号、姓名、性别、头像、部门、职位、电话等内容进行修改、删除,如图5-2所示。还可以根据需要对商品类型管理进行详情,修改等详细操作,如图5-3所示。

图5-2员工管理界面图

图5-3商品类型管理界面图

商品库存管理,在商品库存管理页面中可以查看商品名称、商品类型、图片、价格、数量、发布日期、商品详情、用户id等信息,并可根据需要对已有商品库存管理进行修改或删除等操作,如图5-4所示。

图5-4商品库存管理界面图

商品进货管理,在商品进货管理页面中可以查看商品名称、商品类型、进货价格、数量、总价格、进货日期、进货公司、备注、工号、姓名等信息,并可根据需要对已有商品进货管理进行修改或删除等详细操作,如图5-5所示。

图5-5商品进货管理界面图

上班打卡管理,在上班打卡管理页面中可以查看工号、姓名、打卡时间、打卡内容等内容,并且根据需要对已有上班打卡管理进行详情,修改或删除等详细操作,如图5-6所示。

图5-6上班打卡管理界面图

请假信息管理,在请假信息管理页面中可以查看标题、请假日期、请假天数、结束日期、请假内容、工号、姓名、是否审核、审核回复等内容,并且根据需要对已有请假信息管理进行详情,修改或删除等详细操作,如图5-7所示。

图5-7请假信息管理界面图

交流信息管理,在交流信息管理页面中可以查看标题、交流内容、交流日期、工号、姓名等内容,并且根据需要对已有交流信息管理进行修改或删除等详细操作,如图5-8所示。

图5-8交流信息管理界面图

5.2员工功能模块

员工登录进入超市管理系统可以查看个人中心、供应商管理、商品库存管理、商品进货管理、商品销售管理、上班打卡管理、请假信息管理、交流信息管理、交流回复管理等内容。

商品库存管理,在商品库存管理页面中通过查看商品名称、商品类型、图片、价格、数量、发布日期、商品详情、用户id等信息,还可以根据需要对商品库存管理进行修改,如图5-9所示。

图5-9商品库存管理界面图

上班打卡管理,在上班打卡管理页面中可以查看工号、姓名、打卡时间、打卡内容等信息,并且根据需要对已有上班打卡管理进行查看删除等其他详细操作,如图5-10所示。

图5-10上班打卡管理界面图

请假信息管理,在请假信息管理页面中通过查看标题、请假日期、请假天数、结束日期、请假内容、工号、姓名、是否审核、审核回复等内容进行查看、修改、删除,如图5-11所示。

图5-11请假信息管理界面图

交流信息管理,在交流信息管理页面中通过查看标题、交流内容、交流日期、工号、姓名等内容进行查看、删除,如图5-12所示。

图5-12交流信息管理界面图

BaiduUtil.java
package com.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;


/**
* 类说明 : 
*/

public class BaiduUtil {
	
    /**
     * 根据经纬度获得省市区信息
     * @param lon 纬度
     * @param lat 经度
     * @param coordtype 经纬度坐标系
     * @return
     */
    public static Map<String, String> getCityByLonLat(String key, String lng, String lat) {
        String location = lat + "," + lng;
        try {
            //拼装url
            String url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+location;
            String result = HttpClientUtils.doGet(url);
            JSONObject o = new JSONObject(result);
            Map<String, String> area = new HashMap<>();
			area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province"));
			area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city"));
			area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district"));
			area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street"));
            return area;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
	     * 获取API访问token
	     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
	     * @param ak - 百度云官网获取的 API Key
	     * @param sk - 百度云官网获取的 Securet Key
	     * @return assess_token
	     */
    public static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            org.json.JSONObject jsonObject = new org.json.JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }

}

CommonServiceImpl.java

package com.service.impl;


import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.dao.CommonDao;
import com.service.CommonService;


/**
 * 系统用户
 */
@Service("commonService")
public class CommonServiceImpl implements CommonService {
	
	@Autowired
	private CommonDao commonDao;

	@Override
	public List<String> getOption(Map<String, Object> params) {
		return commonDao.getOption(params);
	}
	
	@Override
	public Map<String, Object> getFollowByOption(Map<String, Object> params) {
		return commonDao.getFollowByOption(params);
	}
	
	@Override
	public void sh(Map<String, Object> params) {
		commonDao.sh(params); 
	}

	@Override
	public int remindCount(Map<String, Object> params) {
		return commonDao.remindCount(params);
	}

	@Override
	public Map<String, Object> selectCal(Map<String, Object> params) {
		return commonDao.selectCal(params);
	}
	
	@Override
	public List<Map<String, Object>> selectGroup(Map<String, Object> params) {
		return commonDao.selectGroup(params);
	}
	
	@Override
	public List<Map<String, Object>> selectValue(Map<String, Object> params) {
		return commonDao.selectValue(params);
	}

}

JiaoliuxinxiController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.JiaoliuxinxiEntity;
import com.entity.view.JiaoliuxinxiView;

import com.service.JiaoliuxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 交流信息
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-10 17:20:00
 */
@RestController
@RequestMapping("/jiaoliuxinxi")
public class JiaoliuxinxiController {
    @Autowired
    private JiaoliuxinxiService jiaoliuxinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,JiaoliuxinxiEntity jiaoliuxinxi, 
		HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yuangong")) {
			jiaoliuxinxi.setGonghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<JiaoliuxinxiEntity> ew = new EntityWrapper<JiaoliuxinxiEntity>();
    	PageUtils page = jiaoliuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaoliuxinxi), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,JiaoliuxinxiEntity jiaoliuxinxi, HttpServletRequest request){
        EntityWrapper<JiaoliuxinxiEntity> ew = new EntityWrapper<JiaoliuxinxiEntity>();
    	PageUtils page = jiaoliuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaoliuxinxi), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( JiaoliuxinxiEntity jiaoliuxinxi){
       	EntityWrapper<JiaoliuxinxiEntity> ew = new EntityWrapper<JiaoliuxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( jiaoliuxinxi, "jiaoliuxinxi")); 
        return R.ok().put("data", jiaoliuxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(JiaoliuxinxiEntity jiaoliuxinxi){
        EntityWrapper< JiaoliuxinxiEntity> ew = new EntityWrapper< JiaoliuxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( jiaoliuxinxi, "jiaoliuxinxi")); 
		JiaoliuxinxiView jiaoliuxinxiView =  jiaoliuxinxiService.selectView(ew);
		return R.ok("查询交流信息成功").put("data", jiaoliuxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        JiaoliuxinxiEntity jiaoliuxinxi = jiaoliuxinxiService.selectById(id);
        return R.ok().put("data", jiaoliuxinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        JiaoliuxinxiEntity jiaoliuxinxi = jiaoliuxinxiService.selectById(id);
        return R.ok().put("data", jiaoliuxinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody JiaoliuxinxiEntity jiaoliuxinxi, HttpServletRequest request){
    	jiaoliuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiaoliuxinxi);

        jiaoliuxinxiService.insert(jiaoliuxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody JiaoliuxinxiEntity jiaoliuxinxi, HttpServletRequest request){
    	jiaoliuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiaoliuxinxi);

        jiaoliuxinxiService.insert(jiaoliuxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody JiaoliuxinxiEntity jiaoliuxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(jiaoliuxinxi);
        jiaoliuxinxiService.updateById(jiaoliuxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        jiaoliuxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<JiaoliuxinxiEntity> wrapper = new EntityWrapper<JiaoliuxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yuangong")) {
			wrapper.eq("gonghao", (String)request.getSession().getAttribute("username"));
		}

		int count = jiaoliuxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	


}

spechars.js
/**
 * Created with JetBrains PhpStorm.
 * User: xuheng
 * Date: 12-9-26
 * Time: 下午1:09
 * To change this template use File | Settings | File Templates.
 */
var charsContent = [
    { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")},
    { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")},
    { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")},
    { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")},
    { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")},
    { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")},
    { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")},
    { name:"yyyb", title:lang.yyyb, content:toArray("i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,")},
    { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")}
];
(function createTab(content) {
    for (var i = 0, ci; ci = content[i++];) {
        var span = document.createElement("span");
        span.setAttribute("tabSrc", ci.name);
        span.innerHTML = ci.title;
        if (i == 1)span.className = "focus";
        domUtils.on(span, "click", function () {
            var tmps = $G("tabHeads").children;
            for (var k = 0, sk; sk = tmps[k++];) {
                sk.className = "";
            }
            tmps = $G("tabBodys").children;
            for (var k = 0, sk; sk = tmps[k++];) {
                sk.style.display = "none";
            }
            this.className = "focus";
            $G(this.getAttribute("tabSrc")).style.display = "";
        });
        $G("tabHeads").appendChild(span);
        domUtils.insertAfter(span, document.createTextNode("\n"));
        var div = document.createElement("div");
        div.id = ci.name;
        div.style.display = (i == 1) ? "" : "none";
        var cons = ci.content;
        for (var j = 0, con; con = cons[j++];) {
            var charSpan = document.createElement("span");
            charSpan.innerHTML = con;
            domUtils.on(charSpan, "click", function () {
                editor.execCommand("insertHTML", this.innerHTML);
                dialog.close();
            });
            div.appendChild(charSpan);
        }
        $G("tabBodys").appendChild(div);
    }
})(charsContent);
function toArray(str) {
    return str.split(",");
}

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

专线监控的使用方法:运维团队的全面实战指南

在当今高度信息化的时代&#xff0c;专线网络已成为企业连接不同地域、保障业务连续性的重要基础设施。然而&#xff0c;随着网络架构的复杂化和业务需求的多样化&#xff0c;运维团队面临着前所未有的挑战。为了有效应对这些挑战&#xff0c;运维团队需要深入了解并熟练掌握专…

利用GPU的OpenCL和MLC-LLM框架运行小语言模型-地瓜RDK X5开发板-非量产算法仅供整活

RDK™ X5机器人开发套件&#xff0c;D-Robotics RDK X5搭载Sunrise 5智能计算芯片&#xff0c;可提供高达10 Tops的算力&#xff0c;是一款面向智能计算与机器人应用的全能开发套件&#xff0c;接口丰富&#xff0c;极致易用。 本文利用其32GFLOPS的一颗小GPU&#xff0c;支持…

60 mysql 存储引擎之静态格式 MyISAM

前言 我们这里来看一下 MyISAM 存储引擎, 我们常见的那些 user, db, table_priv, proc 等等是基于 MyISAM 这是我们经常会提及的 两种持久化的存储引擎之一, 一是 MyISAM存储引擎, 另外一个是 InnoDB存储引擎 我们这里来看一下 MyISAM 中固定长度的数据表的相关处理 mysql…

振动分析-35-滚动轴承全生命周期模式下的时域特征对比(实战)

文章目录 1 数据集概述1.1 轴承参数1.2 运行工况1.3 数据详情2 加载显示全量数据2.1 数据提取2.2 全寿命数据可视化3 每次测量的时域特征3.1 计算时域特征的函数3.2 水平和垂直对比35Hz12kN3.3 水平和垂直对比37.5Hz11kN3.4 水平和垂直对比40Hz10kN3.5 结果分析4 参考附录1 数据…

单链表速通后续!

目录 1>>闲话 2>>头删 3>>查找 4>>在指定位置之前插入 5>>删除指定结点 6>>指定位置之后插入 7>>删除指定位置之后的结点 特别思考&#xff1a; 8>>销毁单链表 Slist.h Slist.c test.c 9>>总结 1>>闲话…

C++一个很好的计时方法

C一个很好的计时方法 //记时LARGE_INTEGER t1;LARGE_INTEGER t2;LARGE_INTEGER f;QueryPerformanceFrequency(&f);QueryPerformanceCounter(&t1);Sleep(100);QueryPerformanceCounter(&t2);double time;time (double)(t2.QuadPart-t1.QuadPart)/(double)f.QuadPar…

机器学习篇-day06-集成学习-随机森林 Adaboost GBDT XGBoost

一. 集成学习思想 集成学习 原理 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的模型称为弱学习器&#xff08;基学习器&#xff09;。训练时&#xff0c;使用训练集依次训练出这些弱学习器&#xff0c;对未知…

Chromium 如何查找前端 window.navigator, window.screen等对象在c++中的实现

以前端Navigator 对象为例&#xff1a; 1、直接在vscode里面搜索"Navigator" 过滤条件*.idl&#xff0c;这样可以搜到Navigator.idl对象文件。 2、打开Navigator.idl 可以看到平级目录对应的Navigator.h 和Navigator.cc定义 3、Navigator.idl会在out\Debug\gen\thir…

【系统集成中级】线上直播平台开发项目质量管理案例分析

【系统集成中级】线上直播平台开发项目质量管理案例分析 一、案例二、小林在项目质量管理中存在的问题&#xff08;一&#xff09;计划阶段缺失&#xff08;二&#xff09;测试用例编制与执行问题&#xff08;三&#xff09;质量管理流程问题&#xff08;四&#xff09;质量保证…

全金属的两足机器人钢铁侠开发

比较喜欢钢铁侠和终结者&#xff0c;其全金属的机身&#xff0c;反射着金属的光泽&#xff0c;透露出令人惊叹的美感。 这也是一个全金属机器人&#xff0c;周身有十几片铝片和四个舵机组成&#xff0c;可以叫他钢铁侠或者终结者。这么笨&#xff0c;这么小&#xff0c;可以说是…

【笔记】shell基本使用,超全,更新ing

一、shell的执行 1、执行命令但不输出结果到命令行 [rootlocalhost ~]$ command >/dev/null2、多命令顺序执行 命令 1;命令 2 #顺序执行命令&#xff0c;命令间无逻辑关联 命令 1&&命令 2 #命令1正确执行才执行命令2&#xff0c;否则不执行 命令 1||命令 2 #命令…

记录IDEA编译报错:不支持发行版本

一共四个地方&#xff0c;版本均保持一致

成分喵(一键查询食品/化妆品成分)

一款免费可以一键查询各大品牌食品和化妆品成分神器&#xff0c;无论是拍照、扫码又或者是商品链接都能查成分&#xff0c;还能根据成分查商品&#xff0c;而且各种成分的功效、作用和安全性都会一一标注出来&#xff0c;包括是否对身体有害、敏感风险等级等等。 下载&#xf…

大模型应用开发速成:一本通向LLM专家之路

大家好&#xff0c;今天给大家推荐一本大模型应用开发入门书籍《大模型应用开发极简入门》&#xff0c;本书对很多AI概念做了讲解和说明&#xff01; 朋友们如果有需要 《大模型应用开发极简入门》&#xff0c;扫码获取~ 本书主要讲解了以下几个方面的大模型技术&#xff1a; G…

技术发明一等奖!FISCO BCOS研究成果荣获CCF权威认可

近日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;正式揭晓了2024年度“CCF科技成果奖”的获奖名单。FISCO BCOS开源工作组组长单位微众银行与清华大学合作的“安全可控高性能区块链基础平台”项目&#xff0c;凭借卓越的技术创新与显著的社会经济效益&#xff0c;荣…

MFC项目如何使用hiredis库连接redis

如何在windows平台使用c连接redis 1. 下载hiredis的vs工程文件2. 使用vs2022编译hiredis3.项目中调用4. 集群连接5. 简单的封装下 最近需要在windows PC终端读取redis数据。我这里使用hiredis连接redis. 工程是vs2022开发的。 注意&#xff1a;如果是使用的‘hiredis’就不能在…

【鸟类识别系统】Python+卷积神经网络算法+人工智能+深度学习+ResNet50算法+计算机课设项目

一、介绍 鸟类识别系统。本系统采用Python作为主要开发语言&#xff0c;通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;然后进行模型的迭代训练&#xff0c;得到一个识别精度较高的模型&#xff0c;然后在…

ORA-65096:公用用户名或角色名无效

CREATE USER DATA_SHARING IDENTIFIED BY "Ab2"; Oracle建立用户的的时候&#xff0c;可能会出现一直提示 ORA-65096:公用用户名或角色名无效&#xff1b; 我查了一下&#xff0c;好像是 oracle 12版本及以上版本的特性&#xff0c;用户名必须加c##或者C##前缀才能创…

对ElementPlus的el-select二次封装,添加分页和搜索功能,实现一个自定义的下拉选择框

组件展示效果图 在 Vue3 的 elementPlus项目中&#xff0c;我们经常需要使用下拉选择框 (el-select) 来展示大量数据。然而&#xff0c;默认情况下 el-select 不支持分页和搜索功能。本文将介绍如何通过二次封装 el-select 组件来实现这一需求&#xff0c;并使用自定义的 Hook …

一周热门|OpenAI 回击马斯克:为了自己的竞争优势,不断骚扰我们;微软、清华团队提出 Diff Transformer

「一周热门」将从【企业动态】【技术前瞻】【政策法规】【专家观点】四部分&#xff0c;带你快速跟进大模型行业热门动态。 企业动态 OpenAI 回击马斯克&#xff1a;为了自己的竞争优势&#xff0c;他不断骚扰我们 日前&#xff0c;OpenAI 指控马斯克在一场法律诉讼中对其进行…