用python写一个学生信息管理系统 基本要求:功能包括登录、学生信息管理、课程信息管理、学生选课管理和学生成绩管理,要求所有数据存在数据库中(数据库类型不限)给出具体代码
时间: 2024-03-25 21:35:25 浏览: 56
好的,我可以帮你写一个基于Python的学生信息管理系统,使用MySQL作为数据库。
首先,你需要安装MySQL Connector库,它可以帮助我们连接MySQL数据库。你可以使用以下命令进行安装:
```
pip install mysql-connector-python
```
接下来,我们需要创建一个数据库和一些表来存储我们的数据。下面是一个示例SQL脚本:
```sql
CREATE DATABASE students;
USE students;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(50) NOT NULL,
role ENUM('admin', 'teacher', 'student') NOT NULL
);
CREATE TABLE courses (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
credit INT NOT NULL
);
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
gender ENUM('male', 'female') NOT NULL,
major VARCHAR(50) NOT NULL
);
CREATE TABLE enrollments (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT NOT NULL,
course_id INT NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
CREATE TABLE grades (
id INT PRIMARY KEY AUTO_INCREMENT,
enrollment_id INT NOT NULL,
grade FLOAT NOT NULL,
FOREIGN KEY (enrollment_id) REFERENCES enrollments(id)
);
```
这个脚本将创建一个名为“students”的数据库,其中包括以下表:
- 用户表(users),用于存储用户的登录信息,角色(admin,teacher或student)将用于授权用户访问不同的功能。
- 课程表(courses),用于存储课程的名称和学分。
- 学生表(students),用于存储学生的姓名、年龄、性别和专业。
- 报名表(enrollments),用于存储学生选课信息。
- 成绩表(grades),用于存储学生成绩。
现在我们可以开始编写Python代码。首先,我们需要连接到MySQL数据库:
```python
import mysql.connector
db = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="students"
)
```
接下来,我们可以定义一些函数来处理用户登录和授权:
```python
def login(username, password):
cursor = db.cursor()
query = "SELECT * FROM users WHERE username = %s AND password = %s"
values = (username, password)
cursor.execute(query, values)
user = cursor.fetchone()
cursor.close()
return user
def authorize(role):
def decorator(func):
def wrapper(*args, **kwargs):
if 'user' not in kwargs:
raise Exception('User not found')
if kwargs['user'][3] != role:
raise Exception('Unauthorized')
return func(*args, **kwargs)
return wrapper
return decorator
```
这些函数将帮助我们验证用户的登录信息,并通过装饰器来授权用户访问特定的功能。
接下来,我们可以定义一些函数来处理学生信息、课程信息、选课信息和成绩信息的管理:
```python
@authorize('admin')
def add_user(username, password, role):
cursor = db.cursor()
query = "INSERT INTO users (username, password, role) VALUES (%s, %s, %s)"
values = (username, password, role)
cursor.execute(query, values)
db.commit()
cursor.close()
@authorize('admin')
def add_course(name, credit):
cursor = db.cursor()
query = "INSERT INTO courses (name, credit) VALUES (%s, %s)"
values = (name, credit)
cursor.execute(query, values)
db.commit()
cursor.close()
@authorize('admin')
def add_student(name, age, gender, major):
cursor = db.cursor()
query = "INSERT INTO students (name, age, gender, major) VALUES (%s, %s, %s, %s)"
values = (name, age, gender, major)
cursor.execute(query, values)
db.commit()
cursor.close()
@authorize('teacher')
def enroll_student(student_id, course_id):
cursor = db.cursor()
query = "INSERT INTO enrollments (student_id, course_id) VALUES (%s, %s)"
values = (student_id, course_id)
cursor.execute(query, values)
db.commit()
cursor.close()
@authorize('teacher')
def add_grade(enrollment_id, grade):
cursor = db.cursor()
query = "INSERT INTO grades (enrollment_id, grade) VALUES (%s, %s)"
values = (enrollment_id, grade)
cursor.execute(query, values)
db.commit()
cursor.close()
```
注意,我们使用了装饰器来授权用户访问特定的功能。例如,只有管理员可以添加用户或课程,而只有教师可以为学生分配课程和成绩。
最后,我们可以定义一个主函数来处理用户输入和调用适当的函数:
```python
def main():
username = input('Username: ')
password = input('Password: ')
user = login(username, password)
if user is None:
print('Invalid username or password')
return
while True:
print('Select an option:')
print('1. Add user')
print('2. Add course')
print('3. Add student')
print('4. Enroll student')
print('5. Add grade')
print('6. Quit')
try:
choice = int(input('Choice: '))
except ValueError:
print('Invalid choice')
continue
if choice == 1:
if user[3] != 'admin':
print('Unauthorized')
continue
username = input('Username: ')
password = input('Password: ')
role = input('Role (admin, teacher, student): ')
add_user(username, password, role)
elif choice == 2:
if user[3] != 'admin':
print('Unauthorized')
continue
name = input('Name: ')
credit = input('Credit: ')
add_course(name, credit)
elif choice == 3:
if user[3] != 'admin':
print('Unauthorized')
continue
name = input('Name: ')
age = int(input('Age: '))
gender = input('Gender (male, female): ')
major = input('Major: ')
add_student(name, age, gender, major)
elif choice == 4:
if user[3] != 'teacher':
print('Unauthorized')
continue
student_id = input('Student ID: ')
course_id = input('Course ID: ')
enroll_student(student_id, course_id)
elif choice == 5:
if user[3] != 'teacher':
print('Unauthorized')
continue
enrollment_id = input('Enrollment ID: ')
grade = input('Grade: ')
add_grade(enrollment_id, grade)
elif choice == 6:
break
else:
print('Invalid choice')
continue
db.close()
if __name__ == '__main__':
main()
```
这个函数将提示用户输入用户名和密码,然后显示一个菜单,允许用户选择要执行的操作。根据用户的角色,可能会显示不同的选项。
这就是一个基于Python的学生信息管理系统的基本实现。完整的代码如下:
阅读全文