一、实验目的
1.熟悉Python3.X和Pycharm的运行环境
2.掌握函数、模块和面向对象编程思想。
二、实验环境
计算机及Python3.X和Pycharm软件。
三、实验内容与要求
1、创建4个.py模块,在一个包内,模块命名分别为main.py,ui.py,model.py,bll.py。
2、(1)实现学生管理系统在控制台的输出显示界面如图1所示。
图1 显示界面
(2)在model.py模块中建立学生类,其中包含的属性有name,age,score,id。
(3)在bll.py模块中建立学生管理业务逻辑类,即在此模块中实现增加、显示、删除、修改和成绩排序等功能。
(4)在ui.py模块中建立学生管理显示界面。
(5)在main.py模块中实现建立if name == “main”:
分析:界面使用控制台输出显示
1.识别对象:界面视图类、逻辑控制类、数据模型类
2.分配职责:
界面视图类:负责处理界面逻辑,比如显示菜单,获取输入,显示结果等。
逻辑控制类:负责存储学生信息,处理业务逻辑。比如添加、删除等
数据模型类:定义需要处理的数据类型。比如学生信息。
3.建立交互:
界面视图对象<---->数据模型对象<---->逻辑控制对象
设计:
数据模型类:StudentModel
属性:编号id,姓名 name,年龄 age,成绩 score
逻辑控制类:StudentManagerController
属性:学生列表stu_list
行为:添加学生add_student,删除学生remove_student,修改学生update_student,根据成绩排序order_by_score。
界面视图类:StudentManagerView
属性:逻辑控制对象manager
行为:显示菜单display_menu,选择菜单项select_menu_item
新增内容:
1、对学生的信息放入到文本中操作。
2、在写的程序中,要添加异常处理。例如,成绩输错了没?学号是否具有唯一性?自己去思考。。。。
注:源代码需自行分模块!!!
#main.py
import ui
import model
import os
if __name__=='__main__':
while 1 :
a=ui.UI_CLASS()
a.UI()
a.Select_UI()
p = input('按任意键进行下一步操作')
i = os.system('cls')
pass
#model.py
class StudentModel(object):
def __init__(self,name,age,score,id):
self.name = name
self.age = age
self.score = score
self.id = id
#ui.py
import bll
import sys
class UI_CLASS():
Student_s = []
def __init__(self):
pass
def UI(self):
print('-----------------------')
print('1) 添加学生')
print('2) 显示学生')
print('3) 删除学生')
print('4) 修改学生')
print('5) 按照程序降序排列')
print('-----------------------')
def Select_UI(self):
b = bll.manage_student()
c = int(input("请选择:"))
if c == 1:
b.AppendStudent(self.Student_s)
elif c == 2:
b.PrintStudent(self.Student_s)
elif c == 3:
b.DelStudent(self.Student_s)
elif c == 4:
b.AlterStudent(self.Student_s)
elif c == 5:
b.SortStudent(self.Student_s)
else:
print('结束进程')
sys.exit(0)
#bll.py
import model
class manage_student():
def __init__(self):
pass
@classmethod
def AppendStudent(self, Student_s):
# 名字
name = input('姓名:')
# 获取年龄
def get_age():
age = int(input('年龄(1-140):'))
if age in range(1, 141):
# if age>0 or age<=140:
return age
raise ValueError # 抛出异常(传入无效的参数)
while True:
try:
age = get_age()
# print('用户输入的年龄是:', age)
break
except ValueError: # 接收抛出的异常
print('用户输入的年龄不在1-140之间,获取年龄失败!')
# 获取成绩
def get_score():
score = int(input('成绩(0-100):'))
if score in range(0, 101):
return score
raise ValueError # 抛出异常(传入无效的参数)
while True:
try:
score = get_score()
break
except ValueError: # 接收抛出的异常
print('用户输入的成绩不在0-100之间,获取成绩失败!')
# 获取唯一学号
def get_id():
id = input('请输入唯一学号:')
if len(Student_s) == 0:
return id
else:
for i in range(len(Student_s)):
if id != Student_s[i].id:
return id
else:
raise ValueError # 抛出异常
while True:
try:
id = get_id()
break
except ValueError: # 接收抛出的异常
print('用户输入的学号不唯一,获取学号失败!')
NewStudent = model.StudentModel(name, age, score, id)
Student_s.append(NewStudent)
f = open('test.txt', 'w')
f.write(' 姓名 年龄 分数 学号')
f.write('\n')
for i in range(len(Student_s)):
f.write(str('%d. %s %s %s %s' % (
i + 1, Student_s[i].name, Student_s[i].age, Student_s[i].score, Student_s[i].id)))
f.write('\n')
f.close()
def PrintStudent(self, Student_s):
# print(' 姓名 年龄 分数 学号')
# for i in range(len(Student_s)):
# print('%d. %s %s %s %s' % (i + 1, Student_s[i].name, Student_s[i].age, Student_s[i].score, Student_s[i].id))
f = open('test.txt', 'r')
print(f.read())
f.close()
def DelStudent(self, Student_s):
flag = 0
self.PrintStudent(Student_s)
name = input('请输入要删除的学生名字:')
for i in range(len(Student_s)):
if name == Student_s[i].name:
del Student_s[i]
f = open('test.txt', 'w')
f.write(' 姓名 年龄 分数 学号')
f.write('\n')
for i in range(len(Student_s)):
f.write(str('%d. %s %s %s %s' % (
i + 1, Student_s[i].name, Student_s[i].age, Student_s[i].score, Student_s[i].id)))
f.write('\n')
flag = 1
f.close()
break
if flag == 0:
print('查无此人')
def AlterStudent(self, Student_s):
self.PrintStudent(Student_s)
i = int(input('请选择修改对象(输入前方编号):'))
if i > len(Student_s):
print('错误编号')
else:
i -= 1
print('1.姓名 2.年龄 3.分数 4.学号')
j = int(input('请选择:'))
if j == 1:
Student_s[i].name = input('请输入姓名:')
elif j == 2:
# Student_s[i].age = input('请输入年龄:')
# 修改年龄
def get_age():
age = int(input('请输入年龄(1-140):'))
if age in range(1, 141):
# if age>0 or age<=140:
return age
raise ValueError # 抛出异常(传入无效的参数)
while True:
try:
Student_s[i].age = get_age()
# print('用户输入的年龄是:', age)
break
except ValueError: # 接收抛出的异常
print('用户输入的年龄不在1-140之间,获取年龄失败!')
elif j == 3:
# Student_s[i].score = input('请输入分数:')
# 修改成绩
def get_score():
score = int(input('亲输入分数(0-100):'))
if score in range(0, 101):
return score
raise ValueError # 抛出异常(传入无效的参数)
while True:
try:
Student_s[i].score = get_score()
break
except ValueError: # 接收抛出的异常
print('用户输入的成绩不在0-100之间,获取成绩失败!')
elif j == 4:
Student_s[i].id = input('请输入学号:')
else:
print('输入有误')
f = open('test.txt', 'w')
f.write(' 姓名 年龄 分数 学号')
f.write('\n')
for i in range(len(Student_s)):
f.write(str('%d. %s %s %s %s' % (
i + 1, Student_s[i].name, Student_s[i].age, Student_s[i].score, Student_s[i].id)))
f.write('\n')
f.close()
def SortStudent(self, Student_s):
for i in range(1, len(Student_s)):
for j in range(0, len(Student_s) - i):
if Student_s[j].score < Student_s[j + 1].score:
t=Student_s[j]
Student_s[j] = Student_s[j + 1]
Student_s[j+1]=t
print('排序成功')
f = open('test.txt', 'w')
f.write(' 姓名 年龄 分数 学号')
f.write('\n')
for i in range(len(Student_s)):
f.write(str('%d. %s %s %s %s' % (
i + 1, Student_s[i].name, Student_s[i].age, Student_s[i].score, Student_s[i].id)))
f.write('\n')
f.close()
注:本页源码,为实验报告所编写,有许多优化等问题,欢迎大家指正。另外,第一次编写csdn,望不喜勿喷。