python写的简单的学生管理系统,练习python语法。
可以运行在windows和linux下,python 2.7。
#!/usr/local/bin/python # -*- coding:utf-8 -*- import os import re #定义学生类 class Student: def __init__(self): self.name = '' self.ID = '' self.score = 0 #根据学生分数进行从大到小的冒泡排序 def BuddleSortByScore( stulist ): n = len( stulist ) for i in range( n ): for j in range( n - i - 1): if stulist[j].score < stulist[j+1].score: #tmp = stulist[j+1] #stulist[j+1] = stulist[j] #stulist[j] = tmp stulist[j],stulist[j+1] = stulist[j+1],stulist[j] #按顺序输出所有学生的信息 def PrintAllStudentInfo( stulist ): print u"______________________学生列表_______________" for i in range( len(stulist) ): print u"姓名:" , print stulist[i].name, print " " , print u"学号:" , print stulist[i].ID , print " " , print u"分数:" , print stulist[i].score print "____________________________________________" #增加一个学生,增加成功返回True,否则返回False def Add( stulist , stu ): if searchByID( stulist , stu.ID ) == 1: print u"此ID已经存在!" return False stulist.append( stu ) #给出是否保存更新数据的选择 print "Do you want to save the result ?" nChoose = raw_input("Choose:Y/N:") if nChoose == 'Y' or nChoose == 'y': #将改变后的结果写入文件中,追加写文件 file_object = open("students.txt","a") file_object.write( stu.ID ) file_object.write( " " ) file_object.write( stu.name ) file_object.write( " " ) file_object.write( str(stu.score) ) file_object.write( "\r\n" ) file_object.close() return True else: stulist.remove(stu) #根据ID删除一个学生的信息,删除成功则返回True,否则返回false def DeleteByID( stulist , ID ): for stu in stulist: if stu.ID == ID: stulist.remove( stu ) #选择是否保存已经改变的内容 print "Do you want to save the changed result ?" nChoose = raw_input("Choose:Y/N:") if nChoose == 'Y' or nChoose == 'y': file_object = open("students.txt" , "w+") for stu2 in stulist: file_object.write(stu2.ID) file_object.write(" ") file_object.write(stu2.name) file_object.write(" ") file_object.write(str(stu2.score)) file_object.write("\r\n") file_object.close() print u"删除成功!" return True print u"删除失败!" return False #根据姓名删除一个学生的信息,删除成功返回True,否则返回False def DeleteByName( stulist , name ): pos = searchByName( stulist , name ) if pos != -1: del stulist[pos] #选择是否保存已经改变的内容 print "Do you want to save the changed result ?" nChoose = raw_input("Choose:Y/N:") if nChoose == 'Y' or nChoose == 'y': file_object = open("students.txt" , "w+") for stu2 in stulist: file_object.write(stu2.ID) file_object.write(" ") file_object.write(stu2.name) file_object.write(" ") file_object.write(str(stu2.score)) file_object.write("\r\n") file_object.close() print u"删除成功!" return True else: print u"删除失败!" print pos return False #根据学号查找一个学生是否存在,存在返回学生在列表中的下标,否则返回-1 def searchByID( stulist , ID ): for i in range( len(stulist) ): if stulist[i].ID == ID: print u"姓名:" , print stulist[i].name , print " " , print u"学号:" , print stulist[i].ID , print " " , print u"分数:" , print stulist[i].score return i return -1 #根据姓名查找一个学生是否存在,存在返回学生在列表中的下标,否则返回-1 def searchByName( stulist , name ): for i in range( len(stulist) ): if stulist[i].name == name: print u"姓名:" , print stulist[i].name , print " " , print u"学号:" , print stulist[i].ID , print " " , print u"分数:" , print stulist[i].score return i return -1 #初始化,读取文件,更新学生信息 def Init( stulist ): print u"初始化......" file_object = open("students.txt","r") #按行读取文件中学生的信息 for line in file_object: stu = Student() line = line.strip("\n") s = line.split(" ") stu.ID = s[0] stu.name = s[1] stu.score = s[2] stulist.append(stu) print u"初始化成功!" #查找菜单 def QueryMenu( stulist ): while True: print "******************************" print u"根据学生的学号进行查找-------1" print u"根据学生的姓名进行查找-------2" print u"离开查找模块----------------3" print "******************************" nChoose = raw_input("请输入你的选择") if nChoose == "1": ID = raw_input("请输入你要输入查找的ID:") searchByID( stulist , ID ) elif nChoose == "2": name = raw_input("请输入你要查找的姓名:") searchByName( stulist , name ) elif nChoose == "3": return else: print u"选择输入错误,请重新输入!" #删除模块 def DeleteMenu( stulist ): while True: print "*****************************" print u"根据学生的学号进行删除------1" print u"根据学生的姓名进行删除------2" print u"离开删除模块---------------3" print "******************************" nChoose = raw_input("请进行选择:") if nChoose == "1": ID = raw_input("请输入你要删除的ID:") DeleteByID( stulist , ID ) elif nChoose == "2": name = raw_input("请输入你要删除的姓名:") DeleteByName( stulist , name ) elif nChoose == "3": return else: print u"您的选择有误,请重新输入!" #菜单 def menu( stulist ): while True: print "***********************" print u"--------菜单------------" print u"增加学生信息---------1" print u"查找一个学生的信息----2" print u"删除一个学生的信息----3" print u"输出所有学生的信息----4" print u"根据分数排序---------5" print u"退出程序-------------6" print "------------------------" print "************************" nChoose = raw_input("请输入你的选择:") if nChoose == "1": stu = Student() stu.name = raw_input("请输入学生的姓名:") #匹配学生ID是否满足0--9中的数字 while True: stu.ID = raw_input("请输入学生的ID:") #创建编译一个正则表达式的模板 p = re.compile( '^[0-9]{3}$' ) if p.match( stu.ID ): break else: print "学生的ID输入错误,正确形式应该为0--9之间的三位数字!" #匹配学生的分数是否满足0--100之间 while True: stu.score = eval( raw_input("请输入学生的分数:") ) #利用普通的符号来判断分数是否符合标准 #if stu.score >= 0 and stu.score <= 100: # break #利用正则表达式来判断分数是否符合标准 if re.match( "^[0-9]" ,str(stu.score) ) and stu.score<=100 and stu.score >= 0 : break else: print u"分数不满足实际情况,应该为0--100之间的数字!" if Add( stulist , stu ) == 1: print u"学生信息增加成功!" else: print u"学生信息增加失败!" elif nChoose == "2": QueryMenu( stulist ) elif nChoose == "3": DeleteMenu( stulist ) elif nChoose == "4": PrintAllStudentInfo( stulist ) elif nChoose == "5": BuddleSortByScore( stulist ) print "Do you want to save the sorted result?" choose = raw_input("please input your choice:Y/N:") if choose == 'Y' or choose == 'y': file_object = open("students.txt","w+") for stu2 in stulist: file_object.write(stu2.ID) file_object.write(" ") file_object.write(stu2.name) file_object.write(" ") file_object.write(str(stu2.score)) file_object.write("\r\n") elif nChoose == "6": return else: print u"输入有误,请重新输入!" #测试函数部分 if __name__ == '__main__': #定义一个列表用来存储所有学生的信息 stulist = [] #初始化,从文件中读取信息 Init( stulist ) #菜单函数 menu( stulist )
运行需要读写文件Students.txt。文件格式如下图:
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。