Python自学30——第十五章:大工程:学生管理系统~~~~~完结撒花!!~~~~~

第十五章

零、工程实践流程

面对一个工程要按照以下的步骤进行设计:

一、学生管理系统需求分析

二、学生管理系统系统设计

1、七大模块

2、思维导图

3、业务流程

三、学生管理系统系统开发必备

1、系统开发环境

操作系统是:win11

Python解释器版本:2020.1.2

开发工具:pycharm

Python内置模块:os,re

2、项目目录结构

在chap15中有一个保存学生信息的文件(由系统自动创建),还有一个实现集体功能的Python文件。

四、学生管理系统主函数设计

1、系统主界面效果图

2、业务流程图

3、主函数的实现

4、主函数代码

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/n')
               
if answer == 'y' or answer == 'Y':
                   
print('
谢谢你的使用!!!!!')
                   
break
                else
:
                   
continue
            elif
choice == 1: '''
if要对应多个else记得用elif'''
           
insert()  #
录入信息
        elif choice == 2:
           
search()  #
查找信息
        elif choice == 3:
           
delete()  #
删除信息
        elif choice == 4:
           
modify()  #
修改信息
        elif choice == 5:
           
sort()  #
排序
        elif choice == 6:
           
total()  #
统计学生总人数
        elif choice == 7:
           
show()  #
显示所有学生信息
        #elif type(choice) == str or choice not in [0, 1, 2, 3, 4, 5, 6, 7]:
       
else:
           
print('
输入错误,请重新输入:')
           
continue

def
menu():#
主菜单
    print('====================学生管理系统====================')
   
print('---------------------
功能菜单----------------------')
   
print( '\t\t\t1
、录入学生信息\n\t\t\t2、查找学生信息\n\t\t\t3、删除学生信息\n\t\t\t4、修改学生信息\n\t\t\t5、排序\n\t\t\t6、统计学生总人数\n\t\t\t7、显示所有学生信息\n\t\t\t0、退出系统')
   
print('-------------------------------------------------')
def insert():#
录入学生信息
    pass
def
search():
   
pass
def
delete():
   
pass
def
modify():
   
pass
def
sort():
   
pass
def
total():
   
pass
def
show():
   
pass
if
__name__=='__main__':#
以主程序方式运行,在没编完代码的时候就起到作用了
    main()

5、实现结果

五、学生管理系统录入信息功能的设计

1、系统主界面效果图

2、业务流程图

3、具体实现

需要两个函数:

4、本部分代码
filename='student.txt'
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/n')
               
if answer == 'y' or answer == 'Y':
                    print('谢谢你的使用!!!!!')
                   
break
                else
:
                    continue
            elif
choice == 1:
                '''若if要对应多个else记得用elif'''
           
insert()  # 录入信息
       
elif choice == 2:
            search()  # 查找信息
       
elif choice == 3:
            delete()  # 删除信息
       
elif choice == 4:
            modify()  # 修改信息
       
elif choice == 5:
            sort()  # 排序
       
elif choice == 6:
            total()  # 统计学生总人数
       
elif choice == 7:
            show()  # 显示所有学生信息
        #elif type(choice) == str or choice not in [0, 1, 2, 3, 4, 5, 6, 7]:
       
else:
            print('输入错误,请重新输入:')
           
continue


def
menu():#主菜单
   
print('====================学生管理系统====================')
    
print('---------------------功能菜单----------------------')
   
print(
       
'\t\t\t1、录入学生信息\n\t\t\t2、查找学生信息\n\t\t\t3、删除学生信息\n\t\t\t4、修改学生信息\n\t\t\t5、排序\n\t\t\t6、统计学生总人数\n\t\t\t7、显示所有学生信息\n\t\t\t0、退出系统')
   
print('-------------------------------------------------')


def insert():#录入学生信息
   
student_list=[]
   
while True:
        id=input('请输入ID(如1001):')
       
if not id:
            print('输入的是空字符串!!!!!')
           
break
       
name=input('请输入姓名:')
       
if not name:
            print('输入的是空字符串!!!!!')
           
break
        try
:
            englist=int(input('请输入英语成绩:'))
           
Python=int(input('请输入python成绩:'))
           
java = int(input('请输入java成绩:'))
       
except:
            print('输入无效,不是整数类型,请重新输入!!!!')
           
continue
       
#将录入的学生信息存入字典中
       
student={'id':id,'name':name,'englist':englist,'python':Python,'java':java}
       
#将学生信息添加到列表中
       
student_list.append(student)
       
answer=input('是否继续添加?y/n')
       
if answer=='y':
            continue
        else
:
            break
   
#调用save函数
   
save(student_list)
   
print('学生信息录入完毕!!')

def save(lst):
    try:
        stu_txt=open(filename,'a',encoding='utf-8')
   
except:
        stu_txt=open(filename, 'w', encoding='utf-8')
   
for item in lst:
        stu_txt.write(str(item)+'\n')
   
stu_txt.close()

def search():
    pass
def
delete():
    pass
def
modify():
    pass
def
sort():
    pass
def
total():
    pass
def
show():
    pass
if
__name__=='__main__':#以主程序方式运行,在没编完代码是时候就起到作用了
   
main()

5、实现结果

我们可以看到输入的成绩等信息被录入到了一个叫student的txt文件里了:

六、学生管理系统录入信息功能的设计

1、系统主界面效果图

2、业务流程图

3、具体实现

4、delete部分代码

def delete():
    while True:
        id=input('
请输入要删除的学生的ID')
       
if id!='':
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8') as file:
                    student_old=file.readlines()
           
else:
                student_old=[]
           
flag=False
            if
student_old:
                with open(filename,'w',encoding='utf-8') as wfile:
                    d=[]
                   
for itemm in student_old:
                        d=dict(eval(item))
                       
if d['id']!=id:
                            wfile.write(str(d)+'\n')
                       
else:
                            flag=True
                    if
flag:
                        print(f'ID
{id} 学生信息已被删除')
                   
else:
                        print(f'
没有找到ID{id}的学生信息')
           
else:
                print('
无学生信息')
               
break
           
show()
           
answer=input('
继续删除吗?y/n\n')
           
if answer=='y':
                continue
            else
:
                break

5、实现结果

七、整体代码

import os
filename = 'stduent.txt'
def main():
    while True:
        caidan()
        choice = int(input('请输入选项对应的数字:'))
        if choice in [1, 2, 3, 4, 5, 6, 7, 8]:
            if choice == 8:
                b = input('您真的要退出系统吗?(y/n)')
                if b == 'y' or b == 'Y':
                    print('谢谢您的使用')
                    break
                else:
                    continue
            elif choice == 1:
                luru()
            elif choice == 2:
                chazhao()
            elif choice == 3:
                shanchu()
            elif choice == 4:
                xiugai()
            elif choice == 5:
                paixu()
            elif choice == 6:
                tongji()
            elif choice == 7:
                xianshi()

def caidan():
    print('=======================学生信息管理系统=============================')
    print('-----------------------------------------------------------------')
    print('\t\t\t\t\t\t1.录入学生信息')
    print('\t\t\t\t\t\t2.查找学生信息')
    print('\t\t\t\t\t\t3.删除学生信息')
    print('\t\t\t\t\t\t4.修改学生信息')
    print('\t\t\t\t\t\t5.排序')
    print('\t\t\t\t\t\t6.统计学生总人数')
    print('\t\t\t\t\t\t7.显示所有学生信息')
    print('\t\t\t\t\t\t8.退出系统')
    print('-----------------------------------------------------------------')

def luru():
    while True:
        studentlist = []
        id = input('请输入学号:')
        if not id:  # 空字符的返回值是flase
            break
        name = input('请输入学生姓名:')
        if not name:
            break
        try:
            english = int(input('请输入英语成绩:'))
            java = int(input('请输入java成绩:'))
            python = int(input('请输入python成绩:'))
        except:
            print('输入无效,请重新输入')
            continue
        student = {'id': id, 'name': name, 'english': english, 'java': java, 'python': python}
        studentlist.append(student)
        baocun(studentlist)
        answer = input('是否继续录入(y/n):')
        if answer == 'y':
            continue
        else:
            break
    print('学生信息录入完毕')

def baocun(lst):
    try:
        stutxt = open(filename, 'a', encoding='utf-8')
    except:
        stutxt = open(filename, 'w', encoding='utf-8')
    for i in lst:
        stutxt.write(str(i) + '\n')
    stutxt.close()

def chazhao():
    student = []
    while True:
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8')as rfile:
                c = rfile.readlines()
            id = ''
            nmae = ''
            a = input('请问采取什么方式查找,学号按1,姓名按2:')
            if a == '1':
                id = input('请输入学号:')
            elif a == '2':
                name = input('请输入姓名:')
            else:
                print('你的输入结果错误,请重新输入')
                continue
            with open(filename, 'r', encoding='utf-8')as rfile:
                for i in c:
                    d = dict(eval(i))
                    if id != '':
                        if d['id'] == id:
                            student.append(d)

                    elif name != '':
                        if d['name'] == name:
                            student.append(d)
            show(student)
            student.clear()
            answer = input('是否继续查找(y/n):')
            if answer == 'y':
                continue
            else:
                break

def show(lst):
    if len(lst) == 0:
        print('没有查到学生信息,无数据显示')
        return
    title = '{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^10}\t{:^8}'
    print(title.format('学号', '姓名', '英语成绩', 'Python成绩', 'Java成绩', '总成绩'))
    data = '{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^10}\t{:^12}'
    for i in lst:
        print(data.format(i.get('id'),
                          i.get('name'),
                          i.get('english'),
                          i.get('java'),
                          i.get('python'),
                          int(i.get('english')) + int(i.get('java')) + int(i.get('python'))
                          ))

def shanchu():
    while True:
        a = input('请输入要被删除学生的id:')
        if a != '':
            if os.path.exists(filename):
                with open(filename, 'r', encoding='utf-8')as file:
                    b = file.readlines()  # 返回值是列表
        else:
            b = []
        flag = False
        if b:
            with open(filename, 'w', encoding='utf-8')as wfile:
                d = {}
                for i in b:
                    d = dict(eval(i))  # 将在字符串转换成字典
                    if d['id'] != a:
                        wfile.write(str(d) + '\n')
                    else:
                        flag = True
                if flag:
                    print('该学生的信息已被删除')
                else:
                    print('未找到id')
        else:
            print('无学生信息')
            break
        xianshi()
        c = input('请问还要继续删除学生信息吗(y/n):')
        if c == 'y' or c == 'Y':
            continue
        else:
            break

def xiugai():
    xianshi()
    while True:
        a = input('请输入要修改信息的学生的学号:')
        if a != '':
            if os.path.exists(filename):
                with open(filename, 'r', encoding='utf-8')as file:
                    b = file.readlines()
        else:
            b = []
        flag = False
        if b:
            with open(filename, 'w', encoding='utf-8')as wfile:
                for i in b:
                    d = dict(eval(i))
                    if d['id'] == a:
                        print('找到相关学生的信息了!')
                        while True:
                            try:
                                d['name'] = input('请输入姓名:')
                                d['english'] = int(input('请输入英语成绩:'))
                                d['java'] = int(input('请输入java成绩:'))
                                d['python'] = int(input('请输入python成绩:'))
                            except:
                                print('输入有错误,请重新输入')
                                continue
                            else:
                                wfile.write(str(d) + '\n')
                                flag = True
                                break
                    else:
                        wfile.write(str(d) + '\n')
        else:
            print('无学生信息')
            break
        if flag:
            print('修改成功')
        else:
            print('未找到该id的同学')
        xianshi()
        c = input('请问还要进行修改吗(y/n):')
        if c == 'y':
            continue
        else:
            break

def paixu():
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8')as rfile:
            students = rfile.readlines()
        student_list = []
        for i in students:
            student_list.append(eval(i))
    else:
        return
    arr = input('请选择(0.升序/1.降序):')
    if arr == '0':
        brr = False
    elif arr == '1':
        brr = True
    else:
        print('您的输入有错误')
        paixu()
    mode = input('请输入排序依据(0.按英语成绩/1.按java成绩/2.按python成绩/3.按总成绩):')
    if mode == 'o':
        student_list.sort(key=lambda x: int(x['english']), reverse=brr)
    elif mode == '1':
        student_list.sort(key=lambda x: int(x['java']), reverse=brr)
    elif mode == '2':
        student_list.sort(key=lambda x: int(x['python']), reverse=brr)
    elif mode == '3':
        student_list.sort(key=lambda x: int(x['english']) + int(x['java']) + int(x['python']), reverse=brr)
    else:
        print('您的输入有错误!!!')
        paixu()
    show(student_list)

def tongji():
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8')as rfile:
            students = rfile.readlines()
            if students:
                print(f'一共有{len(students)}个学生信息')
            else:
                print('还没有录入学生信息')
    else:
        print('暂未保存过信息!!!')


def xianshi():
    student_list = []
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8')as rfile:
            students = rfile.readlines()
            for i in students:
                student_list.append(eval(i))
            if student_list:
                show(student_list)
    else:
        print('暂未保存过信息!!!')

main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wo~he!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值