用Python实现学生管理系统:面向过程 VS 面向对象

学生管理系统1.0: 面向过程

系统功能:

------- 欢迎使用学生管理系统V1.0 -------
【1】添加学生信息
【2】删除学生信息
【3】修改学生信息
【4】查询学生信息
【5】遍历所有学生信息
【6】持久化保存学生信息
【7】退出系统
-------------------------------------------

功能概述:

需求:进入系统显示系统功能界面

功能如下:

        添加学员信息 

        删除学员信息 

        修改学员信息 

        查询学员信息 

        遍历所有学员信息

        保存数据到文件

        退出系统

        系统共6个功能,用户根据自己需求选取

代码如下:

     

# 1. 定义一个全局变量 => students,专门用于保存学生信息 => 结构如下 => [{}, {}, {}]
students = []
# 2. 定义一个add_student()函数,用于向students列表中添加学生信息
# 注意:每个学生信息就是一个字典
def add_student():
    # 接收用户输入
    name = input('请输入要添加学生的姓名:')
    age = int(input('请输入要添加学生的年龄:'))
    mobile = input('请输入要添加学生的电话:')
    # 定义一个空字典
    student = {}
    # 向字典中添加数据 => key:value键值对
    student['name'] = name
    student['age'] = age
    student['mobile'] = mobile
    # 声明全局变量
    global students
    students.append(student)  # 把字典追加到列表中 => [{学生信息}]
    print(students)
    print('恭喜您,信息已录入成功!')

# 3. 定义一个del_student()方法,用于实现删除学生的信息
def del_student():
    # 接收用户要删除学生的姓名
    name = input('请输入要删除学生的姓名:')
    # 声明全局变量
    global students
    # 对students进行遍历操作
    for i in students:  # [{}, {}, {}]
        # 判断哪个学生的姓名与要删除学生的姓名一致
        if i['name']  == name:
            students.remove(i)
            print(students)
            print('恭喜您,信息删除成功')
            break
    # 如果循环结束,还未执行break关键字,则显示很抱歉,您要删除的学生暂不存在
    else:
        print('很抱歉,您要删除的学生暂不存在!')

# 4. 定义一个edit_student()方法,用于实现修改学生信息
def edit_student():
    # 接收外部用户的输入,输入要修改学生的姓名
    name = input('请输入您要修改学生的姓名:')
    # 声明全局变量
    global students
    # 对students进行遍历操作,获取要修改学生信息
    for i in students:
        if i['name'] == name:
            i['age'] = int(input('请输入修改后的学生年龄:'))
            i['mobile'] = input('请输入修改后的学生电话:')
            print(students)
            print('恭喜您,信息已更新成功')
            break
    else:
        print('很抱歉,您要修改的学生信息暂不存在!')

# 5. 定义一个find_student()方法,用于查找学生信息
def find_student():
    # 接收要查询学生的姓名
    name = input('请输入要查询学生的姓名:')
    # 声明全局变量
    global stduents
    # 对列表进行遍历操作  =>  [{}, {}, {}]
    for i in students:
        # 判断是否有要查询的学生,如果有显示其信息
        if i['name'] == name:
            print(i)
            break
    # 如果循环结束,还未找到与之对应的学生,则弹出提示,很抱歉,您要查找的学生暂不存在!
    else:
        print('很抱歉,您要查找的学生信息暂不存在!')

# 6. 定义一个show_students()方法,用于展示所有学生信息
def show_students():
    # 声明全局变量
    global students
    # 对列表进行遍历操作
    for i in students:  # [{}, {}, {}]
        print(f'姓名:{i["name"]},年龄:{i["age"]},电话:{i["mobile"]}')

# 7. 定义一个save_data_to_file()方法,用于保存students中的数据到文件 => 持久化存储
def save_data_to_file():
    # 打开文件
    f = open('students.txt', 'w', encoding='utf-8')
    # 读写文件
    f.write(str(students))  # list => str
    # 关闭文件
    f.close()
    print('恭喜您,信息已保存成功!')

def menu():
    print('------- 欢迎使用传智教育学生管理系统V1.0 -------')
    print('【1】添加学生信息')
    print('【2】删除学生信息')
    print('【3】修改学生信息')
    print('【4】查询学生信息')
    print('【5】遍历所有学生信息')
    print('【6】持久化保存学生信息')
    print('【7】退出系统')
    print('-------------------------------------------')

# 8. 定义一个load_data_from_file()
def load_data_from_file():
    try:
        f = open('students.txt', 'r', encoding='utf-8')
    except:
        f = open('students.txt', 'w', encoding='utf-8')
    else:
        content = f.read()
        global students
        students = eval(content)
    finally:
        f.close()


load_data_from_file()

# 定义一个while True死循环,让程序代码一直执行下去
while True:
    menu()
    # 定义一个input输入语句,接收用户要实现的功能编号
    user_num = int(input('请输入您要执行的功能编号:'))
    # 使用if...elif...else结构实现程序判断
    if user_num == 1:
        add_student()
    elif user_num == 2:
        del_student()
    elif user_num == 3:
        edit_student()
    elif user_num == 4:
        find_student()
    elif user_num == 5:
        show_students()
    elif user_num == 6:
        save_data_to_file()
    elif user_num == 7:
        print('退出系统成功,感谢您使用传智教育学生管理系统V1.0!')
        break
    else:
        print('很抱歉,您输入的功能编号有误,请重新输入!')

学生管理系统2.0: 面向对象

 系统功能:

*************************
欢迎来到学生管理系统V2.0
	1.添加学生
	2.修改学生
	3.删除学生
	4.查询单个学生
	5.查询所有学生
	6.保存信息
	0.退出系统
*************************

功能概述:

需求:进入系统显示系统功能界面

功能如下:

                a.可以显示基本的版本信息和操作界面;

                b.可以通过键盘输入信息来完成基本功能,例如选择序号、确认退出、添加学生、修改等;

                c.学生属性信息有姓名、性别、年龄、联系方式、描述信息等;

                d.使用系统可对学生信息进行添加、修改、删除、查询等操作;

                e.可以使用文件对学生信息进行加载、保存等;

                f.可重复对学生进行增删查改操作,当确认退出系统后,则直接退出系统;

                g.请使用面向对象的编程思想完成项目的升级处理。

角色分析:

        角色:学生管理系统  和 学员 2个类

                  由于学生管理系统操作对象为学员,为方便后期扩展,我们把学员封装为一个角色。

        注意事项: ① 为了方便维护代码,一般一个角色一个程序文件

                        ② 项目也要有主程序入口

代码如下:

程序入口:
# 程序的主入口
# 1.导包
from dm02_studentcms import StudentCMS
# 2.定义main函数,执行学生管理系统
if __name__ == '__main__':
    stu_cms = StudentCMS()
    stu_cms.start()
学生类:
# 学生类文件
# 1.定义学生类,属性为(姓名,年龄,性别,手机,描述信息)
class Student:
    def __init__(self,name,age,gender,phone,desc):
        """
        初始化学生信息
        :param name: 学生姓名
        :param age: 学生年龄
        :param gender: 学生性别
        :param phone: 学生手机
        :param desc: 学生描述信息
        """
        self.name = name
        self.age = age
        self.gender = gender
        self.phone = phone
        self.desc = desc
     #2.写__str__,打印属性内容
    def __str__(self):
        return f'name:{self.name},age:{self.age},gender:{self.gender},phone:{self.phone},desc:{self.desc}'

# __name__属性:在当前文件中打印的值是:__main__ ,在调用者中,打印的内容是:当前模块名
# 3.只在当前文件测试内容,另一个文件不打印内容,
if __name__ =='__main__':
    s1 = Student('乔峰',23,'男','111','喝酒 交朋友')
    print(s1)

    # 将学生对象转为字典形式
    stu_dict = s1.__dict__
    print(stu_dict)
    print(type(stu_dict))
学生管理系统类:
# 学生管理类

# 1.导包
from dm01_student import Student
import time

# 2 定义学生管理类,操作学生
class StudentCMS(object):
    # 初始化属性
    def __init__(self):
        # 采用列表嵌套字典的方式,存储学生数据
        self.student_list = []

    # 4定义函数,打印操作界面
    # 细节:该函数不属于某个对象,而是共享,定义为:静态方式
    @staticmethod
    def show_operator_view():
        print('*'*25)
        print('欢迎来到学生管理系统V2.0')
        print('\t1.添加学生')
        print('\t2.修改学生')
        print('\t3.删除学生')
        print('\t4.查询单个学生')
        print('\t5.查询所有学生')
        print('\t6.保存信息')
        print('\t0.退出系统')
        print('*' * 25)

# 6.退出系统 让用户二次确认
    def exit_system(self):
        # 询问用户是否确认退出系统
        input_str = input('您确认要退出么?(Y/N):')
        # if input_str =='y' or input_str =='Y'
        # if input_str in ['y','Y']
        if input_str.lower() == 'y': # lower():把字母都转为小写
            # break  这里不是循环,不用break
            exit('感谢您的使用,下次再见!')

# 7.添加学生
    def add_student(self):
        # 7.1 提示用户录入信息
        name = input('请输入添加学生的姓名:')
        age = eval(input('请输入添加学生的年龄:'))
        gender = input('请输入添加学生的性别:')
        phone = input('请输入添加学生的手机:')
        desc = input('请输入添加学生的描述信息:')

        # 7.2  封装成学生对象
        stu = Student(name,age,gender,phone,desc)
        # 7.3.添加到学生列表中
        self.student_list.append(stu)
        # 7.4.打印提示信息
        print('添加信息成功')

# 8.显示所有学生信息
    def show_all_student(self):
        # 如果列表有人就打印,否则暂无此人
        if len(self.student_list) > 0:
            for stu in self.student_list:
                print(stu)
        else:
            print('暂无此人,请添加后查询!')

# 9.删除学生
    # 方式一: 删除第一个
    # def delete_student(self):
    #     # 9.1 提示用户删除学生
    #     del_name = input('请输入删除学生的名字:')
    #     # 9.2 遍历学生列表
    #     for stu in self.student_list:
    #         if stu.name == del_name:
    #             self.student_list.remove(stu)
    #             print('删除成功!\n')
    #             break
    #     else:
    #         print('查无此人,请校验后删除!')

    # 方式二:删除全部同名学生
    def delete_student(self):
        # 标记变量思想,True(表示删了),False(没删)
        flag = False
        del_name = input('请输入删除学生的名字:')
        # 定义变量,记录列表中,遍历到的元素的索引
        i = 0
        while i<len(self.student_list):
            # 判断遍历学生,是否与删除学生姓名一致
            stu = self.student_list[i]
            if stu.name == del_name:
                # 如果一致就删除
                self.student_list.remove(stu)
                # 核心细节1:每删除一次,索引就-1
                i -= 1
                # 核心细节2,删除之后,要修改标记变量的状态
                flag = True
            # 无论是否删除,while循环都要+=1
            i += 1
        # 根据标记变量 进行响应提示
        print('删除成功!\n' if flag else '查无此人,请校验后删除!\n')

# 10.修改学生update_student
    def update_student(self):
         # 10.1 提示用户修改学生
        upd_name = input('请输入修改学生的名字:')
        # 10.2 遍历学生列表
        for stu in self.student_list:
            if stu.name == upd_name:
                # 如果一致就修改信息
                stu.age = eval(input('请输入修改学生的年龄:'))
                stu.gender = input('请输入修改学生的性别:')
                stu.phone = input('请输入修改学生的手机:')
                stu.desc = input('请输入修改学生的描述信息:')

                print('修改成功!\n')
                break
        else:
            print('查无此人,请校验后修改!')

# 11.查询单个学生
    def search_one(self):
        # 11.1输入查询的学生名字
        search_name = input('请输入要查询学生姓名:')
        # 11.2 循环学生列表
        for stu in self.student_list:
            # 11.3 一致就打印学生信息
            if stu.name == search_name:
                print(stu)
                break
        else:
            print('查无此人,请校验后查询!')

# 12.保存学生信息到文件 ,格式为 字符串形式的  等于:存档
    def save_data(self):
        # 12.1 获取目的地文件的对象形式
        dest_f = open('./student.data',mode = 'w',encoding='utf-8')
        # 12.2 把学生列表,转为字符串
        data = str([stu.__dict__ for stu in self.student_list])
        # 12.3 把数据写入文件中
        dest_f.write(data)
        # 12.4 关闭对象,释放资源
        dest_f.close()
        print('文件录入成功')

# 13.启动程序的时候,从文件中加载到列表中, 等于:读档
    def load_data(self):
        # 13.1 尝试加载学生数据
        try:
            src_f = open('./student.data',mode = 'r',encoding='utf-8')
            # 13.2 从文件中一次性读取所有数据
            data = src_f.read()

            # 13.3 判读读取到的内容是否为空,如果不为空,
            if len(data) > 0:
                self.student_list = [
                    Student(dict_stu['name'], dict_stu['age'], dict_stu['gender'], dict_stu['phone'], dict_stu['desc'])
                    for dict_stu in eval(data)]

        except:
            # 走到这,说明文件不存在
            src_f = open('./student.data',mode = 'w',encoding='utf-8')



    # 5.定义state 表示具体的流程
    def start(self):

        # 5.1 模拟用户等待
        time.sleep(2)

        # 5.2 调用load_data()函数
        self.load_data()

        # 5.3 死循环
        while True:
            # 5.4打印操作界面
            StudentCMS.show_operator_view()

            # 5.5提示用户录入的操作
            number = input('请录入您要操作的功能编号:')

            # 5.6 根据用户录入的数字,触发相应的功能
            if number == '1':
                # print('1.添加学生')
                self.add_student()
            elif number == '2':
                 # print('2.修改学生')
                self.update_student()
            elif number == '3':
              #  print('3.删除学生')
                self.delete_student()
            elif number == '4':
                # print('4.查询单个学生')
                self.search_one()
            elif number == '5':
                # print('5.查询所有学生')
                self.show_all_student()
            elif number == '6':
                # print('6.保存信息')
                self.save_data()
            elif number == '0':
                # print('0.退出系统')
                # 调用函数exit_system,退出系统
                self.exit_system()
            else:
                print('无该操作,请重新输入!')

                   

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值