使用JavaScript实现GPA计算器(学科实践任务 一)

学科实践任务(一):GPA计算器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>使用js实现GPA计算</title>
		<style>
		#GPAForm{
			text-align: center;
		}
		.title{
			text-align: center;
			color: #FF0000;
		}
		table.courses{
			text-align: center;
			border-collapse:collapse;
		}
		th{
			background-color: lightblue;
		}
		.point, .gradePoint, #totalGradePoint, #totalCredit, #gpa{
			cursor: default;
			border: 0px;
			border-bottom: red solid 1px;
			background-color: inherit;
			text-align: center;
		}
		.addCourse_btn{
			background-color: greenyellow;
		}
		.removeCourse_btn{
			background-color: yellow;
		}
		</style>
		
		<script type='text/javascript'>
		
		function getCredit(credit){
			UpdataGradePoint(credit.parentNode.parentNode);
			UpdataTotalCredit();			//更新学分
			UpdataTotalGradePoint();		//更新总学分绩点
			UpdataGPA();					//更新GPA
			}
		function getScore(Elem){
			score = Number(Elem.value);
			var point;
			if(score > 100)alert("请在正确范围内输入");
			else if(score >= 90){
				point = 4.0;
			}
			else if(score >= 87){
				point = 3.7;
			}
			else if(score >= 84){
				point = 3.4
			}
			else if(score >= 81){
				point = 3.0;
			}
			else if(score >= 78){
				point = 2.7;
			}
			else if(score >= 75){
				point = 2.4;
			}
			else if(score >= 72){
				point = 2.1;
			}
			else if(score >= 68){
				point = 1.7;
			}
			else if(score >= 64){
				point = 1.3;
			}
			else if(score >= 60){
				point = 1.0;
			}
			else if(score >= 0){
				point = 0;
			}
			else {
				alert("请在正确范围内输入");
			}
			
			Elem.parentNode.parentNode.getElementsByClassName("point")[0].value = point.toFixed(1);
			UpdataGradePoint(Elem.parentNode.parentNode);	//更新学分绩点
			UpdataTotalCredit();							//更新总学分
			UpdataTotalGradePoint();   						//更新总学分绩点
			UpdataGPA();									//更新GPA
		}
		
		function UpdataGradePoint(course){//更新学分绩点
			var point = course.getElementsByClassName("point")[0].value;
			var credit = course.getElementsByClassName("credit")[0].value;
			if(credit && point){
				var gradePoint = point * credit;
				course.getElementsByClassName("gradePoint")[0].value = gradePoint.toFixed(2);
			}
		}
		
		function UpdataTotalCredit(){	//更新总学分函数
			var credits = document.getElementsByClassName("credit");//等价于获取课程数的过程
			var totalCredit = 0;								//重置
			for(var j = 0; j < credits.length; j++){
				if(credits[j].value)totalCredit += Number (credits[j].value);
			}
			document.getElementById("totalCredit").value=totalCredit;
		}
		
		function UpdataTotalGradePoint(){	//更新总学分绩点函数
			var GradePoints = document.getElementsByClassName("gradePoint");
			var totalGradePoint = 0;
			for(var i = 0; i < GradePoints.length; i ++){
				if(GradePoints[i].value)totalGradePoint += Number(GradePoints[i].value);//*1转化为数字型数据
				}
			document.getElementById("totalGradePoint").value = parseFloat(totalGradePoint);
			}
		
		function UpdataGPA(){			//更新GPA函数
			var totalCredit = Number(document.getElementById("totalCredit").value);
			var totalGradePoint = Number(document.getElementById("totalGradePoint").value);
			if(totalCredit && totalGradePoint){
				var GPA = totalGradePoint / totalCredit;
				document.getElementById("gpa").value = parseFloat(GPA);
			}
		}
		
			var NewCourse;
			window.onload=function(){//在网页加载后,立即克隆空的course行
				 NewCourse = document.getElementsByClassName("course")[0].cloneNode(true);
			}
		function AddCourse(){											//添加新的课程
			var tr = NewCourse.cloneNode(true);							//克隆已经克隆得到的空行
			var table=document.getElementById("table");	
			table.appendChild(tr);										//将创建的行插入表格
			tr.getElementsByClassName("credit")[0].value = "";
			tr.getElementsByClassName("score")[0].value = "";
			tr.getElementsByClassName("point")[0].value = "";
			tr.getElementsByClassName("gradePoint")[0].value = "";
			UpdataTotalCredit();										//更新总学分
			UpdataTotalGradePoint();									//更新总学分绩点
			UpdataGPA();												//更新GPA
			}
		function DeleteCourse(NowRow){
			var courses = document.getElementsByClassName("course");
			if(courses.length <= 1)alert("请至少保留一行!");
			else {
			NowRow.remove();											//删除当前行
			UpdataTotalCredit();										//更新总学分
			UpdataTotalGradePoint();									//更新总学分绩点
			UpdataGPA();												//更新GPA
			}
		}
		</script>
	</head>
	<body>
		<h2 class='title'>使用js实现GPA计算器</h2>
		<p align="center">姓名:xxx	学号:xxx</p>
		<div id="GPAForm" align="center">
		<table border="1" class="courses" id="table">
			<tr>
				<th>课程学分<br />Credit</th>
				<th>课程分数<br />Score</th>
				<th>课程绩点<br />Point</th>
				<th>学分绩点<br />Grade Point</th>
				<th></th>
			</tr>
			<tr id="course" class="course">
				<td width="10px"> 
				<input type="text" size="4" maxlength="4" placeholder="credit" class="credit" name="credit" onchange="getCredit(this)">
				</td>
				<td>
					<input type="text" size="3" maxlength="3" oninput="if(value.length>3) value=value.slice(0,3)"/ placeholder="score" class="score" onchange="getScore(this)">
					</td>
				<td>
					<input type="text" size="4" maxlength="4" placeholder="point" class="point" readonly="readonly" />
					</td>
				<td>
					<input type="text" size="7" maxlength="5" placeholder="greditpoint" class="gradePoint" readonly="readonly" />
					</td>
				<td><button class="removeCourse_btn" onclick="DeleteCourse(this.parentNode.parentNode)">删除此课</td>
			</tr>
		</table>
		</div>
		<button type="button" class="addCourse_btn" id="addCourse" onclick="AddCourse()">添加课程</button>
		<hr>
		<div id="totals">
		  <label>学分总计:
		    <input id="totalCredit" type="text" size="7" maxlength="7" placeholder="请先填表" readonly="readonly" />
		  </label>
		  <label>学分绩点总计:
		    <input id="totalGradePoint" type="text" size="7" maxlength="7" placeholder="请先填表" readonly="readonly" />
		  </label>
		  <label>GPA:
		    <input id="gpa" type="text" size="7" maxlength="7" placeholder="请先填表" readonly="readonly" />
		  </label>
		</div>
		<hr>
		谢谢使用!
	</body>
</html>

有问题尽管评论或者私聊哦

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AC Maker

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

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

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

打赏作者

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

抵扣说明:

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

余额充值