4. 设计一个选课数据库 CMS a) 逻辑模式 b) 表结构 i. 学生:学号(非负整数,自增,主关键字),姓名(10个字符),专业(20个字符) ii. 课程:课程号(非负整数,自增,主关键字),课程名(30个字符),任课教师(10个字符) iii. 学生—课程:学号(非负整数),课程号(非负整数): c) 编写 PHP 网页,实现如下功能: i. 输入学号,以 Ajax 方式从服务器获取学生姓名和专业 ii. 如果该学生存在,点击查询按钮,可以表格方式显示其所选的全部课程。
时间: 2024-02-21 12:59:18 浏览: 54
数据库课程设计 学生选课系统
4星 · 用户满意度95%
a) 逻辑模式:
- 学生(Student):学号(StudentID),姓名(Name),专业(Major)
- 课程(Course):课程号(CourseID),课程名(CourseName),任课教师(Teacher)
- 学生-课程(Student-Course):学号(StudentID),课程号(CourseID)
b) 表结构:
学生表(Student):
| 字段名 | 数据类型 | 约束 |
| ------ | ---------------- | ------------ |
| 学号 | INT UNSIGNED | PRIMARY KEY |
| 姓名 | VARCHAR(10) | NOT NULL |
| 专业 | VARCHAR(20) | NOT NULL |
课程表(Course):
| 字段名 | 数据类型 | 约束 |
| -------- | ---------------- | ------------ |
| 课程号 | INT UNSIGNED | PRIMARY KEY |
| 课程名 | VARCHAR(30) | NOT NULL |
| 任课教师 | VARCHAR(10) | NOT NULL |
学生-课程表(Student-Course):
| 字段名 | 数据类型 | 约束 |
| -------- | ---------------- | ------------ |
| 学号 | INT UNSIGNED | FOREIGN KEY |
| 课程号 | INT UNSIGNED | FOREIGN KEY |
c) PHP 网页代码:
```php
<!DOCTYPE html>
<html>
<head>
<title>选课系统</title>
<meta charset="utf-8">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#studentID").blur(function(){
var studentID = $(this).val();
$.ajax({
type: "POST",
url: "getStudentInfo.php",
data: {studentID: studentID},
dataType: "json",
success: function(data){
if(data.status == 0){
$("#name").val(data.name);
$("#major").val(data.major);
}else{
alert(data.msg);
}
},
error: function(jqXHR){
alert("发生错误:" + jqXHR.status);
}
});
});
$("#queryBtn").click(function(){
var studentID = $("#studentID").val();
$.ajax({
type: "POST",
url: "getCourseList.php",
data: {studentID: studentID},
dataType: "json",
success: function(data){
if(data.status == 0){
var html = "<tr><th>课程号</th><th>课程名</th><th>任课教师</th></tr>";
for(var i = 0; i < data.courseList.length; i++){
html += "<tr><td>" + data.courseList[i].courseID + "</td><td>" + data.courseList[i].courseName + "</td><td>" + data.courseList[i].teacher + "</td></tr>";
}
$("#courseTable").html(html);
}else{
alert(data.msg);
}
},
error: function(jqXHR){
alert("发生错误:" + jqXHR.status);
}
});
});
});
</script>
</head>
<body>
<h1>选课系统</h1>
<p>请输入学号:</p>
<input type="text" id="studentID">
<button id="queryBtn">查询</button>
<br><br>
<p>学生姓名:</p>
<input type="text" id="name" readonly>
<p>所在专业:</p>
<input type="text" id="major" readonly>
<br><br>
<table id="courseTable" border="1"></table>
</body>
</html>
```
getStudentInfo.php 文件代码:
```php
<?php
$studentID = $_POST["studentID"];
// 连接数据库
$conn = mysqli_connect("localhost", "root", "123456", "course");
// 查询学生信息
$sql = "SELECT Name, Major FROM Student WHERE StudentID=$studentID";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0){
$row = mysqli_fetch_assoc($result);
$data = array("status"=>0, "name"=>$row["Name"], "major"=>$row["Major"]);
echo json_encode($data);
}else{
$data = array("status"=>1, "msg"=>"该学生不存在!");
echo json_encode($data);
}
mysqli_close($conn);
?>
```
getCourseList.php 文件代码:
```php
<?php
$studentID = $_POST["studentID"];
// 连接数据库
$conn = mysqli_connect("localhost", "root", "123456", "course");
// 查询学生选课信息
$sql = "SELECT Course.CourseID, CourseName, Teacher FROM Course, Student-Course WHERE Course.CourseID=Student-Course.CourseID AND StudentID=$studentID";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0){
$courseList = array();
while($row = mysqli_fetch_assoc($result)){
$courseList[] = array("courseID"=>$row["CourseID"], "courseName"=>$row["CourseName"], "teacher"=>$row["Teacher"]);
}
$data = array("status"=>0, "courseList"=>$courseList);
echo json_encode($data);
}else{
$data = array("status"=>1, "msg"=>"该学生还未选课!");
echo json_encode($data);
}
mysqli_close($conn);
?>
```
说明:
1. 上述代码中,使用了 jQuery 库中的 AJAX 方法,实现了异步获取学生信息和课程列表。
2. 在 PHP 文件中,使用 mysqli 扩展库连接 MySQL 数据库,执行 SQL 语句,将查询结果转换为 JSON 格式返回。
3. 在 HTML 文件中,使用表格元素显示课程列表。
阅读全文