【springboot設計源碼】慶陽非物質文化遺產展示平臺課題背景、目的、意義、研究方法

該項目含有源碼、文檔、PPT、配套開發軟件、軟件安裝教程、項目發布教程等學習內容。

目錄

一、項目介紹:

二、文檔學習資料:

三、模塊截圖:

四、開發技術與運行環境:

五、代碼展示:

六、數據庫表截圖:



一、項目介紹:

背景:非物質文化遺產是指人類口頭傳統、表演藝術、社會實踐、儀式、節慶、知識與實踐、傳統手工藝等各種傳統文化表現形式。隨著社會的發展和文化保護意識的增強,非物質文化遺產的保護、傳承和展示變得越來越重要。因此,建立一個慶陽非物質文化遺產展示平臺的課題具有重要的研究意義。

目的:本課題旨在建立一個在線展示平臺,通過多種技術手段,如視頻、圖片、文字介紹等,全面展示慶陽地區的非物質文化遺產,促進非物質文化遺產的傳承和宣傳。

意義:通過該研究,可以更好地向公眾展示慶陽地區豐富的非物質文化遺產,增強公眾對非物質文化遺產的認識和保護意識,促進非物質文化遺產的傳承和發展。同時,也可以為慶陽地區的旅游業發展和文化產業振興提供有力支持。

研究方法:主要包括數字化展示技術、多媒體內容制作、網站建設、用戶體驗設計等。通過數字化展示技術對非物質文化遺產進行多維度的展示,利用多媒體內容制作技術制作展示內容,搭建專門的網站平臺進行展示,同時注重用戶體驗設計,使得展示平臺更加直觀、生動、易于理解。同時,還可以采用社會調研和用戶反饋等方法對展示平臺進行改進和優化。

二、文檔學習資料:

三、模塊截圖:

四、開發技術與運行環境

技術棧:

1. 前端技術:

???Vue.js:用于構建用戶界面的漸進式JavaScript框架。

???Element UI:Vue的UI組件庫,用于快速構建界面。

???Axios:基于Promise的HTTP客戶端,用于與后端進行通信。

2. 后端技術:

???Spring:用于構建業務邏輯層的Java框架。

???Spring MVC:用于構建Web層的Spring框架。

???MyBatis:一個支持定制化SQL、存儲過程以及高級映射的持久層框架。

3. 數據庫技術:

???MySQL:常用的關系型數據庫管理系統。

4. 構建工具:

???Maven:項目管理和構建自動化工具。

運行環境:

1. 開發環境:

???IDE:如IDEA或eclipse,用于編碼和調試。

???本地數據庫:如MySQL,用于數據存儲和查詢。

???本地服務器:如Tomcat7.0,用于部署和運行Web應用。

五、代碼展示(示范代碼注釋):

/*** 用戶* 后端接口* @author* @email
*/
@RestController
@Controller
@RequestMapping("/yonghu")
public class YonghuController {private static final Logger logger = LoggerFactory.getLogger(YonghuController.class);private static final String TABLE_NAME = "yonghu";@Autowiredprivate YonghuService yonghuService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate GonggaoService gonggaoService;//公告@Autowiredprivate GuwenService guwenService;//顧問@Autowiredprivate GuwenChatService guwenChatService;//用戶咨詢@Autowiredprivate GuwenYuyueService guwenYuyueService;//顧問預約@Autowiredprivate JiankangzhishiService jiankangzhishiService;//健康知識@Autowiredprivate JiankangzhishiCollectionService jiankangzhishiCollectionService;//健康知識收藏@Autowiredprivate JiankangzhishiLiuyanService jiankangzhishiLiuyanService;//健康知識留言@Autowiredprivate UsersService usersService;//管理員/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> 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"));else if("顧問".equals(role))params.put("guwenId",request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = yonghuService.queryPage(params);//字典表數據轉換List<YonghuView> list =(List<YonghuView>)page.getList();for(YonghuView 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);YonghuEntity yonghu = yonghuService.selectById(id);if(yonghu !=null){//entity轉viewYonghuView view = new YonghuView();BeanUtils.copyProperties( yonghu , view );//把實體數據重構到view中//修改對應字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到數據");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永遠不會進入");Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>().eq("username", yonghu.getUsername()).or().eq("yonghu_phone", yonghu.getYonghuPhone()).or().eq("yonghu_id_number", yonghu.getYonghuIdNumber());logger.info("sql語句:"+queryWrapper.getSqlSegment());YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);if(yonghuEntity==null){yonghu.setCreateTime(new Date());yonghu.setPassword("123456");yonghuService.insert(yonghu);return R.ok();}else {return R.error(511,"賬戶或者用戶手機號或者用戶身份證號已經被使用");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());YonghuEntity oldYonghuEntity = yonghuService.selectById(yonghu.getId());//查詢原先數據String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永遠不會進入");if("".equals(yonghu.getYonghuPhoto()) || "null".equals(yonghu.getYonghuPhoto())){yonghu.setYonghuPhoto(null);}yonghuService.updateById(yonghu);//根據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<YonghuEntity> oldYonghuList =yonghuService.selectBatchIds(Arrays.asList(ids));//要刪除的數據yonghuService.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");//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))try {List<YonghuEntity> yonghuList = new ArrayList<>();//上傳的東西Map<String, List<String>> 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<List<String>> dataList = PoiUtil.poiImport(file.getPath());//讀取xls文件dataList.remove(0);//刪除第一行,因為第一行是提示for(List<String> data:dataList){//循環YonghuEntity yonghuEntity = new YonghuEntity();
//                            yonghuEntity.setUsername(data.get(0));                    //賬戶 要改的
//                            yonghuEntity.setPassword("123456");//密碼
//                            yonghuEntity.setYonghuName(data.get(0));                    //用戶姓名 要改的
//                            yonghuEntity.setYonghuPhone(data.get(0));                    //用戶手機號 要改的
//                            yonghuEntity.setYonghuIdNumber(data.get(0));                    //用戶身份證號 要改的
//                            yonghuEntity.setYonghuPhoto("");//詳情和圖片
//                            yonghuEntity.setSexTypes(Integer.valueOf(data.get(0)));   //性別 要改的
//                            yonghuEntity.setYonghuEmail(data.get(0));                    //用戶郵箱 要改的
//                            yonghuEntity.setCreateTime(date);//時間yonghuList.add(yonghuEntity);//把要查詢是否重復的字段放入map中//賬戶if(seachFields.containsKey("username")){List<String> username = seachFields.get("username");username.add(data.get(0));//要改的}else{List<String> username = new ArrayList<>();username.add(data.get(0));//要改的seachFields.put("username",username);}//用戶手機號if(seachFields.containsKey("yonghuPhone")){List<String> yonghuPhone = seachFields.get("yonghuPhone");yonghuPhone.add(data.get(0));//要改的}else{List<String> yonghuPhone = new ArrayList<>();yonghuPhone.add(data.get(0));//要改的seachFields.put("yonghuPhone",yonghuPhone);}//用戶身份證號if(seachFields.containsKey("yonghuIdNumber")){List<String> yonghuIdNumber = seachFields.get("yonghuIdNumber");yonghuIdNumber.add(data.get(0));//要改的}else{List<String> yonghuIdNumber = new ArrayList<>();yonghuIdNumber.add(data.get(0));//要改的seachFields.put("yonghuIdNumber",yonghuIdNumber);}}//查詢是否重復//賬戶List<YonghuEntity> yonghuEntities_username = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("username", seachFields.get("username")));if(yonghuEntities_username.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_username){repeatFields.add(s.getUsername());}return R.error(511,"數據庫的該表中的 [賬戶] 字段已經存在 存在數據為:"+repeatFields.toString());}//用戶手機號List<YonghuEntity> yonghuEntities_yonghuPhone = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_phone", seachFields.get("yonghuPhone")));if(yonghuEntities_yonghuPhone.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_yonghuPhone){repeatFields.add(s.getYonghuPhone());}return R.error(511,"數據庫的該表中的 [用戶手機號] 字段已經存在 存在數據為:"+repeatFields.toString());}//用戶身份證號List<YonghuEntity> yonghuEntities_yonghuIdNumber = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_id_number", seachFields.get("yonghuIdNumber")));if(yonghuEntities_yonghuIdNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_yonghuIdNumber){repeatFields.add(s.getYonghuIdNumber());}return R.error(511,"數據庫的該表中的 [用戶身份證號] 字段已經存在 存在數據為:"+repeatFields.toString());}yonghuService.insertBatch(yonghuList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入數據異常,請聯系管理員");}}/*** 登錄*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));if(yonghu==null || !yonghu.getPassword().equals(password))return R.error("賬號或密碼不正確");String token = tokenService.generateToken(yonghu.getId(),username, "yonghu", "用戶");R r = R.ok();r.put("token", token);r.put("role","用戶");r.put("username",yonghu.getYonghuName());r.put("tableName","yonghu");r.put("userId",yonghu.getId());return r;}/*** 注冊*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody YonghuEntity yonghu, HttpServletRequest request) {
//    	ValidatorUtils.validateEntity(user);Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>().eq("username", yonghu.getUsername()).or().eq("yonghu_phone", yonghu.getYonghuPhone()).or().eq("yonghu_id_number", yonghu.getYonghuIdNumber());YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);if(yonghuEntity != null)return R.error("賬戶或者用戶手機號或者用戶身份證號已經被使用");yonghu.setCreateTime(new Date());yonghuService.insert(yonghu);return R.ok();}/*** 重置密碼*/@GetMapping(value = "/resetPassword")public R resetPassword(Integer  id, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectById(id);yonghu.setPassword("123456");yonghuService.updateById(yonghu);return R.ok();}/*** 修改密碼*/@GetMapping(value = "/updatePassword")public R updatePassword(String  oldPassword, String  newPassword, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectById((Integer)request.getSession().getAttribute("userId"));if(newPassword == null){return R.error("新密碼不能為空") ;}if(!oldPassword.equals(yonghu.getPassword())){return R.error("原密碼輸入錯誤");}if(newPassword.equals(yonghu.getPassword())){return R.error("新密碼不能和原密碼一致") ;}yonghu.setPassword(newPassword);yonghuService.updateById(yonghu);return R.ok();}/*** 忘記密碼*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));if(yonghu!=null){yonghu.setPassword("123456");yonghuService.updateById(yonghu);return R.ok();}else{return R.error("賬號不存在");}}/*** 獲取用戶的session用戶信息*/@RequestMapping("/session")public R getCurrYonghu(HttpServletRequest request){Integer id = (Integer)request.getSession().getAttribute("userId");YonghuEntity yonghu = yonghuService.selectById(id);if(yonghu !=null){//entity轉viewYonghuView view = new YonghuView();BeanUtils.copyProperties( yonghu , view );//把實體數據重構到view中//修改對應字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到數據");}}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = yonghuService.queryPage(params);//字典表數據轉換List<YonghuView> list =(List<YonghuView>)page.getList();for(YonghuView c:list)dictionaryService.dictionaryConvert(c, request); //修改對應字典表字段return R.ok().put("data", page);}/*** 前端詳情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);YonghuEntity yonghu = yonghuService.selectById(id);if(yonghu !=null){//entity轉viewYonghuView view = new YonghuView();BeanUtils.copyProperties( yonghu , view );//把實體數據重構到view中//修改對應字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到數據");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>().eq("username", yonghu.getUsername()).or().eq("yonghu_phone", yonghu.getYonghuPhone()).or().eq("yonghu_id_number", yonghu.getYonghuIdNumber())
//            .notIn("yonghu_types", new Integer[]{102});logger.info("sql語句:"+queryWrapper.getSqlSegment());YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);if(yonghuEntity==null){yonghu.setCreateTime(new Date());yonghu.setPassword("123456");yonghuService.insert(yonghu);return R.ok();}else {return R.error(511,"賬戶或者用戶手機號或者用戶身份證號已經被使用");}}}

六、數據庫表截圖(示范表注釋):

七、配套學習資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210376.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

即時通訊技術文集(第26期):實時音視頻技術合集(Part1) [共16篇]

為了更好地分類閱讀 52im.net 總計1000多篇精編文章&#xff0c;我將在每周三推送新的一期技術文集&#xff0c;本次是第26 期。 [- 1 -] 實時語音聊天中的音頻處理與編碼壓縮技術簡述 [鏈接] http://www.52im.net/thread-825-1-1.html [摘要] 在視頻或者音頻通話過程中&…

2023-12-09 LeetCode每日一題(下一個更大的數值平衡數)

2023-12-09每日一題 一、題目編號 2048. 下一個更大的數值平衡數二、題目鏈接 點擊跳轉到題目位置 三、題目描述 如果整數 x 滿足&#xff1a;對于每個數位 d &#xff0c;這個數位 恰好 在 x 中出現 d 次。那么整數 x 就是一個 數值平衡數 。 給你一個整數 n &#xff0…

數據結構和算法專題---4、限流算法與應用

本章我們會對限流算法做個簡單介紹&#xff0c;包括常用的限流算法&#xff08;計數器、漏桶算法、令牌桶案發、滑動窗口&#xff09;的概述、實現方式、典型場景做個說明。 什么是限流算法 限流是對系統的一種保護措施。即限制流量請求的頻率&#xff08;每秒處理多少個請求…

11_企業架構web服務器文件及時同步

企業架構web服務器的文件及時同步 學習目標和內容 1、能夠理解為何要服務器間文件同步 2、能夠簡單描述實現文件同步的幾種方式 3、能夠實現服務器文件實時同步的案例 一、同步文件介紹 1、服務器文件同步的必要性 根據業務發展需求&#xff0c;業務網站架構已經發展到以上模式…

Linux文件結構與文件權限

基于centos了解Linux文件結構 了解一下文件類型 Linux采用的一切皆文件的思想&#xff0c;將硬件設備、軟件等所有數據信息都以文件的形式呈現在用戶面前&#xff0c;這就使得我們對計算機的管理更加方便。所以本篇文章會對Linux操作系統的文件結構和文件權限進行講解。 首先…

單元測試Nunit的幾種斷言

Nunit提供了一些輔助函數用于確定好某個被測試函數是否正常工作。通常把這些函數稱為斷言 斷言是單元測試最基本的組成部分。因此&#xff0c;NUnit程序庫以Assert類的靜態方法的形式提供了不同形式的多種斷言 1. Assert.AreEqual&#xff1a;比較兩個值是否相等。用于比較數…

Qt生成動態鏈接庫并使用動態鏈接庫

項目結構 整個工程由一個主程序構成和一個模塊構成(dll)。整個工程的結構目錄如下 Define.priMyProject.proMyProject.pro.user ---bin ---MainProgrammain.cppMainProgram.proMainProgram.pro.userwidget.cppwidget.hwidget.ui ---MathDllMathDll.proMathDll.pro.userMyMath.…

Axios 攔截器實戰教程:簡單易懂

Axios 提供了一種稱為 “攔截器&#xff08;interceptors&#xff09;” 的功能&#xff0c;使我們能夠在請求或響應被發送或處理之前對它們進行全局處理。攔截器為我們提供了一種簡潔而強大的方式來轉換請求和響應、進行錯誤處理、添加認證信息等操作。在本文中&#xff0c;我…

Matlab 點云收縮L1中值(Weiszfeld算法)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 對于之前的加權均值收縮方式,它存在一個很大的缺點,即容易受到噪聲的影響,因此這里我們采用另一種統計學方案:L1中值。其形式如下所示: 其中 x i x_i

MongoDB的條件操作符

本文主要介紹MongoDB的條件操作符。 目錄 MongoDB條件操作符1.比較操作符2.邏輯操作符3.元素操作符4.數組操作符5.文本搜索操作符 MongoDB條件操作符 MongoDB的條件操作符主要分為比較操作符、邏輯操作符、元素操作符、數組操作符、文本搜索操作符等幾種類型。 以下是這些操作…

拷貝實體類

文章目錄 方式一 &#xff1a; 方式二&#xff1a;&#xff08;不常用&#xff09; 方式一 &#xff1a; 將左邊的實體拷貝到右邊的實體中 import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(memberAddress, resp);將右邊的實體拷貝到左邊的實體中 imp…

對String類的操作 (超細節+演示)

[本節目標] 1.認識String類 2.了解String類的基本用法 3.熟練掌握String類的常見操作 4.認識字符串常量池 5.認識StringBuffer和StringBuilder 1.String類的重要性 在C語言中已經涉及到字符串了&#xff0c;但是在C語言中要表示字符串只能使用字符數組或者字符指針&…

高速風筒安規方案中的安規測試及安規電路特性介紹--【其利天下技術】

作為家用電子產品&#xff0c;高速吹風筒做安規測試&#xff0c;過安規要求是必須保證的&#xff0c;一般電路要過安規測試&#xff0c;那么安規測試的目的是什么呢&#xff1f; 安規測試字面意思是安全規范測試&#xff0c;主要強調對使用人員的安全保護&#xff0c;也就是我…

P7 Linux C三種終止進程的方法

前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《C_ChenPi的博客-CSDN博客》??? &#x1f525; 推薦專欄2: 《Linux C應用編程&#xff08;概念類&#xff09;_ChenPi的博客-CSDN博客》??? &#x1f6f8;推薦專欄3: ??????《 鏈表_Chen…

什么是MyBatis、什么是MyBatis-Plus、簡單詳細上手案例

什么是MyBatis MyBatis是一個開源的Java持久層框架&#xff0c;用于簡化與關系型數據庫的交互。它通過將SQL語句與Java代碼進行分離&#xff0c;提供了一種優雅的方式來處理數據庫操作。 MyBatis的核心思想是將SQL語句與Java方法進行映射&#xff0c;使得開發人員可以通過配置…

【工具類】Word 轉 PDF

商業版權問題 使用破解版-aspose-words-19.5jdk.jar https://blog.csdn.net/aley/article/details/127914145 Document wordDoc new Document(wordFileInputStream); wordDoc.save(pdfFile, new PdfSaveOptions());中文亂碼問題 在linux中使用會造成中文亂碼問題 解決方案…

C語言數據結構-基于單鏈表實現通訊錄

文章目錄 1 基礎要求2 通訊錄功能2.1 引入單鏈表的文件2.2 定義聯系人數據結構2.3 打開通訊錄2.4 保存數據后銷毀通訊錄2.5 添加聯系人2.6 刪除聯系人2.7 修改聯系人2.8 查找聯系人2.9 查看通訊錄 3 通訊錄代碼展示3.1 SeqList_copy.h3.2 SeqList_copy.c3.3 Contact.h3.4 Conta…

模塊化機房在大數據時代的角色:高效、可擴展的數據存儲和處理平臺

隨著大數據時代的到來&#xff0c;數據已經成為企業競爭的核心資源。然而&#xff0c;傳統的數據中心已經無法滿足現代業務的需求&#xff0c;尤其是在數據存儲和處理方面。模塊化機房作為一種新型的數據中心建設模式&#xff0c;具有高效、可擴展等優勢&#xff0c;逐漸成為大…

PyCharm編輯器結合Black插件,輕松實現Python代碼格式化

大家好&#xff0c;使用Black對Python代碼進行格式化&#xff0c;可使代碼看起來更美觀。但是&#xff0c;隨著項目規模不斷變大&#xff0c;對每個文件運行Black變得很繁瑣。本文就來介紹在PyCharm中實現這一目標的方法。 1.安裝Black 首先&#xff0c;在虛擬環境中安裝Blac…

二叉樹的鋸齒形層序遍歷[中等]

優質博文&#xff1a;IT-BLOG-CN 一、題目 給你二叉樹的根節點 root &#xff0c;返回其節點值的 鋸齒形層序遍歷 。&#xff08;即先從左往右&#xff0c;再從右往左進行下一層遍歷&#xff0c;以此類推&#xff0c;層與層之間交替進行&#xff09;。 示例 1&#xff1a; 輸…