Python | 简单学生信息管理系统

Python简单学生信息管理系统

'''
实验一  顺序表的实现
实验目的:  理解顺序表的基本原理,掌握顺序表的基本操作的编程实现
实验内容:  
(1)建立一个顺序表,表中存储学生的成绩数据(包括姓名,学号,数据结构成绩,外语成绩,数学建模成绩,体育成绩,总成绩)作为数据元素;
(2)实现顺序表的基本操作: 建立顺序表,求顺序表的长度,遍历顺序表,插入元素,删除元素,查找元素,清空顺序表等基本操作;
(3)编写一个测试主函数来测试该顺序表是否能实现相应的功能.

'''

'''
本人创建的表名为:students

+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| 序号         | int(10)      | NO   |     | NULL    |       |
| 姓名         | varchar(255) | NO   |     | NULL    |       |
| 学号         | varchar(255) | NO   | PRI | NULL    |       |
| 数理统计     | varchar(255) | NO   |     | NULL    |       |
| 英语         | varchar(255) | NO   |     | NULL    |       |
| 数学建模     | varchar(255) | NO   |     | NULL    |       |
| 体育         | varchar(255) | NO   |     | NULL    |       |
| 总成绩       | varchar(255) | NO   |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+



'''
import pymysql


class Stu_gather(object):               #获取数据库里里面信息
    def get_studata(self):
        db=pymysql.connect('localhost','root','123456','student')
        cursor=db.cursor()
        sql="select * from students"
        cursor.execute(sql)
        results = cursor.fetchall()
        for i in range(len(results)):
            count=results[i][0]
            name=results[i][1]
            id=results[i][2]
            sltj_score=results[i][3]
            english_score=results[i][4]
            math_score=results[i][5]
            sprit_score=results[i][6]
            all_score=results[i][7]
            sj={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
            stu_data.append(sj)
        db.close()
        return stu_data    

    def get_dd(self):
        db=pymysql.connect('localhost','root','123456','student')
        cursor=db.cursor()
        sql="select * from students"
        cursor.execute(sql)
        results = cursor.fetchall()
        for i in range(len(results)):
            id=results[i][2]
            dd.append(id)
        db.close()
        return dd
    


class Stu_real(Stu_gather):         #功能类
    global stu_data
    global dd
    #学生数据处理类

    def in_id(self):        #输入判断学生id并且添加函数
        ids=input('学号:')    #录入学生学号且设置数据类型为字典型
        if ids=='':         #如果没输入,则为空
            ids='0'         
        if ids not in dd:       #判断学号是否存在
            dd.append(ids)      #将数据插入学号列表存储
        else:
            print('学号输入重复,请重新输入')        #学号存在则重新调用该方法
            return student.in_id()    
        return ids          #返回学生id

    def insert_id(self,insert_data):        #输入判断学生id并且插入dd学号列表函数
        self.insert_data = insert_data
        print(self.insert_data)
        id=input('学号:')    #录入学生学号且设置数据类型为字典型
        if id=='':         #如果没输入,则为空
            id='0'         
        if id not in dd:       #判断学号是否存在
            dd.insert(self.insert_data,id)      #将数据插入学号列表存储
        else:
            print('学号输入重复,请重新输入')        #学号存在则重新调用该方法
            return student.insert_id(insert_data)
        return id 


    def add_stu(self):        #添加学生信息
        stu=input('请输入你要录入信息的学生人数: ')
        while stu=='' or int(stu)<=0:
            print('输入有误,请重新输入:')
            stu=input('请输入你要录入信息的学生人数: ')

        print('\n——————————————————成功打开,请开始录入学生信息——————————————————\n')
        for i in range(int(stu)):
            print('\n')
            name=input('姓名:')      #录入学生姓名
            id = student.in_id()
            sltj_score=input('数理统计成绩:')
            if str(sltj_score)=='':
                sltj_score='0'    
            english_score=input('英语成绩:')
            if str(english_score)=='':
                english_score='0'   
            math_score=input('数学建模成绩:')
            if str(math_score)=='':
                math_score='0'   
            sprit_score=input('体育成绩:')
            if str(sprit_score)=='':
                sprit_score='0'   
            all_score=float(sltj_score)+float(english_score)+float(math_score)+float(sprit_score)
            add_data={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
            stu_data.append(add_data)


    def del_stu(self):      #删除学生信息
        print('学号有:')
        print(dd)
        print('\n')
        idss=input('请输入要删除同学信息学号:')    #录入学生学号且设置数据类型为整型
        if idss=='':
            idss='0'
        if idss in dd:
            for i in range(len(dd)):
                if idss == dd[i]:
                    print('你需要删除的同学信息为:',stu_data[i])
                    dd.pop(i)
                    stu_data.pop(i)
                    break
                else:
                    continue
        else:
            print('学号不存在,请重新输入')
            return student.del_stu()

    def xgdel_stu(self):      #删除学生信息配合插入功能实现
        print('学号有:')
        print(dd)
        print('\n')
        idss=input('请输入要修改同学信息学号:')    #录入学生学号且设置数据类型为整型
        if idss=='':
            idss='0'
        if idss in dd:
            for i in range(len(dd)):
                if idss == dd[i]:
                    print('你需要修改的同学信息为:',stu_data[i])
                    dd.pop(i)
                    stu_data.pop(i)
                    inser_data=i
                    break
                else:
                    continue
        else:
            print('学号不存在,请重新输入')
            return student.del_stu()
        return inser_data

    def alter_data(self):       #修改学生信息
        insert_data=student.xgdel_stu()
        print('——————————————————————重新录入该条学生数据——————————————————————')
        name=input('姓名:')      #录入学生姓名
        id = student.insert_id(insert_data)
        sltj_score=input('数理统计成绩:')
        if str(sltj_score)=='':
            sltj_score='0'    
        english_score=input('英语成绩:')
        if str(english_score)=='':
            english_score='0'   
        math_score=input('数学建模成绩:')
        if str(math_score)=='':
            math_score='0'   
        sprit_score=input('体育成绩:')
        if str(sprit_score)=='':
            sprit_score='0'   
        all_score=float(sltj_score)+float(english_score)+float(math_score)+float(sprit_score)
        cxx={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
        stu_data.insert(insert_data, cxx)
        print(dd)


    def search_data(self):          #查找学生信息
        #根据学号查询该生信息
        search_data=int(input('请输入你要查询学生的学号:'))
        for i in range(len(stu_data)):
            if stu_data[i]['id']==search_data:
                print('该生信息为: ')
                print(stu_data[i])
                break
            else:
                continue
        else:
            print('无该生信息')
        print(dd)

        
    def insert_stu(self):     #插入学生信息
        print('\n')
        print('数据总长度为:', len(stu_data))
        inser_data=int(input('请输入你要将数据插入第几条:'))
        if inser_data>len(stu_data)+1 or inser_data<=0:
            print('输入有误,请按数据总长度范围进行输入')
            return student.insert_stu()
        else:
            inser_data-=1
            print('——————————————————————开始录入该条学生数据——————————————————————')
            name=input('姓名:')      #录入学生姓名
            id = student.insert_id(inser_data)
            sltj_score=input('数理统计成绩:')
            if str(sltj_score)=='':
                sltj_score='0'    
            english_score=input('英语成绩:')
            if str(english_score)=='':
                english_score='0'   
            math_score=input('数学建模成绩:')
            if str(math_score)=='':
                math_score='0'   
            sprit_score=input('体育成绩:') 
            if str(sprit_score)=='':
                sprit_score='0'   
            all_score=float(sltj_score)+float(english_score)+float(math_score)+float(sprit_score)
            insxx={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
            stu_data.insert(inser_data, insxx)
            print(dd)
    


    def print_data(self):     #学生信息显示
        print('\n')
        print('\n')
        tt = '{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}'
        print('\n')
        print('------------------------------------------------------学生信息表-----------------------------------------------------\n')
        print(tt.format('序号','姓名','学号','数理统计','英语','数学建模','体育','总分'))
        num = 0
        for i in range(len(stu_data)):
            num = i+1
            print(tt.format(num, stu_data[i]['name'], stu_data[i]['id'], stu_data[i]['数理统计'], stu_data[i]['英语'], stu_data[i]['数学建模'], stu_data[i]['体育'], stu_data[i]['总成绩']))
        print('\n')


    def save_data(self):
        print('是否更改到数据库? (1:是/0:否)')
        xz=int(input('请输入数字(1:是/0:否):'))
        if xz==1:
            # 打开数据库连接
            db=pymysql.connect('localhost','root','123456','student')
            # 使用 cursor() 方法创建一个游标对象 cursor
            cursor = db.cursor()
            # 使用 execute()执行任务
            sql="delete from students"
            cursor.execute(sql)
            db.commit()
            for i in range(len(stu_data)):
                count=i+1
                sql = "INSERT INTO students(序号, 姓名, 学号, 数理统计, 英语, 数学建模, 体育, 总成绩) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (count, stu_data[i]['name'], stu_data[i]['id'], stu_data[i]['数理统计'], stu_data[i]['英语'], stu_data[i]['数学建模'], stu_data[i]['体育'], stu_data[i]['总成绩'])
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
            # 关闭数据库连接
            db.close()
            print('\n信息已存入数据库,欢迎再次使用')
        elif xz==0:
            print('欢迎再次使用')
        else:
            print('输入有误! 请重新输入')
            print('\n')
            return student.save_data()

    

    def finish_data(self):      #调用功能类
        
        print('-----------------------------------------------------------------------------------------\n')
        print('                             请选择功能(输入数字)                                 \n')
        print('  1:添加信息  2:删除信息  3:插入信息  4:修改信息  5:查找信息  6:显示信息  7:退出选择是否保存新添数据 ')
        print('                                                                            ')
        print('-----------------------------------------------------------------------------------------')
        num=str(input('请选择功能:'))
        if num=='':
            return student.finish_data()
        if int(num)==1:     
            student.add_stu()
            print('添加信息完毕')
            print('\n')
            return student.finish_data()
        elif int(num)==2:
            print('数据总长度为:', len(stu_data))
            student.del_stu()
            print('删除信息完毕')
            print('\n')
            return student.finish_data()
        elif int(num)==3:
            print('数据总长度为:', len(stu_data))
            student.insert_stu()
            print('插入信息完毕')
            print('\n')
            return student.finish_data()
        elif int(num)==4:
            print('数据总长度为:', len(stu_data))
            student.alter_data()
            print('修改信息完毕')
            print('\n')
            return student.finish_data()
        elif int(num)==5:
            print('数据总长度为:', len(stu_data))
            student.search_data()
            print('\n')
            print('查找信息完毕')
            print('\n')
            return student.finish_data()
        elif int(num)==6:
            student.print_data()
            return student.finish_data()
        else:
            student.save_data()


if __name__=="__main__":
    global stu_data
    global dd
    print('——————————————————————————欢迎来到学生信息管理系统——————————————————————————\n')

    stu_data=[]     #学生信息总列表
    data={}     #信息字典
    dd=[]      #学号列表
    student = Stu_real()  #调用类Stu_real()
    stu_data = student.get_studata()       #获取数据库的学生信息
    dd = student.get_dd()            #获取数据库学生的学号    
    student.finish_data()       
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值