学生信息管理系统
1.系统需求分析
学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生的信息,帮助学校和老师掌握学生的情况,这就是学生信息管理系统需要完成的功能。
1.1系统功能分析
本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生的在校情况。系统的主要功能有:
- 学生个人信息输入,包括:学号,姓名,性别,院系,生日,籍贯
- 学生流动情况的输入,包括:转系、休学、复学、退学、毕业
- 奖惩情况的输入
- 学生个人情况查询和修改,包括流动情况和奖惩情况
1.2系统功能模块设计(划分)
根据系统功能要求可以将系统分解成这几个模块来分别设计应用程序界面。
1.3与其他系统的关系
学生信息管理系统是校园信息管理系统的一个组成部分。它为其他系统,如班级信息系统管理系统、教学管理系统、成绩单系统、宿舍分配系统等,提供学生的基本情况。同时需要其他系统提供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用其他所需的数据。
1.4数据流程图
2.数据库设计
1.数据库需求分析
以下列出记录学生信息所需的数据项和数据结构:
- 学生:学号、姓名、性别、生日、籍贯、所在院系、所在班级
- 处罚记录:记录号、级别、处罚对象、记录时间、详细描述、是否生效
- 奖励记录:记录号、级别、奖励对象、记录时间、详细描述
- 学籍变更记录:记录号、变更情况、记录对象、记录时间、详细描述
- 班级:班级名称、所属院系
- 院系:代码、名称
1.1数据库逻辑结构设计
总共9张数据表:
1.STUDENT学生个人信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
STUDENTID | varchar(20) | NO | 学号 主关键字 |
NAME_STU | varchar(10) | NO | 姓名 |
SEX | varchar(1) | NO | 性别 |
NAME_CLA | ForeignKey | NO | 班级 外部关键字 |
NAME_DEP | ForeignKey | NO | 院系 外部关键字 |
BIRTHDAY | date | NO | 生日 |
NATIVE_PLACE | varchar(50) | NO | 籍贯 |
2.CHANGE学籍变更信息表
字段名 | 数据库类型 | 是否可空 | 说明 |
---|---|---|---|
ID | varchar(20) | NO | 记录号 主关键字 |
STUDENTID | ForeignKey | NO | 学号 外部关键字 |
CODE | ForeignKey | NO | 变更代码 外部关键字 |
REC_TIME | date | NO | 记录时间 |
DESCRIPTION | text | NO | 描述 |
3.REWARD奖励记录信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | varchar(20) | NO | 记录号 主关键字 |
STUDENTID | ForeignKey | NO | 学号 |
LEVELS | ForeignKey | NO | 级别代码 外部关键字 |
REC_TIME | date | NO | 记录时间 |
DESCRIPTION | text | NO | 描述 |
4.PUNISHMENT处罚记录信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | varchar(20) | NO | 记录号 主关键字 |
STUDENTID | ForeignKey | NO | 学号 |
LEVELS | ForeignKey | NO | 级别代码 外部关键字 |
ENABLE | tinyint | NO | 是否生效 |
DESCRIPTION | text | NO | 描述 |
5.DEPARTMENT院系信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | varchar(20) | NO | 编号 主关键字 |
NAME_DEP | varchar(50) | NO | 全称 |
6.CLASS班级信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID_CLA | varchar(20) | NO | 编号 主关键字 |
NAME_CLA | varchar(50) | NO | 全称 |
7.CHANGE_CODE学籍变动代码表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
CODE | tinyint(1) | NO | 代码 主关键字 |
DESCRIPTION | varchar(10) | NO | 描述 |
8.REWARD_LEVELS奖励等级代码表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
LEVELS | tinyint(1) | NO | 记录号 主关键字 |
DESCRIPTION | varchar(10) | NO | 描述 |
9.PUNISH_LEVELS处罚等级代码表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
LEVELS | tinyint(1) | NO | 代码 主关键字 |
DESCRIPTION | varchar(10) | NO | 描述 |
学籍变更代码表
代码 | 说明 |
---|---|
0 | 转系 |
1 | 休学 |
2 | 复学 |
3 | 退学 |
4 | 毕业 |
奖励级别代码表
代码 | 说明 |
---|---|
0 | 校特等奖学金 |
1 | 校一等奖学金 |
2 | 校二等奖学金 |
3 | 校三等奖学金 |
4 | 系一等奖学金 |
5 | 系二等奖学金 |
6 | 系三等奖学金 |
处罚级别代码表
代码 | 说明 |
---|---|
0 | 警告 |
1 | 严重警告 |
2 | 记过 |
3 | 记大过 |
4 | 开除 |
3.创建stu_info_system项目
django-admin startproject stu_info_sys
桌面新建的stu_info_sys文件夹为项目所在的文件夹
进入stu_info_sys文件夹
cd stu_info_sys
新建名为student的app
python3 manage.py startapp student
在stu_info_sys目录中生成了一个student文件夹,为student app所在的文件夹
现在所处的目录为:/Desktop/sys_info_sys
修改sys_info_sys/settings.py
修改,添加的
# 允许所有域名访问
ALLOWED_HOSTS = ['*']
# 设置语言
LANGUAGE_CODE = 'zh-Hans'
# 设置时区
TIME_ZONE = 'Asia/Shanghai'
# 使用MySQL数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'stu_info_sys',
#NAME 是数据库中使用的database的名称
'HOST': 'localhost',
'PORT': '3306',
'USER': 'root',
'PASSWORD': '数据库密码',
'OPTIONS': {
'init_command': 'SET sql_mode=STRICT_TRANS_TABLES',
}
}
}
然后手动在数据库中创建一个名为stu_info_sys的database
CREATE DATABASE stu_info_sys DEFAULT CHARACTER SET UTF8;
配置完成之后,测试一下浏览器的访问
# 同步一下数据库
python3 manage.py migrate
# 开启服务
python3 manage.py runserver
默认的端口是8000,在浏览器中输入127.0.0.1:8000
编辑student/models.py
from django.db import models
class DEPARTMENT(models.Model):
ID = models.CharField(max_length=20, verbose_name="学院编号", primary_key=True)
NAME_DEP = models.CharField(max_length=50, verbose_name="全称")
class Meta:
db_table = "DEPARTMENT"
verbose_name = "院系"
verbose_name_plural = "院系信息表"
def __str__(self):
return self.NAME_DEP
class CLASS(models.Model):
ID = models.CharField(max_length=20, verbose_name="班级编号", primary_key=True)
NAME_CLA = models.CharField(max_length=50, verbose_name="全称")
class Meta:
db_table = "CLASS"
verbose_name = "班级"
verbose_name_plural = "班级信息表"
class STUDENT(models.Model):
sex_choice = (('男', '男'), ('女', '女'))
STUDENTID = models.CharField(max_length=20, verbose_name="学号", primary_key=True)
NAME_STU = models.CharField(max_length=10, verbose_name="姓名")
SEX = models.CharField(max_length=1, choices=sex_choice, verbose_name="性别")
NAME_CLA = models.ForeignKey(CLASS, verbose_name="班级", on_delete=models.CASCADE)
NAME_DEP = models.ForeignKey(DEPARTMENT, verbose_name="院系", on_delete=models.CASCADE)
BIRTHDAY = models.DateField(verbose_name="生日")
NATIVE_PLACE = models.CharField(max_length=50, verbose_name="籍贯")
class Meta:
verbose_name = "学生"
db_table = "STUDENT"
verbose_name_plural = "学生个人信息表"
def __str__(self):
return self.NAME_STU
class CHANGE_CODE(models.Model):
CODE = models.BooleanField(verbose_name="代码", primary_key=True)
DESCRIPTION = models.CharField(max_length=10, verbose_name="描述")
class Meta:
db_table = "CHANGE_CODE"
verbose_name = "学籍变动代码"
verbose_name_plural = "学籍变动代码表"
def __str__(self):
return self.DESCRIPTION
class REWARD_LEVELS(models.Model):
LEVELS = models.BooleanField(verbose_name="级别", primary_key=True)
DESCRIPTION = models.CharField(max_length=10, verbose_name="描述")
class Meta:
db_table = "REWARD_LEVELS"
verbose_name = "奖励级别"
verbose_name_plural = "奖励级别表"
def __str__(self):
return self.DESCRIPTION
class PUNISH_LEVELS(models.Model):
LEVELS = models.BooleanField(verbose_name="级别")
DESCRIPTION = models.CharField(max_length=10, verbose_name="描述")
class Meta:
db_table = "PUNISH_LEVELS"
verbose_name = "处罚级别"
verbose_name_plural = "处罚级别代码表"
def __str__(self):
return self.DESCRIPTION
class CHANGE(models.Model):
ID = models.CharField(max_length=20, verbose_name="记录号", primary_key=True)
STUDENTID = models.ForeignKey(STUDENT, verbose_name="学号", on_delete=models.CASCADE)
CODE = models.ForeignKey(CHANGE_CODE, verbose_name="变更代码", on_delete=models.CASCADE)
DESCRIPTION = models.TextField(verbose_name="描述")
class Meta:
db_table = "CHANGE"
verbose_name = "学籍变更"
verbose_name_plural = "学籍变更记录"
def __str__(self):
return self.STUDENTID
class REWARD(models.Model):
ID = models.CharField(max_length=20, verbose_name="记录号", primary_key=True)
STUDENTID = models.ForeignKey(STUDENT, verbose_name="学号", on_delete=models.CASCADE)
LEVELS = models.ForeignKey(REWARD_LEVELS, verbose_name="级别代码", on_delete=models.CASCADE)
REC_TIME = models.DateField(verbose_name="记录时间")
DESCRIPTION = models.TextField(verbose_name="描述")
class Meta:
db_table = "REWARD"
verbose_name = "奖励记录"
verbose_name_plural = "奖励记录"
def __str__(self):
return self.STUDENTID
class PUNISH(models.Model):
enable_choice = (('1','T'), ('0','F'))
ID = models.CharField(max_length=20, verbose_name="记录号", primary_key=True)
STUDENTID = models.ForeignKey(STUDENT, verbose_name="学号", on_delete=models.CASCADE)
LEVELS = models.ForeignKey(PUNISH_LEVELS, verbose_name="级别代码", on_delete=models.CASCADE)
ENABLE = models.BooleanField(choices=enable_choice, verbose_name="是否生效")
REC_TIME = models.DateField(verbose_name="记录时间")
DESCRIPTION = models.TextField(verbose_name="描述")
class Meta:
db_table = "PUNISH"
verbose_name = "处罚记录"
verbose_name_plural = "处罚记录代码表"
def __str__(self):
return self.STUDENTID
# Create your models here.
注册app
编辑stu_info_sys/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 注册我的编写的student app
'student',
]
创建模型
python3 manage.py makegrations student
同步数据库
python3 manage.py migrate
现在我们打开数据库看一下是否已经创建好数据表
创建成功,没问题。
创建一个管理员用户
python3 manage.py createsuperuser
根据提示输入账号,邮箱,密码即可。
注册我们的模型到后台
编辑student/admin.py
from django.contrib import admin
from .models import *
class DEPAdmin(admin.ModelAdmin):
list_display = [
'ID',
'NAME_DEP',
]
search_fields = ('ID', 'NAME_EDP')
class CLAAdmin(admin.ModelAdmin):
list_display = [
'ID',
'NAME_CLA',
]
search_fields = ('ID', 'NAME_CLA')
class STUAdmin(admin.ModelAdmin):
list_display = [
'STUDENTID',
'NAME_STU',
'SEX',
'NAME_CLA',
'NAME_DEP',
'BIRTHDAY',
'NATIVE_PLACE',
]
search_fields = ('STUDENTID', 'NAME_STU')
list_filter = ('NAME_CLA', 'NAME_DEP', 'BIRTHDAY', 'NATIVE_PLACE')
class CHAAdmin(admin.ModelAdmin):
list_display = [
'ID',
'STUDENTID',
'CODE',
'DESCRIPTION',
]
search_list = ('ID', 'STUDENTID')
list_filter = ('CODE', )
class REWAdmin(admin.ModelAdmin):
list_display = [
'ID',
'STUDENTID',
'LEVELS',
'REC_TIME',
'DESCRIPTION',
]
search_fields = ('ID', 'STUDENTID')
list_filter = ('LEVELS', 'REC_TIME')
class PUNAdmin(admin.ModelAdmin):
list_display = [
'ID',
'STUDENTID',
'ENABLE',
'LEVELS',
'DESCRIPTION',
'REC_TIME',
]
search_fields = ('ID', 'STUDENTID')
list_filter = ('LEVELS', 'ENABLE')
admin.site.register(DEPARTMENT, DEPAdmin)
admin.site.register(CLASS, CLAAdmin)
admin.site.register(STUDENT, STUAdmin)
admin.site.register(REWARD, REWAdmin)
admin.site.register(CHANGE, CHAAdmin)
admin.site.register(PUNISH, PUNAdmin)
admin.AdminSite.site_header = "学生管理系统"
admin.AdminSite.site_title = "管理"
# Register your models here.
然后开启服务
python3 manage.py runserver
浏览器访问127.0.0.1:8000/admin
登入我们创建的管理员帐号
管理员界面