鱼C论坛

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

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

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

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

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

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

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

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

  15. #职员类
  16. #属性:姓名,职务,月薪
  17. #

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


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

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

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

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

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


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

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

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

  95.                 i = 0
  96.                 if workingdays == days:
  97.                     i = 0
  98.                 else:
  99.                     i += 100
  100.                 realwages = (int(wages) + int(i))
  101.                     

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

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

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

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

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

  118.             # 3. 判断用户选择的指定功能,然后完成对应的操作(增删改查的功能)
  119.             if menu_option == "1":
  120.                 print("添加职员信息")
  121.                 self.add_member()
  122.             elif menu_option == "2":
  123.                 print("计算职员工资")
  124.                 self.modify_member()
  125.             elif menu_option == "3":
  126.                 print("删除职员信息")
  127.                 self.delete_member()
  128.             elif menu_option == "4":
  129.                 print("显示职员信息")
  130.                 self.show_all_member()
  131.             elif menu_option == "5":
  132.                 print("程序退出")
  133.                 self.save_file()
  134.                 break

  135. system=memberSystem()

  136. system.start()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-11 20:16:34 | 显示全部楼层
大部分代码是我抄的,一小部分我自己写的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

130行
  1. self.load_file()
复制代码
你告诉我load_file在哪?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不知道,我研究下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

[img][/img]加上了,还是不行的样子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

  15. #职员类
  16. #属性:姓名,职务,月薪
  17. #

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


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

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

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

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

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


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

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

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

  95.                 i = 0
  96.                 if workingdays == days:
  97.                     i = 0
  98.                 else:
  99.                     i += 100
  100.                 realwages = (int(wages) + int(i))
  101.                     

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

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

  109.             

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

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

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

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

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

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

  155.             # 3. 判断用户选择的指定功能,然后完成对应的操作(增删改查的功能)
  156.             if menu_option == "1":
  157.                 print("添加职员信息")
  158.                 self.add_member()
  159.             elif menu_option == "2":
  160.                 print("计算职员工资")
  161.                 self.modify_member()
  162.             elif menu_option == "3":
  163.                 print("删除职员信息")
  164.                 self.delete_member()
  165.             elif menu_option == "4":
  166.                 print("显示职员信息")
  167.                 self.show_all_member()
  168.             elif menu_option == "5":
  169.                 print("程序退出")
  170.                 self.save_file()
  171.                 break

  172. system = memberSystem()

  173. system.start()

  174. print("-----end----")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

186 和 189 行 的 self.modify_member() 和 self.delete_member() 又在哪?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

186的我改过来了,189的有存在的,在76那里。现在可以运行了。但是点击计算工资的时候,计算不出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 07:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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