ARONGLIN 发表于 2020-5-11 20:12:35

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

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

#如何实现系统
#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()

ARONGLIN 发表于 2020-5-11 20:16:34

大部分代码是我抄的,一小部分我自己写的。

永恒的蓝色梦想 发表于 2020-5-11 20:19:02

ARONGLIN 发表于 2020-5-11 20:16
大部分代码是我抄的,一小部分我自己写的。

130行self.load_file()你告诉我load_file在哪?

ARONGLIN 发表于 2020-5-11 23:20:32

永恒的蓝色梦想 发表于 2020-5-11 20:19
130行你告诉我load_file在哪?

{:9_241:}不知道,我研究下

ARONGLIN 发表于 2020-5-11 23:25:19

永恒的蓝色梦想 发表于 2020-5-11 20:19
130行你告诉我load_file在哪?

加上了,还是不行的样子

ARONGLIN 发表于 2020-5-11 23:53:33

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

#如何实现系统
#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=
      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=
            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----")

永恒的蓝色梦想 发表于 2020-5-12 07:48:07

ARONGLIN 发表于 2020-5-11 23:53


186 和 189 行 的 self.modify_member() 和 self.delete_member() 又在哪?

ARONGLIN 发表于 2020-5-13 10:34:34

永恒的蓝色梦想 发表于 2020-5-12 07:48
186 和 189 行 的 self.modify_member() 和 self.delete_member() 又在哪?

186的我改过来了,189的有存在的,在76那里。现在可以运行了。但是点击计算工资的时候,计算不出来
页: [1]
查看完整版本: 有老哥帮我看下这个代码哪里出错了吗