1.10数据库编程练习
2021/11/21 19:42:28
本文主要是介绍1.10数据库编程练习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第一关 数据库表创建
- 编程要求
在名为 nudt
的数据库下,创建课程表(Course)和教师表(Teacher),表结构如下:
课程表(Course)
字段名 | 字段类型 | 说明 |
---|---|---|
Cno | CHAR(10) | 课程编号(主键) |
Cname | CHAR(100) | 课程名称 |
Tno | CHAR(10) | 教师编号 |
教师表(Teacher)
字段名 | 字段类型 | 说明 |
---|---|---|
Tno | CHAR(10) | 教师编号(主键) |
Tname | CHAR(100) | 教师名称 |
Tsex | CHAR(10) | 教师性别 |
mysql
连接参数如下:
host='localhost',port=3306,user='root',passwd='123123'
- 代码实现
import pymysql if __name__ == '__main__': # **********begin********** # conn = pymysql.connect(host='localhost',port=3306, user='root',passwd='123123', charset='utf8',db='nudt') cursor = conn.cursor(); sql = """ CREATE TABLE Course( Cno CHAR(10) PRIMARY KEY, Cname CHAR(100), Tno CHAR(10) )ENGINE=innodb DEFAULT CHARSET=utf8; CREATE TABLE Teacher( Tno CHAR(10) PRIMARY KEY, Tname CHAR(100), Tsex CHAR(10) )ENGINE=innodb DEFAULT CHARSET=utf8; """ cursor.execute(sql) cursor.close() conn.close() # **********end********** #
第二关 数据更新
- 编程要求
将教师数据插入教师表(Teacher)
教师编号 | 教师名称 | 教师性别 |
---|---|---|
T1 | 周海芳 | 女 |
T2 | 周竞文 | 男 |
T3 | 谭春娇 | 女 |
T4 | 陈立前 | 男 |
T5 | 李暾 | 男 |
T6 | 毛晓光 | 男 |
将课程数据插入课程表(Course)
课程编号 | 课程名称 | 教师编号 |
---|---|---|
C1 | 大学计算机基础 | T1 |
C2 | 大学计算机基础 | T2 |
C3 | 数据库原理与技术 | T2 |
C4 | 大学计算机基础 | T5 |
C5 | 程序设计 | T1 |
C6 | 程序设计 | T4 |
C7 | 数字图像处理 | T1 |
C8 | 抽象代数 | T6 |
C9 | 离散数学 | T5 |
C10 | 软件可靠性 | T6 |
数据库连接参数如下:
host='localhost', port=3306,user='root', passwd='123123', db="nudt",charset='utf8'
- 代码实现
import pymysql if __name__ == '__main__': # **********begin********** # conn = pymysql.connect( host = 'localhost', port = 3306, user = 'root', password = '123123', database = 'nudt', charset = 'utf8' ) cursor = conn.cursor() sql = 'insert into Teacher(Tno,Tname,Tsex) values(%s,%s,%s);' data = [ ('T1','周海芳','女'), ('T2','周竞文','男'), ('T3','谭春娇','女'), ('T4','陈立前','男'), ('T5','李暾','男'), ('T6','毛晓光','男') ] cursor.executemany(sql,data) conn.commit() sql = 'insert into Course(Cno,Cname,Tno) values(%s,%s,%s);' data = [ ('C1','大学计算机基础','T1'), ('C2','大学计算机基础','T2'), ('C3','数据库原理与技术','T2'), ('C4','大学计算机基础','T5'), ('C5','程序设计','T1'), ('C6','程序设计','T4'), ('C7','数字图像处理','T1'), ('C8','抽象代数','T6'), ('C9','离散数学','T5'), ('C10','软件可靠性','T6') ] cursor.executemany(sql,data) conn.commit() cursor.close() conn.close() # **********end********** #
第三关 单表查询
- 编程要求
1.查询所用表:Teacher
;
2.查询男老师数量并将数值赋予给变量 maleNum
;
3.查询女老师数量将数值赋予给变量 femaleNum
;
4.将变量 maleNum
与变量 femaleNum
输出到控制台,格式如 --> 变量名:数值(拼接时使用逗号拼接,不要使用加号)
- 代码实现
import pymysql import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] if __name__ == '__main__': # **********begin********** # # 获取连接对象 conn = pymysql.connect(host = 'localhost',port = 3306, user = 'root',passwd = '123123', db='nudt',charset='utf8') # 获取光标 cs = conn.cursor() # 查询男老师数量并将数值赋予给变量 maleNum cs.execute("select* from Teacher where Tsex='男'") maleNum = len(cs.fetchall()) # 查询女老师数量将数值赋予给变量 femaleNum cs.execute("select* from Teacher where Tsex='女'") femaleNum = len(cs.fetchall()) # 将变量 maleNum 与变量 femaleNum 输出到控制台,格式如 --> 变量名:数值 # 例如: maleNum:100 # 注意:一行输出一个变量,请先输出变量 maleNum ,其次是变量 femaleNum print("maleNum: %d" % maleNum) print("femaleNum: %d" % femaleNum) cs.close() conn.close() # 绘制柱状图 plt.xticks(fontsize=12) plt.yticks([]) # 不显示y轴刻度 plt.text(0, maleNum * 0.5, maleNum, ha='center', fontsize=30) plt.text(1, femaleNum * 0.5, femaleNum, ha='center', fontsize=30) plt.bar(range(2), (maleNum, femaleNum), color='gy', tick_label=('男', '女')) plt.savefig("img/1.png") # 关闭资源 # **********end********** #
第四关 多表查询
- 编程要求
-
统计教师的课程数量并按照教师名称倒序。
-
获取结果集,将其赋予给变量
results
并遍历结果集,按照格式 --> 教师:课程数量 ,输出到控制台。
连接参数如下:
host='localhost', port=3306,
user='root', passwd='123123',
charset='utf8', db="nudt"
课程表(Course)
字段名 | 字段类型 | 说明 |
---|---|---|
Cno | CHAR(10) | 课程编号(主键) |
Cname | CHAR(100) | 课程名称 |
Tno | CHAR(10) | 教师编号 |
表数据如下:
教师表(Teacher)
字段名 | 字段类型 | 说明 |
---|---|---|
Tno | CHAR(10) | 教师编号(主键) |
Tname | CHAR(100) | 教师名称 |
Tsex | CHAR(10) | 教师性别 |
表数据如下:
- 代码实现
import pymysql import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] if __name__ == '__main__': # **********begin***********# # 获取连接对象 conn = pymysql.connect(host = 'localhost',port = 3306, user = 'root',passwd = '123123', db='nudt',charset='utf8') # 获取光标 cs = conn.cursor() # 执行SQL,统计教师的课程数量并按照教师名称倒序 sql = "select Tname,count(Cno) \ from Teacher left outer join Course \ on Teacher.Tno = Course.Tno \ group by Tname \ order by Tname desc" cs.execute(sql) # 获取结果集,将其赋予给变量 results results = cs.fetchall() # 遍历结果集,按照格式 --> 教师:课程数量 ,输出到控制台 for result in results: print("%s : %d" % (result[0],result[1])) # 绘制柱状图 names, courseNum = zip(*results) plt.xticks(fontsize=16) plt.yticks([]) # 不显示y轴刻度 for i in range(len(courseNum)): plt.text(i, courseNum[i] * 0.5, courseNum[i], ha='center', fontsize=20) plt.bar(range(len(courseNum)), courseNum, color='y', tick_label=names) plt.savefig("step4_img/1.png") # 关闭资源 cs.close() conn.close() # **********end**********#
第五关 信息管理系统
- 编程要求
1.补全 addCourse(cs)
函数,完成添加课程信息功能。
2.补全 updateCourse(cs)
函数,完成修改课程信息功能。
3.补全 findCourseByCno(cs)
函数,完成查询课程信息功能。
4.补全 deleteCourse(cs)
函数,完成删除课程信息功能。
5.补全 findCourseByTeacherName(cs)
函数,完成通过教师名称查询课程名称功能。
6.补全 selectTeacherByCname(cs)
函数,完成通过课程名称查询教师名称功能。
课程表(Course)
字段名 | 字段类型 | 说明 |
---|---|---|
Cno | CHAR(10) | 课程编号(主键) |
Cname | CHAR(100) | 课程名称 |
Tno | CHAR(10) | 教师编号 |
表数据如下:
教师表(Teacher)
字段名 | 字段类型 | 说明 |
---|---|---|
Tno | CHAR(10) | 教师编号(主键) |
Tname | CHAR(100) | 教师名称 |
Tsex | CHAR(10) | 教师性别 |
表数据如下:
- 代码实现
import pymysql # 添加课程信息,输入课程信息格式为:Cno,Cname,Tno def addCourse(cs): courseInfo = input() # **********begin********** # course = courseInfo.strip().split(",") sql="INSERT INTO Course(Cno,Cname,Tno) values(%s,%s,%s)" Cno = course[0] Cname = course[1] Tno = course[2] cs.execute(sql,[Cno,Cname,Tno]) # **********end********** # # 修改课程信息(通过课程编号修改课程名称),输入新课程信息格式为:Cno,Cname def updateCourse(cs): courseInfo = input() # **********begin********** # course = courseInfo.strip().split(",") sql="UPDATE Course SET Cname=%s WHERE Cno=%s" Cno = course[0] Cname = course[1] cs.execute(sql,[Cname,Cno]) # **********end********** # # 查询课程信息(通过课程编号查询课程信息),输入课程编号 Cno # 将课程信息打印到控制台 def findCourseByCno(cs): courseId = input() # **********begin********** # course = courseId.strip() sql="SELECT* FROM Course WHERE Cno=%s" cs.execute(sql,course) print(cs.fetchall()) # **********end********** # # 删除课程信息(通过课程编号删除课程信息),输入课程编号 Cno def deleteCourse(cs): courseId = input() # **********begin********** # course = courseId.strip() sql="DELETE FROM Course WHERE Cno=%s" cs.execute(sql,course) # **********end********** # # 通过教师名称查询课程名称并将其打印到控制台,输入教师名称 Tname # 打印格式为:课程名 (一个课程名一行,不含其它字符) def findCourseByTeacherName(cs): tname = input() # **********begin********** # tname = tname.strip() sql="""SELECT Cname FROM Teacher,Course WHERE Teacher.Tno=Course.Tno AND Tname = %s""" cs.execute(sql,tname) for name in cs.fetchall(): print(name[0]) # **********end********** # # 通过课程名称查询教师名称并将其打印到控制台,输出课程名称 Cname # 打印格式为:教师名 (一个教师名一行,不含其它字符) def selectTeacherByCname(cs): cname = input() # **********begin********** # cname = cname.strip() sql="""SELECT Tname FROM Course,Teacher WHERE Course.Tno = Teacher.Tno AND Cname = %s""" cs.execute(sql,cname) for name in cs.fetchall(): print(name[0]) # **********end********** # def Test(cs): sql = "select * from Course" cs.execute(sql) courseInfo = cs.fetchall() print(courseInfo) if __name__ == '__main__': conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123123', db="nudt", charset='utf8') command = input() cs = conn.cursor() if command == '01': addCourse(cs) elif command == '02': updateCourse(cs) elif command == '03': findCourseByCno(cs) elif command == '04': deleteCourse(cs) elif command == '05': findCourseByTeacherName(cs) elif command == '06': selectTeacherByCname(cs) conn.commit() Test(cs) cs.close() conn.close()
这篇关于1.10数据库编程练习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南