python学生成绩管理系统设计加详细源码——基础

一、实验目的

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,望不喜勿喷。

Guess you like

Origin blog.csdn.net/qq_47122804/article/details/114658833