【JAVA案例】作业管理系统(控制台版本)

news2024/11/23 3:41:55

博主:👍不许代码码上红
欢迎:🐋点赞、收藏、关注、评论。
格言: 大鹏一日同风起,扶摇直上九万里。

文章目录

    • 一、JAVA面向对象程序设计
      • 1.1 工程分包
      • 1.2 各类属性及功能
    • 二、数据初始化
    • 三、学生模块
    • 四、教师模块
    • 五、管理员模块
    • 六、项目目录结构

一、JAVA面向对象程序设计

运用JAVA面向对象程序设计构建一个网上作业管理系统,以其改变过去传统的学生递交作业的方式,老师批改作业的方式,让学生递交作业更加灵活,大大减轻了老师的工作量和学生的学习任务,极大地提高了老师的工作效率和学生的学习效率。用户登录时有三种身份可供选择,分别为学生、教师和管理员。学生有提交作业、查看成绩、查看作业任务公告等功能,老师有发布作业、批改作业、发布成绩等功能,管理员有添加、删除非管理员用户信息,添加、删除公告等功能。

系统总体功能模块如图:
在这里插入图片描述

1.1 工程分包

系统JAVA工程总体组成包含四个包:实体包、工具包、测试包与UI包

(1)com.hy.entity:实体包,包括学生、教师、管理员、作业要求、作业结果五个实体类。

(2)com.hy.util:工具包,包括通过创建集合来初始化学生、教师、管理员、作业要求、作业结果等信息的类。

(3)com.hy.demo:测试包,包括各实体类的Demo类,各类通过构造函数调用工具包的类来实现初始化类。

(4)com.hy.UI:UI包,包括各类对用户的操作提示界面,使整个系统要求操作简捷,方便用户使用。

1.2 各类属性及功能

各实体类属性
其中学生、教师、管理员这三个实体类包括姓名,编号,账号,账户密码等基本信息,而作业要求类是指由教师直接发布的相关作业要求、截止时间等具体要求,作业结果类则是指学生上传的作业结果以及学号等相关信息,具体如下:
(1)学生类:
a.学号 b.姓名 c.账号 d.账户密码
(2)教师类:
a.职工号 b.姓名 c.教学科目 d.账号 e.账号密码
(3)管理员类:
a.职工号 b.姓名 c.账号 d.账户密码
(4)作业要求类:
a.科目 b.作业要求 c.截止时间
(5)作业结果类:
a.科目 b.学号 c.答案 d.题目 e.分数

各实体类方法
五个实体类除了管理员类之外均包含各属性的设置以及各属性的获得的方法,除此之外,学生、教师、管理员还有其他功能的方法,具体如下:
(1) 学生类:
a.各属性的设置 b.各属性的获得 c.提交作业 d.查看作业任务 e.查看分数
(2) 教师类:
a. 各属性的设置 b.各属性的获得 c.布置作业 d.批改作业 e.查看上交情况
(3) 管理员类:
a.增加、删除非管理员用户
(4)作业类:
a.各属性的设置 b.各属性的获得
(5)作业结果类:
a.各属性的设置 b.各属性的获得

二、数据初始化

没有用到数据库,所有数据需要初始化添加。

主要代码
Init.java


public class Init {
	public ArrayList<Manage> manageList = new ArrayList<Manage>(); 
	public ArrayList<Student> stuList = new ArrayList<Student>();
	public ArrayList<Teacher> teacherList = new ArrayList<Teacher>();
	public ArrayList<Homework> homeworkList = new ArrayList<Homework>();
	public ArrayList<Answer> answerList = new ArrayList<Answer>();
	public Init() {
		// TODO Auto-generated constructor stub
		manageInit();
		StuInit();
		TeacherInit();
		HomeworkInit();
	}
	/**
	 * 管理员初始化
	 */
	public void manageInit() {
		manageList.add(new Manage("HY","123","000"));
	}
	/**
	 * 学生初始化
	 */
	public void StuInit() {		
		Student stu1=new Student("stu","001","001");
		Student stu2=new Student("YSL", "002", "002");
		stuList.add(stu1);
		stuList.add(stu2);
	}
	/**
	 * 教师初始化
	 */
	public void TeacherInit() {
		Teacher t1=new Teacher("LB", "100", "100", "数据结构");
		Teacher t2=new Teacher("WYL", "200", "200", "C语言");
		teacherList.add(t1);
		teacherList.add(t2);
	}
	/**
	 * 作业+答案初始化
	 */
	public void HomeworkInit() {
		Homework homework1 = new Homework(1,"c语言", "按时完成", "10月7日", "WYL");
		Homework homework2 = new Homework(2,"数据结构", "按时完成", "12月26日", "LB");
		Answer answer1 = new Answer(1);
		Answer answer2 = new Answer(2);
		homeworkList.add(homework1);
		homeworkList.add(homework2);
		answerList.add(answer1);
		answerList.add(answer2);
	}
}

三、学生模块

学生用户可实现功能
a.提交作业
b.查看成绩
c.查看作业任务公告

主要代码


public class Student extends Person implements Ilogin{
	public Student(String name,String count,String password) {
		// TODO Auto-generated constructor stub
		super(name, count, password);
	}
	public Student() {
		// TODO Auto-generated constructor stub
	}

	public int login(String[] user, ArrayList<?> student) {
		// TODO Auto-generated method stub
		for (Object person : student) {
			if(((Student)person).count.equals(user[0])&&((Student)person).password.equals(user[1]))
				return 1;			
		}
		return 0;
	}
	/**
	 * 学生提交作业
	 * @param flag flag=2为上交作业,flag=4为查看未交作业
	 * @param input Scanner对象
	 * @param stuCount 学号
	 * @param tname 教师名字
	 * @param homeworkList 作业集合对象
	 * @param answerList 答案集合对象
	 */
	public int upHomeWork(int flag,Scanner input,String stuCount,String tname,
		ArrayList<Homework> homeworkList,ArrayList<Answer> answerList) {
		ArrayList<Integer> homeWorkId = new ArrayList<Integer>();
		ArrayList<String> homeWorkDemand = new ArrayList<String>();
		ArrayList<String> subjectList = new ArrayList<String>();
		for(int i = 0; i < homeworkList.size(); i++)
		{
			if((homeworkList.get(i)).getTname().equals(tname))
			{
				homeWorkId.add((homeworkList.get(i)).getId());
				homeWorkDemand.add(homeworkList.get(i).getDemand());
				subjectList.add(homeworkList.get(i).getSubject());
			}
		}
		int n = 1;//列表序号
		int[] temp = new int[answerList.size()];
		temp[0] = 0;
		System.out.println("序号\t科目\t要求\t");
		for(int j = 0; j < answerList.size(); j++)
		{
			for (int m = 0; m < homeWorkId.size(); m++ ) 
			{
				if(answerList.get(j).getHomeworkId() == homeWorkId.get(m) 
						&& answerList.get(j).getGrade() == 0 
						&& answerList.get(j).getAnswer()==null)
				{
					temp[n] = j;
					System.out.println(n+"\t"+subjectList.get(m)
					+"\t"+homeWorkDemand.get(m)+"\t");
					temp[0] = 1;
					n++;
				}
			}
		}
		
		if (temp[0] == 0)
		{
			System.out.println("你没有未完成的作业!!");
			return 1;
		} 
		if (flag == 4) return 0;//此时选择的是查看没完成的任务
		
		System.out.print("请选择你要做的题的序号:");
		int p = input.nextInt();
		if(p>n || p<=0) 
		{
			System.out.println("输入有误!");
			return 0;
		}
		for(int q = 0; q < answerList.size(); q++)
		{
			if(q == temp[p])
			{
				System.out.print("请输入你的答案:");
				answerList.get(q).setSno(stuCount);
				answerList.get(q).setAnswer(input.next());
				System.out.println("作业完成!");
				return 0;
			}
		}
		return 0;
	}
	/**
	 * 学生查看成绩
	 * @param stuCount 学号
	 * @param homeworkList 作业集合对象
	 * @param answerList 答案集合对象
	 */
	public void viewGrade(String stuCount,
			ArrayList<Homework> homeworkList,ArrayList<Answer> answerList) {
		ArrayList<Integer> homeWorkId = new ArrayList<Integer>();
		ArrayList<Float> gradeList = new ArrayList<Float>();
		for(int i = 0; i < answerList.size(); i++)
		{
			if((answerList.get(i)).getSno().equals(stuCount))
			{
				homeWorkId.add((answerList.get(i)).getHomeworkId());
				gradeList.add((answerList.get(i)).getGrade());
			}
		}
		
		int n = 1;//列表序号
		System.out.println("序号\t要求\t科目\t分数\t");
		for(int j = 0; j < homeWorkId.size(); j++)
		{
			for (int m = 0; m < homeworkList.size(); m++ ) 
			{
				if((homeworkList.get(m)).getId() ==  homeWorkId.get(j))
				{
					System.out.println(n+"\t"+(homeworkList.get(m)).getDemand()+"\t"
							+(homeworkList.get(m)).getSubject()+"\t"+gradeList.get(j)+"\t");
					n++;
				}
			}
		}
	}
}

学生登陆
UI中MainFrame会调用Student类中的login方法,当账号密码输入与初始数据一致时,会进入UI.student_MainFrame并传入学生参数

在这里插入图片描述
学生修改密码
student_MainFrame通过调用UI.changPwdFrame继承父类Person的changePwd方法实现对密码的修改

在这里插入图片描述

学生上传作业
UI中的student_MainFrame通过调用UI.upHomeWorkFrame实现上传作业的功能
在这里插入图片描述

学生查看成绩
UI中的student_MainFrame通过调用viewGradeFrame实现上传作业的功能
在这里插入图片描述

四、教师模块

教师用户可实现功能
a.发布作业信息
b.批改作业

主要代码


public class Teacher extends Person implements Ilogin {
	private String subject;
    public Teacher(String name,String count,String password,String subject) {
	// TODO Auto-generated constructor stub
    	super(name, count, password);
    	this.subject=subject;
    }
    public Teacher() {
		// TODO Auto-generated constructor stub
	}
	public String getSubject(){
		return subject;
	}
	public void setSubject(String subject){
		this.subject=subject;
	}
	/**
	 * 教师登陆
	 * @param user 用户名和密码的数组
	 * @param obj 用户的集合对象
	 * @return 1代表登陆成功
	 */
	public int login(String[] user, ArrayList<?> obj) {
		// TODO Auto-generated method stub
		for (Object person : obj) {
			if(((Teacher)person).count.equals(user[0])&&((Teacher)person).password.equals(user[1]))
				return 1;
		}
		return 0;
	}
	/**
	 * 通过教师姓名判断该教师是否存在
	 * @param tname 教师姓名
	 * @param obj 教师集合对象
	 * @return 存在返回true
	 */
	public boolean isExietTeacher(String tname,ArrayList<Teacher> obj) {
		for (Teacher teacher : obj) {
			if(teacher.getName().equals(tname)){
				return true;
			}
		}
		return false;
	}
	/**
	 * 通过教师编号返回教师名字
	 * @param tcount 教师编号
	 * @param obj 教师集合对象
	 * @return 教师名字 教师所教科目
	 */
	public String[] getNameAndSubjectByCount(String tcount,ArrayList<Teacher> obj) {
		String[] data = new String[2];
		for (Object person : obj) {
			if(((Teacher)person).count.equals(tcount)){
				data[0] = ((Teacher)person).getName();
				data[1] = ((Teacher)person).getSubject();
				return data;
			}
		}
		return null;
	}
	/**
	 * 教师添加作业
	 * @param tcount 教师编号
	 * @param demand 题目/要求
	 * @param overtime 截止日期
	 * @param homeworkList 作业集合对象
	 * @param teacherList 教师集合对象
	 * @return 作业发布成功返回true
	 */
	public boolean addHomeWork(String tcount,String demand,String overtime,
			ArrayList<Homework> homeworkList,ArrayList<Teacher> teacherList,ArrayList<Answer> answerList) {
		String data[] = getNameAndSubjectByCount(tcount, teacherList);
		if(homeworkList.add(new Homework(homeworkList.size()+1, data[1], demand, overtime, data[0]))){
			//注意这里长度不在加1,因为前面作业已经添加成功,长度已经加1
			answerList.add(new Answer(homeworkList.size()));
			return true;
		}
		return false;
	}
	/**
	 * 教师查看自己已经发布的作业
	 * @param tcount 教师编号
	 * @param homeworkList 作业集合对象
	 * @param teacherList 教师集合对象
	 */
	public void viewPushedHomework(String tcount,ArrayList<Homework> homeworkList,
			ArrayList<Teacher> teacherList) {
		String data[] = getNameAndSubjectByCount(tcount, teacherList);
		System.out.println("序号\t要求\t截至日期\t");
		for (int i = 0; i < homeworkList.size(); i++) {
			if((homeworkList.get(i)).getTname().equals(data[0])){
				System.out.println(i+"\t"+(homeworkList.get(i)).getDemand()
						+"\t"+(homeworkList.get(i)).getOvertime()+"\t");
			}
		}
	}
	/**
	 * 教师批改作业
	 * @param input Scanner对象
	 * @param tcount 教师编号
	 * @param homeworkList 作业集合对象
	 * @param teacherList 教师集合对象
	 * @param answerList 答案集合对象
	 */
	public void checkHomework(Scanner input,String tcount,ArrayList<Homework> homeworkList,
			ArrayList<Teacher> teacherList,ArrayList<Answer> answerList) {
		if(answerList.size() != 0)
		{
			ArrayList<Integer> homeWorkId = new ArrayList<Integer>();
			ArrayList<String> homeWorkDemand = new ArrayList<String>();
			String data[] = getNameAndSubjectByCount(tcount, teacherList);
			for (int i = 0; i < homeworkList.size(); i++) 
			{
				if((homeworkList.get(i)).getTname().equals(data[0]))
				{
					homeWorkId.add((homeworkList.get(i)).getId());		//通过老师的名字得到他布置的题的题号
					homeWorkDemand.add(homeworkList.get(i).getDemand());//通过老师的名字得到该题的题目要求
				}
			}
			
			int n = 1;//列表序号
			int[] temp = new int[answerList.size()];
			System.out.println("序号\t要求\t答案\t分数\t");
			for(int j = 0; j < answerList.size(); j++)
			{
				for (int m = 0; m < homeWorkId.size(); m++ ) 
				{
					if(answerList.get(j).getHomeworkId() == homeWorkId.get(m) //该题号分数为0,则输出让老师打分
							&& answerList.get(j).getGrade() == 0)
					{
						temp[n] = j;
						String answer = answerList.get(j).getAnswer();
						if(answerList.get(j).getAnswer() == null) answer = "";
						System.out.println(n+"\t"+homeWorkDemand.get(m)
							+"\t"+answer+"\t"+answerList.get(j).getGrade()+"\t");
						n++;
					}
				}
			}
			
			System.out.print("请选择你要打分的序号:");
			int p = input.nextInt();
			if(p>n || p<=0) 
			{
				System.out.println("输入有误!");
				return;
			}
			for(int q = 0; q < answerList.size(); q++)
			{
				if(q == temp[p])
				{
					System.out.print("请输入你要打的分数:");
					answerList.get(q).setGrade(input.nextInt());
					System.out.println("打分成功!");
					break;
				}
			}
		}else
		{
			System.out.println("学生未提交任何作业!");
		}
	}
}

教师登陆
UI中MainFrame会调用Teacher类中的login方法,当账号密码输入与初始数据一致时,会进入UI.teacher_MainFrame并传入学生参数
在这里插入图片描述

教师上传作业任务
UI中的teacher_MainFrame通过调用UI.addHomeworkFrame实现上传作业的功能

在这里插入图片描述
教师查看自己已发布作业
UI中的teacher_MainFrame通过调用viewPushedHomeworkFrame实现上传作业的功能

在这里插入图片描述

五、管理员模块

管理员用户可实现功能
a.添加、删除学生教师用户信息
b.添加、删除公告

主要代码


public class Manage extends Person implements Ilogin{
	public Manage(String name,String count,String password) {
		// TODO Auto-generated constructor stub
		super(name, count, password);
	}
	
	public Manage() {
		// TODO Auto-generated constructor stub
	}
	/**
	 * 管理员登陆
	 * @param user 用户名和密码的数组
	 * @param obj 用户的集合对象
	 * @return 1代表登陆成功
	 */
	public int login(String[] user, ArrayList<?> manager) {
		// TODO Auto-generated method stub
		for (Object person : manager) {
			if(((Manage)person).getCount().equals(user[0]) && ((Manage)person).getPassword().equals(user[1]))
				return 1;
		}
		return 0;
	}
	/**
	 * 管理员添加学生
	 * @param name 学生姓名
	 * @param count 学生学号
	 * @param password 学生密码
	 * @param stuList 学生集合对象
	 * @return 添加成功返回true
	 */
	public boolean add_student(String name,String count,String password,ArrayList<Student> stuList){
		for (Student student : stuList) {
			if(student.getCount().equals(count))
			{
				System.out.println("该学号已经存在!!");
				return false;
			}
		}
		if(stuList.add(new Student(name, count, password)))
			return true;
		else return false;
	}
	/**
	 * 管理员添加老师
	 * @param name 老师姓名
	 * @param count 老师编号
	 * @param password 老师密码
	 * @param subject 老师所教科目
	 * @param teacherList 老师集合对象
	 * @return 添加成功返回true
	 */
	public boolean add_teacher(String name,String count,String password,String subject,
			ArrayList<Teacher> teacherList) {
		for (Teacher teacher : teacherList) {
			if (teacher.getCount().equals(count)) {
				System.out.println("该教职工编号已经存在!!");
				return false;
			}
		}
		if(teacherList.add(new Teacher(name, count, password,subject)))
			return true;
		else return false;
	}

}

管理员添加学生
manage_MainFrame通过实现Manage类中add_student方法,调用UI中add_StuFrame的静态界面方法

在这里插入图片描述
用刚添加的学生学号登录

在这里插入图片描述
添加成功!
添加教师与添加学生一样,自己尝试。

六、项目目录结构

在这里插入图片描述

正常用IDEA创建java项目即可。

完整项目代码
链接:https://pan.baidu.com/s/1J6HDRI1pVNoEZeFHKPCJ4w
提取码:9527

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

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

相关文章

【在线研讨会】12月12日Softing工业物联网解决方案 助力工业4.0

本次研讨会设有抽奖环节&#xff0c;并有精美礼品相送&#xff01; 一 会议介绍 水平和垂直通信一体化是工业4.0背后的核心原则之一&#xff0c;实现这一点需要标准化通信接口&#xff0c;这些接口能够促进各种组件的相互连接并传输同步数据流。本次研讨会将提供解决方案将过程…

AAC音视频编码详解

一、AAC编码概述 AAC是高级音频编码&#xff08;Advanced Audio Coding&#xff09;的缩写&#xff0c;出现于1997年&#xff0c;最初是基于MPEG-2的音频编码技术&#xff0c;目的是取代MP3格式。2000年&#xff0c;MPEG-4标准出台&#xff0c;AAC重新集成了其它技术&#xff…

【CALIPSO】星载激光雷达CALIPSO产品数据下载教程

【CALIPSO】星载激光雷达产品下载教程星载激光雷达产品下载教程一、下载地址二、注册登录三、选择数据1. 选择产品2. 时间选择3. 区域选择4. 确认提交5. 下载文件预览6. 下载文件名录列表7. 提交请求下载四、下载数据1. 修改FIleList文件2. IDM下载星载激光雷达产品下载教程 最…

论文阅读之Syntax Encoding with Application in Authorship Attribution(2018)

文章目录摘要引言Syntax Encoding实验结果参考摘要 我们提出了一种新的策略&#xff0c;将句子的语法分析树编码为可学习的分布式表示。所提出的语法编码方案是可证明的信息无损的。具体而言&#xff0c;为句子中的每个单词构建嵌入向量&#xff0c;对语法树中与该单词对应的路…

SAP Success Factor Single Sign On(单点集成) 的文档清单

可以通过 SAP note 2088827 查看 SAP Success Factor SSO(单点集成)的技术概述。 2088827 - [SSO] What methods of SSO (Single Sign On) does SuccessFactors Support? 目前 Success Factor 只支持 SAML 2.0 SSO, 但是 SAP 计划将来将其迁移到 IAS 解决方案上去, 详情参考…

UE5中置人利用iphone驱动虚拟人面部

首先把虚拟人物导入到项目里。这个前面讲过很多&#xff0c;我就不再赘述了。 打开UE5&#xff0c;点击右侧【设置】&#xff0c;再点击【插件】 在搜索区域输入arkit&#xff0c;搜索结果中勾选下图中的两项。有可能默认已经选中了。 在搜索区输入live link&#xff0c;搜索结…

[附源码]计算机毕业设计SpringBoot高血压分析平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二位变量

写在前面 学习笔记&#xff0c;仅作参考。 个人觉得配合步骤和建模&#xff0c;直接看代码就能入门pulp&#xff0c;所以没有啥解释&#xff0c;见谅。 参考 https://blog.csdn.net/youcans/article/details/116371416 步骤 1、安装PuLp &#xff08;pip install pulp) 2…

基于python的scip库使用,从基础模型到复杂模型,从一维变量到二位变量

基础知识 创建模型&#xff1a;modelModel(name)#name是模型名字 创建变量&#xff1a;model.addVar(vtype,name,lb0,ub1)#vtype是变量类型&#xff0c;有I&#xff08;Integer&#xff09;表示离散变量&#xff0c;B&#xff08;Binary &#xff09;表示0/1变量 创建目标函数&…

pytorch安装

打开命令提示符 创建虚拟环境 conda create -n pytorch pip python3.6Collecting package metadata (current_repodata.json): done Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source. Collecting package meta…

华为机试真题 Java 实现【最长连续方波信号】

目录 题目 思路 考点 Code 题目 输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可, 方波信号高位用1标识,低位用0标识,如图: 说明: 1) 一个完整的信号一定以0开始然后以0结尾,即010是一个完整信号,但…

Protobuf应用层协议设计

目录 1 协议概述 2 判断消息的完整性 3 协议设计 3.1 协议设计范例 3.1.1 范例1-IM即时通讯 3.1.2 范例2-云平台节点服务器 3.1.3 范例3-nginx 3.1.4 范例4-HTTP协议 3.2 序列化⽅法 3.2.1 常⻅序列化⽅法 3.2.2序列化结果数据对⽐ 3.2.3 序列化、反序列化速度对…

STC 51单片机44——实现0.5秒间隔的单向流水灯

// 12MHz晶振 #include "reg52.h" #include "intrins.h" #define time (65536-50000) // 单次定时50ms unsigned char cn; unsigned char temp; void main(void) { cn10; //10*50ms0.5s temp0x7f; TMOD 0x10; //set tim…

[附源码]SSM计算机毕业设计星期八酒店管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计springboot基于Java的失物招领平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

游戏开发30课 cocoscreator骨骼贴图布局设置

骨骼贴图布局设置 要确保 骨骼动画 也能够完全正确地参与 动态 Instancing&#xff0c;需要用户手动指定每张骨骼贴图的数据分配方式。 比如一个场景中要绘制大量相同的人物角色&#xff0c;每个角色可能在走/跳/攻击。如果希望一个 Drawcall 就能够正确完成所有角色的绘制&a…

【金万维】使用天联高级版登录用友U8+,进行凭证打印操作。

【操作步骤】 通过“天联高级版客户端”登录 U8&#xff0c;打印凭证步骤&#xff1a; 第一步&#xff1a;首先查看一下天联高级版客户端的打印参数是否如下图所示。 &#xff08;一般软件初次安装后&#xff0c;默认即可。&#xff09; 第二步&#xff1a;进入U8后&#xff0…

闭坑1:Django “TemplateDoesNotExist at /index/“解决/Django加载HTML出错

网上很多方法说是settings.py 的配置TEMPLATES中 DIRS: [], 未填写&#xff0c;事实上好多教程会改为路径 DIRS: [ os.path.join(BASE_DIR,"templates/") ], 看下BASE_DIR的定义&#xff1a; import os BASE_DIR os.path.dirname(os.path.dir…

见证云力量|飞马网技术沙龙“云计算专场”圆满结束

2022年11月26日下午&#xff0c;光环国际联合元宇宙教育实验室以在线直播的形式举办了“第322期FMI飞马网技术沙龙活动”。 光环国际成立于2001年&#xff0c;是新三板“科创人才培养第一股”。FMI飞马网技术沙龙作为光环国际旗下重要的沙龙品牌活动&#xff0c;如今已经成为了…