Python程序设计之 —— 简易学生信息管理系统
Posted Enovo_飞鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python程序设计之 —— 简易学生信息管理系统相关的知识,希望对你有一定的参考价值。
大家好,我是 Enovo飞鱼,今天分享一个 Python程序设计之 —— 简易学生信息管理系统 ,小白或者正在学习Python的小伙伴推荐阅读,加油💪。
目录
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++程序,让你的程序的用户获得"脚本化"的能力。
一、项目来源及背景
学生信息管理系统是学生在每学年记录学生升学,转学,退学等的主要应用,具有较强的实用性,贴近实际,便于完成系统的分析与设计,适用于多用户。
二、功能设计
实现一个学生信息的管理系统:主要功能有:
-
添加学生信息
-
删除学生信息
-
查询学生信息
-
统计学生总人数
-
显示所有学生信息
-
排序(以总成绩分数)
-
退出学生信息管理系统
三、步骤分析
-
显示功能界面
-
用户输入功能序号
-
对不同序号的功能实现具体函数
3.1 定义函数
3.2 调用函数
四、需求实现
-
显示功能界面 menu()
-
用户输入程序指令 choice = int(input('请输入您的程序指令:'))
-
按照用户输入的功能序号,执行不同的功能(函数)
-
添加学生信息 insert()
-
删除学生信息 delete()
-
查询学生信息 search()
-
统计学生总人数
total() -
显示所以学生信息 show()
-
排序(以总成绩分数)sort()
-
退出学生信息管理系统 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; }
3.编译
gcc -o students students.c -I /usr/include/mysql/ -L /usr/lib/mysql/ -lmysqlclient -lcurses
三:运行现象
最后选择Q退出整个系统
虽然所要求的功能基本实现,但是比预先心里所想的还有许多差距,看看程序就知道,改了有改,确实没时间了,就这样吧。
以上是关于Python程序设计之 —— 简易学生信息管理系统的主要内容,如果未能解决你的问题,请参考以下文章