最近在学python,用了几天跟着网上的视频学完基础知识之后,做了一个学生管理系统,写的比较普通,没太大亮点,希望可以给初学者一些参考经验,另外,如有不恰当的地方还请各位指正。 学生管理系统主要包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数、显示学生信息,这几项功能。其中录入学生的信息包括学号、姓名、英语成绩、python成绩、数学成绩、总成绩;查询学生信息分为按学号和按姓名查找两种;删除学生信息是输入学号进行查找,查找到学生信息之后,对学生信息进行删除;修改学生信息是输入学号后,查询到学生信息之后,对学生信息进行修改;排序学生信息的排序方式可选择升序和降序,可选择按英语、python、数学成绩以及总成绩进行排序;统计学生总数 就是输出信息管理系统中有几个学生的信息。 首先,运行结果部分截图如下图所示:
下面开始介绍代码,我把主要的代码处都给出了详细注释,如若有不懂的地方,请在评论区留言。 1、主界面函数代码部分,此函数主要就是使用print打印出主界面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def show_choose (): print ("==========================学生信息管理系统==========================" ) print () print ("-----------------------------功能菜单------------------------------" ) print () print (" 1.录入学生信息" ) print (" 2.查找学生信息" ) print (" 3.删除学生信息" ) print (" 4.修改学生信息" ) print (" 5.排序学生信息" ) print (" 6.统计学生总数" ) print (" 7.显示学生信息" ) print (" 0.退出信息管理系统" ) print () print ("------------------------------------------------------------------" )
2、录入学生信息函数代码部分,在这个函数中实现的功能是录入学生信息,包括学号、姓名、英语成绩、python成绩、数学成绩、总成绩等,并将其写入文件中,每一行为一个学生的信息存储。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 def input_info (): infile_info = open ('infile.txt' , 'a' ) flag = 'y' while flag == 'y' or flag == 'Y' : stu_id = input ("请输入学生学号(如2020001):" ) stu_name = input ("请输入学生姓名:" ) stu_score_eng = input ("请输入学生英语成绩:" ) stu_score_py = input ("请输入学生Python成绩:" ) stu_score_math = input ("请输入学生数学成绩:" ) stu_sum_score = int (stu_score_eng) + int (stu_score_py) + int (stu_score_math) stu_info = stu_id + '\t' + stu_name + '\t' + stu_score_eng + '\t' + stu_score_py + '\t' + \ stu_score_math + '\t' + str (stu_sum_score) + ' ' infile_info.write(stu_info) flag = input ("是否继续添加学生信息?y/n" ) print ("信息录入完毕!!!" ) infile_info.close()
3、查询学生信息函数代码部分,此函数主要功能是查询时分为按学号和按姓名查询两种,若查无此人则输出提示信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 def del_info (): flag = 'y' while flag == 'y' or flag == 'Y' : n = 0 defile_info1 = open ('infile.txt' , 'r' ) line_info = defile_info1.readlines() defile_info2 = open ('infile.txt' , 'w' ) del_id = input ("请输入要删除的学生的学号:" ) for line in line_info: if del_id in line: continue defile_info2.write(line) n = n + 1 if n == len (line_info): print ("无此学生信息,请核对后再操作!!!" ) else : print ("学号为{0}的学生信息已被删除!!!" .format (del_id)) defile_info1.close() defile_info2.close() flag = input ("是否继续删除学习信息?y/n" )
4、删除学生信息函数代码部分,此函数主要功能是执行删除操作,输入学号进行查找,查找到学生信息之后,对学生信息进行删除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 def del_info (): flag = 'y' while flag == 'y' or flag == 'Y' : n = 0 defile_info1 = open ('infile.txt' , 'r' ) line_info = defile_info1.readlines() defile_info2 = open ('infile.txt' , 'w' ) del_id = input ("请输入要删除的学生的学号:" ) for line in line_info: if del_id in line: continue defile_info2.write(line) n = n + 1 if n == len (line_info): print ("无此学生信息,请核对后再操作!!!" ) else : print ("学号为{0}的学生信息已被删除!!!" .format (del_id)) defile_info1.close() defile_info2.close() flag = input ("是否继续删除学习信息?y/n" )
5、修改学生信息函数代码部分,此函数的主要功能是对学生信息进行修改,当输入学号后,查询到学生信息之后,对学生信息进行修改。
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 def mod_info (): flag = 'y' while flag == 'y' or flag == 'Y' : n = 0 mod_id = input ("请输入要修改的学生学号:" ) modfile_file1 = open ('infile.txt' , 'r' ) line_info = modfile_file1.readlines() modfile_file2 = open ('infile.txt' , 'w' ) for line in line_info: if mod_id in line: print ("已找到学生,请修改信息!" ) mod_name = input ("请输入姓名:" ) mod_score_eng = input ("请输入英语成绩:" ) mod_score_py = input ("请输入python成绩:" ) mod_score_math = input ("请输入数学成绩:" ) mod_sum_score = int (mod_score_eng) + int (mod_score_py) + int (mod_score_math) mod_stu_info = mod_id + '\t' + mod_name + '\t' + mod_score_eng + '\t' + mod_score_py + '\t' + \ mod_score_math + '\t' + str (mod_sum_score) + ' ' modfile_file2.write(mod_stu_info) print ("修改成功!!!" ) continue modfile_file2.write(line) n = n + 1 if n == len (line_info): print ("无此学生信息,请核对后再操作!!!" ) else : print ("学号为{0}的学生信息已修改!!!" .format (mod_id)) modfile_file1.close() modfile_file2.close() flag = input ("是否继续修改学习信息?y/n" )
6、排序学生信息函数部分,此函数功能是对学生信息进行排序,排序方式可选择升序和降序,排序条件可选择按英语、python、数学成绩以及总成绩进行排序。
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 def sort_info (): flag = 'y' def take_eng (elem ): return int (elem[2 ]) def take_py (elem ): return int (elem[3 ]) def take_math (elem ): return int (elem[4 ]) def take_sum (elem ): return int (elem[5 ]) def output_sort (sort_list ): for m in sort_list: for n in m: print ("%+10s" % n, end=' ' ) print () while flag == 'y' or flag == 'Y' : sortfile_info = open ('infile.txt' , 'r' ) line_info = sortfile_info.readlines() ', ' 2020002 \t王大伟\t85\t96\t99\t280'] # 转化为[[' 2020001 ', ' 李一一', ' 75 ', ' 86 ', ' 89 ', ' 250 '], [' 2020002 ', ' 王大伟', ' 85 ', ' 96 ', ' 99 ', ' 280 ']] lst = [] for i in range(0, len(line_info)): lst.append(' lst' + str(i)) i = 0 for line in line_info: # 遍历列表,将信息转化为单独的列表,并去掉\t和 ,方便接下来的排序比较 line = line.replace(' ', ' ') lst[i] = line.split(' \t') i = i + 1 sort_up_down = input("请选择(0升序,1降序):") print("1.按英语成绩排序,2.按python成绩排序") print("3.按数学成绩排序,4.按学生总成绩排序") sort_term = input("请选择:") if sort_up_down == ' 0 ': # 升序 if sort_term == ' 1 ': lst.sort(key=take_eng, reverse=False) # 以英语成绩升序排序 if sort_term == ' 2 ': lst.sort(key=take_py, reverse=False) if sort_term == ' 3 ': lst.sort(key=take_math, reverse=False) if sort_term == ' 4 ': lst.sort(key=take_sum, reverse=False) output_sort(lst) if sort_up_down == ' 1 ': # 降序 if sort_term == ' 1 ': lst.sort(key=take_eng, reverse=True) # 以英语成绩降序排序 if sort_term == ' 2 ': lst.sort(key=take_py, reverse=True) if sort_term == ' 3 ': lst.sort(key=take_math, reverse=True) if sort_term == ' 4 ': lst.sort(key=take_sum, reverse=True) output_sort(lst) flag = input("是否继续排序信息?y/n")
7、统计学生总数函数代码部分,此函数主要是输出信息管理系统中有几个学生的信息。
1 2 3 4 5 6 7 8 def sum_info (): sumfile_info = open ('infile.txt' , 'r' ) line_info = sumfile_info.readlines() sum_stu = len (line_info) print ("一共有{0}名学生。" .format (sum_stu)) sumfile_info.close()
8、显示学生信息函数代码部分,此函数是将文件存储的学生信息全部显示出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def show_info (): print ("学号" , end='\t\t' ) print ("姓名" , end='\t\t' ) print ("英语成绩" , end='\t\t' ) print ("Python成绩" , end='\t\t' ) print ("数学成绩" , end='\t\t' ) print ("总成绩" , end='\t\t' ) print (' ' ) showfile_info = open ('infile.txt' , 'r' ) line_info = showfile_info.readlines() for line in line_info: print (line) showfile_info.close()
以上就是每个功能函数的代码,完成这些函数的编写之后,需要进行调用才能够执行,所以主函数代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def main (): show_choose() choose_menu = input ("请选择:" ) while choose_menu != '0' : if choose_menu == '1' : input_info() if choose_menu == '2' : find_info() if choose_menu == '3' : del_info() if choose_menu == '4' : mod_info() if choose_menu == '5' : sort_info() if choose_menu == '6' : sum_info() if choose_menu == '7' : show_info() choose_menu = input ("请选择:" ) print ("欢迎您再次使用!!!" )
最后,需要在程序末尾执行main(),完成后运行函数,就可以正常执行了。 下面是全部的代码,一共250行,不算简洁,也不是太冗余,复制后直接可用,如有瑕疵和bug请指正,谢谢。
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 def input_info (): infile_info = open ('infile.txt' , 'a' ) flag = 'y' while flag == 'y' or flag == 'Y' : stu_id = input ("请输入学生学号(如2020001):" ) stu_name = input ("请输入学生姓名:" ) stu_score_eng = input ("请输入学生英语成绩:" ) stu_score_py = input ("请输入学生Python成绩:" ) stu_score_math = input ("请输入学生数学成绩:" ) stu_sum_score = int (stu_score_eng) + int (stu_score_py) + int (stu_score_math) stu_info = stu_id + '\t' + stu_name + '\t' + stu_score_eng + '\t' + stu_score_py + '\t' + \ stu_score_math + '\t' + str (stu_sum_score) + ' ' infile_info.write(stu_info) flag = input ("是否继续添加学生信息?y/n" ) print ("信息录入完毕!!!" ) infile_info.close() def find_info (): flag = 'y' while flag == 'y' or flag == 'Y' : n = 0 m = 0 findfile_info = open ('infile.txt' , 'r' ) line_info = findfile_info.readlines() find_nid = input ("按学号查找请输入1,按姓名查找请输入2:" ) if find_nid == '1' : find_id = input ('请输入学生学号:' ) for line in line_info: if find_id in line: print (line) n = n + 1 if n == 0 : print ("没有查询到学生信息,无数据显示!!!" ) if find_nid == '2' : find_name = input ('请输入学生姓名:' ) for line in line_info: if find_name in line: print (line) m = m + 1 if m == 0 : print ("没有查询到学生信息,无数据显示!!!" ) findfile_info.close() flag = input ("是否继续查询学生信息?y/n" ) def del_info (): flag = 'y' while flag == 'y' or flag == 'Y' : n = 0 defile_info1 = open ('infile.txt' , 'r' ) line_info = defile_info1.readlines() defile_info2 = open ('infile.txt' , 'w' ) del_id = input ("请输入要删除的学生的学号:" ) for line in line_info: if del_id in line: continue defile_info2.write(line) n = n + 1 if n == len (line_info): print ("无此学生信息,请核对后再操作!!!" ) else : print ("学号为{0}的学生信息已被删除!!!" .format (del_id)) defile_info1.close() defile_info2.close() flag = input ("是否继续删除学习信息?y/n" ) def mod_info (): flag = 'y' while flag == 'y' or flag == 'Y' : n = 0 mod_id = input ("请输入要修改的学生学号:" ) modfile_file1 = open ('infile.txt' , 'r' ) line_info = modfile_file1.readlines() modfile_file2 = open ('infile.txt' , 'w' ) for line in line_info: if mod_id in line: print ("已找到学生,请修改信息!" ) mod_name = input ("请输入姓名:" ) mod_score_eng = input ("请输入英语成绩:" ) mod_score_py = input ("请输入python成绩:" ) mod_score_math = input ("请输入数学成绩:" ) mod_sum_score = int (mod_score_eng) + int (mod_score_py) + int (mod_score_math) mod_stu_info = mod_id + '\t' + mod_name + '\t' + mod_score_eng + '\t' + mod_score_py + '\t' + \ mod_score_math + '\t' + str (mod_sum_score) + ' ' modfile_file2.write(mod_stu_info) print ("修改成功!!!" ) continue modfile_file2.write(line) n = n + 1 if n == len (line_info): print ("无此学生信息,请核对后再操作!!!" ) else : print ("学号为{0}的学生信息已修改!!!" .format (mod_id)) modfile_file1.close() modfile_file2.close() flag = input ("是否继续修改学习信息?y/n" ) def sort_info (): flag = 'y' def take_eng (elem ): return int (elem[2 ]) def take_py (elem ): return int (elem[3 ]) def take_math (elem ): return int (elem[4 ]) def take_sum (elem ): return int (elem[5 ]) def output_sort (sort_list ): for m in sort_list: for n in m: print ("%+10s" % n, end=' ' ) print () while flag == 'y' or flag == 'Y' : sortfile_info = open ('infile.txt' , 'r' ) line_info = sortfile_info.readlines() ', ' 2020002 \t王大伟\t85\t96\t99\t280'] # 转化为[[' 2020001 ', ' 李一一', ' 75 ', ' 86 ', ' 89 ', ' 250 '], [' 2020002 ', ' 王大伟', ' 85 ', ' 96 ', ' 99 ', ' 280 ']] lst = [] for i in range(0, len(line_info)): lst.append(' lst' + str(i)) i = 0 for line in line_info: # 遍历列表,将信息转化为单独的列表,并去掉\t和 ,方便接下来的排序比较 line = line.replace(' ', ' ') lst[i] = line.split(' \t') i = i + 1 sort_up_down = input("请选择(0升序,1降序):") print("1.按英语成绩排序,2.按python成绩排序") print("3.按数学成绩排序,4.按学生总成绩排序") sort_term = input("请选择:") if sort_up_down == ' 0 ': # 升序 if sort_term == ' 1 ': lst.sort(key=take_eng, reverse=False) # 以英语成绩升序排序 if sort_term == ' 2 ': lst.sort(key=take_py, reverse=False) if sort_term == ' 3 ': lst.sort(key=take_math, reverse=False) if sort_term == ' 4 ': lst.sort(key=take_sum, reverse=False) output_sort(lst) if sort_up_down == ' 1 ': # 降序 if sort_term == ' 1 ': lst.sort(key=take_eng, reverse=True) # 以英语成绩降序排序 if sort_term == ' 2 ': lst.sort(key=take_py, reverse=True) if sort_term == ' 3 ': lst.sort(key=take_math, reverse=True) if sort_term == ' 4 ': lst.sort(key=take_sum, reverse=True) output_sort(lst) flag = input("是否继续排序信息?y/n") # 统计学生总数 # 输出信息管理系统中有几个学生的信息 def sum_info(): sumfile_info = open(' infile.txt', ' r') line_info = sumfile_info.readlines() sum_stu = len(line_info) # 写出列表中的元素个数 print("一共有{0}名学生。".format(sum_stu)) sumfile_info.close() # 显示学生信息 def show_info(): print("学号", end=' \t\t') print("姓名", end=' \t\t') print("英语成绩", end=' \t\t') print("Python成绩", end=' \t\t') print("数学成绩", end=' \t\t') print("总成绩", end=' \t\t') print(' ') showfile_info = open(' infile.txt', ' r') line_info = showfile_info.readlines() for line in line_info: # 遍历列表,输出各个元素 print(line) showfile_info.close() def show_choose(): print("==========================学生信息管理系统==========================") print() print("-----------------------------功能菜单------------------------------") print() print(" 1.录入学生信息") print(" 2.查找学生信息") print(" 3.删除学生信息") print(" 4.修改学生信息") print(" 5.排序学生信息") print(" 6.统计学生总数") print(" 7.显示学生信息") print(" 0.退出信息管理系统") print() print("------------------------------------------------------------------") def main(): show_choose() choose_menu = input("请选择:") while choose_menu != ' 0 ': if choose_menu == ' 1 ': input_info() if choose_menu == ' 2 ': find_info() if choose_menu == ' 3 ': del_info() if choose_menu == ' 4 ': mod_info() if choose_menu == ' 5 ': sort_info() if choose_menu == ' 6 ': sum_info() if choose_menu == ' 7 ': show_info() choose_menu = input("请选择:") print("欢迎您再次使用!!!") main()