导入

jsp:

<button type="button" class="layui-btn layui-btn-primary" id="upload_excel"><i class="layui-icon"></i>请选择入学奖学金学生信息导入</button>
<div id = "file_div"></div>
<div class="head_div">
			<button id ="uploadBtn" class="layui-btn" style="display: none;" >点击上传</button> 
</div>

js

//初始加载
$(function() {
	/*加载layer的依赖*/
	loadLayerEL();
});
/**
 * 加载layer的依赖
 * @returns
 */
function loadLayerEL(){
	layui.use(['element','upload','form'], function(){
		  var element = layui.element;
		  var form = layui.form;
		  var $ = layui.jquery,upload = layui.upload;
		  /*上传文件*/
		  upload.render({ //允许上传的文件后缀
			    elem: '#upload_excel',
			    url: ctx+'/scholarShip/importScholarStudent',
			    accept: 'file', //普通文件,
			    auto:false,//是否自动上传
			    exts: 'xls|xlsx', //只允许上传excel文件
			    done: function(res){//上传完成后回调
			    	deletefile();
			    	if(res.msg=="请求上传接口出现异常"){
			    		layer.msg("请检查上传表格中数据");
			    		return false;
			    	}else{
			    		layer.msg(res.msg,{time:5000});
			    	}
			    	//查询列表的方法
			    	findScholarStudent(1,10);
			    },
			    bindAction:"#uploadBtn",
			    choose:function(obj){
			    	deletefile();
			    	//将每次选择的文件追加到文件队列
			        files = obj.pushFile();
			        if(Object.keys(files).length>0){
			        	$("#uploadBtn").show(); 
			        }else{
			        	$("#uploadBtn").hide(); 
			        }
			        //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
			        obj.preview(function(index, file, result){
			        	$("#file_div").html("<span>"+file.name+"</span>");
			        	console.log(file.name); //得到文件对象
			        });
			    	
			    }
		  });
		  /*form监听*/
		  form.on('select(show_upload_btn)', function(data){
			  if(null != files  && data.value != ""){
					$("#uploadBtn").show();
				}else{
					$("#uploadBtn").hide();
			}
		  });
	});
}
/**
 * 清除文件
 * @returns
 */
function deletefile(){
	if(null != files){
		for(var i = 0 ; i<Object.keys(files).length;i++){
			delete  files[Object.keys(files)[i]];
		}
		files = null;
		$("#uploadBtn").hide();
		$("#file_div").html("");
	}
}

java

controller
/**
	 * 上传入学奖学金的excel文件
	 * @param request
	 * @return
	 * @throws Exception
	 */
	@SysLog("上传入学奖学金的excel文件")
	@RequestMapping(value="importScholarStudent", method=RequestMethod.POST)
	@ResponseBody
	public R feitongzhaoUploads(HttpServletRequest request) throws Exception{
		R uploadPackage = scholarShipService.scholarShipUploads(request);
		return uploadPackage;
	}
	
service:
/**
	 * 上传入学奖学金的excel文件
	 * @param request
	 * @return
	 * @throws IOException 
	 */
	@Transactional
	public R scholarShipUploads(HttpServletRequest request) throws IOException {
		R r = null;
		//创建多部分解析器
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		//判断是否有文件上传
		if(multipartResolver.isMultipart(request)){
			//将request转换为多部分request
			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
			//获取multipartRequest中所有的文件
			Iterator<String> iter = multipartRequest.getFileNames();
			while(iter.hasNext()){
				//一次遍历所有文件
				MultipartFile file = multipartRequest.getFile(iter.next().toString());
				if (file != null) {
					//拿文件名
					String originalFilename = file.getOriginalFilename();
					//获取当前学年
					String year = DateUtil.getStringYear(new Date());
					//存放文件位置
					String fileSavePath = Global.getUserfilesBaseDir() + "/userfiles/enroll/scholarShip/"+year+"/";
					//重命名
					String UUIDname = UUID.randomUUID().toString();
					String newFileName =UUIDname+"_"+originalFilename;
					//创建文件的文件夹
					File newFile = new File(fileSavePath);
					if (!newFile.exists()) {
						newFile.mkdirs();
					}
				

					String fullPathName = newFile.getAbsolutePath();
					//保存文件
					File excelFile=new File(fullPathName + File.separator + newFileName);
					file.transferTo(excelFile);
					//文件路径
					String newexcelName = fullPathName + File.separator + newFileName;
					/*处理解析的文件*/
					
					Map<String,Object> scholarShipParseMap = scholarShipExcelParse(newexcelName);
					if(!"ok".equals(scholarShipParseMap.get("msg").toString())) {
						log.error("文件上传解析失败!");
						return R.error("203001").put("msg", scholarShipParseMap.get("msg").toString());
					}
		
					/*如果解析成功则存入数据库*/
					if(scholarShipParseMap != null && !scholarShipParseMap.isEmpty()) {
						@SuppressWarnings("unchecked")
						List<Map<String, String>>  lists= (List<Map<String, String>>) scholarShipParseMap.get("result");
						//将stuNumber查出来
						String stuNumber="";
						String examNumber="";
						for (Map<String, String> list : lists) {
							ScholarShip scholarShip = new ScholarShip();
							scholarShip.setStuName(list.get("stuName"));
							stuNumber=list.get("stuNumber");
							examNumber=list.get("examNumber");
							String stuCode=scholarShipDao.queryStuCode(stuNumber,examNumber);
							if(stuCode!=null) {
								scholarShip.setStuCode(stuCode);
								scholarShip.setExamNumber(list.get("examNumber"));
								scholarShip.setIdCard(list.get("idCard"));
								scholarShip.setTotalMoney(list.get("totalMoney"));
								scholarShip.setDistributeNumber(list.get("distributeNumber"));
								scholarShipDao.insert(scholarShip);
							}												
						}
					}
						log.info("文件上传解析成功!");
						r = R.ok().putData("0","文件上传解析成功!");
					}else {
						log.error("文件上传解析失败!");
						r = R.error("203001").put("msg", "文件上传解析失败!可能的原因:①文件有误 ②文件内容为空,请检查");
					}
				} 
			
		}
		return r;
	}
	/**
	 * 处理解析的文件存入数据库
	 * @param newSavePath
	 * @param emZip
	 * @return
	 */
	private Map<String,Object> scholarShipExcelParse(String newSavePath) {
		ScholarShip scholarShip = new ScholarShip();
		Map<String,Object> returnMaps=Maps.newHashMap();
		returnMaps.put("msg", "ok");
		List<Map<String, String>> list=Lists.newArrayList();
		try {
			/*获取固定的导入和导出的表头定义*/
			Map<String, String> maps = Constants.getScholarShipMap();
			/*解析文件*/
			List<Map<String, String>> returnList = NewStuImportExcel.getFeiTongZhaoExcel(newSavePath, maps);
			if(null == returnList) {
				returnMaps.put("msg", "文件上传解析失败!可能的原因:①文件有误 ②文件表头数量和模板不对应,请检查");
				return returnMaps;
			}
			/*在这里存入数据库需要json格式,,所以做处理*/
			int i=1;
			String str="";
			/*身份证正则验证*/
			String isIDCard2 ="^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[A-Z])$";
			/*是否为数字*/
			Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
			List<String> idCardList=Lists.newArrayList();
			List<String> examNumberList=Lists.newArrayList();
			for (Map<String, String> map : returnList) {
				i++;
				/*数据校验*/
				/**验证姓名*/
				if(StringUtils.isBlank(map.get("stuName"))) {
					str="第"+i+"行姓名不能为空,请检查";
					break;
				}
				if(StringUtils.isBlank(map.get("stuNumber"))) {
					str="第"+i+"行学号不能为空,请检查";
					break;
				}
				/**验证奖学金总金额*/
				if(StringUtils.isBlank(map.get("totalMoney"))) {
					str="第"+i+"行奖学金总额不能为空,请检查";
					break;
				}else if(!pattern.matcher(map.get("totalMoney")).matches()){
					str="第"+i+"行奖学金总额只能为数字,请检查";
					break;
				}
				
				/**验证分发总次数*/
				if(StringUtils.isBlank(map.get("distributeNumber"))) {
					str="第"+i+"行奖学金分发次数不能为空,请检查";
					break;
				}else if(!pattern.matcher(map.get("distributeNumber")).matches()){
					str="第"+i+"行奖学金分发次数只能为数字,请检查";
					break;
				}
				
				if(StringUtils.isBlank(map.get("stuName"))) {
					str="第"+i+"行姓名不能为空,请检查";
					break;
				}
				/**验证身份证*/
				if(StringUtils.isBlank(map.get("idCard"))) {
					str="第"+i+"行身份证号不能为空,请检查";
					break;
				}else {
					if (!map.get("idCard").matches(isIDCard2)) {
						str="第"+i+"行身份证号格式不正确,请检查";
						break;
					}else {
						idCardList.add(map.get("idCard"));
						scholarShip.setIdCard(map.get("idCard").toString());
					}
				}

				/**验证考生号*/
				if(StringUtils.isBlank(map.get("examNumber"))) {
					str="第"+i+"行考生号不能为空,请检查";
					break;
				}else {
					if(!pattern.matcher(map.get("examNumber")).matches()) {
						str="第"+i+"行考生号只能为数字,请检查";
						break;
					}else {
						examNumberList.add(map.get("examNumber"));
						scholarShip.setExamNumber(map.get("examNumber").toString());
					}
				}
				String stuNumber=map.get("stuNumber");
				String examNumber=map.get("examNumber");
				String stuCode=scholarShipDao.queryStuCode(stuNumber,examNumber);
				if(stuCode==null) {
					str+="excel表格中学号为"+stuNumber+"的学生在数据库查无此人,请检查数据";
					break;
				}
				/*查询数据库是否有重复的学号 stuCode*/
				List<String> stuCodes=scholarShipDao.findRepeatStuCode(scholarShip);
				
				if(!stuCodes.isEmpty()) {
					str+="文件中学生已在入学奖学金列表中:她(他)的身份证号是"+String.join(",", map.get("idCard").toString()) +"<br>";
					break;
				}

				/*把map转换成json字符串*/
				list.add(map);
			}
			/*如果提示有错误则返回,停止解析*/
			if(!"".equals(str)) {
				returnMaps.put("msg",str );
				return returnMaps;
			}
			StringBuffer idCards=new StringBuffer();
			StringBuffer examNumbers=new StringBuffer();
			/**判断文件里的身份证是否有重复*/
			 Set<String> set = new HashSet<>();
		     Set<String> exist = new HashSet<>();
			for(String idcard:idCardList) {
				idCards.append("'");
				idCards.append(idcard);
				idCards.append("',");
				if (set.contains(idcard)) {
	                exist.add(idcard);
	            } else {
	                set.add(idcard);
	            }
			}
			if(!exist.isEmpty()) {
				returnMaps.put("msg","文件中身份证号:"+String.join(",", exist)+"重复" );
				return returnMaps;
			}
			/*清空Set*/
			set.clear();
			exist.clear();
			
			/*清空Set*/
			set.clear();
			exist.clear();
			/**判断文件里的考生号是否有重复*/
			for(String examNumber:examNumberList) {
				examNumbers.append("'");
				examNumbers.append(examNumber);
				examNumbers.append("',");
				if (set.contains(examNumber)) {
					exist.add(examNumber);
				} else {
					set.add(examNumber);
				}
			}
			if(!exist.isEmpty()) {
				returnMaps.put("msg","文件中考生号:"+String.join(",", exist)+"重复" );
				return returnMaps;
			}
			
			/*清空Set*/
			set.clear();
			exist.clear();
		
			
			/*如果提示有错误则返回,停止解析*/
			if(!"".equals(str)) {
				returnMaps.put("msg",str );
				return returnMaps;
			}
			returnMaps.put("result", list);
			return returnMaps;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
Global
package com.bigdata.campus.common.config;

import java.io.File;
import java.io.IOException;
import java.util.Map;

import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.web.context.ContextLoader;

import com.bigdata.campus.common.utils.PropertiesLoader;
import com.bigdata.campus.common.utils.StringUtils;
import com.google.common.collect.Maps;

public class Global {

	/**
	 * 当前对象实例
	 */
	private static Global global = new Global();
    /**
	 * 保存全局属性值
	 */
	private static Map<String, String> map = Maps.newHashMap();
	/**
	 * 属性文件加载对象
	 */
	private static PropertiesLoader loader = new PropertiesLoader("campus.properties");
	/**
	 * 获取上传文件的根目录
	 * @return
	 */
	public static String getUserfilesBaseDir() {
		String dir = getConfig("userfiles.basedir");
		if(!dir.endsWith("/")) {
			dir += "/";
		}
//		System.out.println("userfiles.basedir: " + dir);
		return dir;
	}
	/**
	 * 获取配置
	 * @see ${fns:getConfig('adminPath')}
	 */
	public static String getConfig(String key) {
		String value = map.get(key);
		if (value == null){
			value = loader.getProperty(key);
			map.put(key, value != null ? value : StringUtils.EMPTY);
		}
		return value;
	}
}
util
	/**
	 * 解析非统招生excel
	 * @param newSavePath 文件存的绝对路径
	 * @param returnKeyMap 规定需要解析的行,key 为 表头中文对应的代码,,value为表头中文显示名称  如:  stuCode:学生编号
	 * @return
	 */
	public static List<Map<String,String>> getFeiTongZhaoExcel(String newSavePath,Map<String,String> returnKeyMap) {
		FileInputStream fis =null;
	     Workbook wookbook = null;
	     
		 if(!newSavePath.endsWith(".xls") && !newSavePath.endsWith(".xlsx")){
	           return null;
	     }
	     try{
	          //获取一个绝对地址的流
	          fis = new FileInputStream(newSavePath);
	          if(newSavePath.endsWith(".xls")) {
	        	  //2003版本的excel,用.xls结尾
	        	  wookbook = new HSSFWorkbook(fis);//得到工作簿
	        	
	          }else {
	        	  //2007版本的excel,用.xlsx结尾
	        	  wookbook = new XSSFWorkbook(fis);//得到工作簿
	          }
	          //得到一个工作表
	          Sheet sheet = wookbook.getSheetAt(0);
	        //获得表头
	         Row rowHead = sheet.getRow(0);
	         /*下载的表头是多少列,,导入就是多少列*/
	         if(rowHead.getPhysicalNumberOfCells() != returnKeyMap.size()) {
	        	 return null;
	         }
	       //获得数据的总行数
	         int totalRowNum = sheet.getLastRowNum();
	         /*行数除了表头,没数据则不解析*/
	         if(totalRowNum <=0) {
	        	 return null;
	         }
	         List<Map<String,String>> list=Lists.newArrayList();
	        //获得所有数据
	         for(int i = 1 ; i <= totalRowNum ; i++) {
	             //获得第i行对象
	             Row row = sheet.getRow(i);
	             int cellNum=0;
	             Map<String, String> stuMap=Maps.newLinkedHashMap();
	             for(Entry<String, String> map:returnKeyMap.entrySet()) {
	            	//循环获得第i行的列
		             Cell cell = row.getCell((short) cellNum);
		             String name = "";
		             if(cell != null) {
		            	 name = getRightTypeCell(cell);
		             }
		             stuMap.put(map.getKey(), name.trim());
		             cellNum++;
	             }
	             list.add(stuMap);
	         }
	         return list;
	     }catch(Exception e){
	            e.printStackTrace();
	            return null;
	     }
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值