问题:学生管理系统

python学习

学生管理系统问题
with open('student_information.py') as si:
      l = eval(si.read())
s = {}
print("欢迎使用学生信息管理系统!\n"
      "退出请按0\n"
      "加入学生信息请按1\n"
      "查询学生信息请按2\n"
      "删除学生信息请按3\n"
      "展示所有学生信息请按4\n")

while True:
      try:
            choice = int(input("下面请选择你的操作:"))

            if choice == 1:
                  h = int(input("\t请输入学生学号:"))
                  n = str(input("\t请输入学生姓名:"))
                  y = int(input("\t请输入学生年龄:"))
                  for i in l.keys():
                        if h == i:
                              answer = input("该学生信息已经存在,请删除后重新填入。")
                              break
                  else:
                        s['姓名'] = n
                        s['年龄'] = y
                        s['学号'] = h
                        print(f'\t{n}的信息已导入。')
                        l[h] = s
                        s = {}

            elif choice == 2:
                  if l == {}:
                        print("\t系统中没有任何学生信息。")
                  a = eval(input("\t请输入你要查询的学生学号:"))
                  for t in l.keys():
                        if a == t:
                              for a,b in l[a].items():
                                     print(f'{a}:{b}',end=' ')
                              print(" ")
                              break
                  else:
                        print("\t没有该学生的信息")

            elif choice == 3:
                  a = int(input("\t请输入你要删除的学生学号:"))
                  t = l.copy()
                  for i in t.keys():
                        if a == i:
                              del l[a]
                              print(f"\t该生信息已被删除")
                              break
                  else:
                        print("\t此学号不存在.")

            elif choice == 4:
                  if l=={}:
                        print("系统中没有任何学生信息。")
                  else:
                        x = []
                        for i in l.keys():
                              x.append(i)
                        x.sort()
                        for j in x:
                              for a,b in l[j].items():
                                    print(f'{a}:{b}',end=' ')
                              print(" ")
            elif choice == 0:
                  print("欢迎使用,下次再见。")
                  break
            else:
                  print("请正确输入!")
      except:
            print("请正确输入!")
with open('student_information.py','w') as si:
      si.write(f'{l}')    

具体代码如上

其中我遇到的问题有:如何对学生信息按照学号排列。

我想到运用字典的嵌套方法:将学号作为键,通过提取大字典l中的键

放进列表中运用sort()函数进行排序,再遍历列表,打印出学生信息。

但是,解决问题是遇到列表中无法对学号进行排序的问题。

最后我发现是在用户输入学号时,输入的学号是字符型,而不是整型,

从而无法实现,列表的排序。

还有一个问题:在查询学生信息时,即使存在学生信息也会输出“该生信息不存在。

                  s = {}

      elif choice == '2':
            a = eval(input("\t请输入你要查询的学生学号:"))
            if l == {}:
                  print("\t系统中没有任何学生信息。")
            for t in l.keys():
                  if a == t:
                        print(l[a])
            else:
                  print("该生信息不存在")

这串代码忽略了break,使得即使存在学生信息也会输出不存在。

总结

通过上面的问题,以后应该注意,用户输入的值的类型,以及循环的退出。

改进1

一个学生系统应当要能够储存学生的信息,而不是只能在一次运行中存储学生数据。

所以想要实现该操作应当要对代码进行改进。

这就需要再创建一个文件来存储学生信息。

通过学习,我了解到了以下方法

想法1:

利用json模块,利用json格式对学生信息字典进行存储,其实刚开始我的想法是通过文件读写方式进行存储与读写。但是存储与读写都为字符型,所以采用json模块。

但是json模块在读入学生信息的字典时不知道为什么会自动将字典的key转换为字符型,使我上面通过利用学号进行排序的操作无法实现。

所以还是采用文件的读写方式

想法2:

通过open()函数打开存储文件,分别通过文件的读写形式实现对学生信息的存储和读取。只需要注意对文件内容的去字符型就可以。

with open('student_information.py') as si:
      l = eval(si.read())
.......
with open('student_information.py','w') as si:
      si.write(f'{l}')

具体添加的代码如上.

还需要在读取的文件student_information.py中加入一个空的字典,对l进行赋值操作。

改进2

输出学生信息包含在字典中不太美观。

所以应当使用字典的遍历输出学生信息。

但是python与c语言不同,每次输出学生的一个信息就自动换行,这不也不太好,所以需要掌握,python换行的操作

print("asda",end=' ')

其中end中的输入便是识别换行的符号,这样只有读到这个符号python才会自动换行。

改进3

用户输入常常会犯错,如果一直用if语句来判断用户是否输入错误,不太方便,但如果输入出错,程序又会报错,

所以我们采用try-except来避免程序报错具体如下。

            try:
                  h = eval(input("\t请输入学生学号:"))
                  n = str(input("\t请输入学生姓名:"))
                  y = eval(input("\t请输入学生年龄:"))
                  for i in l.keys():
                        if h == i:
                              answer = input("该学生信息已经存在,请删除后重新填入。")
                              break
                  else:
                        s['姓名'] = n
                        s['年龄'] = y
                        s['学号'] = h
                        print(f'\t{n}的信息已导入。')
                        l[h] = s
                        s = {}
            except:
                  print("请正确输入!")
posted @ 2022-10-24 12:57  牛鱼针  阅读(65)  评论(0)    收藏  举报