python选课系统作业json_python第三十五天-----作业完成--学校选课系统

1 #!usr/bin/env python

2 #-*-coding:utf-8-*-

3 #Author calmyan

4 importos ,sys,pickle,uuid,hashlib,time5

6 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取相对路径转为绝对路径赋于变量

7 sys.path.append(BASE_DIR)#增加环境变量

8 from cfg importconfig9 from core importclass_main10 from core importlog_file11

12

13 #id生成

14 defid_uu():15 returnstr(uuid.uuid1())16 #id生成

17 defid_md5():18 id_i=hashlib.md5()19 id_i.update(bytes(str(time.time()),encoding='utf8'))20 return id_i.hexdigest()#返回用时间创建 的ID

21

22 #初始化检测

23 def file_char(name):#24 if not os.path.exists(name):#检测相关文件是否不存在

25 #info={'北京':[],'上海':[]}

26 #file_pick(name,info)#进行初始化

27 returnTrue28 else:29 returnFalse30

31 #初始化管理员

32 definitialize_admin():33 print('系统正在初始化....')34 try:35 user = input('请输入初始化用户名:')36 pwd = input('请输入初始化密码:')37 obj =class_main.Admin(user, pwd)38 obj.save()39 with open(config.ADMIN_USER_FILE,'w') as f:40 f.write('yes')#应文件用来确认初始化

41 returnTrue42 exceptException as e:43 print(e)44

45 #创建学校函数

46 defcar_school():47 try:48 print('提示: B/b 返回上级!')49 names=input('请输入您要添加的学校名字:').strip()50 if names=='b' or names=='B':51 return

52 addrs=input('请输入学校所在地址:').strip()53 if addrs=='b' or addrs=='B':54 return

55 school_name_list=[(obj.NAME,obj.ADDR) for obj in class_main.SchoolName.open_file_list()]#进行学校校区重名检测用,返回列表

56 if (names,addrs) inschool_name_list:57 print('\033[41;1m[%s] [%s]校区 已经存在,不可重复创建\033[0m' %(names,addrs))58 return

59 else:60 obj=class_main.SchoolName(names,addrs)#创建学校

61 obj.save()#pickle序列化保存到文件

62 print('\033[32;1m创建[%s] 学校,[%s]校区成功!\033[0m'%(names,addrs))63 return

64 exceptException as e:65 print(e)66

67 #查看学校

68 defshow_school():69 for obj inclass_main.SchoolName.open_file_list():70 #amo=obj.get_amount()

71 print('\033[32;1m学校[%s] 地址[%s] 总收入[%s] 创建日期[%s] \033[0m'.center(60,'-') %(obj.NAME,obj.ADDR,obj.amount,obj.create_time))72

73 #创建课程函数

74 defcar_course():75 print('\033[36;1m创建课程\033[0m'.center(60,'='))76 school_list=class_main.SchoolName.open_file_list()#打开学校列表

77 try:78 #while True:

79 print('\033[33;1m提示: B/b 返回上级!\033[0m')80 fon=input('===============其他键确认开始创建课程:')81 if fon=='b' or fon=='B':82 return

83 for k,obj inenumerate(school_list):84 print('\033[35;1m学校编号:%s,学校名称:%s,校区:%s\033[0m'%(k,obj,obj.ADDR))85 sch_name=int(input('请选择学校:'))86 school_obj=school_list[sch_name]#用数字选定学校

87 #print(school_list[sch_name])

88 #print(school_obj.ID.ID)

89 course_name=input('请输入要创建的课程名:').strip()90 price=input('请输入课程价格:').strip()91 period=input('请输入课程周期:').strip()92 course_name_list=[(obj.NAME,obj.SCHOOL_ID.ID) for obj in class_main.Course.open_file_list()]#返回所有课程是名字,对应的学校列表

93 if (course_name,school_obj.ID.ID) in course_name_list:#查课程名,与学校名是否存

94 print('\033[43;1m课程[%s] 已经存在,不能重复创建\033[0m' %(course_name))95 return

96 else:97 obj=class_main.Course(course_name,period,price,school_obj.ID)98 obj.save()99 print('\033[33;1m课程[%s] 价格[%s] 周期[%s]创建成功\033[0m' %(obj.NAME,obj.FEES,obj.CYCLE))100 return

101 exceptException as e:102 return print('选择有误,请重新选择')103

104 #查看课程

105 defshow_course():106 for obj in class_main.Course.open_file_list():#调用ID类中的方法

107 print('\033[32;1m[%s] [%s]校区 [%s]课程 价格[%s] 周期[%s]\033[0m'.center(60,'-')%(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME,obj.FEES,obj.CYCLE))108

109 #创建讲师函数

110 defcar_teacher():111 print('\033[36;1m创建讲师\33[0m'.center(60,'='))112 school_list=class_main.SchoolName.open_file_list()#打开学校列表

113 try:114 #while True:

115 print('\033[33;1m提示: B/b 返回上级!\033[0m')116 fon=input('===============其他键确认开始创建讲师:')117 if fon=='b' or fon=='B':118 return

119 for k,obj inenumerate(school_list):120 print('\033[35;1m学校编号:%s,学校名称:%s,校区:%s\033[0m'%(k,obj,obj.ADDR))121 sch_name=int(input('请选择学校:'))122 school_obj=school_list[sch_name]#用数字选定学校

123 uname=input('请输入要创建的讲师名字:').strip()124 upwd=input('请输入讲师登陆密码:').strip()125 uleve=input('请输入讲师级别:').strip()126 uage=input('请输入年龄:').strip()127 usex=input('请输入性别:').strip()128 uname_list=[(obj.NAME,obj.SCHOOL_ID.ID) for obj in class_main.Teacher.open_file_list()]#返回所有讲师是名字,对应的学校列表

129 if (uname,school_obj.ID.ID) in uname_list:#查讲师名,与学校名是否存

130 print('\033[43;1m讲师[%s] 已经存在,不能重复创建\033[0m' %(uname))131 return

132 else:133 obj=class_main.Teacher(uname,upwd,uage,usex,uleve,school_obj.ID)134 obj.save()135 print('\033[33;1m[%s] [%s]校区 讲师[%s] 创建成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))136 return

137 exceptException as e:138 return print('选择有误,请重新选择')139

140 #查看讲师

141 defshow_teacher():142 for obj in class_main.Teacher.open_file_list():#调用ID类中的方法

143 print('\033[32;1m[%s] [%s]校区 [%s]讲师 性别:[%s] 级别[%s] 创建时间[%s]\033[0m'.center(60,'-')%(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME,obj.SEX,obj.LEVE,obj.create_time))144

145 #创建班级函数

146 defcar_classes():147 print('\033[36;1m创建班级\33[0m'.center(60,'='))148 school_list=class_main.SchoolName.open_file_list()#打开学校列表

149 try:150 #while True:

151 print('\033[33;1m提示: B/b 返回上级!\033[0m')152 fon=input('===============其他键确认开始创建班级:')153 if fon=='b' or fon=='B':154 return

155 for k,obj inenumerate(school_list):156 print('\033[35;1m学校编号:%s,学校名称:%s,校区:%s\033[0m'%(k,obj,obj.ADDR))157 sch_name=int(input('请选择学校:'))158 school_obj=school_list[sch_name]#用数字选定学校

159 uname=input('请输入要创建的班级名:').strip()160 uname_list=[(obj.NAME,obj.SCHOOL_ID.ID) for obj in class_main.Class_leven.open_file_list()]#返回所有班级是名字,对应的学校列表

161 if (uname,school_obj.ID.ID) in uname_list:#查课程名,与学校名是否存

162 print('\033[43;1m[%s] [%s]校区 ,[%s]班级 已经存在,不能重复创建\033[0m' %(school_obj.ID.get_id_file().NAME,school_obj.ID.get_id_file().ADDR,uname))163 return

164 else:165 teac_to_cour_list=class_main.Teac_to_cour.open_file_list()#打关联列表

166 for k ,obj inenumerate(teac_to_cour_list):167 if str(school_obj.ID)==str(obj.SCHOOL_ID.ID):168 print('\033[35;1m课程编号:%s,关联的讲师:%s\033[0m'%(k,obj))169 coures_name=int(input('请选择讲师与课程'))170 teac_to_cour_obj=teac_to_cour_list[coures_name]171 obj=class_main.Class_leven(school_obj.ID,uname,teac_to_cour_obj.ID)172 obj.save()173 print('\033[33;1m[%s] [%s]校区 [%s]班级 创建成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))174 return

175 exceptException as e:176 return print('选择有误,请重新选择')177

178 #查看班级

179 defshow_classes():180 for obj in class_main.Class_leven.open_file_list():#调用ID类中的方法 学校ID 老师到课程ID

181 print('\033[32;1m[%s] [%s]校区 [%s]班 所开课程:[%s] 讲师:[%s]\033[0m'.center(60,'-')%(obj.SCHOOL_ID.get_id_file().NAME,\182 obj.SCHOOL_ID.get_id_file().ADDR,\183 obj.NAME,\184 obj.TEAC_TO_LSIT_ID.get_id_file().COURSE_NAME,obj.TEAC_TO_LSIT_ID.get_id_file().TEACHER_NAME))185

186 #关联课程

187 defassociated_course():188 try:189 #while True:

190 school_list=class_main.SchoolName.open_file_list()#打开学校列表

191 print('课程关联'.center(60,'='))192 for k,obj inenumerate(school_list):193 print('\033[35;1m学校编号:%s,学校名称:%s,校区:%s\033[0m'%(k,obj,obj.ADDR))194 sch_name=int(input('请选择学校:'))195 school_obj=school_list[sch_name]#用数字选定学校

196 course_list=class_main.Course.open_file_list()#打开课程列表

197 for k,obj inenumerate(course_list):198 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判断学校名是否相同

199 print('\033[35;1m课程编号:%s,课程名称:%s\033[0m'%(k,obj))200 cou_name=int(input('请选择课程:'))201 course_obj=course_list[cou_name]#用数字选定课程

202 teacher_list=class_main.Teacher.open_file_list()#打开讲师列表

203 for k,obj inenumerate(teacher_list):204 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判断学校名是否相同

205 print('\033[35;1m讲师编号:%s,讲师姓名:%s\033[0m'%(k,obj))206 teach_name=int(input('请选择讲师:'))207 teach_obj=teacher_list[teach_name]#用数字选定老师

208 uname_list=[(obj.COURSE_NAME,obj.TEACHER_NAME,obj.SCHOOL_ID.ID) for obj in class_main.Teac_to_cour.open_file_list()]#返回所有关联课程列表

209 if (course_obj.NAME,teach_obj.NAME,school_obj.ID.ID) in uname_list:#查课程名,与学校名是否存

210 print('\033[43;1m[%s] [%s]校区 ,课程[%s]与[%s] 已经关联,不能重复关联\033[0m' %(school_obj.ID.get_id_file().NAME,school_obj.ID.get_id_file().ADDR,course_obj.NAME,teach_obj.NAME))211 return

212 else:213 obj=class_main.Teac_to_cour(course_obj.NAME,teach_obj.NAME,school_obj.ID)214 obj.save()215 print('\033[33;1m[%s] [%s]校区 ,课程[%s]与[%s] 关联成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.COURSE_NAME,obj.TEACHER_NAME))216 return

217 exceptException as e:218 return print('选择有误,请重新选择')219

220 #查看课程关联

221 defshow_teac_to_cour():222 for obj inclass_main.Teac_to_cour.open_file_list():223 print('\033[32;1m[%s] [%s]校区 课程:[%s] 讲师:[%s]\033[0m'.center(60,'=')%(obj.SCHOOL_ID.get_id_file().NAME,\224 obj.SCHOOL_ID.get_id_file().ADDR,\225 obj.COURSE_NAME,obj.TEACHER_NAME))226

227 #学员自动注册

228 defstud_alize():229 print('\033[36;1m学员自助注册\33[0m'.center(60,'='))230 school_list=class_main.SchoolName.open_file_list()#打开学校列表

231 try:232 #while True:

233 print('\033[33;1m提示: B/b 返回上级!\033[0m')234 fon=input('===============其他键确认开始注册:')235 if fon=='b' or fon=='B':236 return

237 for k,obj inenumerate(school_list):238 print('\033[35;1m学校编号:%s,学校名称:%s,校区:%s\033[0m'%(k,obj,obj.ADDR))239 sch_name=int(input('请选择您要注册的学校:'))240 uname_list=[(obj.NUM,obj.PHONE) for obj in class_main.Students.open_file_list()]#返回所有学员的名字,对应的学校,电话号码列表

241 school_obj=school_list[sch_name]#用数字选定学校

242 unum=int(input('请输入您要的学号:').strip())243 if (unum)in uname_list:#查学号是否存

244 print('\033[43;1m学号[%s] 已经存在,不能重复创建\033[0m' %(unum))245 return

246 uname=input('请输入注册名字:').strip()247 upwd=input('请输入登陆密码:').strip()248 uphone=input('请输入电话号码:').strip()249 uage=input('请输入年龄:').strip()250 usex=input('请输入性别:').strip()251 if (uphone) in uname_list:#查电话是否存

252 print('\033[43;1m学员[%s] 电话号码已经存在,不能重复创建\033[0m' %(uname))253 return

254 else:255 class_list=class_main.Class_leven.open_file_list()#打开班级

256 for k,obj inenumerate(class_list):257 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判断学校名是否相同

258 print('\033[35;1m班级编号:%s, [%s]\033[0m'%(k,obj))259 uclass_name=int(input('请选择班级:'))260 class_name_obj=class_list[uclass_name]#261 obj=class_main.Students(unum,uname,upwd,uage,usex,school_obj.ID,class_name_obj.ID,uphone)262 obj.save()263 print('\033[33;1m[%s] [%s]校区 学员[%s] 注册成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))264 return

265 exceptException as e:266 return print('输入有误,请重新选择')267

268

269 #创建学员

270 defcar_students():271 print('\033[36;1m创建学员\33[0m'.center(60,'='))272 school_list=class_main.SchoolName.open_file_list()#打开学校列表

273 try:274 #while True:

275 print('\033[33;1m提示: B/b 返回上级!\033[0m')276 fon=input('===============其他键确认开始创建学员:')277 if fon=='b' or fon=='B':278 return

279 for k,obj inenumerate(school_list):280 print('\033[35;1m学校编号:%s,学校名称:%s,校区:%s\033[0m'%(k,obj,obj.ADDR))281 sch_name=int(input('请选择学校:'))282 uname_list=[(obj.NUM,obj.PHONE) for obj in class_main.Students.open_file_list()]#返回所有学员的名字,对应的学校,电话号码列表

283 school_obj=school_list[sch_name]#用数字选定学校

284 unum=int(input('请输入要创建学员学号:').strip())285 if (unum)in uname_list:#查学号是否存

286 print('\033[43;1m学号[%s] 已经存在,不能重复创建\033[0m' %(unum))287 return

288 uname=input('请输入要创建学员名字:').strip()289 upwd=input('请输入学员登陆密码:').strip()290 uphone=input('请输入电话号码:').strip()291 uage=input('请输入年龄:').strip()292 usex=input('请输入性别:').strip()293 if (uphone) in uname_list:#查电话是否存

294 print('\033[43;1m学员[%s] 电话号码已经存在,不能重复创建\033[0m' %(uname))295 return

296 else:297 class_list=class_main.Class_leven.open_file_list()#打开班级

298 for k,obj inenumerate(class_list):299 if str(obj.SCHOOL_ID.ID)==str(school_obj.ID):#判断学校名是否相同

300 print('\033[35;1m班级编号:%s, [%s]\033[0m'%(k,obj))301 uclass_name=int(input('请选择班级:'))302 class_name_obj=class_list[uclass_name]#303 obj=class_main.Students(unum,uname,upwd,uage,usex,school_obj.ID,class_name_obj.ID,uphone)304 obj.save()305 print('\033[33;1m[%s] [%s]校区 学员[%s] 创建成功\033[0m' %(obj.SCHOOL_ID.get_id_file().NAME,obj.SCHOOL_ID.get_id_file().ADDR,obj.NAME))306 return

307 exceptException as e:308 return print('输入有误,请重新选择')309

310 #查看学员

311 defshow_students():312 for obj inclass_main.Students.open_file_list():313 print('\033[32;1m[%s] [%s]校区 学员编号:[%s] 学员姓名:[%s] 年龄:[%s] 性别:[%s] 电话:[%s] 所在班级:[%s]\033[0m'.center(60,'=')%(obj.SCHOOL_ID.get_id_file().NAME,\314 obj.SCHOOL_ID.get_id_file().ADDR,obj.NUM,\315 obj.NAME,obj.AGE,obj.SEX,obj.PHONE,obj.CLASS_ID.get_id_file().NAME))316

317

318

319 #学员个人信息查看

320

321 defshow_info(obj):322 info='''\033[34;1m323 学号:{NUM}\t\t\t姓名:{NAME}\t\t\t年龄:{AGE}\t\t\t性别:{SEX}\t\t\t电话:{PHONE}324

325 学校:{SCHOOL}\t\t\t校区:{SCHOOL_}\t\t\t班级:{CLASS}\t\t\t学费:{FEES}\t\t\t分数:{SCORE}326

327 \033[0m'''.format(NUM=str(obj.NUM),NAME=obj.NAME,AGE=obj.AGE,SEX=obj.SEX,PHONE=obj.PHONE,\328 SCHOOL=obj.SCHOOL_ID.get_id_file().NAME,SCHOOL_=obj.SCHOOL_ID.get_id_file().ADDR,\329 CLASS=obj.CLASS_ID.get_id_file().NAME,FEES=str(obj.FEES),SCORE=obj.SCORE.score_dict)330

331 print(info)332

333 #讲师个人信息查看

334

335 defshow_teach_info(obj):336 info='''\033[34;1m337 姓名:{NAME}\t\t\t年龄:{AGE}\t\t\t性别:{SEX}\t\t\t338

339 学校:{SCHOOL}\t\t\t校区:{SCHOOL_}\t\t\t级别:{LEVE}\t\t\t收入:{amount}340

341 \033[0m'''.format(NAME=obj.NAME,AGE=obj.AGE,SEX=obj.SEX,\342 SCHOOL=obj.SCHOOL_ID.get_id_file().NAME,SCHOOL_=obj.SCHOOL_ID.get_id_file().ADDR,\343 LEVE=obj.LEVE,amount=str(obj.amount))344

345 print(info)346

347 #讲师操作相关函数

348 defteacher_char_l(obj_teach):349 class_teach_list=[]#讲师的班级列表

350 for obj in class_main.Class_leven.open_file_list():#打开班级列表

351 if obj_teach.NAME==obj.TEAC_TO_LSIT_ID.get_id_file().TEACHER_NAME:#查询对应的课程老师

352 class_teach_list.append(obj)#加入列表

353 return class_teach_list#讲师的班级列表

354

355 #讲师操作相关函数查看学生

356 defteacher_char_class(class_teach_list):357 whileTrue:358 for k,obj inenumerate(class_teach_list):359 print('\033[32;1m班级编号:%s 班级名称:[%s]\033[0m'%(k,obj))360 try:361 sart_class=int(input('请选择您要查看的学员班级编号:'))362 sart_class_obj=class_teach_list[sart_class]#用数字选定班级

363 for obj in class_main.Students.open_file_list():#查看学生

364 if str(obj.CLASS_ID.get_id_file().NAME)==str(sart_class_obj.NAME):#查看对应班级

365 print('\033[34;1m学号:[%s] 姓名:[%s]\033[0m'%(obj.NUM,obj.NAME))366 return

367 exceptException as e:368 print('选择有误,请重新选择')369 else:370 print('\033[31;1m对不起,您还没有分配班级与课程,请与校方联系!\033[0m')371

372

373 #讲师操作相关函数学员成绩

374 defteacher_char_class_students(class_teach_list):375 whileTrue:376 for k,obj inenumerate(class_teach_list):377 print('\033[32;1m班级编号:%s 班级名称:[%s]\033[0m'%(k,obj))378 try:379 sart_class=int(input('请选择您要查看的学员班级编号:'))380 sart_class_obj=class_teach_list[sart_class]#用数字选定班级

381 students_list=[]382 for obj in class_main.Students.open_file_list():#查看学习

383 if str(obj.CLASS_ID.get_id_file().NAME)==str(sart_class_obj.NAME):#查看对应班级

384 #print('\033[34;1m学号:[%s] 姓名:[%s]\033[0m'%(obj.NUM,obj.NAME))

385 students_list.append(obj)#返回当前班级学员列表

386 returnstudents_list387 exceptException as e:388 print('选择有误,请重新选择')389 else:390 print('\033[31;1m对不起,您还没有分配班级与课程,请与校方联系!\033[0m')391

392

393 #获取学生上课课程函数

394 defstudnts_class(class_name):395 for obj in class_main.Course.open_file_list():#返回所有课程的名字

396 if class_name==str(obj.NAME):397 returnobj398

399

400 #交学费

401 defjxf(file_dir,user):402 obj=pickle.load(open(file_dir,'rb'))403 money=input('请输入学费金额:')404 if money.isdigit():#是否为整数

405 obj.FEES=obj.FEES+int(money)406 obj.save()#进行保存

407 print("交费成功,金额:\033[32;1m%s\033[0m"%money)408 file_dir=os.path.join(config.SCHOOL_DIR,str(obj.SCHOOL_ID.get_id_file().ID))##拼接文件路径

409 school_obj=pickle.load(open(file_dir,'rb'))#反序列化,追加到文件

410 school_obj.amount+=int(money)411 school_obj.save()#进行保存

412 info_str='%s 学员进行交费,金额:[%s]'%(user,money)413 log_file.user_opert(info_str)414 else:415 print('请正确输入整数!')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值