写一个代码。代码要能提供以下几个基本功能。 (1)考勤数据是由多条数据记录构成,其信息包括:学号(唯一)、姓名、班级、考勤日期(由月和日组成)等等。 (2)数据保存形式:所有信息要以文本或二进制文件保存。 (3)需要实现的功能 a 新增学生信息数据(避免重复记录,若在,不可再增加)。 b 查找数据(可按学号、姓名、考勤日期等查找)。 c 修改学生记录(可以先查找,再修改)。 d 删除学生记录(请参考上面修改的处理)。 e 显示学生考勤数据列表(可显示部分或全部)。 f 排序(可按学号、姓名、考勤日期等排序)。 g 数据统计(对考勤数据统计分析,统计完成后,可以通过考勤系统中得出考勤明细表,考勤日报表、考勤汇总表、考勤异常表,请假汇总表等)。 h 保存数据到文件中并从文件中读入数据。 (4)界面功能要求: 1) 采用友好的界面,实现一个功能控制菜单。 2) 每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。 备注: (1)数据完整性保证。例如:学号和姓名必须严格、规范。 (2)要求报表格式灵活、形式多样、内容清楚,具体请学生自己构思、设计。 (3)考勤符号:出 勤√ 旷 课 X 事 假 △ 病 假 ○ 迟 到 + 早 退 – (4)考勤时间段不少于十条。
时间: 2023-11-27 12:49:28 浏览: 48
由于这是一个较为复杂的项目,我将提供一份 Python 代码的框架,以便您进行参考和修改。请注意,这只是一个示例代码,具体实现可能因需求而异,您可以根据自己的需要进行修改和完善。
```python
import pickle # 用于序列化数据
class Student:
def __init__(self, id, name, cls):
self.id = id
self.name = name
self.cls = cls
self.attendance = {} # 考勤记录以字典形式保存
def add_attendance(self, date, status):
self.attendance[date] = status
def get_attendance(self):
return self.attendance
class AttendanceSystem:
def __init__(self):
self.students = []
self.file_name = "data.pkl" # 数据保存文件名
def add_student(self, id, name, cls):
# 判断学生是否已存在
for s in self.students:
if s.id == id:
print("该学生已存在!")
return False
# 添加新学生
self.students.append(Student(id, name, cls))
return True
def search(self, keyword):
result = []
for s in self.students:
if keyword in s.id or keyword in s.name:
result.append(s)
return result
def modify(self, id, date, status):
for s in self.students:
if s.id == id:
s.add_attendance(date, status)
return True
print("未找到该学生!")
return False
def delete(self, id):
for s in self.students:
if s.id == id:
self.students.remove(s)
return True
print("未找到该学生!")
return False
def sort(self, key):
self.students.sort(key=lambda s: getattr(s, key))
return self.students
def save(self):
with open(self.file_name, "wb") as f:
pickle.dump(self.students, f)
def load(self):
try:
with open(self.file_name, "rb") as f:
self.students = pickle.load(f)
except FileNotFoundError:
print("未找到数据文件!")
# 界面代码可以使用 PyQT、Tkinter 等工具包进行实现
# 这里只提供一个命令行界面的示例
def main():
system = AttendanceSystem()
while True:
print("请选择操作:")
print("1. 新增学生信息")
print("2. 查找学生信息")
print("3. 修改学生考勤记录")
print("4. 删除学生信息")
print("5. 显示学生考勤数据列表")
print("6. 排序")
print("7. 数据统计")
print("8. 保存数据")
print("9. 读取数据")
print("0. 退出程序")
choice = input("请输入操作编号:")
if choice == "1":
id = input("请输入学号:")
name = input("请输入姓名:")
cls = input("请输入班级:")
if system.add_student(id, name, cls):
print("添加成功!")
else:
print("添加失败!")
elif choice == "2":
keyword = input("请输入关键字:")
result = system.search(keyword)
if len(result) == 0:
print("未找到匹配的学生信息!")
else:
for s in result:
print("学号:{},姓名:{},班级:{}".format(s.id, s.name, s.cls))
elif choice == "3":
id = input("请输入学号:")
date = input("请输入考勤日期:")
status = input("请输入考勤状态:")
if system.modify(id, date, status):
print("修改成功!")
else:
print("修改失败!")
elif choice == "4":
id = input("请输入学号:")
if system.delete(id):
print("删除成功!")
else:
print("删除失败!")
elif choice == "5":
for s in system.students:
print("学号:{},姓名:{},班级:{}".format(s.id, s.name, s.cls))
attendance = s.get_attendance()
for date, status in attendance.items():
print("日期:{},状态:{}".format(date, status))
elif choice == "6":
key = input("请输入排序关键字(id、name、cls):")
result = system.sort(key)
for s in result:
print("学号:{},姓名:{},班级:{}".format(s.id, s.name, s.cls))
elif choice == "7":
# 数据统计代码
pass
elif choice == "8":
system.save()
print("数据保存成功!")
elif choice == "9":
system.load()
print("数据读取成功!")
elif choice == "0":
break
else:
print("无效的操作!")
if __name__ == "__main__":
main()
```
请注意,在这个示例代码中,数据存储方式是使用 pickle 序列化数据并保存到二进制文件中。如果您需要使用其他的存储方式(例如文本文件、数据库等),请根据自己的需要进行修改。