基于pickle模块的学生管理系统


title: 基于pickle模块的学生管理系统
date: 2017-08-03 20:54:39
categories: technology
tags:

- python

利用模块pickle完成学生信息管理系统

Python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

学生系统功能分为
1. Add
2. Delect
3. Show
4. Save
5. Read
6. Quit

# !/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
# -*- coding: utf-8 -*-

import pickle

class Student:
    def __init__(self, studentID, name, sex, classID):
        self.studentID = studentID
        self.name = name
        self.sex = sex
        self.classID = classID

class StudentManager:
    def __init__(self):
        self.students = []

    def mainMenu(self):
        print('\nTips:')
        print('1.Add studentInfo')
        print('2.Delect studentInfo')
        print('3.Show studentInfo')
        print('4.Save studentInfo')
        print('5.Read studentInfo')
        print('0.Quit')
        flag = input('Select Operation:')
        while (flag < '0' or flag > '5'):
            print('Input Error!')
            flag = input('Select Again:')
        print('------------')
        if (flag == '1'):
            self.addStu()
            self.mainMenu()
        if (flag == '2'):
            self.delStu()
            self.mainMenu()
        if (flag == '3'):
            self.printStu()
            self.mainMenu()
        if (flag == '4'):
            self.writeStu()
            self.mainMenu()
        if (flag == '5'):
            self.readStu()
            self.mainMenu()
        if (flag == '0'):
            self.writeStu() # Save before quit
            print('End')

    def addStu(self):
        studentID = input('Plaese input studentID: ')
        while (self.findByID(studentID) != -1):
            print('studentID repeat, please input again')
            studentID = input('Please input studentID again')
        name = input('Please input student name: ')
        sex = input('Please input student sex: ')
        sex
        while ((sex != 'f') and (sex != 'm')):
            print('Sex input error, please input sex again')
            sex = input('Please input student sex again: ')
        classID = input('Please input student classID: ')
        student = Student(studentID, name, sex, classID)
        self.students.append(student)
        print('Add success!')

    def delStu(self):
        studentID = input('Please input the studentID you want to del: ')
        i = self.findByID(studentID)
        while (i == -1):
            print('No this studentID, please input studentID again!')
            studentID = input("Please input the studentID again: ")
            i = self.findByID(studentID)
        del(self.students[i])
        print('Del success!')

    def printStu(self):
        print('----------')
        print('%7s%7s%7s%7s'%('StudentID', 'Name', 'Sex', ' ClassID'))
        for student in self.students:
            print('%7s%7s%7s%7s'%(student['studentID'], student['name'], student['sex'], student['classID']))

    def findByID(self, studentID):
        i = 0;
        for student in self.students:
            if (student['studentID'] == studentID):
                return i # return number
            i = i+1
        return -1 # find fail

    def writeStu(self):
        try:
            fout = open(r'/Users/yangyang/Developer/Python/file/save.db', 'wb')
        except IOError as e: ###python3
            print('No file exist!')
        else:
            pickle.dump(self.students, fout)
            fout.close()
            print('Save success!')

    def readStu(self):
        try:
            fin = open(r'/Users/yangyang/Developer/Python/file/save.db', 'rb')
        except FileNotFoundError as e: ### python3: as
            print('No file exist, please save first!')
        else:
            print('On reading', end='')
            print('...', end='')
            self.students = pickle.load(fin)
            print('...')
            print('Read file success!')
            fin.close()

sm = StudentManager()
print('\n\n')
print('===========================')
print('    StudentManagerSystem')
print('===========================')
sm.readStu()
sm.mainMenu()

写完后发现一直报错

self.students = pickle.load(fin)
EOFError: Ran out of input

最后在
Stack OverFlow找到答案。因为读取的文件为空。

解决办法:

在save.db里面事先写入数据

# !/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
# -*- coding: utf-8 -*-

import pickle

student = {'studentID': '0001', 'name':'W', 'sex': 'F', 'classID':'1111'}


students = []
students.append(student)

fout = open(r'/Users/yangyang/Developer/Python/file/save.db', 'wb')
pickle.dump(students, fout)
print('Save success!')
fout.close()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值