利用sql语句实现学员管理系统的增删改查(面向对象方法)

# -*- coding: utf-8 -*-
__author__ = '木之易'
__date__ = '2018/7/26 9:12'

import sqlite3

class Student(object):
    """学员信息数据模型类"""
    def __init__(self, s_id, name, phone):
        self.s_id = s_id
        self.name = name
        self.phone = phone

    def __str__(self):
        return "*    学号:{s.s_id:>3}   姓名:{s.name:>4}   电话:{s.phone:>4}".format(s=self)

class StudentManager(object):

    def __init__(self, table_name):
        # 数据库名称
        self.db_path = 'student.db'
        # 表名
        self.table_name = table_name
        # 数据库连接
        self.conn = None
        # 数据库游标
        self.cursor = None
        self.key = None

    def creat_table(self):
        """创建表"""
        self.connect_sql()
        sql = "CREATE TABLE IF NOT EXISTS students(s_id INTEGER PRIMARY KEY ,name CHAR  ,phone INTEGER )"
        self.cursor.execute(sql)
        self.close_sql()

    def connect_sql(self):
        """打开数据库"""
        self.conn = sqlite3.connect(self.db_path)
        self.cursor = self.conn.cursor()

    def close_sql(self):
        """关闭数据库"""
        self.conn.commit()
        self.cursor.close()
        self.conn.close()

    def show_option(self):
        """展示选项"""
        print('*    1.添加学员')
        print('*    2.修改学员')
        print('*    3.查询学员')
        print('*    4.删除学员')
        print('*    0.退出学员')

    def add(self):
        """
        添加学员
        :return:
        """
        while True:
            try:
                s_id = int(input('*     请输入学号'))
                name = input('*     请输入姓名:')
                phone = int(input('*     请输入电话:'))
            except Exception as e:
                print('您输入的信息不合法,请重新输入!')
                continue
            else:
                stu = Student(s_id, name, phone)
                break
        # 执行插入数据操作
        self.insert_sql(stu)
    def id_query(self,s_id):
        """根据id查询"""
        sql = "SELECT COUNT (),* FROM students WHERE s_id = {}".format(s_id)
        result = self.cursor.execute(sql)
        for i in result:
            if i[0] == 0:
                print('此学员不存在')
                return None
            else:
                stu = Student(i[1],i[2],i[3])
                return stu

    def update(self):
        """选择修改操作"""
        while True:
            self.connect_sql()
            sql = "SELECT * FROM students"
            result = self.cursor.execute(sql)
            for stu in result:
                print('*    学号:{:>6}    姓名:{}   电话:{}'.format(stu[0], stu[1], stu[2]))
            try:
                s_id = int(input('*     请输入要修改学员的学号'))
                if self.id_query(s_id) != None:
                    stu = self.id_query(s_id)
                else:
                    continue
                stu.name = input('*     请输入修改后的姓名:')
                stu.phone = int(input('*     请输入修改后的电话:'))
            except Exception as e:
                print('您输入的信息不合法,请重新输入!')
                continue
            else:

                break
        # 执行修改数据操作
        self.update_sql(stu)

    def delete(self):
        """选择删除操作"""
        self.connect_sql()
        sql = "SELECT * FROM students"
        result = self.cursor.execute(sql)
        for stu in result:
            print('*    学号:{:>6}    姓名:{}   电话:{}'.format(stu[0], stu[1], stu[2]))
        print('*    a.删除所有信息')
        print('*    b.根据学号删除')
        select = input('*   请选择删除方式:')
        while select != 'a' and select != 'b':
            select = input('*   选项有误,请重选:')
        if select == 'a':
            self.cursor.execute('DELETE FROM students')
            self.close_sql()
        else:
            while True:
                try:
                    s_id = int(input('*     请输入要删除学员的学号'))
                    if self.id_query(s_id) == None:
                        continue
                except Exception as e:
                    print('您输入的信息不合法,请重新输入!')
                    continue
                else:
                    self.delete_sql(s_id)
                    break
    def select(self):
        """选择查询操作"""
        while True:
            try:
                print('1.查询所有学员,2.关键字查询')
                select = int(input('*     请选择查询方法:'))
                while select != 1 and select != 2:
                    select = int(input('*   选项有误,请重选:'))
            except Exception as e:
                print('*    输入的学号不合法,请重新输入!')
                continue
            else:
                break
        if select == 2:

            self.select_sql('{}'.format(self.key))
        else:
            self.select_sql(key=None)


    def insert_sql(self, stu):
        """插入数据库操作"""

        while True:
            self.connect_sql()
            try:
                sql = "INSERT INTO students (s_id,name,phone)VALUES({},'{}',{})".format(stu.s_id, stu.name, stu.phone)
                self.cursor.execute(sql)
                self.close_sql()
            except Exception as e:
                print('学号重复,请重新添加!')
                self.add()
                break
            else:
                break


    def update_sql(self, stu):
        """修改数据库操作"""

        sql = "UPDATE " + self.table_name + " SET name = '{}', phone = {} WHERE s_id ={}".format(stu.name, stu.phone, stu.s_id)
        self.cursor.execute(sql)
        self.close_sql()

    def delete_sql(self, s_id):
        """删除数据库操作"""
        sql = "DELETE  FROM students WHERE s_id ={}".format(s_id)
        print('删除成功!')
        self.cursor.execute(sql)
        self.close_sql()
    def select_sql(self, key=None):
        """
        查询数据库操作
        :param key: 如果key有值,使用关键字模糊查询,若key为None,查询所有数据
        :return:
        """
        self.connect_sql()
        if key:
            self.key = input('请输入关键字:')
            sql = "SELECT * FROM students WHERE name LIKE '{}%'".format(self.key)
            result = self.cursor.execute(sql)
            for stu in result:
                print('*    学号: {:>6}    姓名: {}    电话: {}'.format(stu[0], stu[1], stu[2]))
        else:
            sql = "SELECT * FROM students"
            result = self.cursor.execute(sql)
            for stu in result:
                print('*    学号:{:>6}    姓名:{}   电话:{}'.format(stu[0], stu[1], stu[2]))
        self.close_sql()
    def run(self):
        """程序执行生命周期"""
        self.creat_table()
        while True:
            self.show_option()
            while True:
                try:
                    select = int(input('选择您的操作:'))
                    while select <0 or select > 4:
                        select = int(input('输入有误,请重新输入:'))
                except Exception as e:
                    print('输入的选项不合法,请重新输入!')
                else:
                    break
            if select == 1:
                self.add()
            elif select == 2:
                self.update()
            elif select == 3:
                self.select()
            elif select == 4:
                self.delete()
            else:
                print('*    感谢您的使用,下次再会!')
                break

if __name__ == '__main__':

    s = StudentManager(table_name='students')
    s.run()

猜你喜欢

转载自blog.csdn.net/A_fool_Program_ape/article/details/81226282