班级花名册

import os
import sys
import time
import pickle

class Student(object):
    def __init__(self, name, xuehao, number, address, note):
        self.name = name
        self.xuehao = xuehao
        self.number = number
        self.address = address
        self.note = note

class ClassBook(object):
    def __init__(self):
        self.students = []
        self.filename = 'classbook.data'

    def save(self):
        f = open(self.filename, 'wb')
        pickle.dump(self.students, f)
        f.close()

    def load(self):
        if not os.path.exists(self.filename):
            return
        f = open(self.filename, 'rb')
        self.students = pickle.load(f)
        f.close()

    def add_student(self):
        name = input('姓名: ')
        xuehao = input('学号: ')
        number = input('电话号码: ')
        address = input('地址: ')
        note = input('备注: ')
        student = Student(name, xuehao, number, address, note)
        self.students.append(student)
        self.save()

    def del_student(self):
        xuehao = input('学号: ')
        for i, student in enumerate(self.students):
            if student.xuehao == xuehao:
                del self.students[i]
                self.save()
                return
        print('没有找到学号为%s的学生' % xuehao)

    def show_all(self):
        for student in self.students:
            print('姓名: %s, 学号: %s, 电话号码: %s, 地址: %s, 备注: %s' % (student.name, student.xuehao, student.number, student.address, student.note))

    def change(self):
        xuehao = input('学号: ')
        for student in self.students:
            if student.xuehao == xuehao:
                student.name = input('姓名: ')
                student.xuehao = input('学号: ')
                student.number = input('电话号码: ')
                student.address = input('地址: ')
                student.note = input('备注: ')
                self.save()
                return
        print('没有找到学号为%s的学生' % xuehao)

    def search(self):
        xuehao = input('学号: ')
        for student in self.students:
            if student.xuehao == xuehao:
                print('姓名: %s, 学号: %s, 电话号码: %s, 地址: %s, 备注: %s' % (student.name, student.xuehao, student.number, student.address, student.note))
                return
        print('没有找到学号为%s的学生' % xuehao)

    def sort(self):
        self.students.sort(key=lambda student: student.xuehao)
        self.save()

def main_menu():
    classbook = ClassBook()
    classbook.load()
    fbook = None
    while True:
        print ('''
                ∽∽∽∽∽∽∽∽∽∽班级花名册∽∽∽∽∽∽∽∽∽∽
                        1.创建通讯录         2.添加新同学
                        3.删除同学信息       4.显示所有信息
                        5.修改同学信息       6.查询同学信息
                        7.进行学号排序       8.关闭花名册
                ∽∽∽∽∽∽∽∽∽欢迎您的使用∽∽∽∽∽∽∽∽∽∽
                温馨提示:若连续三次输入错误,系统将自动关闭!!!
        ''')
        choice = input('请选择: ')
        if choice == '1':
            classbook.students = []
            classbook.save()
        elif choice == '2':
            classbook.add_student()
        elif choice == '3':
            classbook.del_student()
        elif choice == '4':
            classbook.show_all()
        elif choice == '5':
            classbook.change()
        elif choice == '6':
            classbook.search()
        elif choice == '7':
            classbook.sort()
        elif choice == '8':
            print('谢谢使用班级花名册,欢迎下次使用!')
            sys.exit(0)
        else:
            print ('输入有误,请从新选择!')

if __name__ == '__main__':
    main_menu()


def change_xx(i, n, fbook=None):
        c = 0
        j = 0
        while True:
            print("请选择需要修改的选项:\n1.姓名  2.学号  3.电话号码  4.地址  5.备注  6.修改全部\n\n")
            print("请选择: ")
            c = int(input())
            if c > 6 or c < 1:
                if j == 1:
                    print("请注意,已连续两次输入错误,连续三次输入错误系统将自动关闭!请确定后重新选择!\n\n")
                if j == 2:
                    print("已连续三次输入错误,系统自动关闭!\n")
                if j == 0:
                    print("输入有误,请从新选择!\n")
                j += 1
            if j == 3:  # 若连续三次输入错误,自动关闭系统
                exit(0)
            if c <= 6 and c >= 1:
                break
        print("请根据提示输入新的信息:\n")
        if c == 1:
            print("姓名: ")
            fbook[i].name = input()
        if c == 2:
            print("学号: ")
            fbook[i].xuehao = input()
        if c == 3:
            print("电话号码: ")
            fbook[i].number = input()
        if c == 4:
            print("地址: ")
            fbook[i].address = input()
        if c == 5:
            print("备注: ")
            fbook[i].note = input()
        if c == 6:
            print("姓名\t 学号\t\t电话号码\t地址\t\t备注\n")
            fbook[i].name, fbook[i].xuehao, fbook[i].number, fbook[i].address, fbook[i].note = input().split()

def main():
    main_menu()
def set_up(fbook=None):
    n=1
    print("请根据提示输入信息!")
    print("姓名\t 学号\t\t电话号码\t地址\t    备注")
    fbook[0].name=input()
    fbook[0].xuehao=input()
    fbook[0].number=input()
    fbook[0].address=input()
    fbook[0].note=input()
    save(n)
    print("通讯录创建成功!")
    main_menu()
def add_student():
    n=count()
    x=1
    while x==1:
        print("请根据提示输入信息,按Enter结束!")
        print("姓名\t 学号\t\t电话号码\t地址\t    备注")
        fbook[n].name=input()
        fbook[n].xuehao=input()
        fbook[n].number=input()
        fbook[n].address=input()
        fbook[n].note=input()
        save(n+1)
        print("已保存!\n")
        n+=1
        print("是否继续添加?    (1).是    (2).返回菜单 \n请选择: ")
        x=int(input())
    main_menu()

def del_student():
    s=book()
    n=count()
    k=-1
    j=0
    d=0
    while k==-1:
        print("请输入要删除的同学姓名: ")
        s.name=input()
        for i in range(n):
            if s.name==fbook[i].name:
                k=i
                s=fbook[i]
                d+=1
        if d>1:
            print("姓名\t 学号\t\t电话号码\t地址\t    备注")
            for i in range(n):
                if s.name==fbook[i].name:
                    print("%s\t%s\t%s\t%s\t\t%s"%(fbook[i].name,fbook[i].xuehao,fbook[i].number,fbook[i].address,fbook[i].note))
            print("因有同学姓名相同,请输入要删除的同学学号:  ")
            s.xuehao=input()
            for i in range(n):
                if s.xuehao==fbook[i].xuehao:
                    k=i
                    s=fbook[i]
        if k==-1:
            if j==1:
                print("请注意,已连续两次输入错误,连续三次输入错误系统将自动关闭!请确定后重新输入!\n\n")
            if j==2:
                print("已连续三次输入错误,系统自动关闭!\n")
            if j==0:
                print("没有此同学记录,请重新输入!\n\n")
            j+=1
        if j==3:
            exit(0)
    print("姓名\t 学号\t\t电话号码\t地址\t    备注")
    print("%s\t%s\t%s\t%s\t%s"%(fbook[k].name,fbook[k].xuehao,fbook[k].number,fbook[k].address,fbook[k].note))
    print("确定删除此同学信息?    (1).是    (2).取消并返回菜单 \n请选择: ")
    d1=int(input())
    if d1==1:
        fbook[k].name=''
        save(n)
    else:
        main_menu()
    print("已删除.\n\n")
    print("是否继续操作?    (1).是    (2).否,返回菜单 \n请选择: ")
    d2=int(input())
    if d2==1:
        del_student()
    else:
        main_menu()

def show_all(fbook=None):
            n = count()
            print("姓名\t 学号\t\t电话号码\t地址\t    备注\n")
            for i in range(n):
                print("%s\t%s\t%s\t%s\t%s\n" % (
                fbook[i].name, fbook[i].xuehao, fbook[i].number, fbook[i].address, fbook[i].note))
            print("共有%d 记录\n" % n)
            print("按任意键返回菜单!\n")
            input()
            main_menu()

def search():
            s = book()
            n = count()
            while True:
                k = -1
                while True:
                    s.name = input("请输入要查询的同学姓名: ")
                    for i in range(n):
                        if s.name == fbook[i].name:
                            k = i
                            s = fbook[i]
                            print("姓名\t 学号\t\t电话号码\t地址\t    备注\n")
                            print("%s\t%s\t%s\t%s\t%s\n\n" % (
                            fbook[k].name, fbook[k].xuehao, fbook[k].number, fbook[k].address, fbook[k].note))
                    if k == -1:
                        print("没有此同学记录,请重新输入!\n\n")
                print("是否继续查询?   (1).是   (2).否,返回菜单 \n请选择: ")
                d1 = int(input())
                if d1 == 2:
                    break
            main_menu()

def change():
            x = book()
            n = count()
            while True:
                d = 0
                k = -1
                while True:
                    x.name = input("请输入要修改的同学姓名: ")
                    for i in range(n):
                        if x.name == fbook[i].name:
                            k = i
                            x = fbook[i]
                            print("姓名\t 学号\t\t电话号码\t地址\t    备注\n")
                            print("%s\t%s\t%s\t%s\t%s\n\n" % (
                            fbook[k].name, fbook[k].xuehao, fbook[k].number, fbook[k].address, fbook[k].note))
                            d += 1
                    if d > 1:
                        k1 = k
                        x.xuehao = input("因有同学姓名相同,请输入要修改的同学学号:  ")
                        for i in range(k1):
                            if x.xuehao == fbook[i].xuehao:
                                k = i
                                x = fbook[i]
                                print("姓名\t 学号\t\t电话号码\t地址\t    备注\n")
                                print("%s\t%s\t%s\t%s\t%s\n\n" % (
                                fbook[k].name, fbook[k].xuehao, fbook[k].number, fbook[k].address, fbook[k].note))
                    if k == -1:
                        print("没有此同学记录,请重新输入!\n\n")
                change_xx(k, n)
                save(n)
                print("\n修改成功! 修改后信息如下: \n")
                print("姓名\t 学号\t\t电话号码\t地址\t    备注\n")
                print("%s\t%s\t%s\t%s\t%s\n\n" % (
                fbook[k].name, fbook[k].xuehao, fbook[k].number, fbook[k].address, fbook[k].note))
                print("是否继续修改信息?   (1).是   (2).否,返回菜单 \n请选择:  ")
                d1 = int(input())
                if d1 == 2:
                    break
            main_menu()

def sort():
    fp = open("fbook.txt", "r")
    fbook = []
    for line in fp:
        fbook.append(line.split())
    fp.close()
    for i in range(len(fbook) - 1):
        for k in range(len(fbook) - i - 1):
            if fbook[k][1] > fbook[k + 1][1]:
                z = fbook[k]
                fbook[k] = fbook[k + 1]
                fbook[k + 1] = z
    fp = open("fbook.txt", "w")
    for i in range(len(fbook)):
        fp.write(fbook[i][0] + '\t' + fbook[i][1] + '\t' + fbook[i][2] + '\t' + fbook[i][3] + '\t' + fbook[i][4] + '\n')
    fp.close()
    print("学号排序完成,结果如下: ")
    print("姓名     学号    电话号码     地址      备注")
    fp = open("fbook.txt", "r")
    for line in fp:
        print(line)
    fp.close()
    print("                 共有%d 记录." % len(fbook))
    print("按任意键返回菜单!")
    input()
    main_menu()

def save(fbook):
    fp = open("fbook.txt", "w")
    for i in range(len(fbook)):
        fp.write(fbook[i][0] + '\t' + fbook[i][1] + '\t' + fbook[i][2] + '\t' + fbook[i][3] + '\t' + fbook[i][4] + '\n')
    fp.close()

def count():
    fp = open("fbook.txt", "r")
    fbook = []
    for line in fp:
        fbook.append(line.split())
    fp.close()
    return len(fbook)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值