【python之路34】面向对象作业之学生选课系统
一、需求:
1、可以注册管理员账号,管理员账号可以创建老师和课程
2、学生可以注册和登陆,学生可以从课程列表选课,可以进行上课登记查看
二、代码
1、文件目录
bin 存放可执行文件
config 存放可配置文件
db 存放数据文件
lib 存放实现类
目录结构如图:
2、admin.py 中的代码
#!usr/bin/env python
# -*- coding:utf-8 -*-
"""admin注册登录,以及用admin账号创建老师和课程"""
import pickle
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
#import time
from config import setting
from lib.models import * #导入所有类 def login():
"""用户登陆"""
username = input("请输入用户名:")
pwd = input('请输入密码:')
if os.path.exists(os.path.join(setting.ADMIN_PATH ,username)):
with open(os.path.join(setting.ADMIN_PATH ,username), 'rb') as f:
admin_obj = pickle.load(f)
if admin_obj.login(username, pwd):
print('登陆成功!')
return admin_obj
else:
print('密码错误!')
else:
print('账号不存在!')
exit()
def regester():
"""用户注册"""
username = input("请输入用户名:")
pwd = input('请输入密码:')
adm = Admin()
adm.regester(username, pwd)
def creat_teacher(admin_obj):
li_teacher = []
while True:
name = input('请输入要创建老师的名字,Q退出:')
if name == "Q":
break
age = input('请输入要创建老师的年龄:')
obj = Teacher(name,age,admin_obj)
li_teacher.append(obj)
if os.path.exists(setting.TEACHER_PATH):
read_teacher = pickle.load(open(setting.TEACHER_PATH,'rb'))
li_teacher.extend(read_teacher)
pickle.dump(li_teacher,open(setting.TEACHER_PATH,'wb'))
#print(li_teacher)
def creat_course(admin_obj):
print('老师信息:')
teacher_list = pickle.load(open(setting.TEACHER_PATH,'rb'))
for num,item in enumerate(teacher_list,1):
print(num, item.name, item.age, item.creat_time, item.admin_obj.username)
course_li = []
while True:
course_name = input('请输入课程名(Q退出):')
if course_name == "Q":
break
cost = input('请输入课时费:')
num = input('请选择老师的序号:')
course_obj = Course(course_name, cost, teacher_list[int(num)-1], admin_obj)
course_li.append(course_obj)
if os.path.exists(setting.COURSE_PATH):
read_course = pickle.load(open(setting.COURSE_PATH,'rb'))
course_li.extend(read_course)
pickle.dump(course_li, open(setting.COURSE_PATH,'wb')) def main():
isregsterOrlogin = input('登陆请按1,注册请按2\n')
if isregsterOrlogin == '':
admin_obj = login() #登陆
creat_teacher(admin_obj) #创建老师,写进文件teacher/teacher
creat_course(admin_obj) #创建课程
elif isregsterOrlogin == '':
regester() #注册 if __name__ == '__main__':
main()
admin
3、student.py 中的代码
#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__))) from config import setting
import pickle
from lib.models import * def login():
username = input('请输入用户名:')
pwd = input('请输入密码:')
if os.path.exists(os.path.join(setting.STUDENT_PATH, username)):
student_obj = pickle.load(open(os.path.join(setting.STUDENT_PATH, username),'rb'))
if student_obj.login(username, pwd):
print('登陆成功!')
return student_obj
else:
print('密码错误')
else:
print('用户名不存在!') def register():
username = input('请输入用户名:')
pwd = input('请输入密码:')
student_obj = Student()
student_obj.register(username, pwd) def choose_course(student_obj):
"""选择课程"""
course_obj_list = pickle.load(open(setting.COURSE_PATH, 'rb'))
for num,item in enumerate(course_obj_list, 1):
print(num, item.course_name, item.cost, item.teacher_obj.name)
while True:
num = input('请选择课程序号(Q退出):')
if num == "Q":
break
if course_obj_list[int(num) - 1] not in student_obj.choose_course_list:
student_obj.choose_course_list.append(course_obj_list[int(num) - 1])
pickle.dump(student_obj, open(os.path.join(setting.STUDENT_PATH, student_obj.username), 'wb')) def show_choose_course(student_obj):
for num,item in enumerate(student_obj.choose_course_list, 1):
print(num, item.course_name, item.cost, item.teacher_obj.name) def attend_course(student_obj):
print('选择的课程有:')
show_choose_course(student_obj)
while True:
num = input('请输入您参加课程的序号(Q退出):')
if num == "Q":
break
student_obj.attend_course_list.append(student_obj.choose_course_list[int(num) - 1])
pickle.dump(student_obj, open(os.path.join(setting.STUDENT_PATH, student_obj.username), 'wb')) def show_attend_course(student_obj):
for num,item in enumerate(student_obj.attend_course_list, 1):
print(num, item.course_name, item.cost, item.teacher_obj.name) def main():
inp = input('登陆请按1,注册请按2\n>>>>:')
if inp == '':
student_obj = login()
temp = input('选课请按1,显示已选课程请按2,上课请按3,显示上课请按4 :')
if temp == '':
choose_course(student_obj)
elif temp == '':
show_choose_course(student_obj)
elif temp == '':
attend_course(student_obj)
elif temp == '':
show_attend_course(student_obj)
elif inp == '':
register() if __name__ == '__main__':
main()
student.py
4、setting.py 中的代码
#!usr/bin/env python
# -*- coding:utf-8 -*- """路径配置, py文件路径变了,或db下目录路径变了,需修改下面的路径"""
import os TEACHER_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)),'db','teacher','teachers')
COURSE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)),'db','course','courses')
ADMIN_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)),'db','admin')
STUDENT_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)),'db','student')
setting.py
5、models.py 中的代码
#!usr/bin/env python
# -*- coding:utf-8 -*- """类""" import time
from config import setting
import os
import pickle class Admin: def __init__(self):
self.username = None
self.psw = None def login(self,username,psw):
"""管理员登陆"""
if self.username == username and self.psw == psw:
return True
else:
return False def regester(self,username , pwd):
"""管理员用户注册"""
self.username = username
self.psw = pwd
with open(os.path.join(setting.ADMIN_PATH,self.username),'wb') as f:
pickle.dump(self,f) class Teacher:
"""老师类"""
def __init__(self, name, age, admin_obj):
self.name = name
self.age = age
self.creat_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.admin_obj = admin_obj class Course:
def __init__(self,course_name,cost,teacher_obj,admin_obj):
self.course_name = course_name
self.cost = cost
self.creat_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.teacher_obj = teacher_obj
self.admin_obj = admin_obj class Student: def __init__(self):
self.username = None
self.psw = None
self.choose_course_list = []
self.attend_course_list = [] def login(self,username,psw):
if self.username == username and self.psw == psw:
return True
else:
return False def register(self, username, psw):
self.username = username
self.psw = psw
with open(os.path.join(setting.STUDENT_PATH, self.username), 'wb') as f:
pickle.dump(self,f)
models.py
【python之路34】面向对象作业之学生选课系统的更多相关文章
- 学生选课系统v1.0
最近两天写了下老师课上留的作业:学生选课系统.感觉自己写的特别麻烦,思路特别不清晰,平常自己总会偷懒,一些太麻烦细节的功能就不去实现了,用简单的功能来替代,直到自己这回写完这个系统(但自己写的比较lo ...
- (转)Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- python基础-10 程序目录结构 学生选课系统面向对象练习
一 程序目录结构 1 bin文件夹 二进制文件.代码程序 2 conf 配置文件 3 帮助文档 4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...
- python 之路,Day27 - 主机管理+堡垒机系统开发
python 之路,Day27 - 主机管理+堡垒机系统开发 本节内容 需求讨论 构架设计 表结构设计 程序开发 1.需求讨论 实现对用户的权限管理,能访问哪些机器,在被访问的机器上有哪些权限 实 ...
- python开发项目:学生选课系统
程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...
- 学生选课系统 c语言
/********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加 ...
- JAVA | 学生选课系统
这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student impor ...
- java web知识点复习,重新编写学生选课系统的先关操作。
为了复习之前学习的相关的html,javaweb等知识.自己有重新编写了一遍学生选课系统. 下面主要展示登录界面的代码,以及各个大的主页面的相关jsp. <%@ page language=&q ...
- 转:Python之路,Day6 - 面向对象学习
这篇文章写的不错,转来收了 转自:http://www.cnblogs.com/alex3714/articles/5188179.html 本节内容: 面向对象编程介绍 为什么要用面向对象进 ...
随机推荐
- 74CMS漏洞打包(从老博客转)
引子 这套CMS是上个月中做的审计,总共找到几个后台漏洞,可后台getshell,一个逻辑漏洞可任意发短信,还有一个前台注入漏洞.不过发到了某平台上之后,审核又要求我提交利用的poc,所以懒得发去了, ...
- Android开发 ShapeDrawable详解
前言 ShapeDrawable一开始我以为它是对应xml文件属性里的shape的画图,后来发现我错了... 其实ShapeDrawable更像是一共自由度更大跟偏向与实现draw()方法的一共图像绘 ...
- Cutting Game
Cutting Game 刚开始有一\(n\times m\)的矩形网格纸,双方轮流操作,剪网格纸,对于任意一个局面而言,你可以选择其中一张网格纸,把它剪成两个长宽都是整数的网格纸,剪出\(1\tim ...
- Android之AbsoluteLayout(绝对布局)
1.属性简介 为了适配不同机型,绝对布局使用很少! android:layout_x="50dp" android:layout_y="100dp"也只有在Ab ...
- JS对象迭代v-for
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- 赛后总结——codeforces round 551 div2
传送门:QAQQAQ 好歹这次比赛打进前1000了...但第一题WA掉也是醉了... 每次比赛刚开始都是太心急,第一题写的特别快,不经过任何检查,结果最近两次比赛都死在了A题上... A题一上来把n, ...
- 04_springmvc注解开发
一.注解开发 需求:1.进入商品查询列表页面. 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询),要修改的商品从数据库查询,根据商品id(主键)查询商品信息. 3.在商品修改页 ...
- C#计算两个时间的时间差,精确到年月日时分秒
喏,计算两个时间的时间差,精确到年月日时分秒 看起来比较笨的方法了,不知道有没有改进 DateTime d1 = new DateTime(2016, 4, 1, 0, 0, 0); DateTime ...
- vue页面刷新数据丢失问题
参考: https://blog.csdn.net/aliven1/article/details/80743470 https://blog.csdn.net/liang37712 ...
- js日期格式化Date
使用Date类进行日期格式化. 1 输入“yyyy-MM-dd hh:mm:ss”格式的String字符串,返回字符串 做一个简单判定,在当日显示为几点几分,同年为月日,不同年显示年月 functio ...