python实现学生管理系统


Posted in Python onJanuary 11, 2018

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。文件格式如下图:

python实现学生管理系统

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
详谈python http长连接客户端
Jun 12 Python
python的exec、eval使用分析
Dec 11 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
Python全排列操作实例分析
Jul 24 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
keras K.function获取某层的输出操作
Jun 29 Python
linecache模块加载和缓存文件内容详解
Jan 11 #Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 #Python
python+django+sql学生信息管理后台开发
Jan 11 #Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 #Python
快速了解Python中的装饰器
Jan 11 #Python
简单了解python模块概念
Jan 11 #Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 #Python
You might like
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP用mysql数据库存储session的代码
2010/03/05 PHP
php 地区分类排序算法
2013/07/01 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
jquery easyui如何实现格式化列
2017/07/30 jQuery
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
python中PIL安装简单教程
2016/04/21 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python读取与处理netcdf数据方式
2020/02/14 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
酒店执行总经理岗位职责
2013/12/15 职场文书
商业融资计划书
2014/04/29 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
介绍信模板
2015/01/31 职场文书
三行辞职书范文
2015/02/26 职场文书
消防安全主题班会
2015/08/12 职场文书