医院管理系统searchpatientrec函数if条件匹配失败问题排查
医院管理系统搜索患者记录匹配失败问题解决
问题现象
开发医院管理系统时,searchpatientrec函数接收患者编号后,控制台打印出的存储值rec[0]与输入值p_no显示一致,但if rec[0] == p_no条件始终不触发,最终输出"No Record Found",无法显示患者详情。
核心原因
1. 数据类型不匹配
在insertpatientrec函数中,患者编号p_no被转为整数类型存储:
p_no = int(input('Enter Patient number:'))
但调用searchpatientrec时,输入的编号直接通过input()获取,是字符串类型:
no = input("Enter patient no:") searchpatientrec(no)
Python中整数1和字符串"1"用==比较结果为False,这是条件不触发的直接原因。
2. 搜索逻辑不完整
当前searchpatientrec仅读取文件中第一条记录,若第一条不匹配,不会继续读取后续记录,直接判定为无记录。
3. 次要错误
searchpatientrec输出时误写为"Doctor No",应为"Patient No"searchworkerrec函数错误打开patient.dat,实际应打开worker.dat
修复方案
1. 统一数据类型
调用搜索函数时,将输入的编号转为整数:
elif choice == 7: no = int(input("Enter patient no:")) # 转为int类型 searchpatientrec(no)
医生和工人的搜索输入也需同步修改:
elif choice == 8: no = int(input("Enter doctor no:")) searchdoctorrec(no) elif choice == 9: no = int(input("Enter worker no:")) searchworkerrec(no)
2. 修复遍历逻辑
修改searchpatientrec函数,循环读取所有记录直到文件结束:
def searchpatientrec(p_no): f = open("patient.dat", "rb") flag = False try: while True: # 循环遍历所有记录 rec = pickle.load(f) print(rec[0]) print(p_no) if rec[0] == p_no: p_no = rec[0] p_name = rec[1] p_age = rec[2] p_problems = rec[3] print(f"Patient No:{p_no} Name:{p_name}, Age:{p_age}, Disease:{p_problems}") # 修正标题错误 flag = True break # 找到匹配记录后退出循环,若需显示所有匹配可移除break except EOFError: pass if not flag: print("No Record Found") f.close()
3. 修复其他错误
修正searchworkerrec的文件路径:
def searchworkerrec(w_no): f = open("worker.dat", "rb") # 改为正确的worker.dat flag = False try: while True: rec = pickle.load(f) if rec[0] == w_no: w_no = rec[0] w_name = rec[1] w_age = rec[2] w_workname = rec[3] print(f"Worker No:{w_no} Name:{w_name}, Age:{w_age}, Work Type:{w_workname}") flag = True break except EOFError: pass if not flag: print("No Record Found") f.close()
验证效果
修复后,输入患者编号1(整数类型),函数会遍历所有记录,匹配到对应整数编号的记录后,正常显示患者详情,不会再出现匹配失败的情况。
内容的提问来源于stack exchange,提问作者Aditya Chauhan
相关产品推荐
相关产品推荐

