学生选课系统python实现_Python之路day08-面向对象作业_实现学生选课系统

开发环境:

Python3.7

Windows

各文件夹说明:

bin:

start.py    #启动目录

conf:

settings.py  #配置文件,用于保存项目目录、课程、选课、以及用户等文件目录

core:       #主要代码块

main.py    #主程序目录

authentication.py   #登录认证

student.py    #学生类

manager.py     #管理员类

course.py     #课程类和公共类

db:#数据存储

course    #课程数据,存储类型为pickle

select_course   #学生已选课程信息,存储类型为pickle

user      #用户表,明文存储

bin 目录下:

start.py

conf 目录下:

#!/usr/bin/python#-*- coding:utf-8 -*-#Author :wangliujun

importos

path= r'E:\老男孩Python\Class_27\Class_27\CourseSelectionSystem' #项目目录

course_file= os.path.join(path, 'db\course') #存储课程

user_file = os.path.join(path, r'db\user') #存储用户

select_course = os.path.join(path, 'db\select_course') #已选课程

settings.py

core 目录下:

1 #!/usr/bin/python

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

3 #Author :wangliujun

4

5 importsys6 from core importauthentication as au7 from core importmanager as ma8 from core importstudent as stu9

10

11 defmain():12 ret =au.login()13 ifret:14 whileTrue:15 usr, role = ret[0], ret[2]16 if role == 'Student':17 cls =getattr(stu, role)18 elif role == 'Manager':19 cls =getattr(ma, role)20 obj =cls.init(usr)21 print('-' * 40)22 for index, i in enumerate(cls.menu_list, 1): #遍历列表中菜单

23 print(index, i[0])24 print('-' * 40)25 choice = int(input('请选择序号:').strip())26 func = obj.menu_list[choice - 1][1] #取出选择序号对应的方法名,字符串类型

27 getattr(obj, func)() #执行对象中的方法

28 #cls = getattr(sys.modules[__name__], role)

29 #obj = cls.init(usr)

30 #print('-' * 40)

31 #for index, i in enumerate(cls.menu_list, 1): # 遍历列表中菜单

32 #print(index, i[0])

33 #print('-' * 40)

34 #choice = int(input('请选择序号:').strip())

35 #func = obj.menu_list[choice - 1][1] # 取出选择序号对应的方法名,字符串类型

36 #getattr(obj, func)() # 执行对象中的方法

main.py

1 #!/usr/bin/python

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

3 #Author :wangliujun

4

5 importos6 importsys7 from conf importsettings as cof8

9

10 deflogin():11 input_usr = input('请输入用户名:').strip()12 input_pwd = input('请输入密码:').strip()13 with open(cof.user_file, mode='r', encoding='utf-8') as f:14 for line inf:15 ifline:16 usr, pwd, role = line.strip().split('|')17 if usr == input_usr and pwd ==input_pwd:18 print('%s登录成功,欢迎您%s' %(role, usr))19 returnusr, pwd, role20 else:21 print('账号密码错误')22 return None

authentication.py

1 #!/usr/bin/python

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

3 #Author :wangliujun

4

5 importpickle6 from conf importsettings as cof7 from core importcourse as co8

9 class Course(): #课程类

10 def __init__(self, name, price, cycle, teacher):11 self.name =name12 self.price =price13 self.cycle =cycle14 self.teacher =teacher15

16

17 class Public(object): #公共类

18 def show_courses(self): #查看所有课程

19 with open(cof.course_file, mode='rb') as f:20 print('序号:\t课程名\t课程价格\t课程周期\t老师')21 n = 1

22 whileTrue:23 try:24 course =pickle.load(f)25 tplt = '{0:<3}{1:<15}{2:<10}{3:<10}{4:<10}'

26 print(tplt.format(n, course.name, course.price, course.cycle, course.teacher))27 n += 1

28 exceptEOFError:29 break

30

31 def exit(self): #退出

32 exit('bye')

course.py

1 #!/usr/bin/python

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

3 #Author :wangliujun

4

5 importsys6 importpickle7 from core importstudent as stu8 from core importcourse as co9 from conf importsettings as cof10

11

12 class Manager(co.Public): #管理员

13 menu_list =[14 ('创建课程', 'create_course'),15 ('查看所有课程', 'show_courses'),16 ('创建学生账号', 'create_stu'),17 ('查看所有学生', 'show_students'),18 ('查看所有选课情况', 'show_sit'),19 ('退出程序', 'exit')] #管理员菜单

20

21 def __init__(self, name):22 self.name =name23

24 @classmethod25 definit(cls, username):26 return cls(username) #返回实例化对象

27

28 defcreate_course(self):29 name = input('课程名:')30 price = input('课程价格:')31 cycle = input('课程周期:')32 teacher = input('老师:')33 course = co.Course(name, price, cycle, teacher) #创建新的课程对象

34 with open(cof.course_file, 'ab') as f:35 pickle.dump(course, f)36 print('课程创建成功') #创建课程

37

38 def create_stu(self): #创建学生账号

39 user = input('请输入学生用户名:').strip()40 pwd = input('请输入密码:').strip()41 cof_pwd = input('确认密码:').strip()42 if pwd == cof_pwd and user andpwd:43 with open(cof.user_file, 'a', encoding='utf-8') as f:44 f.write('\n%s|%s|%s' % (user, pwd, 'Student'))45 print('用户%s创建成功' %user)46 stu_obj =stu.Student(user)47 with open(cof.select_course, mode='ab') as f:48 pickle.dump(stu_obj, f)49 else:50 print('帐号密码格式不符合')51

52 def show_students(self): #查看所有学生

53 with open(cof.select_course, mode='rb') as f:54 n = 1

55 whileTrue:56 try:57 obj =pickle.load(f)58 print('%s %s' %(n, obj.name))59 n += 1

60 exceptEOFError:61 print('-' * 50)62 break

63

64 def show_sit(self): #查看所有选课情况

65 with open(cof.select_course, 'rb') as f:66 n = 1

67 whileTrue:68 try:69 stu_obj =pickle.load(f)70 print('%s 用户:%s\t' % (n, stu_obj.name), end='所选课程:')71 for i in stu_obj.course_list: print(i.name, end=' ')72 n += 1

73 print()74 exceptEOFError:75 break

manager.py

1 #!/usr/bin/python

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

3 #Author :wangliujun

4 importpickle5 importos6 from conf importsettings as cof7 from core importcourse as co8

9 class Student(co.Public): #学生类

10 #存储学生菜单

11 menu_list =[12 ('查看可选课程', 'opt_course'),13 ('选择课程', 'select_course'),14 ('查看所选课程', 'show_selected_course'),15 ('退出', 'exit')16 ]17

18 def __init__(self, name):19 self.name =name20 self.course_list =[]21

22 @classmethod23 definit(cls,username):24 with open(cof.select_course, mode='rb') as f:25 whileTrue:26 try:27 stu_obj =pickle.load(f)28 if stu_obj.name ==username:29 returnstu_obj30 exceptEOFError:31 break

32

33 def opt_course(self): #查看可选课程

34 co.Public.show_courses(self)35

36 def select_course(self): #选择课程

37 co.Public.show_courses(self)38 choice = int(input('请输入要选择的序号:').strip())39 n = 1

40 with open(cof.course_file, 'rb') as f:41 whileTrue:42 try:43 obj =pickle.load(f)44 if choice ==n:45 self.course_list.append(obj)46 print('用户%s,添加课程%s成功' %(self.name, obj.name))47 break

48 n += 1

49 exceptEOFError:50 print('没有要选的课程')51 tmp = os.path.dirname(cof.select_course) + '/tmp'

52 with open(cof.select_course, mode='rb') as f1, open(tmp, mode='wb') as f2:53 #with open(select_course, mode='rb'):

54 whileTrue:55 try:56 obj =pickle.load(f1)57 if obj.name ==self.name:58 obj =self59 pickle.dump(obj, f2)60 exceptEOFError:61 break

62 os.remove(cof.select_course)63 os.rename(tmp, cof.select_course)64

65 def show_selected_course(self): #查看已选课程

66 with open(cof.select_course, 'rb') as f:67 whileTrue:68 try:69 obj =pickle.load(f)70 if self.name ==obj.name:71 for i inobj.course_list:72 print(i.name)73 exceptEOFError:74 break

student.py

db 目录下:

存储格式: 用户名|密码|角色 例: alex|alex3714|Manager

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值