Pycharm小试牛刀(一)——学生管理系统
Pycharm小试牛刀——学生管理系统目录需求分析系统设计功能模块设计3.1录入学生信息功能3.2删除学生信息功能3.3修改学生信息功能3.4查询学生信息功能3.5统计学生总人数功能3.6显示所有学生信息的功能3.7显示所有学生信息的功能项目打包1. 需求分析首先我们得明确学生管理系统应该具备的功能:添加学生及其成绩的信息 insert()将学生信息保存到文件中修改modify()和删除信息del
Pycharm小试牛刀(一)——学生管理系统
目录
- 需求分析
- 系统设计
- 功能模块设计
3.1 录入学生信息功能
3.2删除学生信息功能
3.3修改学生信息功能
3.4查询学生信息功能
3.5统计学生总人数功能
3.6显示所有学生信息的功能
3.7显示所有学生信息的功能 - 项目打包
1. 需求分析
首先我们得明确学生管理系统应该具备的功能:
- 添加学生及其成绩的信息
insert()
- 将学生信息保存到文件中
- 修改
modify()
和删除信息delete()
- 查询学生信息
search()
- 根据学生成绩进行排序
sort()
- 统计学生的总分数
- 统计学生总人数
total()
- 显示所有学生信息
show()
2. 系统设计
流程图:
代码演示:
def main():#创建主函数
while True:
menu()
choice=int(input('请选择'))
if choice in [0,1,2,3,4,5,6,7]:
if choice==0:
answer=input('您要退出学生管理系统?Y|F')
if answer=='y'or'Y':
print('谢谢使用!')
break #退出系统
else:
continue
if choice==1:
insert()
if choice==2:
search()
if choice==3:
modify()
if choice==4:
delete()
if choice==5:
show()
if choice==6:
total()
if choice==7:
sort()
def menu(): #创建菜单
print('=======================学生管理系统======================')
print('--------------------------主菜单------------------------')
print('1.录入学生信息')
print('2.查询学生信息')
print('3.修改学生信息')
print('4.删除学生信息')
print('5.显示所有学生信息')
print('6.统计学生总人数')
print('7.排序')
print('0.退出学生系统')
print('-------------------------------------------------------')
#创建功能函数
def insert():
pass
def search():
pass
def modify():
pass
def delete():
pass
def show():
pass
def total():
pass
def sort():
pass
#调用主函数
if __name__ == '__main__':
main()
结果展示:
3. 功能模块设计
3.1录入学生信息功能
从控制台录入学生信息,并把它保存到磁盘文件中。
流程图:
所用到的函数:insert()
save()
代码演示:
#创建功能函数
filname='stu_inf.txt'#写到代码最前面
def insert():#录入学生信息
st_list=[]
while True:
st_num=int(input('请输入学生学号(如:21001):'))
if not st_num:
break
st_name=input('请输入学生姓名:')
if not st_name:
break
try: #防止出现异常
english_score=int(input('请输入英语成绩:'))
algeb_score=int(input('请输入线代成绩:'))
paintting_score = int(input('请输入绘画成绩:'))
socar_score = int(input('请输入足球成绩:'))
except:
print('输入无效,请重新输入!')
continue
#将输入的学生信息保存到字典
st_inf={'学号':st_num,'姓名':st_name,'英语成绩':english_score,'线代成绩':algeb_score,'绘画成绩':paintting_score,'足球成绩':socar_score}
st_list.append(st_inf)
answer=input('是否继续添加?y/n\n')
if answer=='y':
continue
else:
break
save(st_list) #用于存储信息到文件中
print('学生信息录入完毕!')
def save(lst):
try:
st_txt=open(filname,'a',encoding='Utf-8')
except:
st_txt=open(filname,'w',encoding='Utf-8')
for item in lst:
st_txt.write(str(item)+'\n')
st_txt.close()
结果:
而且我们会发现,系统帮我们建立了一个stu_inf.txt
文件:
3.2删除学生信息功能
从控制台录入学生学号,到磁盘中找到对应的学生信息,并将其删除。
流程图:
代码:
def delete():
while True:
st_num=int(input('请输入要删除的学生的学号:'))
if st_num!=' ':
if os.path.exists(filname):
with open(filname,'r',encoding='utf-8') as file:
st_lin=file.readlines()
else:
st_lin=[]
flag=False #判断是否被删除,默认为F,没有删除
if st_lin: #不为空的话,布尔值为T,然后就把列表的内容写入空字典
with open(filname,'w',encoding='utf-8') as file1:
s={}
for item in st_lin:
s=dict(eval(item))#将字符串类型转化为字典类型
if s['学号']!=st_num:
file1.write(str(s)+'\n')
else:
flag=True #表示已删除
if flag:
print('学号为%d的学生信息已删除',st_num)
else:
print('没有找到学号为%d的学生的信息',st_num)
else:
print('无学生信息!')
break
show() #重新显示学生信息
answer=input('请问是否继续删除?y/n')
if answer=='y':
continue
else:
print('谢谢使用!')
break
结果展示:
3.3修改学生信息功能
从控制台录入学生学号,到磁盘中找到对应的学生信息,将其进行修改。
代码:
def modify():
if os.path.exists(filname):
with open(filname,'r',encoding='utf-8') as mfile:
st_orignal=mfile.readlines()
else:
print('学生文件为空!')
st_num=int(input('请输入要修改的学生的学号:'))
with open(filname, 'w', encoding='utf-8') as ofile:
for item in st_orignal:
s=dict(eval(item))
if s['学号']==st_num:
print('找到该学生的信息,请修改。')
while True:
try:
s['姓名']=input('请输入学生姓名')
s['英语成绩'] = input('请输入英语成绩')
s['线代成绩'] = input('请输入线代成绩')
s['绘画成绩'] = input('请输入绘画成绩')
s['足球成绩'] = input('请输入足球成绩')
except:
print('输入有误,请重新输入!')
else: #修改成功则退出,如果不加,会一直运行
break
ofile.write(str(s)+'\n')
print('修改成功!')
else:
ofile.write(str(s)+'\n')
if st_num not in s.values():
print('没有找到该学生信息。')
answer=input('是否继续修改学生信息?y/n')
if answer=='y':
modify()
结果:
3.4查询学生信息功能
从控制台录入学生学号或姓名,到磁盘文件中,找到对应的学生信息。
假如按学号查询是1,按姓名查是2。
流程图:
代码:
def search():
st_querry=[]
while True:
st_num=''
st_name=''
if os.path.exists(filname):
with open(filname, 'r', encoding='utf-8') as sfile:
st_orignal = sfile.readlines()
else:
print('学生文件为空!')
break
mode=int(input('按学号查请输1,按姓名查请按2。'))
if mode==1:
st_num=int(input('请输入学生学号:'))
if not st_num:
break
elif mode==2:
st_name=int(input('请输入学生姓名:'))
if not st_name:
break
else:
search()
return
with open(filname,'w',encoding='utf-8') as sefile:
for item in st_orignal:
s=dict(eval(item))
if s['学号']==st_num:
st_querry.append(s)
elif s['姓名']==st_name:
st_querry.append(s)
#显示查询结果
show_st(st_querry)
#清空列表,以防下次查找,列表中有数据
st_querry.clear()
answer=input('请问还继续查找吗?y/n')
if answer=='y':
continue
else:
break
def show_st(lst):
if len(lst)==0:
print('没有查到学生信息。')
return
#定义标题显示格式
format_title='{:^6}\t{:^10}\t{:^10}\t{:^12}\t{:^12}\t{:^12}\t{:^12}\t'
print(format_title.format('学号','姓名','英语成绩','线代成绩','绘画成绩','足球成绩','总成绩'))
# 定义内容显示格式
format_content ='{:^6}\t{:^10}\t{:^10}\t{:^12}\t{:^12}\t{:^12}\t{:^12}\t'
for item in lst:
print(format_title.format(item.get('学号'),
item.get('姓名'),
item.get('英语成绩'),
item.get('线代成绩'),
item.get('绘画成绩'),
item.get('足球成绩'),
int(item.get('英语成绩'))+int(item.get('线代成绩'))+int(item.get('绘画成绩'))+int(item.get('足球成绩'))))
def modify():
if os.path.exists(filname):
with open(filname,'r',encoding='utf-8') as mfile:
st_orignal=mfile.readlines()
else:
print('学生文件为空!')
st_num=int(input('请输入要修改的学生的学号:'))
with open(filname, 'w', encoding='utf-8') as ofile:
for item in st_orignal:
s=dict(eval(item))
if s['学号']==st_num:
print('找到该学生的信息,请修改。')
while True:
try:
s['姓名']=input('请输入学生姓名')
s['英语成绩'] = input('请输入英语成绩')
s['线代成绩'] = input('请输入线代成绩')
s['绘画成绩'] = input('请输入绘画成绩')
s['足球成绩'] = input('请输入足球成绩')
except:
print('输入有误,请重新输入!')
else: #修改成功则退出,如果不加,会一直运行
break
ofile.write(str(s)+'\n')
print('修改成功!')
else:
ofile.write(str(s)+'\n')
if st_num not in s.values():
print('没有找到该学生信息。')
return
answer=input('是否继续修改学生信息?y/n')
if answer=='y':
modify()
结果:
3.5统计学生总人数功能
流程图:
代码:
def total():
if os.path.exists(filname):
with open(filname,'r',encoding='utf-8') as tfile:
st_lis=tfile.readlines()
if st_lis:
print(f'一共有{len(st_lis)}个学生。')
else:
print('没有学生信息!')
else:
print('没有数据信息!')
结果:
3.6显示所有学生信息的功能
将学生的信息文件中保存的全部学生信息获取并显示。
代码:
def show():
st_lis=[]
if os.path.exists(filname):
with open(filname,'r',encoding='utf-8') as sfile:
st_orignal=sfile.readlines()
for item in st_orignal:
st_lis.append(eval(item))
if st_orignal:
show_st(st_lis)
else:
print('没有学生信息!')
else:
print('没有数据信息!')
结果:
3.7显示所有学生信息的功能
根据学生的成绩进行升序或降序排列。
假设选择0表示升序排序,选择1表示降序排序。
流程图:
代码:
def sort():
if os.path.exists(filname):
st_quer=[]
st_new = []
with open(filname,'r',encoding='utf-8') as sfile:
st_quer=sfile.readlines()
if st_quer:
for item in st_quer:
s=dict(eval(item))
st_new.append(s)
else:
return
mode1=input('请选择(0.升序 1.降序):')
if mode1=='0':
mode1_bool=False
elif mode1=='1':
mode1_bool=True
else:
print('您的输入有误,请重新输入!')
sort()
mode2=int(input('请选择按照(1.英语成绩 2.线代成绩 3.绘画成绩 4.足球成绩 )排序:'))
if mode2==1:
st_new.sort(key=lambda x:int(x['英语成绩']),reverse=mode1_bool)#匿名函数 lambda x
elif mode2==2:
st_new.sort(key=lambda x:int(x['线代成绩']),reverse=mode1_bool)
elif mode2==3:
st_new.sort(key=lambda x:int(x['绘画成绩']),reverse=mode1_bool)
elif mode2==4:
st_new.sort(key=lambda x:int(x['足球成绩']),reverse=mode1_bool)
else:
print('您的输入有误,请重新输入!')
sort()
show_st(st_new)
else:
return
结果:
4. 项目打包
打开终端
写入pip install PyInstaller
安装完成后
在终端输入:
生成后,终端显示的倒数第几行会有.exe
文件的位置。我忘了截图了。
我图有点小,有点没对齐。
完整代码,我已经上传了,但是我记得之前资源分项有一个粉丝免费下载,上传时没看到,有知道怎么搞的小伙伴请留言。
完整代码链接:
链接: link.
另外,我趁热打铁做了一个简单的记账系统链接: link.
更多推荐
所有评论(0)