python版学生管理系统

By admin in 计算机教程 on 2019年6月16日

python写的简单的学生管理系统,练习python语法。

写一个学生管理系统,最好用python。

可以运行在windows和linux下,python 2.7。

我都没学过python呢,只好开始临时抱佛脚,再到网上找找有没有例子看看,下面是我参照另一个博主写的,中间有一些和我不能融合的错误,我已经解决了。

#!/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 ) 
input("\n\nPress the enter key to exit.")


def functionList(): # 定义功能菜单
 print("---------请输入序号选择您要得功能---------")
 print("")
 print("-" * 14 + "1.查看学生信息" + "-" * 14)
 print("-" * 42)
 print("-" * 14 + "2.增加学生信息" + "-" * 14)
 print("-" * 42)
 print("-" * 14 + "3.删除学生信息" + "-" * 14)
 print("-" * 42)
 print("-" * 14 + "4.修改学生信息" + "-" * 14)
 print("-" * 42)
 print("-" * 14 + "5.查找系统学生" + "-" * 14)
 print("-" * 42)
 print("-" * 14 + "6.返回到上一级" + "-" * 14)
 print("-" * 42)
 print("-" * 14 + "7.退出学生系统" + "-" * 14)
 print("")


def functionList2(): # 定义简单版功能菜单

 print("---1:查看----2:增加-----3:删除----4:修改----")
 print("-------5:查找-------6:返回------7:退出------")


def sexInputDebug(sexInput): # 检查性别输入是否正确
 if len(sexInput) == 1 and (sexInput.lower() == "m" or sexInput.lower() == "f"):
 return True
 else:
 return False


def ageInputDebug(ageInput): # 检查年龄输入是否正确
 if len(ageInput) == 2 and ageInput.isdigit() == True:
 return True
 else:
 return False


def IDInputDebug(IDInput): # 检查学号输入是否正确
 if len(IDInput) == 8 and IDInput.isdigit() == True:
 return True
 else:
 return False


def nameListFunction(): # 显示单个学生姓名信息
 nameList = []
 for i in range(len(studentList)):
 if studentList[i]["name"] not in nameList:
  nameList.append(studentList[i]["name"])
 return nameList


def findNameLocation(studentname): # 通过名字找到学生位置
 for j in range(len(studentList)):
 if studentList[j]["name"] == studentname:
  return j


def listFunction(): # 定义显示现有学生信息函数
 for i in range(len(studentList)):
 studentInfo = studentList[i]
 print("姓名:%s--性别:%s--年龄:%s--学号:%s--备注:%s--" % (
 studentInfo["name"], studentInfo["sex"], studentInfo["age"], studentInfo["studentID"], studentInfo["extra"]))
 print("")


def addFunction(): # 定义增加学生函数

 while True:
 numInput =input("-----修改已经存在的学生备注请输入1\n-----------增加一个新的学生请输入2:")
 if numInput == "2":
  while True:
  nameNoExistAdd = input("请输入您要增加的名字:")

  nameList = nameListFunction()
  if nameNoExistAdd in nameList:
   print("%s在学生管理系统中已经存在" % nameNoExistAdd)
   print("")

  else:
   newStudent = {}
   newStudent["name"] = nameNoExistAdd
   while True:
   sexInput = input("----请输入%s的性别--f:man--m:women:" % nameNoExistAdd)
   if sexInputDebug(sexInput) == True:
    newStudent["sex"] = sexInput
    break
   else:
    print("输入有误,请重新输入!")
   while True:
   ageInput = input("-------请输入%s2位数字表示的年龄:" % nameNoExistAdd)
   if ageInputDebug(ageInput) == True:
    newStudent["age"] = ageInput
    break
   else:
    print("输入有误,请重新输入!")
   while True:
   IDInput = input("----------请输入%s的8位学号:" % nameNoExistAdd)
   if IDInputDebug(IDInput) == True:
    newStudent["studentID"] = IDInput
    break
   else:
    print("输入有误,请重新输入!")
   extraInput = input("----------请输入%s的备注:" % nameNoExistAdd)
   newStudent["extra"] = extraInput
   studentList.append(newStudent)
   print("--------------%s已经添加到学生管理系统" % nameNoExistAdd)
   print("")
   print("姓名:%s--性别:%s--年龄:%s--学号:%s--备注:%s--" % (
   newStudent["name"], newStudent["sex"], newStudent["age"], newStudent["studentID"],
   newStudent["extra"]))
   break
  break
 elif numInput == "1":
  while True:
  nameExistAdd = input("------请输入您要修改备注的学生的名字:")
  nameList = nameListFunction()
  if nameExistAdd in nameList:
   extraExistAdd = input("-----------------请输入您要添加的备注:")
   j = findNameLocation(nameExistAdd)
   studentList[j]["extra"] = extraExistAdd
   print("---------------备注已经添加--------------")
   print("")
   print("姓名:%s--性别:%s--年龄:%s--学号:%s--备注:%s--" % (
   studentList[j]["name"], studentList[j]["sex"], studentList[j]["age"], studentList[j]["studentID"],
   studentList[j]["extra"]))
   print("")
   break
  else:
   print("-----------------您输入的姓名不存在")
  break

 else:
  print("----------------您输入的信息不正确")


def delFunction(): # 定义删除学生的函数
 while True:
 nameDel = input("---------------请输入您要删除的名字:")
 studentNameList = nameListFunction()
 if nameDel in studentNameList:
  j = findNameLocation(nameDel)

  del studentList[j]
  print("-------------%s已经从学生管理系统中删除" % nameDel)
  print("")
  break
 else:
  print("------------------您要删除的名字不存在!")


def modifiFunction(): # 定义修改学生的函数
 while True:
 nameModifi = input("----------------请输入要修改的名字:")
 studentNameList = nameListFunction()
 if nameModifi in studentNameList:
  print("------------请选择要修改的内容-----------")
  print("--------------1:修改姓名---------------")
  print("--------------2:修改性别---------------")
  print("--------------3:修改年龄---------------")
  print("--------------4:修改学号---------------")
  print("--------------5:修改备注---------------")

  while True:
  choiceInput = input("请输入:")
  if choiceInput == "1":
   newNameInput = input("----------请输入新的姓名:")
   j = findNameLocation(nameModifi)
   studentList[j]["name"] = newNameInput
   print("------------姓名已经更新------------")
   print("")
   break
  elif choiceInput == "2":
   while True:
   newSexInput = input("----请输入新的性别--f:man--m:women---")
   if sexInputDebug(newSexInput) == True:
    j = findNameLocation(nameModifi)
    studentList[j]["sex"] = newSexInput
    print("-------------性别已经更新-------------")
    print("")
    break
   else:
    print("---------输入有误,请重新输入!---------")
   break
  elif choiceInput == "3":
   while True:
   newAgeInput = input("----------请输入新的年龄:")
   if ageInputDebug(newAgeInput) == True:
    j = findNameLocation(nameModifi)
    studentList[j]["age"] = newAgeInput
    print("------------年龄已经更新------------")
    print("")
    break
   else:
    print("----------入有误,请重新输入!-------")
   break
  elif choiceInput == "4":
   while True:
   newIDInput = input("----------请输入新的学号:")
   if IDInputDebug(newIDInput) == True:
    j = findNameLocation(nameModifi)
    studentList[j]["studentID"] = newIDInput
    print("------------学号已经更新------------")
    print("")
    break
   else:
    print("----------入有误,请重新输入!-------")
   break
  elif choiceInput == "5":
   newExtraInput = input("----------请输入新的备注:")
   j = findNameLocation(nameModifi)
   studentList[j]["extra"] = newExtraInput
   print("------------备注已经更新------------")
   print("")
   break
  else:
   print("---------输入有误,请重新输入!-------")
   print("")
  break
 else:
  print("-----------------您输入的名字不存在!")
  print("")


def searchFunction(): # 定义搜索学生的函数
 nameSearch = input("-------------请输入要查找的名字:")
 print("")
 nameList = nameListFunction()
 if nameSearch in nameList:
 print("-----------------%s在学生管理系统中-------------------" % nameSearch)
 print("")
 j = findNameLocation(nameSearch)
 print("姓名:%s--性别:%s--年龄:%s--学号:%s--备注:%s--" % (
 studentList[j]["name"], studentList[j]["sex"], studentList[j]["age"], studentList[j]["studenID"],
 studentList[j]["extra"]))
 print("")
 else:
 print("----------------%s不在学生管理系统中-----------------" % nameSearch)
 print("")
 # 默认学生信息系统内容


studentList = [{"name": "Frank", "sex": "f", "age": 33, "studentID": "312312", "extra": ""},
  {"name": "Jane", "sex": "m", "age": 45, "studentID": "324235", "extra": ""}]

# 函数主体
print("-" * 11 + "欢迎来到学生管理系统" + "-" * 11)
print("")
print("")
functionList()
while True: # 进入循环,根据序号选择操作
 userInput = input("----------------请输入您要选择的功能序号:")
 print("")

 if userInput == "1": # 显示现有学生和返回
 listFunction()
 functionList2()
 continue
 elif userInput == "2": # 使用增加函数和返回
 addFunction()
 functionList2()
 continue
 elif userInput == "3": # 使用删除函数和返回
 delFunction()
 functionList2()
 continue
 elif userInput == "4": # 使用修改函数和返回
 modifiFunction()
 functionList2()
 continue
 elif userInput == "5": # 使用搜索函数和返回
 searchFunction()
 functionList2()
 continue
 elif userInput == "6": # 返回功能列表
 functionList()
 continue
 elif userInput == "7": # 退出
 break
 else:
 print("----------输入有误,请重新输入!----------")

运行需要读写文件Students.txt。文件格式如下图:

以下就是运行后的结果:

图片 1

图片 2

更多学习资料请关注专题《管理系统开发》。

图片 3

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 澳门金沙30064在线网站 版权所有