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 相关文章推荐
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
如何利用Fabric自动化你的任务
Oct 20 Python
Python标准库笔记struct模块的使用
Feb 22 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
Python动态语言与鸭子类型详解
Jul 01 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
python动态规划算法实例详解
Nov 22 Python
matplotlib部件之套索Lasso的使用
Feb 24 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
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Python操作json的方法实例分析
2018/12/06 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python是怎样处理json模块的
2020/07/16 Python
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
售后服务承诺书模板
2014/05/21 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js