ssm+vue同学录网站源码和论文

ssm+vue同学录网站源码和论文262

开发工具:idea 或eclipse
 数据库mysql5.7+
 数据库链接工具:navcat,小海豚等
  技术:ssm

同学录网站

摘要

本文介绍了同学录网站的开发全过程。通过分析企业对于同学录网站的需求,创建了一个计算机管理同学录网站的方案。文章介绍了同学录网站的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本同学录网站有管理员和用户两个角色。管理员功能有个人中心,所在城市管理,学校名称管理,班级管理,届数管理,同学录管理,交流论坛,留言板管理,系统管理等。用户可以注册登录,修改个人密码,提交留言,查看同学录以及资讯信息。因而具有一定的实用性。

本站是一个B/S模式系统,采用SSM框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得同学录网站管理工作系统化、规范化。

关键词:同学录网站;SSM框架;MYSQL数据库

Abstract

This article introduces the whole process of the development of the classmates website. By analyzing the needs of the enterprise for the classmates' website, a program of computer management of the classmate's website was created. The article introduces the system analysis part of the classmates website, including feasibility analysis, etc. The system design part mainly introduces the system function design and database design.

This classmate website has two roles: administrator and user. Administrator functions include personal center, city management, school name management, class management, number of sessions management, classmate management, exchange forum, message board management, system management, etc. Users can register and log in, modify personal passwords, submit messages, view classmates and information. So it has a certain practicability.

This site is a B/S model system, using SSM framework as the development technology, MYSQL database design and development, fully guarantee the stability of the system. The system has the characteristics of clear interface, simple operation and complete functions, which makes the management of classmates website systematized and standardized.

Keywords:Classmates website; SSM framework; MYSQL database

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.TongxueluEntity;
import com.entity.view.TongxueluView;

import com.service.TongxueluService;
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-04-21 17:40:48
 */
@RestController
@RequestMapping("/tongxuelu")
public class TongxueluController {
    @Autowired
    private TongxueluService tongxueluService;
    


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

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

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			tongxuelu.setZhanghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<TongxueluEntity> ew = new EntityWrapper<TongxueluEntity>();
		PageUtils page = tongxueluService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, tongxuelu), params), params));
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(TongxueluEntity tongxuelu){
        EntityWrapper< TongxueluEntity> ew = new EntityWrapper< TongxueluEntity>();
 		ew.allEq(MPUtil.allEQMapPre( tongxuelu, "tongxuelu")); 
		TongxueluView tongxueluView =  tongxueluService.selectView(ew);
		return R.ok("查询同学录成功").put("data", tongxueluView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        TongxueluEntity tongxuelu = tongxueluService.selectById(id);
        return R.ok().put("data", tongxuelu);
    }

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



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

        tongxueluService.insert(tongxuelu);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody TongxueluEntity tongxuelu, HttpServletRequest request){
    	tongxuelu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(tongxuelu);
    	tongxuelu.setUserid((Long)request.getSession().getAttribute("userId"));

        tongxueluService.insert(tongxuelu);
        return R.ok();
    }

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        tongxueluService.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<TongxueluEntity> wrapper = new EntityWrapper<TongxueluEntity>();
		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("yonghu")) {
			wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
		}

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


}

 

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
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.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;

/**
 * 通用接口
 */
@RestController
public class CommonController{
	@Autowired
	private CommonService commonService;
	
	@Autowired
	private ConfigService configService;
	
	private static AipFace client = null;
	
	private static String BAIDU_DITU_AK = null;
	
	@RequestMapping("/location")
	public R location(String lng,String lat) {
		if(BAIDU_DITU_AK==null) {
			BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue();
			if(BAIDU_DITU_AK==null) {
				return R.error("请在配置管理中正确配置baidu_ditu_ak");
			}
		}
		Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat);
		return R.ok().put("data", map);
	}
	
	/**
	 * 人脸比对
	 * 
	 * @param face1 人脸1
	 * @param face2 人脸2
	 * @return
	 */
	@RequestMapping("/matchFace")
	public R matchFace(String face1, String face2,HttpServletRequest request) {
		if(client==null) {
			/*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/
			String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();
			String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();
			String token = BaiduUtil.getAuth(APIKey, SecretKey);
			if(token==null) {
				return R.error("请在配置管理中正确配置APIKey和SecretKey");
			}
			client = new AipFace(null, APIKey, SecretKey);
			client.setConnectionTimeoutInMillis(2000);
			client.setSocketTimeoutInMillis(60000);
		}
		JSONObject res = null;
		try {
			File file1 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face1);
			File file2 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face2);
			String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
			String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
			MatchRequest req1 = new MatchRequest(img1, "BASE64");
			MatchRequest req2 = new MatchRequest(img2, "BASE64");
			ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
			requests.add(req1);
			requests.add(req2);
			res = client.match(requests);
			System.out.println(res.get("result"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return R.error("文件不存在");
		} catch (IOException e) {
			e.printStackTrace();
		} 
		return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));
	}
    
	/**
	 * 获取table表中的column列表(联动接口)
	 * @param table
	 * @param column
	 * @return
	 */
	@IgnoreAuth
	@RequestMapping("/option/{tableName}/{columnName}")
	public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		if(StringUtils.isNotBlank(level)) {
			params.put("level", level);
		}
		if(StringUtils.isNotBlank(parent)) {
			params.put("parent", parent);
		}
		List<String> data = commonService.getOption(params);
		return R.ok().put("data", data);
	}
	
	/**
	 * 根据table中的column获取单条记录
	 * @param table
	 * @param column
	 * @return
	 */
	@IgnoreAuth
	@RequestMapping("/follow/{tableName}/{columnName}")
	public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		params.put("columnValue", columnValue);
		Map<String, Object> result = commonService.getFollowByOption(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 修改table表的sfsh状态
	 * @param table
	 * @param map
	 * @return
	 */
	@RequestMapping("/sh/{tableName}")
	public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
		map.put("table", tableName);
		commonService.sh(map);
		return R.ok();
	}
	
	/**
	 * 获取需要提醒的记录数
	 * @param tableName
	 * @param columnName
	 * @param type 1:数字 2:日期
	 * @param map
	 * @return
	 */
	@IgnoreAuth
	@RequestMapping("/remind/{tableName}/{columnName}/{type}")
	public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("table", tableName);
		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));
			}
		}
		
		int count = commonService.remindCount(map);
		return R.ok().put("count", count);
	}
	
	/**
	 * 单列求和
	 */
	@IgnoreAuth
	@RequestMapping("/cal/{tableName}/{columnName}")
	public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		Map<String, Object> result = commonService.selectCal(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 分组统计
	 */
	@IgnoreAuth
	@RequestMapping("/group/{tableName}/{columnName}")
	public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		List<Map<String, Object>> result = commonService.selectGroup(params);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		for(Map<String, Object> m : result) {
			for(String k : m.keySet()) {
				if(m.get(k) instanceof Date) {
					m.put(k, sdf.format((Date)m.get(k)));
				}
			}
		}
		return R.ok().put("data", result);
	}
	
	/**
	 * (按值统计)
	 */
	@IgnoreAuth
	@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
	public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("xColumn", xColumnName);
		params.put("yColumn", yColumnName);
		List<Map<String, Object>> result = commonService.selectValue(params);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		for(Map<String, Object> m : result) {
			for(String k : m.keySet()) {
				if(m.get(k) instanceof Date) {
					m.put(k, sdf.format((Date)m.get(k)));
				}
			}
		}
		return R.ok().put("data", result);
	}
	
}

前台后台登陆帐号密码都是: Login:admin password:123456 后台管理的投票管理密码是: password:123456 其余的插件管理都是管理员进入该插件后直接管理,无须密码! 即时聊天的默认管理是:“超管”。如想修改其他人为管理,可打同学录目录下的jsl.asp,找到"guanli="超管""这一行,将超管这个的名字修改为你想要做管理的人名字即可,如想加多位管理,请以,分开。注意,填入的名字是注册后的真实名字,而不是登陆帐号。 后台有部分管理连接由于尚未修改成功,所以并未添加其功能,大家点击后会出现无法显示的提示,这是正常的。出错的连接项目为:音乐列表管理、VIP管理、数据库后台管理、绿色联盟升级导航系统。 本同学录主要功能: 1.风格可以变化,即换即用! 2.个人形象设计,可以利用在同学录里发帖子发留言赚得的货币在虚拟商店内买心仪的服饰装扮虚拟形象,而且打扮好后,还可以其他同学的虚拟形象一起合影留念。并且在班级留言的时候会在留言旁边显示出自己的形象设计。个人形象设计在登陆名字后出现的小人图案下会有一个“我的虚拟形象”可以点击该连接进入,或者在班级主页顶端的菜单--个人菜单--形象设计也可以进入。 3.娱乐休闲的在线小游戏请你来找茬,这个游戏应该没有人会不知道吧?呵呵,在班级主页顶端的菜单--班级社区--请你找茬可以点击进入该游戏,一共有205道题目。 4.在线即时聊天,这个我不再多说,明眼一看就知道怎么回事了。 5.班级投票,在班级主页右下角的位置,可以方便用来统计大家的意见的。 6.在线随机播放歌曲,进入同学录后,可以随机听到好多歌曲,如果网速慢的可以在主页顶左边位置切换到无音乐版本的同学录。一共740首歌曲,连接基本都是有效的,因为多人共享这些音乐程序,所以有时候会发现一些歌曲不能听,下一次就能听了。 7.娱乐休闲的在线小游戏成语接龙,在班级主页顶端的菜单--班级社区--成语接龙可以点击进入该游戏。 8.外贸银行,钱多了可以存到银行来哦,银行会每天支付一定比例的利息,注意,如果想在大富翁排行榜就请不要存那么多钱了!因为存了钱是不能算现金排行的!在班级主页顶端的菜单--班级社区--外贸银行可以点击进入该银行。 9.娱乐休闲的在线小游戏泡泡龙,在班级主页顶端的菜单--班级社区--泡泡龙可以点击进入该游戏。 10.娱乐休闲的祈愿祝福,在班级主页顶端的菜单--班级社区--祈愿祝福可以点击进入。 11.娱乐休闲的每日星运,在班级主页顶端的菜单--班级社区--每日星运可以点击进入。 12.娱乐休闲的海边钓鱼,在班级主页顶端的菜单--班级社区--海边钓鱼可以点击进入。 13.娱乐休闲的开心词典,在班级主页顶端的菜单--班级社区--开心词典可以点击进入。
【系统要求】 1) 硬件环境: MS WINDOWS NT PACK 4 OR LATER /WIN2000 WITH IIS 4.0 MS WINDOWS 9X+PWS 2) 数 据 库: MS Access2000 3) 推荐: Windows 2000+IIS5.0+Access2000+IE5.5 环境测试 【系统安装】 1) 首先若建站空间上存在多个用本代码建立的校友录应修改inc目录下的 inc_class_def.asp文件setup目录下config.asp文件中GBL_strCookieURL 的值(保持一致),并此空间上的其它用本代码的校友录不同,以防止 application对象混淆,一般情况下无须修改. 然后将所有文件上传所有文件至您的服务器空间 2) 运行目录下的index.asp,如果是第一次安装将自动建立本校友录的运行环境 数据库文件为db目录下的#4325423324class1.asp, 如果你很熟悉asp,建议您为保证网站安全,请将数据库 文件改名,并相应改变inc/inc_db_func.asp里的数据库连接源的名字 3) 后台管理系统为单独系统,在首页的底部有管理入口链接,从此进入管理面板 默认管理员帐号是:admin,密码:111111 首次使用后请立即在修改密码 如不熟悉ASP开发,请不要修改管理员帐号,单纯修改数据库里的管理员帐号将带来错误 4) 管理面板操作指南: 系统管理: [1] 管理员列表 [2] 管理员添加 [3] 网站空间信息检测 网站管理 [1] 网站参数设置:分页数,图片上限等参数设置 [2] 网站信息设置:网站名称,版权申明,备案信息,管理员信箱等基本资料设置 [3] 编辑公告:网站首页公告编辑 [1] 编辑校友录注册条款:用户注册条款编辑 [4] 编辑校友录介绍:本网站介绍 [5] 编辑校友录发展历程 [6] 编辑校友录联系与交流方式 [7] 编辑校友录组织章程 [8] 编辑校友录使用帮助 [9] 信息栏目管理:内置本站新闻,母校新闻,校友风采三个栏目,并可自己添加管理栏目其中的文章 [10] 友情链接管理:支持LOGO文本两种形式友情链接 [11] 用户注册设置 :设置提问注册,直接注册认证注册三种方式 [12] 用户管理:查询用户信息,删除用户,修改用户密码,统计用户信息,设置论坛总版主 [13] 用户留言管理 [14] 用户相册管理 [15] 活动管理:校友活动管理 [16] 论坛分类管理 [17] 论坛板块管理 5) 目前内置有一个校友录用户:school,密码111111,可自行进行修改 【主要功能特色】 1) 校友多种方式注册认证(直接注册,答问注册,认证注册) 2) 校友论坛 小巧而实用的论坛,支持UBB标签,快速回复,帖子搜索,灵活的将帖子置顶,设置精华 3) 校友相册 相片上传(方便上传相片文件,支持网络图片粘贴) 4) 用户区 用户头像个性化选择设定(卡通头像,用户自己上传的头像,虚拟形象) 方便的管理自己在本网站发表的帖子,留言,相片 收藏好友,好贴,相片等 5) 站内短信 6) 校友聚会 召集大家聚会,讨论,表态(表态的个人信息,如联系电话仅发起人管理员可见),并可总结每次聚会 7) 信息栏目 本站新闻,母校新闻,校友风采,自定义信息栏目 8) 校友信息 灵活查询查看校友信息,多条件搜索,并可导出为excel格式 9) 校友生日榜 10)友情链接 支持logo文字两种形式友情链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿毕业分享网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值