Django-学生信息管理

学生信息管理系统

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
管理员登入
登入我们创建的管理员帐号
管理员界面
管理员界面

原文地址:https://www.cnblogs.com/1328497946TS/p/12117949.html