首先生成三份数据库,包括学生信息,教师信息,课程信息
反映在代码中类似于:
qq=Student('qq',2190502110,18811375011)
ww=Student('ww',2190502111,18811375012)
ee=Student('ee',2190502112,18811375013)
rr=Student('rr',2190502113,18811375014)
tt=Student('tt',2190502114,18811375015)
yy=Student('yy',2190502115,18811375016)
uu=Student('uu',2190502116,18811375017)
ii=Student('ii',2190502117,18811375018)
oo=Student('oo',2190502118,18811375019)
pp=Student('pp',2190502119,18811375020)
aa=Student('aa',2190502120,18811375021)
ss=Student('ss',2190502121,18811375022)
dd=Student('dd',2190502122,18811375023)
ff=Student('ff',2190502123,18811375024)
gg=Student('gg',2190502124,18811375025)
hh=Student('hh',2190502125,18811375026)
jj=Student('jj',2190502126,18811375027)
kk=Student('kk',2190502127,18811375028)
ll=Student('ll',2190502128,18811375029)
zz=Student('zz',2190502129,18811375030)
db = shelve.open('Studentdb')
for obj in (qq,ww,ee,rr,tt,yy,uu,ii,oo,pp,\
aa,ss,dd,ff,gg,hh,jj,kk,ll,zz):
db[obj.name]=obj#将对象的名字用作键
db.close()
对数据库进行操作如下:
# 实现学生选课系统
import shelve
import random
#读取数据库(excel表)内信息
# 学生类
# 属性:姓名、学号、电话、所选课程列表
# 方法:查看:显示该学生所有课程信息;添加课程:将选好的课程添加到课程列表中
class Student:
def __init__(self,name,number=0,phone=0,classname=None):#设置None,未赋值时=None更符合客观事实
self.name=name
self.number=number
self.phone=phone
self.classname=[classname]#写为列表
def displayclass(self):#显示该学生所有课程信息
print('This Student who named "{}" chooses this courses:"{}"'\
.format(self.name,self.classname))
def addClass(self,anyclassname):#向该学生已有课程中加入后选择的课程(即添加课程)
self.classname=anyclassname
return self.classname
# 课程类
# 属性:课程编号、课程名称、教师名
# 方法:查看:显示该课程的全部信息;设置教师:给当前课程安排一个教师
class ClassName:
def __init__(self,cname,cnumber,cteacher=None):#初始化设置属性
self.number=cnumber
self.name=cname
self.teacher=cteacher
def display(self):#显示该课程的全部信息
print('Display current class message:classnumber is"{}",\
classname is "{}",classTeacher is {}"'.format\
(self.cnumber,self.classname,self.classTeacher))
def setteacher(self,anyteacher):#设置课程教师
self.cteacher=anyteacher
return self.cteacher
# 教师类:
# 属性:教师编号,教师名、电话、所教课程列表
# 方法:查看:查看该教师的所有课程
class Teacher:
def __init__(self,name,number,phone,classname):#设置None,未赋值时=None更符合客观事实
self.name=name
self.number=number
self.phone=phone
self.classname=[classname]
def displayTC(self):#print this teacher's all courses
print('This teacher is"{}",He (She) teaches this courses:"{}"'.format(self.name,self.classname))
def setClass(self,anyclassname):
self.classname=anyclassname
return self.classname
#创建20名学生,6个课程,3名教师保存于数据库中
if __name__=='__main__':
cdb = shelve.open('Coursesdb')
#给3名任课教师随机安排6个课程
tdb = shelve.open('Teacherdb')
teacherClasses=[[],[],[]]
ClassNames=list(cdb.keys())
for ClassName in ClassNames:
index = random.randint(0,2)
teacherClasses[index].append(ClassName)
i=0
for key in sorted(tdb):
a=tdb[key].name
b=tdb[a]
b.setClass(teacherClasses[i])
tdb[a]=b
b.displayTC()
i=i+1
tdb.close()
#给20名学生随机分配3门课程
sdb = shelve.open('Studentdb')
AddClassName=[[] for i in range(0,20)]
ClassNames=list(cdb.keys())
i=0
for key in sorted(sdb):
L=[0,1,2,3,4,5]
random.shuffle(L)
L=L[0:3]
AddClassName[i]=[ClassNames[L[j]] for j in range(3)]
a=sdb[key].name
b=sdb[a]
b.addClass(AddClassName[i])
sdb[a]=b
i=i+1
cdb.close()
#最终显示这20名学生选课情况
for key in sorted(sdb):
a=sdb[key].name
b=sdb[a]
b.displayclass()
sdb.close()