【python期末设计(节选)】志愿者管理系统开发包含源码软件工程

一、概述

1.1 课题描述

       在信息化高速发展的今天,各行业都应该充分利用信息化管理的软件系统,更好地的管理工作,让各项活动得到更好的开展,人力,财力,物理上更好的分配利用和协调调度。利用志愿者管理系统,将更方便的管理志愿者和相关的团队活动。无纸化和远程桌面办公,将更简便,更快速的传播和发布相关信息。基于 B/S 架构的应用系统,灵活的审核流程设置,各功能模块使用都是人性化设置。操作简单,用户只要稍作培训即可熟悉使用本系统。
       志愿者管理系统正是再这种背景环境下所设计的系统,志愿者管理系统下分为用户管理,志愿者管理系统,志愿者组织管理,志愿者项目管理,项目申请管理。其中,志愿者项目信息管理系统是本人主要完成的部分。志愿者项目信息管理系统是对志愿者项目信息管理所要用到的功能的系统。志愿者信息管理系统有创建志愿者项目数据表功能。创建数据表后可以添加数据的功能,可以选择添加记录的条数。有查找数据的功能,有查找全部、按编号查找、按项目名称查找、模糊查找等方式。有修改数据的功能,先选中要修改的编号,然后选择要修改的项目名或电话或类型或负责人或立项日期或退出放弃修改。有删除数据的功能,可以更加序号删除数据。有排序功能,能够根据序号和项目名称排序。
       通过志愿者管理系统,用户可以更加高效地实现对用户管理,志愿者管理,志愿者组织管理,志愿者项目管理,项目申请管理。让志愿者和志愿行动更加便捷高效地传递到社会的各个角落。

1.2 系统目标

1.志愿者项目信息管理系统有创建志愿者项目数据表功能;
2.志愿者信息管理系统创建数据表后可以添加数据;可以选择添加记录的条数;3.志愿者项目信息管理系统有查找数据的功能,有查找全部、按编号查找、按项目名称查找、模糊查找等查找方式。
4. 志愿者项目信息管理系统有修改数据的功能,先选中要修改的编号,然后选择要修改的项目名或电话或类型或负责人或立项日期或退出放弃修改。
5. 志愿者项目信息管理系统有删除数据的功能,可以更加序号删除数据。有排序功能,能够根据序号和项目名称排序。
6. 志愿者项目信息管理系统有GUI验证登录注册功能。

二、系统分析与设计

2.1 系统功能分析

       志愿者管理系统下分为用户管理,志愿者管理系统,志愿者组织管理,志愿者项目管理,项目申请管理。其中,志愿者项目信息管理系统是本人主要完成的部分。志愿者项目信息管理系统是对志愿者项目信息管理所要用到的功能的系统。志愿者信息管理系统有创建志愿者项目数据表功能。创建数据表后可以添加数据的功能,可以选择添加记录的条数。有查找数据的功能,有查找全部、按编号查找、按项目名称查找、模糊查找等方式。有修改数据的功能,先选中要修改的编号,然后选择要修改的项目名或电话或类型或负责人或立项日期或退出放弃修改。有删除数据的功能,可以更加序号删除数据。有排序功能,能够根据序号和项目名称排序。其他系统部分字段如图。
在这里插入图片描述

2.2 系统模块结构图

在这里插入图片描述
在这里插入图片描述

2.3 数据库表的设计

在这里插入图片描述
志愿者项目管理系统的系统功能结构图
在这里插入图片描述
志愿者项目管理系统的E-R图
(1) 志愿者项目表:ono(志愿者项目编号)、oname(志愿者项目名称)、ostyle(志愿者项目类型)、leader(负责人)、phone(电话号码)settime。志愿者项目信息表的主键是志愿者项目编号ono。
在这里插入图片描述

三、数据库设计与功能实现

3.1 志愿者项目信息模块功能描述

       志愿者项目信息管理系统是对志愿者项目信息管理所要用到的功能的系统。志愿者项目信息管理系统有创建志愿者项目数据表功能。创建数据表后可以添加数据的功能,可以选择添加记录的条数。有查找数据的功能,有查找全部、按编号查找、按项目名称查找、模糊查找等方式。有修改数据的功能,先选中要修改的编号,然后选择要修改的项目名或电话或类型或负责人或立项日期或退出放弃修改。有删除数据的功能,可以更加序号删除数据。有排序功能,能够根据序号和项目名称排序。

3.2 志愿者项目信息管理模块

在这里插入图片描述

3.2.1 添加志愿者项目信息

       主菜单选择2进入添加数据的功能,可以选择添加记录的条数,循环反复获取志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间,通过sql语句写入mysql中,并把返回值传递给num。判断num值是否大于1,如果大于1则返回添加成功,并判断是否结束,未结束开启下一轮循环,结束返回主界面。
在这里插入图片描述
在这里插入图片描述
代码:
item=Items(ono,name,ostyle,leader,phone,settime) #获取输入数据的数组
helper = itemsHelpler() #初始化类
num=helper.addItems(item) #调用添加函数
addItems():
sql = “insert into items(ono,oname,ostyle,leader,phone,settime) values(%s,%s,%s,%s,%s,%s)” #插入数据库操作语句
num = cursor.execute(sql, (ono, oname, ostyle, leader, phone, settime)) #实现插入操作,并将结果返回给num

3.2.2 删除志愿者项目信息

       主菜单选择5进入删除数据的功能,输出志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间,并确认是否删除。通过sql语句写入mysql中,并把返回值传递给num。判断num值是否大于1,如果大于1则返回删除成功成功,结束返回主界面。
在这里插入图片描述
代码:
item = Items()
item.setOno(ono) #获取编号
helper = itemsHelpler()
result = helper.searchOno(item) #调用查找函数
y = input(‘确定要修改该条记录吗?(Y/N)’)
if y == ‘Y’ or y == ‘y’:
helper=itemsHelpler()
num=helper.deleteItems(item) #调用删除函数
deleteItems(item):
sql = “delete from items where ono=%s” #mysql删除语句
num = cursor.execute(sql, (myitems.getOno()))#删除数据,结果返回给num

3.2.3 修改志愿者项目信息

       主菜单选择4进入删除数据的功能,输出志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间,并确认是否修改。获取以上的值,通过sql语句写入mysql中,并把返回值传递给num。判断num值是否大于1,如果大于1则返回删除成功成功,结束返回主界面。
在这里插入图片描述
代码:
sql = “update items set oname=%s,ostyle=%s,leader=%s,phone=%s,settime=%s where ono=%s”#修改数据库操作语句
num=cursor.execute(sql,(myitems.getOname(),myitems.getostyle(),myitems.getleader(),myitems.getphone(), myitems.getsettime(),myitems.getOno()))#实现修改操作,并将结果返回给num

3.2.4 查找志愿者项目信息

       主菜单选择3进入查找数据的功能,可以选择查找全部,按编号查找,按项目名称查找。用户确认选择后输出志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间,把查找出来的信息放入列表中,并循环输出用户查询到的志愿者项目具体信息。
代码:
if ch == 1:
helper = itemsHelpler()
result = helper.showAll()
print(‘编号’.ljust(8),‘项目名称’.ljust(16),‘类型’.ljust(8),‘负责人’.ljust(7),‘电话’.ljust(18),‘立项时间’.ljust(6))
for item in result:
print(“{0}{1}{2}{3}{4}{5}”.format(item.getOno().ljust(10),item.getOname().ljust(20),item.getostyle().ljust(10),item.getleader().ljust(10),item.getphone().ljust(20),item.getsettime().ljust(10))) #输出查询结果
sql = “select * from items” #查找全部
sql = “select * from items where ono=%s” #按编号查找
sql = “select * from items where oname=%s” #按项目名称查找
在这里插入图片描述
在这里插入图片描述

3.2.5 排序志愿者项目信息

       主菜单选择6进入查找数据的功能,可以选择按编号排序,按项目名称排序。用户确认选择后输出志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间,并循环输出用户排序的志愿者项目具体信息。返回排序界面,用户可以重新选择排序方式,并把排序结果写入数据库。
在这里插入图片描述
在这里插入图片描述
代码:
sql = “select * from items ORDER BY ono” #按项目序号排序
cursor.execute(sql) #执行sql语句
sql = “select * from items ORDER BY oname” #通过项目名排序
cursor.execute(sql) #执行sql语句

3.2.6 主界面设计

       志愿者信息管理系统有创建志愿者项目数据表功能。创建数据表后可以添加数据的功能,可以选择添加记录的条数。有查找数据的功能,有查找全部、按编号查找、按项目名称查找、模糊查找等方式。有修改数据的功能,先选中要修改的编号,然后选择要修改的项目名或电话或类型或负责人或立项日期或退出放弃修改。有删除数据的功能,可以更加序号删除数据。有排序功能,能够根据序号和项目名称排序。
在这里插入图片描述
代码:
def manager():
while (True):
print(‘志愿者项目管理:’)
print(“1. 创建志愿者项目数据表”)
print(“2. 添加数据”)
print(“3. 查找数据”)
print(“4. 修改数据”)
print(“5. 删除数据”)
print(“6. 排序”)
print(‘0. 退出’)
ch = int(input(‘请输入你的选择:’))

四、其他功能模块设计与实现

4.1 创建数据库表模块设计与实现

       主菜单选择进入创建数据库表的功能,创建志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间,通过sql语句创建表,并把返回值传递给num。判断num值是否大于1,如果大于1则创建表成功,并结束返回主界面,并输出创建数据库表成功。
在这里插入图片描述
代码:
def createItems(self):
connect = self.__connect()# 创建连接,并且返回连接对象
cursor = connect.cursor()# 创建游标对象
#创建表
cursor.execute(‘’’
create table item (
ono varchar(16) PRIMARY KEY, #项目编号
oname varchar(30), #项目名
ostyle varchar(30), #项目类型
leader varchar(10), #负责人
phone varchar(30), #电话
settime varchar(30));‘’') #立项时间
cursor.close()# 关闭游标
connect.close()# 关闭连接

4.2 数据库连接模块设计与实现

数据库连接模块是用于连接数据库服务器地址,端口,用户名,数据库名,密码和字符集,每一次使用数据库都要被调用,是后续模块实现的关键一步。
def __connect(self):	#定义浮标
    conn = pymysql.connect(
        host='127.0.0.1',	#设置连接地址
        port=3306,		#设置连接端口
        user='root',		#设置用户名
        db='VolunteerIitems',	#设置数据库名
        passwd='123456',		#设置密码
        charset='utf8')		#设置字符集
    return conn

4.3 模糊查找模块设计与实现

       主菜单选择3进入查找数据的功能,选择模糊查找。对志愿者项目的编号,志愿者项目的名称,志愿者项目的类型,志愿者项目的负责人,志愿者项目负责人的手机号码,志愿者项目的立项时间进行模糊查找,用于用户对某条信息印象不是特别深刻时、把查找出来的信息放入列表中,并循环输出用户查询到的志愿者项目具体信息。
在这里插入图片描述
代码:
key =input(‘请输入要查要找的关键字:’)
helper = itemsHelpler()
result = helper.fuzzyQuery(key) #将关键字传递给模糊查找函数
for item in result:
print(item.getOno().ljust(10),item.getOname().ljust(20),item.getostyle().ljust(10),item.getleader().ljust(10),item.getphone().ljust(20), item.getsettime().ljust(10)) #循环输出结果
def fuzzyQuery(self,que):
connect = self.__connect() # 创建连接,并且返回连接对象
cursor = connect.cursor() # 创建游标对象
sql = “select * from items where ono like %s or oname like %s or phone like %s or ostyle like %s or leader like %s or settime like %s” #sql操作语句
cursor.execute(sql,((‘%’+que.strip()+‘%’),(‘%’+que.strip()+‘%’),(‘%’+que.strip()+‘%’),(‘%’+que.strip()+‘%’),(‘%’+que.strip()+‘%’),(‘%’+que.strip()+‘%’))) #在sql中查找包含关键字的字段
result = cursor.fetchall() #获取结果
cursor.close() # 关闭游标
connect.close() # 关闭连接
ls = [] #定义一个空列表
for item in result:
tmp = Items(item[0], item[1], item[2], item[3], item[4], item[5])
ls.append(tmp)
return ls #遍历结果并放入列表返回

4.4 登陆注册GUI模块设计与实现

本模块是用户志愿者信息管理系统的登陆注册界面的GUI界面,虽然界面简单还是单独为这个界面创建了一个表,该系统能连接到MySQL中我创建的“用户信息”表。该系统能对数据库中的此表进行查询和插入的操作,从而达到登录和注册的功能。其中登录满足下列限制条件:1、输入的用户名和密码不得为空;2、用户名和密码需与表中的记录对应。注册满足:1、用户名和密码不得为空;2、不可以注册已存在的用户名。
在这里插入图片描述
代码:# 在窗口上创建标签组件
Label(win_login, text=‘用户名’, font=(‘微软雅黑’), justify=RIGHT, width=80).place(x=190, y=50, width=80, height=40)
Label(win_login, text=‘密码’, font=(‘微软雅黑’), justify=RIGHT, width=80).place(x=190, y=100, width=80, height=40)
if self.a == ‘’ or self.b == ‘’:
self.conn.rollback()
messagebox.showerror(‘警告’, message=‘注册失败’)
elif self.a in ulist:
messagebox.showerror(‘警告’, message=‘用户名已存在’)
else:
self.conn.commit()# 提交事务
messagebox.showinfo(title=‘恭喜’, message=‘注册成功’)
for i in range(len(ulist)):
while True:
if name == ulist[i] and pwd == plist[i]:
messagebox.showinfo(title=‘恭喜’, message=‘登陆成功’)
deter = False# 登陆成功则执行begin函数
manager() #进入系统
break
else:
break
while deter:
messagebox.showerror(‘警告’, message=‘用户名或密码错误’)
break

五、系统测试

5.1 志愿者项目信息管理模块测试

在这里插入图片描述

5.2 登录注册模块测试

在这里插入图片描述
在这里插入图片描述

六、结语

       由于本次期末开发是小组合作完成,有些界面为小组成员成果,所以仅提供后台控制台输出界面,实际效果比我个人提供代码效果要好。
源码
sql文件

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值