python-文件操作与数据库操作复习题

120 篇文章 1 订阅

面向对象,文件操作与数据库操作复习题目:
#文件score.dat中保存的是100名学生的姓名和Python课、高数和英语成绩。
#(1)定义学生类,其中包含姓名、Python课、高数和英语成绩及总分、均分 数据成员,成员函数根据需要确定。
#(2)读入这名学生的成绩,用对象列表进行存储。
#(3)求出各科和总分的最高分。
#(4)请按总分的降序(高成绩在前,低成绩在后)排序
#(5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。
#(6) 将文件中的所有学生信息, 保存在mariadb数据库中;

import random
import pymysql
with open('score.dat','a+') as f:
    for student in range(100):
        name = 'user'+str(student)
        pyscore = random.randint(60,100)
        mathscore = random.randint(60,100)
        englishscore = random.randint(60,100)
        f.write(name+' '+str(pyscore)+' '+str(mathscore)+' '+str(englishscore)+'\n')

python = []
math = []
english = []
sum = []


class Students:
    def __init__(self, name, pyscore, mathscore, englishscore,conn):
        self.name = name
        self.pyscore = pyscore
        self.mathscore = mathscore
        self.englishscore = englishscore
        self.sum = pyscore + mathscore + englishscore
        self.av = self.sum / 3
        self.conn = conn
        self.cur = conn.cursor()

    def save(self):
        global python, math, english, sum
        python.append(self.pyscore)
        math.append(self.mathscore)
        english.append(self.englishscore)
        sum.append(self.sum)


if __name__ == '__main__':
    for student in range(100):
        name = 'user' + str(student)
        pyscore = random.randint(60, 100)
        mathscore = random.randint(60, 100)
        englishscore = random.randint(60, 100)
        f.write(name + ' ' + str(pyscore) + ' ' + str(mathscore) + ' ' + str(englishscore) + '\n')
        student1 = Students(name,pyscore,mathscore,englishscore)
        student1.save()
    toppython = max(python)
    topmath = max(math)
    topenglish = max(english)
    topsum = max(sum)
    print('python最高分:%d数学最高分:%d英语最高分:%d' % (toppython, topmath, topenglish))
    print('总分最高为:%d' % (topsum))
    a = sorted(sum,reverse=True)
    print(a)
    with open('odered_score1.dat','w+') as e:
        e.write('python最高分:'+str(toppython)+' '+'数学最高分:'+str(topmath)+' ')
        e.write('英语最高分:'+str(topenglish)+' '+'总分最高分:'+str(topsum)+'\n')
        e.write('总分排序:')
        for item in a:
            e.write(str(item)+',')

生成文件score.dat

在这里插入图片描述
生成文件odered_score1.dat
在这里插入图片描述

最后一问要求把所有学生信息放入数据库中。
1.也就是把score.dat里的内容保存在数据库中(我放在helloTest数据库里)
2.需要在数据库中创建一个名为scores的表格,然后设定表头为name varchar(50),pyscore int,mathscore int,englishscore int。用来保存score.dat里的成绩内容

在这里插入图片描述
想了一晚上,把mysql重新学习了一遍终于弄懂了怎么放入数据库里。整个代码写的有些繁琐,尤其是main函数里,应该可以封装起来。接受任何批评指点~~

现在补充放入数据库的代码。
代码:

import random
import pymysql

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='westos',
    db='helloTest',
    charset='utf8',
    autocommit=True,  # 自动提交
)

cur = conn.cursor()

with open('score.dat','a+') as f:
    for student in range(100):
        name = 'user'+str(student)
        pyscore = random.randint(60,100)
        mathscore = random.randint(60,100)
        englishscore = random.randint(60,100)
        f.write(name+' '+str(pyscore)+' '+str(mathscore)+' '+str(englishscore)+'\n')
        sqli = "insert into scores values('%s',%d,%d,%d);" %(name,pyscore,mathscore,englishscore)
        cur.execute(sqli)
        conn.commit()
    print("插入数据成功;")

cur.close()
conn.close()


python = []
math = []
english = []
sum = []


class Students:
    def __init__(self, name, pyscore, mathscore, englishscore):
        self.name = name
        self.pyscore = pyscore
        self.mathscore = mathscore
        self.englishscore = englishscore
        self.sum = pyscore + mathscore + englishscore
        self.av = self.sum / 3
        # self.conn = conn
        # self.cur = conn.cursor()

    def save(self):
        global python, math, english, sum
        python.append(self.pyscore)
        math.append(self.mathscore)
        english.append(self.englishscore)
        sum.append(self.sum)


if __name__ == '__main__':
    for student in range(100):
        name = 'user' + str(student)
        pyscore = random.randint(60, 100)
        mathscore = random.randint(60, 100)
        englishscore = random.randint(60, 100)
        f.write(name + ' ' + str(pyscore) + ' ' + str(mathscore) + ' ' + str(englishscore) + '\n')
        student1 = Students(name,pyscore,mathscore,englishscore)
        student1.save()
    toppython = max(python)
    topmath = max(math)
    topenglish = max(english)
    topsum = max(sum)
    print('python最高分:%d数学最高分:%d英语最高分:%d' % (toppython, topmath, topenglish))
    print('总分最高为:%d' % (topsum))
    a = sorted(sum,reverse=True)
    print(a)
    with open('odered_score1.dat','w+') as e:
        e.write('python最高分:'+str(toppython)+' '+'数学最高分:'+str(topmath)+' ')
        e.write('英语最高分:'+str(topenglish)+' '+'总分最高分:'+str(topsum)+'\n')
        e.write('总分排序:')
        for item in a:
            e.write(str(item)+',')

重新看一下数据库里scores表格的信息,已经插入进去了。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值