著者ホームページ:プログラミングコンパス
著者について: Java 分野の高品質クリエイター、CSDN ブログ エキスパート、CSDN コンテンツ パートナー、Nuggets の招待著者、Alibaba Cloud ブログ エキスパート、51CTO 招待著者、長年のアーキテクト設計経験、Tencent 教室の常駐講師
主な内容:Javaプロジェクト、Pythonプロジェクト、フロントエンドプロジェクト、人工知能とビッグデータ、卒業設計、履歴書テンプレート、教材、面接質問バンク、技術相互支援
お気に入り、いいね、迷わず作者フォローすると良いです
記事の最後にあるソースコードを入手してください
序文:
卒業制作は数年間の大学生活の成果の発表として大きな比重を占め、とても大切な節目でもあります!しかし、この専攻には入りたくない、あるいは他の希望を持っている人が多く、戦いに備えて公的試験や大学院入学試験を受験して軍隊に入隊する人が多く、結果的には時間がほとんどありません。最終的なデザインと論文の準備をします。近年、家庭教師の卒業プロジェクトに対する要求はますます高くなっていると言えます。その多くは企業開発の一般的な困難を超えており、ほとんどの学生は前に進むことをためらい、ためらっています。このコラムでは、お客様向けに開発されたBS作品を参考アイデアとしてご紹介します。必要に応じて、関連プロジェクトの開発、LWドキュメントの作成、プロジェクトの説明、リモートデバッグなどの一連のサービスも提供します。 、などお選びいただけます!
商品番号:BS-PT-096
1. 環境紹介
ロケール: Java: jdk1.8
データベース: MySQL: mysql5.7
アプリケーションサーバー: Tomcat: tomcat8.5.31
開発ツール: IDEA または eclipse
開発技術背景:SSMフレームワークフロント:JSP+Bootstrap+Jquery
2. プロジェクト紹介
現代の大学生は、これまでの大学生とは人生観や社会的価値観が全く異なり、80年代以降と比べて90年代以降は新世紀の幕開けに追いつき、性格はより自立的で自意識が高まっています。 , しかし、彼らはインターネットに大きく依存しています。しかし、インターネットの仮想世界に過度に耽溺すると、一部の大学生は必然的に思想的意志が弱くなり、精神的に空虚になり、金銭を崇拝し快楽を求める深刻な考えを抱くようになります。これは個人の成長にとって極めて有害であり、祖国の将来、さらには国家安全保障にとっても隠れた危険であるため、大学生の思想的・政治的教育を強化することは、大学における人材育成において非常に重要かつ不可欠な部分である。私たちの国で。現代の大学生がインターネットに強く依存していることを考慮して、新世紀のネットワーク技術の利点を利用して大学生のイデオロギーおよび政治教育ウェブサイトを構築すると、キャンパス内での学生のイデオロギーおよび政治教育のオンライン補足として使用できます。 、大学生の学習熱意を最大限に動員し、大学生の学習関心を向上させる、党の愛国心、勤勉、献身などの思想意識。
この Web サイトは Java 言語で書かれており、データの保存と管理に MySQL データベースを使用しており、大学向けのイデオロギーおよび政治教育プラットフォームの Web サイトを開発および実装しています。この Web サイトには複数のモジュールが含まれています。後のデバッグを通じて、Web サイトの期待された目標は実現されました。従来のオフライン教育と比較して、この Web サイトは最新のコンピュータ ネットワーク技術を使用して、オンライン教育を通じて大学生に思想的および政治的教育をより効率的に実施し、教育の幅を広げます。大学生に対する思想・政治教育に関する研究の方向性。システムはB/S構造、SSM、IDEA統合開発ツール、Tomcat8.5サーバーの3つのフレームワークを採用し、システム開発を完了します。
管理者モジュールは、登録メンバー管理、Web サイトコンテンツカテゴリ管理、Web サイトコンテンツ情報管理、Web サイト告知管理、コメント情報管理、メッセージ情報管理の 6 つのサブモジュールに分かれています。会員ユーザーの機能には、登録・ログイン操作、Webサイトコンテンツ情報の閲覧、Webサイトコンテンツ情報の検索、Webサイトコンテンツ情報のコメント、Webサイトコンテンツ情報の閲覧、Webサイトコンテンツ情報の公開が含まれます。モジュールに従ってデータベース テーブルを作成し、IDEA 開発ツールでコードをモジュールごとにコンパイルします。モジュールが作成されるたびに、データベースと対話して、フロント エンドで情報が正しく表示されることを確認します。次に、分析、要約、デバッグを行います。すべてのモジュールが開発された後、モジュール結合テストが実行され、モジュールの結合が減少し、パフォーマンスが向上します。最後に、テスト ケースが作成され、テスト ケースに従ってシステム テストが実行されます。 BUG の修正を見つけます。
今回設計したコンテンツ管理システムはブラウザ、メンバー、管理者の3つの部分に分かれており、それぞれ設計が異なります。
1. 閲覧者権限:コンテンツの検索と閲覧のみが可能ですが、コンテンツへのコメントはできず、もちろんメッセージを残すこともできず、会員登録後にのみ該当権限を使用することができます。
2. メンバーの権限: メンバーはさまざまな検索やあいまい検索を実行でき、すべてのコンテンツと自分の個人情報にコメントすることもできます。
3. 管理者: 管理者はシステムのすべての権限を持ち、コンテンツの追加、削除、変更、クエリ、不正なユーザーの凍結、コンテンツ システムの保守などを行うことができます [4]。
管理者のユースケース図:
フロントエンドユーザーのユースケース図
会員ユースケース図より、会員登録を行うことで初めてコンテンツの閲覧、コンテンツの検索、コンテンツの評価、お知らせや緊急メッセージ情報の投稿ができることが分かります[6]。
データ テーブルの設計思想は、まずER図モデルを確立し、次にデータベース テーブル間の関係図を決定することです。ER図では、エンティティ名を表示するために四角形が使用され、エンティティ名が書き込まれます。楕円の形状はエンティティの属性を示すために使用され、ひし形がエンティティに接続され、名前がマークされ、モデル内のすべてのグラフが無向エッジによって接続されます[ 8] 。データ概念モデルの設計を図に示します。
図 全体特性ER図
全体的な機能構造図:
1. フォアグラウンド機能モジュール:
- 登録とログイン: 登録後、閲覧者はコメントしたりメッセージを残す権利を持ちます。
- コンテンツ分類モジュール: 分類とは、データベースからさまざまな関数を動的に取得し、さまざまな選択を行ってさまざまなコンテンツ ページにジャンプすることです。たとえば、「インターナショナル」をクリックすると、インターナショナル コンテンツなどに関するページが表示されます。
- フロント掲示板:当サイトの重要なお知らせやお知らせなど、管理者が会員となったユーザーにお知らせするのに便利です。
- コンテンツのコメント: メンバーのみがコメントや削除機能を実行でき、他の人のコメントも表示できます。
2. バックグラウンド機能モジュール:
- 会員情報の管理:システム管理者は会員情報の削除、変更等の権限を有しており、一部の悪質な会員に対しては制裁や会員権限の凍結を行うことができます。
- カテゴリ管理: システム管理者は、さまざまなコンテンツ カテゴリを個別に管理します。
- 情報公開:情報公開は管理者が管理します。
- お知らせの管理: 管理者はメンバーにお知らせを公開し、当然、対応する変更および削除の権限を持ちます。
- メッセージ管理: 管理者が返信作業に使用します。
- コメント管理: 管理者はコメントを確認するためにコメント管理を行います。
三、システム表示
システムホーム
全文検索
コメントのやり取り
ニュース一覧
バックステージマネジメント
メンバー管理
型管理
4番目、コアコード表示
package cn.base.controller;
import cn.base.service.BaseService;
import cn.entity.User;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
/**
* 抽取的顶层controller:提取公用的方法并利于扩展
* @param <S> 业务类
* @param <T> 实体类
*/
public abstract class BaseController<S extends BaseService, T> {
@Autowired
protected S service;
@Autowired
protected HttpServletRequest request;
@Autowired
protected HttpServletResponse response;
@Autowired
protected HttpSession session;
@RequestMapping("jsonList")
@ResponseBody
public List<T> jsonList() {
return service.getList(null);
}
@RequestMapping("get")
@ResponseBody
public T get(Integer id) {
return (T) service.get(id);
}
@RequestMapping("del")
@ResponseBody
public void del(Integer id) {
service.delete(id);
}
@RequestMapping("modify")
@ResponseBody
public void modify(T t) {
service.updateSelective(t);
}
@RequestMapping("insert")
@ResponseBody
public void insert(T t) {
service.insertSelective(t);
}
/**
*
* @param pageNo 页码
* @param pageSize 每页显示的条数
* @param map 查询条件
* @param model 存储数据模型
*/
protected void page(Integer pageNo, Integer pageSize, Map<String, Object> map, Model model) {
pageSize = pageSize == null ? 10 : pageSize;
pageNo = pageNo == null ? 1 : pageNo;
String order = "";
if (map != null && map.containsKey("order")) {
order = (String) map.get("order");
map.remove("order");
}
PageInfo<T> pageInfo=service.getPage(pageNo, pageSize, order, map);
model.addAttribute("pageInfo",pageInfo);
if (map!=null) {
for (String key : map.keySet()) {
model.addAttribute(key,map.get(key));
}
}
}
protected User getLogin(){
return (User) session.getAttribute("login");
}
}
package cn.controller;
import cn.base.controller.BaseController;
import cn.base.util.RestResult;
import cn.entity.User;
import cn.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("user")
public class UserController extends BaseController<UserService, User> {
@RequestMapping("list")
public String List(Integer pageNo, Integer role, String name, Model model) {
if (StringUtils.isEmpty(name)) name = null;
Map<String, Object> map = new HashMap<String, Object>();
map.put("isDel", 0);
map.put("name", name);
if (role != null && role != -1) map.put("role", role);
page(pageNo, 5, map, model);
return "manage/userList";
}
@RequestMapping("jsonLogin")
@ResponseBody
public RestResult login(String account, String password, Model model) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("account", account);
map.put("password", password);
List<User> list = service.getList(map);
if (list.size() > 0) {
User user = list.get(0);
session.setAttribute("login", user);
return new RestResult(RestResult.SUCCESS, new Exception(""));
} else {
model.addAttribute("error", "用户名或密码错误");
return new RestResult(RestResult.ERROR, new Exception("用户名或密码错误!\n请重新输入。"));
}
}
@RequestMapping("reg")
@ResponseBody
public void reg(User user) {
user.setRole(2);
service.insert(user);
}
@RequestMapping("accTest")
@ResponseBody
public boolean accTest(String account) {
if (StringUtils.isEmpty(account)) account = null;
Map<String, Object> map = new HashMap<String, Object>();
map.put("account", account);
List<User> list = service.getList(map);
return list.size() >0;
}
@RequestMapping("pwdTest")
@ResponseBody
public boolean pwdTest(String old) {
User user = (User) session.getAttribute("login");
return user.getPassword().equals(old);
}
@RequestMapping("pwd")
@ResponseBody
public void pwd(String password) {
User user = (User) session.getAttribute("login");
user.setPassword(password);
service.updateSelective(user);
}
@RequestMapping("view/{id}")
public String view(@PathVariable Integer id, Model model) {
User user = service.get(id);
model.addAttribute("user", user);
if (user.getRole() == 1) return "manage/userView";
return "pwd";
}
@RequestMapping("logout")
public String logout() {
User user = getLogin();
session.removeAttribute("login");
if (user.getRole() == 1) return "manage/login/login";
else return "login";
}
}
package cn.controller;
import cn.base.controller.BaseController;
import cn.base.util.Const;
import cn.base.util.JedisUtil;
import cn.entity.Xin;
import cn.service.XinService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 内容相关的请求控制器
*/
@Controller
@RequestMapping("xin")
public class XinController extends BaseController<XinService, Xin> {
/**
* 首页的内容列表
* @param pageNo 页码参数
* @param title 搜索时的标题
* @param tid 内容分类ID
* @param model 数据存储模型
* @return
*/
@RequestMapping("list")
public String List(Integer pageNo, String title, Integer tid, Model model) {
if (StringUtils.isEmpty(title)) {
title = null;
}
if (tid != null && tid == -1) {
tid = null;
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", title);
map.put("tid", tid);
page(pageNo, 10, map, model);
//角色判断:如果未登陆或登陆人为普通用户,跳转到前端显示
if (getLogin() == null || getLogin().getRole() == 2) {
return "list";
}else {
//角色判断:如果是管理员用户,跳转到后端显示
return "manage/xinList";
}
}
public void insert(Xin xin) {
xin.setClick(0);
xin.setPubTime(Const.getCurrentTime());
service.insert(xin);
}
@RequestMapping("view/{id}")
public String view(@PathVariable Integer id, Model model) {
Xin xin = service.get(id);
xin.setClick(xin.getClick()+1);
service.updateSelective(xin);
xin=service.get(id);
model.addAttribute("xin", xin);
if (getLogin()==null||getLogin().getRole()==2) return "xinView";
return "manage/view";
}
/**
* 今日最热查询:查询今天发布的内容,最多10条
* @return
*/
@RequestMapping("hotList")
@ResponseBody
public List<Xin> hotList() {
Map<String, Object> map = new HashMap<String, Object>();
//map.put("pubTime", Const.getCurrentDay());
return service.getPage(1,10,"click desc",map).getList();
}
/**
* 推荐内容查询:查询当前这条内容同类的内容信息,最多10条
* @return
*/
@RequestMapping("tuijianList")
@ResponseBody
public List<Xin> tuijianList(int tid,int xid) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("tid", tid);
Jedis jedis = JedisUtil.getJedis();
String tjnews = jedis.get("tjnews_"+tid);
List<Xin> xinList = new ArrayList<>();
if(tjnews!=null){
xinList = JSON.parseArray(tjnews,Xin.class );
}else{
xinList = service.getPage(1, 10, "click desc", map).getList();
jedis.set("tjnews_"+tid, JSON.toJSONString(xinList));
}
//将当前浏览的内容排除
for(int i=0;i<xinList.size();i++){
if(xinList.get(i).getXid()==xid){
xinList.remove(i);
}
}
return xinList;
}
}
5. 関連作品の展示
Java開発、Python開発、PHP開発、C#開発等の関連言語をベースとした各種卒業設計業務
Nodejs、Vue等のフロントエンド技術をベースに開発・設計したフロントエンド卒業設計作品
WeChatアプレットおよびAndroid APPアプリケーション開発に基づく関連作品
51個のシングルチップマイコンをベースとした組み込みIoTの開発と応用
さまざまなアルゴリズムに基づくAIインテリジェントアプリケーション
ビッグデータを活用した各種データ管理・レコメンドシステム
最先端の技術、ワンストップサービス、丁寧なアフターサービスでお悩みを解決します