大家好,我是第一次python学了一个学期,期末要完成一个毕业生信息管理系统大作业的小韩了,由于上次没有仔细看开发实现的要求,实现了一个简单的毕业生信息管理系统,而这次专门整理了两种使用文件进行保存数据实现的毕业生信息管理系统,因为是第一次学python,还不太熟悉python的写法,而之前是学c、c++,感觉我的这个写的有一股c/c++的内味:
1.使用excel.xlsx保存数据实现一个毕业生信息管理系统2.使用文本文档.txt保存数据实现一个毕业生信息管理系统
以下将会在代码进行详细的介绍
一、对excel表格操作实现一个毕业生信息管理系统
开发要求
1.采用python语言实现一个XX信息管理系统
2.实现基本的增删改查的基本功能,还可以加上一些如排序,搜索的操作3.采用文件保存数据(而不是每次从键盘输入)
4.各个功能界面循环调用环境以及
开发软件
1.python3.7.0版本
2.pycharm2019中文版
一、函数模块设计:
1.主函数模块
实现功能
defmain():#主函数arry=[0,1,2,3,4,5]#定义一个选项的列表用于输入判断Menu()#先打印菜单while1:a=input("请输入:")ifa.isdigit()andint(a)inarry:#这里判断输入的是不是数字且在不在选项的列表中如果输入合法再进行功能调用a=int(a)whilea:ifa==1:PrintStudentList()#查询搜索毕业生信息功能Menu()breakifa==2:AddStudent()#添加毕业生信息功能Menu()breakifa==3:ChangeStudent()#修改毕业生信息功能Menu()breakifa==4:DeleteStudent()#删除毕业生信息功能Menu()breakifa==5:SortData()#毕业生信息排序功能Menu()breakelifa>5ora<0:print("输入有误!")breakifa==0:#按0退出该毕业生信息管理系统print("系统已退出!")exit()else:print("请输入0--5!")main()这里因为还没有学到python中的字典那部分知识,而pyhton中又没有switch和case所以就使用这个if进行判断虽然比较繁琐,但是看起来还是比较清晰易懂的
二、数据文件设计
因为这里要采用文件进行保存数据,我第一个想到的就是excel表格,这种.xlsx文件保存数据一目了然,因此本次选择了excel表格进行数据保存,写入,读取,修改,删除等基本功能
主要信息:
关于对excel表格使用则需要导入两个包:
fromopenpyxlimportWorkbook#导入操作excel时所用的库fromopenpyxlimportload_workbook#用于对本地已经存在的excel文件操作如果这里导入失败的话,可能需要自己手动进行openpyxl的下载下载方法具体如下
点击文件-->>点击设置(setting)-->>点击自己的项目-->>点击第一个选项-->>点击页面的右侧的加号-->>输入想要导入的包(openpyxl)-->>点击左下角的installPackage稍等一会即可完成安装
2.增加毕业生信息模块
从键盘获取输入的信息,信息校验成功后,先将信息保存在一个列表中,然后最后将整个列表插入到excel表格中,然后保存,这样方便写入,否则频繁的打开关闭文件比较繁琐,容易出现错误。例如:下面插入学号id
先建立一个空的列表然后先对学号进行校验,首先校验学号是否合法,比如长度要求,或者插入的是否和表中的是否重复,当校验成功后才将学号保存到列表中
r=[]#建立一个新的列表在将这个列表插入到excel表中ID=Nonewb=load_workbook('StudentList.xlsx')sheet=wb.activeid=input("请输入学号:")ifCheckIdIsRight(id):while1:id=input("请输入正确的学号!")ifnotCheckIdIsRight(id):ID=idbreakelse:ID=idr.append(ID)#将输入的ID插入到列表中其余的其他信息依次类推最后将整个列表插入到excel表格中,然后关闭并保存文件
sheet.append(r)#将整个列表插入到excel表格中即为插入一行数据wb.close()wb.save('StudentList.xlsx')3.查询搜索毕业生信息模块
defPrintAll():wb=load_workbook('StudentList.xlsx')#打开现在已经有的表sheet=wb.active#获取当前活跃的表也就是当前使用的表forrowinsheet.rows:#循环每一行forcellinrow:#循环每一行的单元格print(cell.value,end="")#打印出每一个单元格的数据print()print()只需要将每一个单元格的按顺序打印出来即可
例如:按学号查询该毕业生的信息
defSelectById():id=input("请输入需要查询的学号:")ifid.isdigit()andnotCheckIdIsRight(id):id1=int(id)#将输入的str类型的转换为int类型wb=load_workbook('StudentList.xlsx')#打开现在已经有的表sheet=wb.active#获取当前活跃的表也就是当前使用的表r=FindId(id1)foriinrange(1,10):print(sheet.cell(1,i).value,end="")#打印出表头的信息print()foriinrange(1,10):print(sheet.cell(r,i).value,end="")#打印出该id对应的信息print()else:print("学号输入错误!")首先应该判断一下输入的学号是不是一串数字,而且想要查询的学生的学号是存在的,因为我们这里规定学号应该是类似于1700000000这样的一个数字,而python默认input输入的是一个str字符串类型的所以这里防止输入错误导致程序崩溃因此加入了一些校验,当确认合法之后再将其转换为int类型的变量进行使用。而具体的就是通过一个findid的函数来返回学号所在的行这样就可以将这一行的信息打印出来即可,打印学生信息的同时不要忘了打印表头的信息,这样看起来会更加的清晰。
4.修改毕业生信息模块
defchangename(row,wb):#修改姓名#row为其所在的信息的行wb是表格对象name=input("请输入修改之后的名字:")sheet.cell(row,2,name)wb.save('StudentList.xlsx')5.毕业生信息排序
这里排序主要使用了一个冒泡排序的算法对数据进行排序,虽然python中是有内置的排序算发法的,但是我这里还是自己实现了一个排序(升序),排完序了之后也可以对升序的进行一个反转得到一个降序的列表。因为是对某一项的单一数据进行排序,而排序结果是要求打印出所有信息的,因此先得到一个某一项数据排好序的列表,然后将列表对应的信息进行打印即可。例如:按学号进行排序冒泡排序:
defBubbleSort(l2):#冒泡排序对列表中的数据进行一个升序的排列foriinrange(0,len(l2)):count=0forjinrange(1,len(l2)-i):ifint(l2[j-1])>int(l2[j]):temp=l2[j]l2[j]=l2[j-1]l2[j-1]=tempcount=count+1ifcount==0:#算法优点当已经有序时就不再进行排序returnl2returnl2#返回排好序的列表按学号从小到大排序并打印学生信息
defGetAllStudentById():#按学号排序打印出学生信息(升序)l=[]#建立一个空的列表wb=load_workbook('StudentList.xlsx')sheet=wb.activeforcolumninlist(sheet.columns)[0]:l.append(column.value)#将学号插入到列表中得到一个学号列表l2=l[1:]#由于第一个是表头将第二个位置以后的范围拷贝给l2l3=BubbleSort(l2)#进行学号排序#3是排好序的列表foriinrange(1,10):print(sheet.cell(1,i).value,end="")#打印出表头的信息print()foriinrange(0,len(l3)):#依次找到排好序的学号或年级对应的学生信息即可r=FindId(l3[i])#找到该行forjinrange(1,10):print(sheet.cell(r,j).value,end="")#打印出该id对应的信息print()注意:因为学号是唯一的,因此可以通过找道该行,然后通过行号进行某一行的定向信息打印,但是像年级,月薪信息是有可能重复的,就不能再像学号一样查找,打印了,但是我们可以先将年级的列表排好序,然后进行一个去重,这样,就可以将符合满足,排好序的年级列表中的年级对应的学生,信息全部打印出来
6.删除毕业生信息
非常简单,只需要将要删除的学生的学号输入,然后学号校验合法且存在之后,找到对应的该行,然后将这一行的数据删除就可以了。
defDeleteStudent():#删除学生信息PrintAll()id=input("请输入要删除学生的学号:")ifnotCheckIdIsRight(id):#判断学号为id的学生是否在StudentList.xlsx中print("学号正确!")id=int(id)row=FindId(id)#查找其所在的行wb=load_workbook('StudentList.xlsx')sheet=wb.activeisdelete=input("是否删除该学生信息?输入是或否:")ifisdelete=='是':sheet.delete_rows(row,1)#删除该行wb.save('StudentList.xlsx')print("删除成功!")else:print("删除失败!")else:print("学号输入错误!")三、测试
1.查询搜索测试
2.添加测试
3.修改测试
4.信息排序测试
5.删除信息测试
四、源码
注意:将表格excel文件放在代码相同目录下即可,否则应该在使用文件时填上绝对路径,否则会出现文件打不开,或者找不到等错误,在系统运行期间应该讲文件保存并关闭,否则当文件处于打开状态时无法进行修改,插入等操作,出现错误。
二、采用文本文档保存数据实现的毕业生信息管理系统
基本思想与上述的相似,就不再这里阐述了,以下附上源码。
源码
相应的文件:注意该文本文件应和代码文件在同一个目录下
注意:这里采用分行进行数据的存储,为了方便数据的准确修改,不需要一整行的数据进行修改那么麻烦,插入和修改也更为精确