Python项目:学生管理系统

学生管理系统


学生管理系统作用就是对于学生信息的处理、存储。
处理就包括:添加、删除、修改、显示、查找等
存储一般调用数据库存储;在这里我们只是作为演示。
功能待大家自行完善...
只是为了方便练习基础的小项目.
用到了sqlalchemy这个模块,没有的小伙伴自行安装一下。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建对象的基类:
Base = declarative_base()
# 初始化数据库连接 echo 回显命令 False为关闭
# engine = create_engine('sqlite:///student.db', echo=False)
engine = create_engine('mysql+mysqlconnector://zhangge:123456@127.0.0.1:9999/12_21?charset=utf8', echo=False)


# 定义user对象:
class User(Base):
    # 表的名字
    __tablename__ = 'user'

    # 表的结构:
    id = Column(String(20), primary_key=True)  # 学号
    name = Column(String(20))  # 姓名
    std_class = Column(String(20))  # 班级

    def __init__(self, id, name, std_class):
        self.id = id
        self.name = name
        self.std_class = std_class


# ORM
class StudentBO:
    '''数据库文件操作类'''

    def __init__(self):

        # 如果没有表,自动创建表
        Base.metadata.create_all(engine)
        # 创建DBSession类型:
        self._DBSession = sessionmaker(bind=engine)
        self._session = self._DBSession()

    # 增加数据
    def add_db(self, id, name, std_class):
        '''插入数据'''
        try:
            # 创建新User对象:
            new_user = User(id=id, name=name, std_class=std_class)
            # 添加到session:
            self._session.add(new_user)
            # 提交即保存到数据库
            self._session.commit()
            return True
        except BaseException:
            return False

    # 查找数据
    def find_db(self, id):
        try:
            # 按id查找数据
            user = self._session.query(User).filter(User.id == id).one()
            # 返回对象的属性:
            return user.name, user.std_class
        except BaseException:
            print('没有您要查找的学生')

    # 判断id是否存在
    def is_id(self, id):
        user = self._session.query(User).filter_by(id=id).scalar()
        if user:
            return 1
        return 0

    # 修改数据
    def change_db(self, id, new_name):
        self._session.query(User).filter(User.id == id).update({User.name: new_name},
                                                               synchronize_session=False)  # 按照ID更新name
        self._session.commit()  # 提交事务
        return

    # 用id删除数据
    def del_db(self, id):
        try:
            # 删除数据
            self._session.query(User).filter(User.id == id).delete()
            self._session.commit()
            return True
        except BaseException:
            return False

    # 显示数据
    @property
    def show_db(self):
        query = self._session.query(User).all()  # 获得所有数据
        if query != []:
            print('学号\t\t\t\t姓名\t\t班级')
            for user in query:  # 遍历数据
                if len(user.name) == 2:
                    print('%s\t\t%s\t%7s' % (user.id, user.name, user.std_class))
                else:
                    print('%s\t\t%s\t%s' % (user.id, user.name, user.std_class))
            self._session.commit()
            return '------------------'
        return '目前还没有学生信息录入'

    # 关闭session
    def close(self):
        self._session.close()


class UserGui:
    '''用户界面类'''

    def __init__(self):
        self.__stdBO = StudentBO()
        while True:
            print('-----学生管理系统------')
            menu = ['添加学生', '查找学生', '删除学生', '显示学生', '修改学生', '退出']
            for k, m in enumerate(menu):
                print('%d.%s' % (k + 1, m))
            ip = input('请输入你的选择:')

            if ip == '1':
                self.add_std()
                break
            elif ip == '2':
                print(self.find_std())
                break
            elif ip == '3':
                self.del_std()
                break
            elif ip == '4':
                self.show_std()
                break
            elif ip == '5':
                self.change_std()
                break
            elif ip == '6':
                exit()
            else:
                print('请输入正确的数字')

    # 添加学生
    def add_std(self):
        print('-----添加学生------')
        self._name = input('请输入学生姓名:')
        self._std_class = input('请输入学生班级:')
        self._ID = input('请输入学生学号:')
        re = self.__stdBO.add_db(self._ID, self._name, self._std_class)
        self.__stdBO.close()
        if re:
            print('添加成功')
            return

    # 查找学生
    def find_std(self):
        print('-----查找学生------')
        self._ID = input('请输入查找学生的学号:')
        result = self.__stdBO.find_db(self._ID)
        self.__stdBO.close()
        return result

    # 删除学生
    def del_std(self):
        print('-----删除学生------')
        self._ID = input('请输入学号:')
        re = self.__stdBO.del_db(self._ID)
        self.__stdBO.close()
        if re:
            print('删除成功')
            return
        print('您输入的学号不存在,请重新输入')
        self.del_std()

    # 显示所有学生
    def show_std(self):
        print('-----显示学生------')
        print(self.__stdBO.show_db)
        self.__stdBO.close()

    # 修改学生
    def change_std(self):
        print('-----修改学生姓名------')
        self._id = input('请输入学号:')
        re = self.__stdBO.is_id(self._id)
        self.__stdBO.close()
        if re:
            self._name = input('请输入新姓名:')
            self.__stdBO.change_db(self._id, self._name)
            print('修改成功')
            return 1
        print('学号不存在,请重新输入')
        self.change_std()


if __name__ == '__main__':
    UserGui()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容