面向对象,文件操作与数据库操作复习题目:
#文件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表格的信息,已经插入进去了。