Python 函数封装之"学生信息管理系统"


  1 # 学生信息管理系统  ——  函数封装
  2 
  3 """
  4 思考:
  5     1、学生信息有哪些?
  6     2、是否区分学生、老师、管理员权限
  7     3、该怎么存储学生信息
  8     4、是否需要登录界面
  9 
 10 介绍:
 11     在工作生活中,信息管理很常见、例如:文件归档、账户流水账、登录信息、宿舍管理、购票管理、学生信息管理等。
 12 
 13 知识点:
 14     1、自定义函数的使用:函数封装、调用,使用到了默认参数和关键字参数
 15     2、字典的使用:增 删 改 查 遍历
 16     3、循环语句:while、for
 17     4、条件语句:if、elif、else
 18     5、跳转语句:break、continue
 19     6、字符串运算
 20     7、旗帜应用,这个很重要
 21 
 22 不足(待改善):
 23     1、在打印学生信息使用到了制表符'\t',但打印出来的效果并不理想,有哪位高人可以指点一下
 24     2、此程序无太强的可读性,后续可以完善,添加一些条件和提示语
 25     3、字典的特点:无法存储两个姓名一样的学生,体现了字典的不可重复性
 26     4、在新建学生信息时,如果出现重复新建,会覆盖原有的学生信息,等价于修改了学生信息,可以添加遍历判断
 27     5、程序员的愤怒“删除库跑路”,在本程序没有体现,可以利用clear()函数实现
 28     6、最大的通病:没有实际保存,退出程序即恢复出厂设置,有待改善
 29 """
 30 
 31 
 32 # 定义一个空字典,用存储学生信息   # 字典的特点:元素不可重复、元素无序
 33 stu_info = dict()
 34 message = '请输入编号:'
 35 
 36 
 37 # 函数封装  ==========================================================
 38 # 菜单打印
 39 def menu():
 40     print(' ' + '='*5 + '欢迎进入学生管理系统' + '='*5)
 41     print('1.新建学生信息\t2.删除学生信息')
 42     print('3.修改学生信息\t4.查寻学生信息')
 43     print('5.查看所有学生信息\t0.退出')
 44 
 45 
 46 # 打印标题  ==========================================================
 47 def show_title(num1=0, info='='*10, num=9):
 48     print(' '*num1 + '=' * num + info + '=' * num)
 49 
 50 
 51 # 输入编号(选择菜单)    ==============================================
 52 def input_num(message):
 53     return input(message)
 54 
 55 
 56 # 1.新建学生信息  ====================================================
 57 def new_stu_info():
 58     show_title(info='新建学生信息')        # 打印标题
 59 
 60     # 输入学生信息
 61     name = input('请输入学生姓名:')
 62     stu_id = input('请输入学生学号:')
 63     phone_num = input('请输入学生手机号码:')
 64     addr = input('请输入学生家庭地址:')
 65 
 66     # 存储学生信息(添加到字典中)
 67     stu_info[name] = [stu_id, phone_num, addr]
 68     # student_info.update(name=[stu_id, phone_num, addr])   # 注意:这里字典添加元素不能用update()
 69 
 70 
 71 # 2.删除学生信息  ====================================================
 72 def del_stu_info():
 73     show_title(info='删除学生信息')        # 打印标题
 74 
 75     # 判断字典是否为空
 76     if stu_info == dict():
 77         show_title(info='暂无学生信息')    # 打印提示
 78         return
 79 
 80     # 输入需要删除的学生姓名
 81     name = input('请输入需要删除的学生姓名:')
 82     flag_del = 0                                # 定义删除的旗帜
 83 
 84     # 在字典中查找是否存在
 85     for i in stu_info:
 86         if name == i:
 87             print('学生姓名:{}\t学号:{}\t手机号码:{}\t家庭地址:{}'.format(name, stu_info[i][0], stu_info[i][1], stu_info[i][2]))
 88 
 89             stu_info.pop(name)                      # 删除字典元素
 90             show_title(info='已删除成功', num1=1)    # 打印删除成功
 91             flag_del = 1                            # 删除旗帜赋值
 92             break
 93 
 94     # 判断是否删除此学生信息
 95     if flag_del != 1:
 96         show_title(info='无此学生信息')    # 打印提示
 97 
 98 
 99 # 3.修改学生信息  ====================================================
100 def change_stu_info():
101     show_title(info='修改学生信息')        # 打印标题
102 
103     # 判断字典是否为空
104     if stu_info == dict():
105         show_title(info='暂无学生信息')    # 打印提示
106         return
107 
108     # 输入需要修改的学生姓名
109     name = input('请输入需要修改的学生姓名:')
110     flag_change = 0                               # 定义修改的旗帜
111 
112     # 在字典中查找是否存在
113     for i in stu_info:
114         if name == i:
115 
116             # 输入学生新的信息
117             new_name = input('请输入学生新的姓名:')
118             new_stu_id = input('请输入学生学号:')
119             new_phone_num = input('请输入学生手机号码:')
120             new_addr = input('请输入学生家庭地址:')
121 
122             # 判断是否需要删除原来的元素
123             if new_name != name:
124                 stu_info.pop(name)              # 删除原来的元素
125 
126             # 存储修改后学生信息
127             stu_info[new_name] = [new_stu_id, new_phone_num, new_addr]
128 
129             print('学生姓名:{}\t学号:{}\t手机号码:{}\t家庭地址:{}'.format(new_name, new_stu_id, new_phone_num, new_addr))
130             show_title(info='已修改成功', num1=1)         # 打印已修改成功
131 
132             flag_change = 1                     # 修改旗帜赋值
133             break
134 
135     # 判断是否修改此学生信息
136     if flag_change != 1:
137         show_title(info='无此学生信息')    # 打印提示
138 
139 
140 # 4.查寻学生信息  ====================================================
141 def find_stu_info():
142     show_title(info='查寻学生信息')                # 打印标题
143 
144     # 判断字典是否为空
145     if stu_info == dict():
146         show_title(info='暂无学生信息')            # 打印提示
147         return
148 
149     # 输入需要查询的学生姓名
150     name = input('请输入需要查询的学生姓名:')
151     flag_find = 0                                       # 定义查询的旗帜
152 
153     # 在字典中查找是否存在
154     for i in stu_info:
155         if name == i:
156             print('学生姓名:{}\t学号:{}\t手机号码:{}\t家庭地址:{}'.format(name, stu_info[i][0], stu_info[i][1], stu_info[i][2]))
157 
158             flag_find = 1                               # 查询旗帜赋值
159             break
160 
161     # 判断是否查询到此学生信息
162     if flag_find != 1:
163         show_title(info='无此学生信息')            # 打印提示
164 
165 
166 # 5.查看所有学生信息    ===============================================
167 def show_all_stu():
168     show_title(info='查看所有学生信息', num=7, num1=1)      # 打印标题
169 
170     # 判断字典是否为空
171     if stu_info == dict():
172         show_title(info='暂无学生信息')             # 打印提示
173         return
174 
175     # 遍历打印学生信息
176     for i in stu_info:
177         print('学生姓名:{}\t学生学号:{}\t手机号码:{}\t家庭地址:{}' .format(i, stu_info[i][0], stu_info[i][1], stu_info[i][2]))
178 
179 
180 # 等价于C语言的主函数    ===============================================
181 while True:
182 
183     menu()                          # 打印菜单
184     num = input_num(message)        # 选择菜单
185 
186     # 1.新建学生信息
187     if num == '1':
188         new_stu_info()              # 调用函数
189 
190     # 2.删除学生信息
191     elif num == '2':
192         del_stu_info()              # 调用函数
193 
194     # 3.修改学生信息
195     elif num == '3':
196         change_stu_info()           # 调用函数
197 
198     # 4.查寻学生信息
199     elif num == '4':
200         find_stu_info()             # 调用函数
201 
202     # 5.查看所有学生信息
203     elif num == '5':
204         show_all_stu()              # 调用函数
205 
206     # 0.退出
207     elif num == '0':
208         show_title(info='已退出', num=11, num1=1)              # 装13的打印方式,利用函数封装,然后调用
209         # print(' '*1 + '='*11 + '已退出' + '='*11)            # 有基础的打印方式,利用字符串运算(只能用加法和乘法)
210         break
211 
212     # 其他
213     else:
214         show_title(info='输入有误!', num=10)                    # 装13的打印方式,利用函数封装,然后调用
215         # print('==========输入有误!==========')                # 最原始的打印方式,打印什么写什么
216 
217         message = '请重新输入编号:'
218         continue
219 
220     message = '请输入编号:'

运行结果:

作者:周华

创作日期:2022/5/25