一、概述

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文件

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

  1. 计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java智慧社区信息管理系统开发(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  2. JAVA计算机毕业设计智慧社区信息管理系统开发Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计智慧社区信息管理系统开发Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计智慧社区信息管理系统开发Mybatis+源码+数据库+lw文档+系统+调试部 ...

  3. 基于JAVA-关爱留守儿童志愿者管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA-关爱留守儿童志愿者管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA-关爱留守儿童志愿者管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部 ...

  4. 基于cc++课程设计-产品入库管理系统(附源码+可执行程序)

    文章目录 前言 项目简介 涉及知识点 源码获取方法: 根据入库编号删除记录 按入库产品编号从小到大显示记录 判断入库编号是否唯一 统计所有生产入库产品的总金额 源码获取方法: 前言 基于c&c ...

  5. 基于cc++课程设计-个人收支管理系统(附源码+可执行程序)

    文章目录 前言 项目简介 涉及知识点 源码获取方法: 系统登陆界面 判断月份是否唯一 根据月份删除数组中收支信息 结构体数组中的收支信息输出到文件 源码获取方法: 前言 基于c&c++课程设计 ...

  6. 基于c++课程设计-宾馆客房管理系统(附源码)

    文章目录 前言 项目简介 涉及知识点 源码获取方法: 系统登陆界面 系统入口 订房实现 入住登记 源码获取方法: 前言 基于c&c++课程设计-宾馆客房管理系统(附源码+可执行程序) 非常完整 ...

  7. Python实现简易版学生信息管理系统,包含源码及相关实现说明~

    前言 最近学了一点python语法,所以写一个小程序练习一下.当然程序中有许多不完美的地方,仅供各位小伙伴参考呀,并且欢迎大家留言指出不合理的地方奥~ 学生信息管理系统 1.系统介绍 该系统主要考察 ...

  8. Python+mysql高校学生社团管理系统-计算机毕业设计源码00498

    高校学生社团管理系统 摘要 随着计算机科学技术的日渐成熟,人们已经深刻地认识到了计算机在各个领域中发挥的功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用.目前学校学生社团 ...

  9. 计算机毕业设计SSM大学生志愿者管理系统【附源码数据库】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. Mysql Proxy的安装配置详细教程
  2. 赠书:啥是指标陷阱?很多就出现在你的身边!
  3. VC++ 从View类获取各种指针编程实例
  4. mysql delete 会锁表吗_MySQL高压缩引擎TokuDB 揭秘
  5. Java 中removelinked_Java LinkedHashSet remove()用法及代码示例
  6. 计组—存储以及字、位扩展
  7. 从零开始学视觉Transformer(2):图像与Transformer基础
  8. (92)FPGA模块例化传递参数(parameter)
  9. 【Redis】Redis 事务
  10. Linux系统中的CPU利用率
  11. 第三章:顺序栈及其应用之三---数制转换
  12. 反爬虫策略之----UserAgent设置与随机生成
  13. 论文查重 降重复度?如何进行毕业论文查重--总结贴
  14. ICP算法详解——我见过最清晰的解释
  15. 使用Arduino解码并发送433MHz RF无线射频信号
  16. 小丽和小张 --- 作者:歪瓜裂枣
  17. springboot 整合工程,不同包中类名相同冲突问题解决
  18. MTK平台--Android P SD卡检测
  19. Android studio语音识别集成科大讯飞语音转文字
  20. 赢在项目工具的落地-讲师团俊平老师主讲

热门文章

  1. BLE数据报文格式解析
  2. Scratch(四十四):打地鼠
  3. 帝国CMS7.5微信扫码登录插件 帝国cms插件分享
  4. C语言——gotoxy()函数
  5. 深度学习数据标注工具
  6. 微机原理与接口技术 学习笔记(五) 8255(可编程并行接口芯片) 与 8253(可编程定时/计数器)
  7. deepnode软件下载地址_Flash cs6软件下载地址及安装教程
  8. 无法添加内核模式驱动的打印机
  9. cocos creator开发的精灵大师小游戏源码分享,支持h5安卓微信小游戏等多平台
  10. WebView跳转系统浏览器下载apk