python实现学生管理系统

时间:2022-11-20 10:24:14

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#!/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实现学生管理系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/junbopengpeng/article/details/18234083