很多学生在学校学习完Python,就要做一个课设考验你对知识的掌握程度,这次就教大家如何来用Python来实现一个学生管理系统
学生管理系统是对学生信息的学生信息的增删查改,另外如需要打印一份文件下来,绘制成纸质的学生名单,所以还需要用到文件操作对其信息进行存档操作以及下一次打开程序,可以看到上一次学生系统的读档操作
一、首先需要一个基本框架,无非就是菜单的打印以及对学生信息的增删查改,因此我们可以通过循环加判断的方式来供用户操作
定义的main函数和菜单代码如下
#菜单
def menu():
print("1.增加学生信息")
print("2.删除学生信息")
print("3.展示学生信息")
print("4.查找学生信息")
print("0.退出系统")
choose = input("请输入:")
return choose
def main():
print("+------------------------------------+")
print("| 欢迎来到学生管理系统 |")
print("+------------------------------------+")
#先进行读档操作,读取上一次创建的学生信息
load()
while True:
choose = menu()
#增加学生信息
if choose == '1':
add()
#删除学生信息
elif choose == '2':
delete()
#查找学生信息
elif choose == '3':
show()
#查找学生信息
elif choose == '4':
fund()
#退出系统
elif choose == '0':
print("goodbye~")
sys.exit(0)
#输入非法
else :
print("输入非法,请重新输入!")
main()
二、增加学生信息操作 ,这里可以考虑用字典来存放每一个学生信息,并且声明一个全局的列表来存放所有学生信息,一旦用字典存好一个学生的信息,立即放入列表内,最后存档操作(后面会细讲)
增加学生信息的代码如下:
# 增加学生信息
def add():
print("[新增学生开始]")
student_id = input("请输入学号:")
student_name = input("请输入学生姓名:")
student_gender = input("请输入学生性别:")
if student_gender not in("男", "女"):
print("输入非法,请输入男或者女!")
class_id = input("请输入学生班级:")
#用一个字典创建学生信息
student = {
"student_id": student_id,
"student_name": student_name,
"student_gender": student_gender,
"class_id": class_id
}
#声明使用全局变量
global students
#增加学生信息到学生列表里面
students.append(student)
print("[增加学生结束]")
#文件保存
save()
三、删除学生信息操作,通过输入要删除的学生的姓名,遍历学生列表,找到相同名字,并删除,如果未能找到学生信息,就打印提示消息,提醒用户没有找到该学生,最后存档
删除学生信息操作代码如下:
# 删除学生信息
def delete():
print("[删除学生开始]")
delete_name = input("请输入您要删除的学生姓名:")
#遍历表格内容找到该学生
for stu in students:
if stu['student_name'] == delete_name:
#找到该学生后删除
students.remove(stu)
print("[删除学生结束]")
# 文件保存
save()
return
print("未能找到该学生!")
四、展示所有学生信息操作,通过遍历学生列表,将学生的学号、姓名、班级打印出来,完成打印后,最后说明一下,一共展示了多少条信息
展示所有学生信息操作代码如下:
#展示所有学生信息
def show():
print("[展示学生信息开始]")
for stu in students:
print(f"学号:[{stu['student_id']}]\t"
f"姓名:[{stu['student_name']}]\t"
f"性别:[{stu['student_gender']}]\t"
f"班级:[{stu['class_id']}]\t")
print("[展示学生信息结束]")
print(f"一共展示了{len(students)}条学生信息")
五、查找指定学生信息操作,首先,输入需要查找的学生姓名,通过遍历学生列表来找到与之对应的学生信息,然后将该学生信息进行打印,同时,若没有找到该学生,需要打印一条信息,用来提醒用户,未找到该学生
查找指定学生信息操作代码如下:
#查找学生信息
def fund():
print("[查找学生开始]")
fund_name = input("请输入您要查找的学生姓名:")
#遍历学生列表查找
for stu in students:
if stu['student_name'] == fund_name:
print(f"学号:[{stu['student_id']}]\t"
f"姓名:[{stu['student_name']}]\t"
f"性别:[{stu['student_gender']}]\t"
f"班级:[{stu['class_id']}]\t")
print("[查找学生结束]")
return
print("查找不到该学生信息!")
六、存档操作,在每次增加学生信息,删除学生信息的时候都要进行存档操作,保证每次关闭程序后,依然可以找到上次记录的学生信息,最后记得提醒用户,成功存档了多少条学生信息
存档操作代码如下:
#文件保存信息
def save():
#将学生信息以utf8的格式保存到名为student.txt的文档中
with open("students.txt", "w", encoding="utf8") as write_in:
for stu in students:
write_in.write(f"{stu['student_id']}\t"
f"{stu['student_name']}\t"
f"{stu['student_gender']}\t"
f"{stu['class_id']}\n")
print(f"存档成功,共存档了{len(students)}条信息!")
七、读档操作,需要在学生管理系统这个程序启动的开头进行一次读档,将上一次创建的学生信息读取到当前系统中,读取的时候记得去掉空白符,并切割字符串,循环用字典保存每一个学生的信息,每记录一个学生信息,立刻存放到学生列表当中,最后,需要提醒用户,以及读档了多少学生信息
读档操作的代码如下:
#从文件中读取信息
def load():
#判断以前是否有创建过文件,如果有,进行读档,若没有,则进行return
if not os.path.exists("students.txt"):
return
#保证旧文件为空
global students
students = []
# 将学生信息以utf8的格式从文件中读取出来
with open("students.txt", "r", encoding="utf8") as read_in:
for line in read_in:
#去掉首尾的空白符
line = line.strip()
#切割字符串
string = line.split("\t")
#确保读档时,被读档的文件格式正确,若有格式不对的行,则显示出来
if len(string) != 4:
print(f"line = {len(line)} 这一行格式存在问题 ")
#格式有问题,这一行就不要读了,直接看下一行
continue
#将这一个学生成绩存入字典
student = {
"student_id": string[0],
"student_name": string[1],
"student_gender": string[2],
"class_id": string[3]
}
#将这个学生成绩存入学生列表
students.append(student)
print(f"读档成功,共读取了{len(students)}个学生数据!")
最后祝你课设成功通过~

我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。