python选课系统作业_Python 大作业4:选课系统

# 作业详细要求见:

# 景女神的blog https://www.cnblogs.com/Eva-J/articles/9235899.html

import pickle

import sys

class User:

def __init__(self, username, password, permission):

self.username = username

self.password = password

self.permission = permission

def view_all_course(self):

with open(COURSE_PATH, mode='rb') as file_handler:

for i in range(1, INF):

try:

ret = pickle.load(file_handler)

print(i, ret.name, ret.cycle, ret.teacher)

except EOFError:

print('-' * 10)

break

@staticmethod

def my_exit():

global Login_user

Login_user = False

REGISTER_PATH = 'register'

COURSE_PATH = 'course'

CHOOSE_PATH = 'choose'

INF = 0x7FFFFFFF

Login_user = User(None, None, None)

class Course:

def __init__(self, name, cycle, teacher):

self.name = name

self.cycle = cycle

self.teacher = teacher

@staticmethod

def Num():

num = 0

with open(COURSE_PATH, mode='rb') as file_handler:

for i in range(INF):

try:

pickle.load(file_handler)

num += 1

except EOFError:

return num

class Student(User):

Ins = [('查看所有课程', 'view_all_course'), ('选择课程', 'choose_course'),

('查看所选课程', 'view_chosen_course'), ('退出程序', 'my_exit')]

def __init__(self, user, password, permission):

super().__init__(user, password, permission)

self.course = []

def choose_course(self):

while True:

self.view_all_course()

choose_course = input('choose ur course (input Q or q to exit). >>>')

if choose_course.isdecimal():

if int(choose_course) > 0 and int(choose_course) <= Course.Num():

with open(COURSE_PATH, mode='rb') as file_handler:

for i in range(int(choose_course)):

ret = pickle.load(file_handler)

self.course.append(ret)

elif choose_course.upper() == 'Q':

with open(CHOOSE_PATH, encoding='utf-8', mode='a') as file_handler:

file_handler.write(self.username)

for c in self.course:

file_handler.write(' ' + c.name)

file_handler.write('\n')

print('Save success.\n' + 10 * '-')

return

else:

print('Illegal input.\n' + 10 * '-')

def view_chosen_course(self):

with open(CHOOSE_PATH, encoding='utf-8', mode='r') as file_handler:

flag = False

for line in file_handler:

if self.username in line:

print(line.strip())

print(10 * '-')

flag = True

if flag == False: print('No course.\n' + 10 * '-')

@staticmethod

def get_student_list():

student_list = []

with open(REGISTER_PATH, mode='rb') as file_handler:

for i in range(INF):

try:

ret = pickle.load(file_handler)

if ret.permission == 'student':

student_list.append(ret)

except EOFError:

return student_list

class Administrator(User):

Ins = [('创建课程', 'new_course'), ('创建学生学生账号', 'new_stu'), ('查看所有课程', 'view_all_course'),

('查看所有学生', 'view_all_stu'), ('查看所有学生选课情况', 'view_course_selection'), ('退出程序', 'my_exit')]

def new_course(self):

course_name = input('new course name. >>>')

course_cycle = input('new course cycle. >>>')

course_teacher = input('new course teacher. >>>')

new_cour = Course(course_name, course_cycle, course_teacher)

with open(COURSE_PATH, mode='ab') as file_handler:

pickle.dump(new_cour, file_handler)

print('-' * 10)

@staticmethod

def new_stu():

new_user('Student')

def view_all_stu(self):

with open(REGISTER_PATH, mode='rb') as file_handler:

for i in range(INF):

try:

ret = pickle.load(file_handler)

if ret.permission == 'Student':

print(i, ret.username)

except EOFError:

print('-' * 10)

break

@staticmethod

def view_course_selection():

with open(CHOOSE_PATH, encoding='utf-8', mode='r') as file_handler:

for line in file_handler:

print(line.strip())

print('-' * 10)

def check_admin():

with open(REGISTER_PATH, mode='rb') as file_handler:

for i in range(INF):

try:

ret = pickle.load(file_handler)

if ret.permission == 'Administrator':

return True

except EOFError:

return False

def new_user(permission):

while True:

flag = True

user_username = input('new student username. >>>')

user_password = input('new student password. >>>')

with open(REGISTER_PATH, mode='rb') as file_handler:

for i in range(INF):

try:

ret = pickle.load(file_handler)

if ret.username == user_username:

print('Username Exist.')

print('-' * 10)

flag = False

except EOFError:

break

if flag == True:

break

if permission == 'Student':

new_u = Student(user_username, user_password, permission)

with open(REGISTER_PATH, mode='ab') as file_handler:

pickle.dump(new_u, file_handler)

print('Create success.')

print('-' * 10)

elif permission == 'Administrator':

new_u = Administrator(user_username, user_password, permission)

with open(REGISTER_PATH, mode='ab') as file_handler:

pickle.dump(new_u, file_handler)

print('Create success.')

print('-' * 10)

else:

return False

def login():

for i in range(3):

username = input('username:')

password = input('password:')

with open(REGISTER_PATH, mode='rb') as file_handler:

for i in range(INF):

try:

ret = pickle.load(file_handler)

if ret.username == username and ret.password == password:

global Login_user

Login_user = ret

print(f'welcome {Login_user.username} Permission: {Login_user.permission}')

print('-' * 10)

return True

except EOFError:

break

print('Incorrect account or password.')

print('-' * 10)

return False

def run():

if check_admin() == False:

print('NO found Administrator, we have to create a new Administrator.')

new_user('Administrator')

if not login():

return

if hasattr(sys.modules['__main__'], Login_user.permission):

if callable(getattr(sys.modules['__main__'], Login_user.permission)):

while Login_user:

for i, choose in enumerate(getattr(sys.modules['__main__'], Login_user.permission).Ins, 1):

print(f'{i}、{choose[0]}')

ins = input('choose ins. >>>')

if hasattr(Login_user, getattr(sys.modules['__main__'], Login_user.permission).Ins[int(ins) - 1][1]):

if callable(getattr(Login_user,

getattr(sys.modules['__main__'], Login_user.permission).Ins[int(ins) - 1][1])):

getattr(Login_user,

getattr(sys.modules['__main__'], Login_user.permission).Ins[int(ins) - 1][1])()

return

if __name__ == '__main__':

run()

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值