Python程序设计之 —— 简易学生信息管理系统

Posted Enovo_飞鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python程序设计之 —— 简易学生信息管理系统相关的知识,希望对你有一定的参考价值。

大家好,我是 Enovo飞鱼,今天分享一个 Python程序设计之 —— 简易学生信息管理系统 ,小白或者正在学习Python的小伙伴推荐阅读,加油💪。

目录

前言 

Python 简介

Python 特点

一、项目来源及背景 

二、功能设计

三、步骤分析

四、需求实现

五、具体代码

功能界面部分:

主要部分代码:

4.1 添加学生信息

4.2 删除学生信息

4.3 查询学生信息 

4.4 统计学生总人数

4.5 显示所有学生信息

排序 (以总成绩分数)

五、运行效果

六、完整代码

获取源码?私信?关注?点赞?收藏?


 

Java程序设计之(一)MySQL的交互-学生信息成绩管理系统:

http://t.csdn.cn/JKoQIhttp://t.csdn.cn/JKoQI


前言 

Python 简介

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于php和Perl语言。

  • Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。

  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

Python 特点

  • 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

  • 2.易于阅读:Python代码定义的更清晰。

  • 3.易于维护:Python的成功在于它的源代码是相当容易维护的。

  • 4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。

  • 5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。

  • 6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

  • 7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

  • 8.数据库:Python提供所有主要的商业数据库的接口。

  • 9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。

  • 10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。


一、项目来源及背景 

学生信息管理系统是学生在每学年记录学生升学,转学,退学等的主要应用,具有较强的实用性,贴近实际,便于完成系统的分析与设计,适用于多用户。

 


二、功能设计

实现一个学生信息的管理系统:主要功能有:

  1. 添加学生信息

  2. 删除学生信息

  3. 查询学生信息

  4. 统计学生总人数

  5. 显示所有学生信息

  6. 排序(以总成绩分数)

  7. 退出学生信息管理系统

 


三、步骤分析

  1. 显示功能界面

  2. 用户输入功能序号

  3. 对不同序号的功能实现具体函数

                3.1 定义函数

                3.2 调用函数

 


四、需求实现

  1. 显示功能界面 menu()

  2. 用户输入程序指令 choice = int(input('请输入您的程序指令:'))

  3. 按照用户输入的功能序号,执行不同的功能(函数)

  4. 添加学生信息 insert()

  5. 删除学生信息 delete()

  6. 查询学生信息 search()

  7. 统计学生总人数 total()

  8. 显示所以学生信息 show()

  9. 排序(以总成绩分数)sort()

  10. 退出学生信息管理系统  if choice == 0:

 


五、具体代码

系统功能进行循环使用,直到用户输入0,退出系统。

功能界面部分:

def menu():
    print('==============================学生信息管理系统==============================')
    print('︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽功能菜单︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽')
    print("*" * 74)
    print("******", " " * 60, "******")
    print("******\\t    1.添加学生信息", " " * 18, "4.统计学生总人数\\t\\t    ******")
    print("******\\t    2.删除学生信息", " " * 18, "5.显示所有学生信息\\t\\t    ******")
    print("******\\t    3.查询学生信息", " " * 18, "6.排序(以总成绩分数) \\t    ******")
    print("******\\t    0.退出学生信息管理系统", " " * 18, "\\t\\t\\t\\t\\t******")
    print("******", " " * 60, "******")
    print("*" * 74)
    print('︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾')


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

主要部分代码:

# 定义函数main()
def main():
    while True:
        menu()
        choice = int(input('请输入您的程序指令:'))
        if choice in [0, 1, 2, 3, 4, 5, 6]:
            if choice == 0:
                print("您确定要退出吗?yes/no")
                answer = input()
                if answer == 'yes':
                    print('感谢您的使用!!!')
                    break  # 终止
                else:
                    continue  # 中止
            elif choice == 1:
                insert()
            elif choice == 2:
                delete()
            elif choice == 3:
                search()
            elif choice == 4:
                total()
            elif choice == 5:
                show()
            elif choice == 6:
                sort()
        else:
            print('输入的指令不在范围内,请重新输入!!!')

那么根据上面的代码,需要实现具体的功能函数,主要功能代码部分如下:


4.1 添加学生信息

# 录入学生信息
def insert():
    global phone
    student_list = []
    while True:
        id = input('请输入学号: ')
        if not id:
            break
        name = input('请输入姓名: ')
        if not name:
            break
        sex = input('请输入性别: ')
        if not sex:
            break
        # phone = input('请输入手机号: ')
        # if not phone:
        count = 0
        for i in range(1, 4):
            phone = input("请输入你的手机号: ")
            # 利用正则表达式进行限定
            tel = re.match(r"^1[3456789]\\d9$", phone)
            if tel:
                print("输入成功!")
                break
            if tel != phone:
                count += 1
            if (count == 3):
                print("录入失败,请30秒后重试!")
            if (count != 3):
                print("录入错误,请核对你的手机号!")
        try:
            # 智育分满分70分,德育分满分20分,体育分满分10分
            zyf = int(input('请输入你的智育分:'))
            dyf = int(input('请输入你的德育分:'))
            tyf = int(input('请输入你的体育分:'))
        except:
            print('请您输入数字成绩!')
            continue
        # 将录入的学生信息保存到字典中
        student = 'id': id, 'name': name, 'sex': sex, 'phone': phone, 'zyf': zyf, 'dyf': dyf, 'tyf': tyf
        # 将学生信息添加到列表中
        # 可删!!!!!
        student_list.append(student)
        answer = input('是否继续添加?yes/no\\n')
        if answer == 'yes':
            continue
        else:
            break
    # 保存学生信息
    save(student_list)  # 封装
    print('学生信息录入完毕!!!')

 

4.2 删除学生信息

# 删除学生信息
def delete():
    while True:
        student_id = input('请输入要删除学生的学号:')
        if student_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 item in student_old:
                        d = dict(eval(item))  # 将字符串转换为字典
                        if d['id'] != student_id:
                            wfile.write(str(d) + '\\n')
                        else:
                            flag = True
                    if flag:
                        print(f'学号为student_id的学生信息已经删除')
                    else:
                        print(f'学生表中没有找到学号为student_id的学生')
            else:
                print('学生表已中无任何学生个人信息')
                break
            show()  # 重新显示所有学生信息
            answer = input('是否继续删除?yes/no\\n')
            if answer == 'yes':
                continue
            else:
                break
    print('删除学生信息已结束,请你进行下一步操作!!!')

 

4.3 查询学生信息 

# 查询学生信息
def search():
    while True:
        stu_query = []
        id = ''
        # 判断文件是否存在
        if os.path.exists(fileName):
            # if的使用
            if id == '':
                id = input('请输入要查找的学生学号:')
            else:
                print('您的输入有误,请重新输入!')
                continue
            # 如果文件存在,并且用户输入了正确的查询标号,则打开文件
            with open(fileName, 'r', encoding='utf-8') as rfile:
                students = rfile.readlines()
            # 转换为字典类型
            for item in students:
                d = dict(eval(item))
                if id != '':
                    if id == d['id']:
                        stu_query.append(d)  # 追加
            # 显示查询结果
            show_student(stu_query)
            # 是否继续查询其他学生信息
            answer = input('还要查询其他学生吗?yes/no\\n')
            if answer == 'yes':
                continue
            else:
                break
        else:
            print('学生信息不存在!')
            return
    print('学生信息查询结束,请进行下一步操作!!!')

 

4.4 统计学生总人数

# 统计学生总人数
def total():
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students = rfile.readlines()
            # 判断读取到的学生信息是否为空
            if students:
                print('一共有名学生'.format(len(students)))
            else:
                print('学生系统中还没有录入学生信息!')
    else:
        print('学生信息不存在!')
        return
    print('学生总人数统计完毕,请进行下一步操作!!!')

 

4.5 显示所有学生信息

# 显示所有学生信息
def show():
    student_list = []
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students = rfile.readlines()
            # 判断读取到的学生信息是否为空
            if students:
                for item in students:
                    student_list.append(eval(item))
                # 展示学生信息
                show_student(student_list)
            else:
                print('学生文件中还没有录入学生信息!')
    else:
        print('学生文件不存在!')
        return
    print('学生信息已成功显示,请你进行下一步操作!!!')

 

排序 (以总成绩分数)

# 对总学生成绩进行排序
def sort():
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students_list = rfile.readlines()
        students_new = []
        # 判断读取到的学生信息是否为空
        if students_list:
            # 将所有的item加入到students_new中
            for item in students_list:
                d = dict(eval(item))
                students_new.append(d)
                # 利用匿名函数与sort方法进行排序
                # True为降序,False升序
                students_new.sort(key=lambda x: int(x['zyf']) + int(x['dyf']) + int(x['tyf']),
                                  reverse=True)
            # 将排序后的成绩进行输出
            show_student(students_new)
    print('学生信息排序完成并成功显示,请你进行下一步操作!!!')

 


五、运行效果

如上图所示可以看到我们的运行效果,及示例,并且我们输入的信息会存入一个文本文件,那怎么实现的呢?请看下方代码

# 建立一个名为student.text的文本用于保存文件

fileName = 'student.txt'

 


六、完整代码

# 导入模块
import os
import re

# 建立一个名为student.text的文本用于保存文件

fileName = 'student.txt'


# 定义函数main()
def main():
    while True:
        menu()
        choice = int(input('请输入您的程序指令:'))
        if choice in [0, 1, 2, 3, 4, 5, 6]:
            if choice == 0:
                print("您确定要退出吗?yes/no")
                answer = input()
                if answer == 'yes':
                    print('感谢您的使用!!!')
                    break  # 终止
                else:
                    continue  # 中止
            elif choice == 1:
                insert()
            elif choice == 2:
                delete()
            elif choice == 3:
                search()
            elif choice == 4:
                total()
            elif choice == 5:
                show()
            elif choice == 6:
                sort()
        else:
            print('输入的指令不在范围内,请重新输入!!!')


def menu():
    print('==============================学生信息管理系统==============================')
    print('︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽功能菜单︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽')
    print("*" * 74)
    print("******", " " * 60, "******")
    print("******\\t    1.添加学生信息", " " * 18, "4.统计学生总人数\\t\\t    ******")
    print("******\\t    2.删除学生信息", " " * 18, "5.显示所有学生信息\\t\\t    ******")
    print("******\\t    3.查询学生信息", " " * 18, "6.排序(以总成绩分数) \\t    ******")
    print("******\\t    0.退出学生信息管理系统", " " * 18, "\\t\\t\\t\\t\\t******")
    print("******", " " * 60, "******")
    print("*" * 74)
    print('︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾')


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


# 录入学生信息
def insert():
    global phone
    student_list = []
    while True:
        id = input('请输入学号: ')
        if not id:
            break
        name = input('请输入姓名: ')
        if not name:
            break
        sex = input('请输入性别: ')
        if not sex:
            break
        # phone = input('请输入手机号: ')
        # if not phone:
        count = 0
        for i in range(1, 4):
            phone = input("请输入你的手机号: ")
            # 利用正则表达式进行限定
            tel = re.match(r"^1[3456789]\\d9$", phone)
            if tel:
                print("输入成功!")
                break
            if tel != phone:
                count += 1
            if (count == 3):
                print("录入失败,请30秒后重试!")
            if (count != 3):
                print("录入错误,请核对你的手机号!")
        try:
            # 智育分满分70分,德育分满分20分,体育分满分10分
            zyf = int(input('请输入你的智育分:'))
            dyf = int(input('请输入你的德育分:'))
            tyf = int(input('请输入你的体育分:'))
        except:
            print('请您输入数字成绩!')
            continue
        # 将录入的学生信息保存到字典中
        student = 'id': id, 'name': name, 'sex': sex, 'phone': phone, 'zyf': zyf, 'dyf': dyf, 'tyf': tyf
        # 将学生信息添加到列表中
        # 可删!!!!!
        student_list.append(student)
        answer = input('是否继续添加?yes/no\\n')
        if answer == 'yes':
            continue
        else:
            break
    # 保存学生信息
    save(student_list)  # 封装
    print('学生信息录入完毕!!!')


def show_student(lst):
    # 传过来空列表
    if len(lst) == 0:
        print('没有查找到该生信息!')
        return
    # 定义标题显示格式
    format_title = ':^5\\t:^23:^5\\t:^11\\t:^12\\t:^10\\t:^10\\t:^6\\t:^6\\t'
    print(format_title.format('学号', '姓名', '性别', '手机号', '智育分', '德育分', '体育分', '总成绩', '分数等级'))
    # 定义内容的显示格式
    format_data = ':^6\\t:^6\\t:^6\\t:^31:^3\\t:^10\\t:^9\\t:^12\\t:^12\\t'
    for item in lst:
        sum = int(item['zyf']) + int(item['dyf']) + int(item['tyf'])
        # grade等级的使用
        grade = ''
        if sum >= 85:
            grade = 'A'
        if 75 <= sum < 85:
            grade = 'B'
        if 65 <= sum < 75:
            grade = 'C'
        if 60 <= sum < 65:
            grade = 'D'
        if sum < 60:
            grade = 'error'
        # sum,grade的输出格式不同
        # format_data.format(sum,grade))
        print(format_data.format(item['id'], item['name'], item['sex'], item['phone'],
                                 item['zyf'], item['dyf'], item['tyf'],
                                 sum, grade))
        print('全部学生信息显示完毕!!!')


# 查询学生信息
def search():
    while True:
        stu_query = []
        id = ''
        # 判断文件是否存在
        if os.path.exists(fileName):
            # if的使用
            if id == '':
                id = input('请输入要查找的学生学号:')
            else:
                print('您的输入有误,请重新输入!')
                continue
            # 如果文件存在,并且用户输入了正确的查询标号,则打开文件
            with open(fileName, 'r', encoding='utf-8') as rfile:
                students = rfile.readlines()
            # 转换为字典类型
            for item in students:
                d = dict(eval(item))
                if id != '':
                    if id == d['id']:
                        stu_query.append(d)  # 追加
            # 显示查询结果
            show_student(stu_query)
            # 是否继续查询其他学生信息
            answer = input('还要查询其他学生吗?yes/no\\n')
            if answer == 'yes':
                continue
            else:
                break
        else:
            print('学生信息不存在!')
            return
    print('学生信息查询结束,请进行下一步操作!!!')


# 删除学生信息
def delete():
    while True:
        student_id = input('请输入要删除学生的学号:')
        if student_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 item in student_old:
                        d = dict(eval(item))  # 将字符串转换为字典
                        if d['id'] != student_id:
                            wfile.write(str(d) + '\\n')
                        else:
                            flag = True
                    if flag:
                        print(f'学号为student_id的学生信息已经删除')
                    else:
                        print(f'学生表中没有找到学号为student_id的学生')
            else:
                print('学生表已中无任何学生个人信息')
                break
            show()  # 重新显示所有学生信息
            answer = input('是否继续删除?yes/no\\n')
            if answer == 'yes':
                continue
            else:
                break
    print('删除学生信息已结束,请你进行下一步操作!!!')


# 统计学生总人数
def total():
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students = rfile.readlines()
            # 判断读取到的学生信息是否为空
            if students:
                print('一共有名学生'.format(len(students)))
            else:
                print('学生系统中还没有录入学生信息!')
    else:
        print('学生信息不存在!')
        return
    print('学生总人数统计完毕,请进行下一步操作!!!')


# 显示所有学生信息
def show():
    student_list = []
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students = rfile.readlines()
            # 判断读取到的学生信息是否为空
            if students:
                for item in students:
                    student_list.append(eval(item))
                # 展示学生信息
                show_student(student_list)
            else:
                print('学生文件中还没有录入学生信息!')
    else:
        print('学生文件不存在!')
        return
    print('学生信息已成功显示,请你进行下一步操作!!!')


# 对总学生成绩进行排序
def sort():
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students_list = rfile.readlines()
        students_new = []
        # 判断读取到的学生信息是否为空
        if students_list:
            # 将所有的item加入到students_new中
            for item in students_list:
                d = dict(eval(item))
                students_new.append(d)
                # 利用匿名函数与sort方法进行排序
                # True为降序,False升序
                students_new.sort(key=lambda x: int(x['zyf']) + int(x['dyf']) + int(x['tyf']),
                                  reverse=True)
            # 将排序后的成绩进行输出
            show_student(students_new)
    print('学生信息排序完成并成功显示,请你进行下一步操作!!!')


if __name__ == '__main__':
    main()

 


上述内容就是我们,Python学生信息管理系统 的全部内容了,希望可以得到大家的支持!

以上就是课程实践作业—— 学生信息管理系统 的全部程序设计分析及相关代码,供大家学习使用,希望可以帮助到大家!如果各位有疑问的话,欢迎私信,发现错误,也希望可以指出,共同改进学习,加油💪!


 

获取源码?私信?关注?点赞?收藏?

  👍+✏️+⭐️+🙇‍

有需要源码的小伙伴可以 关注下方微信公众号 " Enovo开发工厂 ",回复 关键词 " python-m1 " 

 

基于数据库MySQL的简易学生信息管理系统

通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统。

 

一:基本要求

 1.通过已知用户名和密码进行登录;

 2.可以显示菜单;

 3.可以随时插入学生信息;

 4.可以删除学生信息;

 5.可以通过学生姓名或学号显示学生所有信息;

 还可以修改学生信息,添加学生表格属性等等,,,这些实现都基本类似上述的(这些不想写了,最简易的学生信息管理系统);

 

二:步骤

    1.写一个sql脚本,包括创建数据库,使用数据库,创建学生信息表格,插入大部分学生信息。

    student_information.sql

create database school_db character set gbk;

use school_db;

create table students (
        student_id int unsigned not null primary key,
        name       char(10) not null,
        sex        char(4) not null,
        birth      date    not null,
        politily   char(20) not null
);


insert into students values (201080701,"张三","","1994-12-2","自动化1");
insert into students values (201080702,"李四","","1989-10-8","自动化2");
insert into students values (201080703,"王五","","1994-8-8","自动化2");
insert into students values (201080704,"路人1","","1994-7-9","自动化2");
insert into students values (201080705,"路人2","","1994-12-8","自动化2");
insert into students values (201080706,"路人3","","1994-11-8","自动化2");
insert into students values (201080707,"路人4","","1992-1-23","自动化2");

。。。。

  

     2.编写代码

  

技术分享
#include <stdlib.h>
#include <stdio.h>
#include <mysql.h>
#include <ctype.h>
#include <curses.h>


//#define MAX_PASSWD_LEN 16


void printf_mune(void);
char *getPasswd(void);
int insert_student(void);
int delete_student(void);
int inquiry_student(void);





int main(int argc,char** argv)
{
    char user[20];
    char passwd[20];
    char c;
    int i;
    printf("***********************************************************\n");
    printf("*      welcome to student information managent system     *\n");
    printf("***********************************************************\n");
//    printf("             user: ______________\b\b\b\b\b\b\b\b\n");
//    printf("            psaawd:______\b\b\b\b\b\b\n");

    while(1){
        
        printf("                    user:");
        scanf("%s", user);

         printf("                   passwd:");
    
         scanf("%s",passwd);
       
      /*  while ((c=getch())!=‘\n‘)
        {
            if (i<MAX_PASSWD_LEN && isprint(c))   //isprint函数判断c是否是可打印字符
            {
                passwd[i++] = c;
                putchar(‘*‘);
            }
            else if (i>0 && c==‘\b‘)
            {
                --i;
                putchar(‘\b‘);
                putchar(‘ ‘);
                putchar(‘\b‘);
            }
        }
        putchar(‘\n‘);
        passwd[i] = ‘\0‘; */

        if(!strncmp(user, "qigaohua", 8)){
            if(!strncmp(passwd, "123456", 6))
                break;
            else {
                printf("passwd error\n");
                continue;
            }
        }else{
            printf("user error\n");
            continue;
        }
    }

    printf("login sucess\n");
    while(1){
         printf_mune();
         getchar();                   //问题1  必须加
         c = fgetc(stdin);
         switch(c){
            case I:
                insert_student();
                break;
            case D:
                delete_student();
                break;
            case S:
                inquiry_student();
                break;
            case Q:
                return 0;
                break;
            default:
                ;    
         }
    }
    printf("exit sucess\n");
    return 0;
    
}

/*getc()和getchar()函数想必大家都经常用到,但它们都在输入的同时显示输入内容,并由回车终止输入。
为了不显示输入内容,我们调用另外一个函数getch(),它包含在头文件中。该函数可以在输入的同时不显示
输入内容,并在输入完成后不需回车而自动终止输入。与此同时,该头文件中还包含另外一个函数getche(),
它和getch()功能相同,唯一的区别是输入的同时显示输入的内容。本文我们只用到getch();*/
/*char *getPasswd()
{
    unsigned char c;
    passwd =(char*)malloc(8);
    int i = 0;

    while ((c=getch())!=‘\r‘)
    {
        if (i<MAX_PASSWD_LEN && isprint(c))   //isprint函数判断c是否是可打印字符
        {
            passwd[i++] = c;
            putchar(‘*‘);
        }
        else if (i>0 && c==‘\b‘)
        {
            --i;
            putchar(‘\b‘);
            putchar(‘ ‘);
            putchar(‘\b‘);
        }
    }
    putchar(‘\n‘);
    passwd[i] = ‘\0‘;
    
    return passwd;
}*/


void printf_mune(void)
{
    printf("The following operations can be performed\n");
    printf("1. insert student information             input I\n");
    printf("2. delete student information                    input D\n");
    printf("3. inquiry student information                   input S\n");
    printf("4. exit student information managent system      input Q\n");
}

int insert_student(void)
{
    MYSQL mysql;
    char sql[100];
    char k;
    char id[10], name[20], sex[5],birth[15],potility[20];

    mysql_init(&mysql);
    if(!mysql_real_connect(&mysql, "localhost", "root",NULL,"school_db",0,NULL,0)){
        printf("ERROR: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
        exit(-1);
    }
    mysql_set_character_set(&mysql, "utf8");
    while(1) {
        
        printf("please input student information\n");
        printf("student_id: ");
        fflush(stdin);
        scanf("%s",id);
//        fgets(id, 10, stdin);
        printf("\nname: ");
        scanf("%s",name);
//        fgets(name, 20, stdin);

        printf("\nsex: ");
        scanf("%s",sex);

        printf("\nbirth: ");
        scanf("%s",birth);
//        fgets(birth, 15, stdin);

        printf("\npolitily: ");
        scanf("%s",potility);
//        fgets(potility, 20, stdin);

        printf("\nplease input y or n or q\n");
//        read(stdin, k, 1);
           getchar();                       //注意要加
        k = fgetc(stdin);
        if(k == n)
            continue;
        else if(k == q)
            break;
        else if(k == y){
            sprintf(sql, "insert into students values (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\");", id, name,sex, birth, potility);
            printf("\n%s",sql);

            if(mysql_query(&mysql, sql)){
                printf("\ninsert failed: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
                continue;
            }
            printf("\ninsert sucess\n");

            printf("you want exit? input q\n");
            getchar();
            k = fgetc(stdin);
            if(k == q)
                break;
        }    
    }
    mysql_close(&mysql);
    return 0;
}

int delete_student(void)
{
    MYSQL mysql;
    char sql[100];
    char id[10], name[20];
    char k;

    mysql_init(&mysql);
    if(!mysql_real_connect(&mysql, "localhost", "root",NULL,"school_db",0,NULL,0)){
        printf("ERROR: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
        exit(-1);
    }    
    mysql_set_character_set(&mysql, "utf8");

    while(1){
        printf("please input you want delete student id or name, selset i or n or q\n");
        getchar();              //注意
        k = fgetc(stdin);
        if(k == i) {
            printf("student id: ");
            scanf("%s",id);
            //fgets(id, 10, stdin);
            sprintf(sql, "delete from students where student_id=\"%s\";", id);
        }else if(k == n){
            printf("\nstudent name: ");
            scanf("%s",name);
            //fgets(name, 20, stdin);
            sprintf(sql, "delete from students where name=\"%s\";", name);            
        }else if(k == q)
            break;
        printf("\nyou are sure? y or n or q\n");
        getchar();
        k = fgetc(stdin);
        if(k == n)
            continue;
        else if(k == y){
            if(mysql_query(&mysql, sql)){
                printf("delete failed: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
                continue;
            }
            printf("delete sucess\n");    
        }
        else if(k == q)
            break;
    }
    mysql_close(&mysql);
    return 0;
}

int inquiry_student(void)
{
    MYSQL mysql;
    MYSQL_RES *res;
    MYSQL_ROW  row;
    MYSQL_FIELD *filed;

    char sql[100];
    char id[10], name[20];
    char k;
    
    int column,i;

    my_ulonglong backrows;

    mysql_init(&mysql);
    if(!mysql_real_connect(&mysql, "localhost", "root",NULL,"school_db",0,NULL,0)){
        printf("ERROR: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
        exit(-1);
    }    
    mysql_set_character_set(&mysql, "utf8");
    
    while(1){
        printf("please input you want inquiry student id or name, selset i or n or q\n");
        getchar();   //标记
        k = fgetc(stdin);
        if(k == i) {
            printf("student id: ");
            scanf("%s", id);
            //fgets(id, 10, stdin);
            sprintf(sql, "select * from students where student_id=\"%s\";", id);
            printf("sql request:%s\n", sql);
        }else if(k == n) {
            printf("\nstudent name: ");
            scanf("%s", name);
            //fgets(name, 20, stdin);
            sprintf(sql, "select * from students where name=\"%s\";", name);
            printf("sql request:%s\n", sql);
        }else if(k == q)
            break;
        printf("\nyou are sure? y or n or q\n");
        getchar();
        k = fgetc(stdin);
        if(k == n)
            continue;
        else if(k == y){
            if(mysql_query(&mysql, sql)){
                printf("delete failed: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
                continue;
            }
            
            res = mysql_store_result(&mysql);   //首先判断res是否为NULL来判断是否有数据,但是失败了,不知道为什么,最后用了下面函数
            backrows = mysql_num_rows(res);//返回上面函数返回结果的行数
            
            if(backrows != 0){                
                column = mysql_num_fields(res);

                while((row = mysql_fetch_row(res))){
                    i = 0;
                    while((filed = mysql_fetch_field(res)) != NULL && (i < column)){
                        printf("%s:", filed->name);
                        printf("%s", row[i++]);
                        printf("\n");
                    }
                    printf("\n");
                }

            }else{
                printf("no data found\n");
                continue;
            }
            
            printf("inquiry sucess\n");    
        }
        else if(k == q)
            break;
    }
    mysql_close(&mysql);
    return 0;
}
View Code

 

  

   3.编译

   gcc -o students students.c -I /usr/include/mysql/ -L /usr/lib/mysql/ -lmysqlclient -lcurses

  

三:运行现象

  技术分享

     技术分享

    技术分享

     技术分享

    最后选择Q退出整个系统

 

虽然所要求的功能基本实现,但是比预先心里所想的还有许多差距,看看程序就知道,改了有改,确实没时间了,就这样吧。

 

以上是关于Python程序设计之 —— 简易学生信息管理系统的主要内容,如果未能解决你的问题,请参考以下文章

Python课程设计之学生信息管理系统

Java实现学生简易信息管理系统

Laravel之简单的学生信息管理平台

基于数据库MySQL的简易学生信息管理系统

用python实现简易学生管理系统

Python之学生信息管理系统