鱼C论坛

 找回密码
 立即注册
查看: 906|回复: 7

有老哥帮我看下这个代码哪里出错了吗

[复制链接]
发表于 2020-5-11 20:12:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import calendar
import os
now_year = 2020
now_month = 4
days = calendar.monthrange (now_year,now_month)[1]
#职员系统
#添加职员,删除

#如何实现系统
#1.显示系统功能
#2.让用户选择功能
#3.判断用户选择的指定功能,然后完成相应的操作

#职员系统
#属性:职员列表属性 保存职员信息
#方法:添加职员 计算职员工资 删除职员 显示职员信息等

#职员类
#属性:姓名,职务,月薪
#

class member(object):
    def __init__(self,name,post,salary):#名字,职务,月薪
        # 添加相关的属性信息
        self.name=name
        self.post=post
        self.salary=salary


class memberSystem(object):
    def __init__(self):
        # 定义一个列表用于保存学生对象
        self.member_list = list()

    # 将功能代码放到指定函数里面
    def show_menu(self):
        '''该函数是为了展示功能界面'''
        # 1. 显示系统的功能菜单
        print("------职员管理系统1.0------")
        print("1.添加职员信息")
        print("2.计算职员工资")
        print("3.删除职员信息")
        print("4.显示所有职员")
        print("5.退出管理系统")

    # 添加职员函数
    # 分析:
    # 1. 职员的信息如何表示?
    # 2. 管理系统里面的职员信息如何表示?
    def add_member(self):
        name = input("请输入职员的姓名:")
        post = input("请输入职员的职务:")
        salary = input("请输入职员的月薪:")
        # 添加一个职员,需要自己创建一个职员对象
        stu=member(name,post,salary)
        # 把对象添加到列表里面
        self.member_list.append(stu)
        # 显示职员信息
        # print(self.member_list)
        print("添加成功")

    # 显示所有职员函数
    def show_all_member(self):
        '''该函数用于显示所有的职员信息'''
        # 注意列表里面储存的是字典
        # 遍历的时候使用enumerate函数可以返回下标
        for index, member in enumerate(self.member_list):
            # 计算学号=下标+1
            member_no = index + 1
            print("工号:", member_no,
                  "姓名:", member.name,
                  "职务:", member.post,
                  "月薪:", member.salary)

    # 删除职员信息
    def delete_member(self):
        """该函数用来删除职员信息"""
        # 1.接收用户输入的工号
        member_no = int(input("请输入要删除职员的工号:"))
        # 2.将学号转换为下标
        index = member_no - 1
        # 判断下表是否合法
        if 0 <= index <= len(self.member_list):
            # 需求删除后把这个人的姓名显示出来,使用pop会把删除的内容返回
            member = self.member_list.pop(index)
            print("%s,删除成功!" % member.name)
        else:
            print("请输入有效工号!")


    # 查询某个职员信息
    def query_member(self):
        """该函数用来查询职员信息"""
        name = input("请输入要查询职员的姓名:")
        day = input("请输入上班天数:")
        restday = input("请输入休息天数:")
        workingdays = day + restday

        for index, member in enumerate(self.member_list):
            member_no = index + 1
            if member.name == name:
                print("工号:", member_no,
                      "职员:", member.name,
                      "职务:", member.post,
                      "月薪:", member.salary)

                onedaysalary = (int(salary) / int(days))#计算一天工资
                wages = (int(onedaysalary) * (int(day)+int(restday)))#计算一个月工资

                i = 0
                if workingdays == days:
                    i = 0
                else:
                    i += 100
                realwages = (int(wages) + int(i))
                    

                print("您的工资是:",int(realwages))

                break
        # 当循环语句没有执行break,表示没有该学生信息执行else里面的语句
        # 当循环执行break语句的时候,说明该学生信息存在,不会执行else里面的语句
        # 注意:当for循环与else一起使用的时候,如果没有执行for循环里面的break则会执行else语句!!!
        else:
            print("对不起,没有该学生")

    # 程序入口函数,程序开始时第一个执行的函数
    def start(self):
        # 当程序运行的时候加载一次文件
        self.load_file()

        while True:
            # 1.显示系统功能菜单
            self.show_menu()

            # 2.接收用户输入的功能选项
            menu_option = input("请输入你要操作的功能选项:")

            # 3. 判断用户选择的指定功能,然后完成对应的操作(增删改查的功能)
            if menu_option == "1":
                print("添加职员信息")
                self.add_member()
            elif menu_option == "2":
                print("计算职员工资")
                self.modify_member()
            elif menu_option == "3":
                print("删除职员信息")
                self.delete_member()
            elif menu_option == "4":
                print("显示职员信息")
                self.show_all_member()
            elif menu_option == "5":
                print("程序退出")
                self.save_file()
                break

system=memberSystem()

system.start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-11 20:16:34 | 显示全部楼层
大部分代码是我抄的,一小部分我自己写的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 20:19:02 | 显示全部楼层
ARONGLIN 发表于 2020-5-11 20:16
大部分代码是我抄的,一小部分我自己写的。

130行
self.load_file()
你告诉我load_file在哪?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 23:20:32 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-11 20:19
130行你告诉我load_file在哪?

不知道,我研究下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 23:25:19 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-11 20:19
130行你告诉我load_file在哪?

[img][/img]加上了,还是不行的样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-11 23:53:33 | 显示全部楼层
import calendar
import os
now_year = 2020
now_month = 4
days = calendar.monthrange (now_year,now_month)[1]
#职员系统
#添加职员,删除

#如何实现系统
#1.显示系统功能
#2.让用户选择功能
#3.判断用户选择的指定功能,然后完成相应的操作

#职员系统
#属性:职员列表属性 保存职员信息
#方法:添加职员 计算职员工资 删除职员 显示职员信息等

#职员类
#属性:姓名,职务,月薪
#

class member(object):
    def __init__(self,name,post,salary):#名字,职务,月薪
        # 添加相关的属性信息
        self.name=name
        self.post=post
        self.salary=salary


class memberSystem(object):
    def __init__(self):
        # 定义一个列表用于保存学生对象
        self.member_list = list()

    # 将功能代码放到指定函数里面
    def show_menu(self):
        '''该函数是为了展示功能界面'''
        # 1. 显示系统的功能菜单
        print("------职员管理系统1.0------")
        print("1.添加职员信息")
        print("2.计算职员工资")
        print("3.删除职员信息")
        print("4.显示所有职员")
        print("5.退出管理系统")

    # 添加职员函数
    # 分析:
    # 1. 职员的信息如何表示?
    # 2. 管理系统里面的职员信息如何表示?
    def add_member(self):
        name = input("请输入职员的姓名:")
        post = input("请输入职员的职务:")
        salary = input("请输入职员的月薪:")
        # 添加一个职员,需要自己创建一个职员对象
        stu=member(name,post,salary)
        # 把对象添加到列表里面
        self.member_list.append(stu)
        # 显示职员信息
        # print(self.member_list)
        print("添加成功")

    # 显示所有职员函数
    def show_all_member(self):
        '''该函数用于显示所有的职员信息'''
        # 注意列表里面储存的是字典
        # 遍历的时候使用enumerate函数可以返回下标
        for index, member in enumerate(self.member_list):
            # 计算学号=下标+1
            member_no = index + 1
            print("工号:", member_no,
                  "姓名:", member.name,
                  "职务:", member.post,
                  "月薪:", member.salary)

    # 删除职员信息
    def delete_member(self):
        """该函数用来删除职员信息"""
        # 1.接收用户输入的工号
        member_no = int(input("请输入要删除职员的工号:"))
        # 2.将学号转换为下标
        index = member_no - 1
        # 判断下表是否合法
        if 0 <= index <= len(self.member_list):
            # 需求删除后把这个人的姓名显示出来,使用pop会把删除的内容返回
            member = self.member_list.pop(index)
            print("%s,删除成功!" % member.name)
        else:
            print("请输入有效工号!")


    # 查询某个职员信息
    def query_member(self):
        """该函数用来查询职员信息"""
        name = input("请输入要查询职员的姓名:")
        day = input("请输入上班天数:")
        restday = input("请输入休息天数:")
        workingdays = day + restday

        for index, member in enumerate(self.member_list):
            member_no = index + 1
            if member.name == name:
                print("工号:", member_no,
                      "职员:", member.name,
                      "职务:", member.post,
                      "月薪:", member.salary)

                onedaysalary = (int(salary) / int(days))#计算一天工资
                wages = (int(onedaysalary) * (int(day)+int(restday)))#计算一个月工资

                i = 0
                if workingdays == days:
                    i = 0
                else:
                    i += 100
                realwages = (int(wages) + int(i))
                    

                print("您的工资是:",int(realwages))

                break
        # 当循环语句没有执行break,表示没有该学生信息执行else里面的语句
        # 当循环执行break语句的时候,说明该学生信息存在,不会执行else里面的语句
        # 注意:当for循环与else一起使用的时候,如果没有执行for循环里面的break则会执行else语句!!!
        else:
            print("对不起,没有该职员")

            

    # 讲列表里面的数据保存到文件里面
    def save_file(self):
        # 1.打开文件 要以w方式打开
        file=open("member_list.data","w",encoding="utf-8")
        #2.把数据写入文件(把列表转换为字符串类型)
        # 把列表里面的每一个对象转换成学生列表里面的字典,把对象的属性信息保存到字典里面
        # stu.__dict__  获取学生的字典信息把对象的属性信息以字典的形式返回
        new_list=[stu.__dict__ for stu in self.member_list]
        student_list_str=str(new_list)
        print(member_list_str,type(member_list_str))
        file.write(member_list_str)
        file.close()

    # 加载文件里面的内容,将文件里面的内容加载到列表里面****

    def load_file(self):
        # 1.判断文件是否存在  返回值类型是布尔类型
        if os.path.exists("member_list.data"):
            # 1.打开文件 r模式
            file=open("member_list.data","r",encoding="utf-8")
            # 2.读取文件里面的数据
            value=file.read()
            # 因为从文件里面读取的是字符串类型,所以需要先转换为列表类型
            # 注意这里将字符串转换为列表需要使用eval()函数,获取字符串包裹的内容
            new_list=eval(value)
            print("从文件里面获取的内容为:",new_list,type(new_list))
            # 把列表里面每一个学生字典信息转换为对象
            # **stu_dict:把字典里面的每一项数据按照关键字传参
            # member(**stu_dict)表示创建一个学生对象
            new_list=[member(**stu_dict) for stu_dict in new_list]
            print(new_list)
            # 3.将文件里面的内容添加到列表里面
    #         方法一:使用global
    #         global student_list
    #         student_list=new_list
    #         方法2:方式,把文件中的列表数据扩展到全局变量里面, 这里不需要加上global,因为列表是可变类型
            self.member_list.extend(new_list)
            file.close()

    # 程序入口函数,程序开始时第一个执行的函数
    def start(self):
        # 当程序运行的时候加载一次文件
        self.load_file()

        while True:
            # 1.显示系统功能菜单
            self.show_menu()

            # 2.接收用户输入的功能选项
            menu_option = input("请输入你要操作的功能选项:")

            # 3. 判断用户选择的指定功能,然后完成对应的操作(增删改查的功能)
            if menu_option == "1":
                print("添加职员信息")
                self.add_member()
            elif menu_option == "2":
                print("计算职员工资")
                self.modify_member()
            elif menu_option == "3":
                print("删除职员信息")
                self.delete_member()
            elif menu_option == "4":
                print("显示职员信息")
                self.show_all_member()
            elif menu_option == "5":
                print("程序退出")
                self.save_file()
                break

system = memberSystem()

system.start()

print("-----end----")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 07:48:07 | 显示全部楼层

186 和 189 行 的 self.modify_member() 和 self.delete_member() 又在哪?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 10:34:34 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-12 07:48
186 和 189 行 的 self.modify_member() 和 self.delete_member() 又在哪?

186的我改过来了,189的有存在的,在76那里。现在可以运行了。但是点击计算工资的时候,计算不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 07:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表