Python实现学生信息管理(面向对象)
生活随笔
收集整理的這篇文章主要介紹了
Python实现学生信息管理(面向对象)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
正式代碼如下:
student.py——負責保存學生的單條信息
student_manage.py——負責管理學生信息,對學生信息進行操作
main.py——程序的入口文件
實現了學生信息的增、刪、改、查、從文件讀入、寫入文件
發現了python的一個容易讓程序員寫出bug的地方:
假如file=open('students.txt', 'r')
當使用file.readlines()方法從文件讀入數據時,不管程序怎么寫,只要用一次file.readlines(),那么在之后使用了file.readlines()時返回的結果都會變成空列表!
如圖所示,文本中已經存了四行數據
在我使用如下代碼先輸出file.readlines()返回的列表長度后,再次使用file.readlines()卻返回了一個空列表
print('len:',len(file.readlines())) print(file.readlines()) print('len:',len(file.readlines()))所以,恰當的使用方法應該是先令contents=file.readlines(),之后的所有操作都對contents進行。
正式代碼如下:
student.py——負責保存學生的單條信息
''' 負責保存單條學生信息 '''class StudentInfo(object):def __init__(self, stu_num, stu_name, stu_sex, stu_age):self.stu_num = stu_numself.stu_name = stu_nameself.stu_sex = stu_sexself.stu_age = stu_agedef __str__(self): # 返回值必須為(空)字符串return self.stu_num.ljust(14) + self.stu_name.ljust(7) + self.stu_sex.ljust(3) + self.stu_age.ljust(3)# 測試 if __name__ == '__main__': # 如果被動運行,__name__==模塊名stu = StudentInfo('311166000781', '李師傅', '男', '21')print(stu)student_manage.py——負責管理學生信息,對學生信息進行操作
''' 負責管理學生信息,對學生信息進行操作 '''from student import StudentInfo import sysclass StudentManage(object):def __init__(self):self.students = {} # 保存學生信息def start(self): # 必須定義為公有方法,否則無法外部調用while True:self.__showMenu()select_id = input("請輸入數字:")n = int(select_id)if n <= 8 and n >= 0:self.__selectFun(select_id)else:print('請重新輸入有效數字!')# 定義私有方法def __showMenu(self):print('*' * 30)print('1.顯示學生信息')print('2.查找學生信息')print('3.添加學生信息')print('4.修改學生信息')print('5.統計學生信息')print('6.刪除學生信息')print('7.將學生信息寫入文件')print('8.從文件讀入學生信息')print('0.退出系統')print('*' * 30)# 選擇功能def __selectFun(self, select_id):select_fun = {'1': self.__showAllStu,'2': self.__searchStu,'3': self.__addStu,'4': self.__modifyStu,'5': self.__countStu,'6': self.__delStu,'7': self.__writeStu,'8': self.__readStu,'0': sys.exit}if select_id == '2' or select_id == '4' or select_id == '6':stu_num = input('請輸入學號:')select_fun[select_id](stu_num)else:select_fun[select_id]()# 添加學生信息def __addStu(self):stu_num = input('請輸入學號:')stu_name = input('請輸入姓名:')stu_sex = input('請輸入性別:')stu_age = input('請輸入年齡:')stu = StudentInfo(stu_num, stu_name, stu_sex, stu_age)self.students[stu_num] = stu# 查找學生信息def __searchStu(self, stu_num):for k in self.students:if k == stu_num:self.__showStu(k)return kelse:print('查無此人!')return None# 修改學生信息def __modifyStu(self, stu_num):print('正在查找>>>')k = self.__searchStu(stu_num)if k:stu = self.students[k]n = input('請輸入修改后的學號(無需修改輸入-1):')stu.stu_num = self.__modifyJudge(n, stu.stu_num)n = input('請輸入修改后姓名(無需修改輸入-1):')stu.stu_name = self.__modifyJudge(n, stu.stu_name)n = input('請輸入修改后性別(無需修改輸入-1):')stu.stu_sex = self.__modifyJudge(n, stu.stu_sex)n = input('請輸入修改后年齡(無需修改輸入-1):')stu.stu_age = self.__modifyJudge(n, stu.stu_age)print('修改完畢!')# 修改輔助判斷def __modifyJudge(self, n, value):if n == '-1':return valueelse:return n# 統計學生信息def __countStu(self):male = 0female = 0age = {}for v in self.students.values():if v.stu_sex == '男':male += 1else:female += 1if v.stu_age in age:age[v.stu_age] += 1else:age[v.stu_age] = 1print(f'學生共有{len(self.students)}名,其中男生共有{male}名,女生共有{female}名')for k, v in age.items():print(f'| 年齡為{k}的同學共有{v}名 |')# 刪除學生信息def __delStu(self, stu_num):k = self.__searchStu(stu_num)if k:self.students.pop(k)print('刪除成功!')# 顯示單條信息def __showStu(self, stu_num):print('| ' + str(self.students[stu_num]) + ' |')# 顯示全部學生信息def __showAllStu(self):if self.students:for k in self.students:self.__showStu(k)else:print('當前無學生信息,請添加...')# 將學生信息寫入文件def __writeStu(self):if not self.students:print('還未錄入學生信息!請先錄入后再次嘗試')else:file = open('students.txt', 'w')for stu in self.students.values():file.writelines(str(stu) + '\n')file.close()print('寫入完畢!')# 從文件讀入學生信息def __readStu(self):file = Nonetry:file = open('students.txt', 'r')except Exception as e:print('文件不存在,請檢查后重試', e)else:contents=file.readlines()i = 1for content in contents:content = content.split()stu = StudentInfo(content[0], content[1], content[2], content[3]) # 實例化一個對象self.students[content[0]] = stu # 添加到存放學生信息的字典中print(f'第{i}名學生信息錄入完畢>>>')i+=1print(f'{len(contents)}名學生信息從文件錄入完畢!')finally:if file != None:file.close()main.py——程序的入口文件
''' 主程序文件,實現程序的入口 ''' from student_manage import *if __name__ == '__main__':stu = StudentManage()stu.start()總結
以上是生活随笔為你收集整理的Python实现学生信息管理(面向对象)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的用Python实现学生信息管理
- 下一篇: Python模拟哲学家进餐问题