最近公司搬办公室,杂七杂八的事情比较多,又碰上业务要上线了。。。很多事情堆到一起来做,导致最近没什么时间学习,写博客。前两天胜利日放假,把以前用java写的学生信息管理系统用python重新写了一遍,以便于帮助python的学习。

好了,废话不多说,首先进行需求分析,下面是我根据需求画的系统结构图:

纯手工制图。。。。。画的不好敬请谅解。从上图来看,整个系统分为main,add,delete,change,select,sort,io,print共八个模块,实现了对学生信息的增删改查排的功能,将结果储存到student.txt文件中去。

学生信息的数据结构我将其设计为一个学生的一条记录用一个列表来存储,这个列表包含的信息为:学号,姓名,年龄,成绩,地址这些字段。同时,所有学生的记录又结合成一个列表,这样,这个列表就存储了所有学生的信息。

下面是我的源代码以及对该源代码的分析,以供大家借鉴参考以及自己的记录。(PS:由于本人学习Python的时间比较短,代码难免有写的比较渣的地方,希望各位大神轻喷(^-^!!!))cat main.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

import add

import delete

import change

import select

import sort

file_path= 'student.txt'       #首先定义数据的存储路径,这里定义为当前程序锁在目录的根目录中

def main():                    #在main函数中使用while循环来获取用户的输入信息

while True:

print(u"welcome to student information management system!")

print(u"you can use input:add;delete;change;select;sort;quit")

keyword=raw_input("please input what you want to operation:")

if keyword=="quit":                      #由于python中没有类似于switch case的方式来实现多项选择,本来打算使用dict来实现这个功能的,但是按照网上的方式,死活无法达到想要的功能,于是,逼得没办法咬咬牙,用if elif来代替switch case的功能,请大神轻喷哈!

exit(0)

elif keyword=="add":

add.index(file_path)

elif keyword=="delete":

delete.index(file_path)

elif keyword=="change":

change.index(file_path)

elif keyword=="select":

select.index(file_path)

elif keyword=="sort":

sort.index(file_path)

else:

print(u"please input correct option!")

'''

else:                                    #这一段实现有问题。。。无法达到目标。

option={"add":add.index(file_path),

"delete":delete.index(file_path),

"change":change.index(file_path),

"select":select.index(file_path),

"sort":sort.index(file_path)}

option.get(keyword,"your input is wrong,please input again!")()

'''

if __name__ == '__main__':

main()cat add.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

import io

def index(file_path):                #这个函数是用来被main调用,实现添加记录的功能,通过这个函数来与用户交互,将获取到的数据通过io写入到文件中。

while True:

print(u"please input a student information like:number name age score address")

print(u"If you want to break,please input quit!")

keyword=raw_input(u"please input what you want:")

if keyword=="quit":

break

else:

addline=add()

addline.addinfo(keyword.split(" "),file_path)

class add:                           #这里定义了一个类,主要用来实现将获取到的一条记录传到io中,写入文件。

def __init__(self):

print(u"we will input this student's information")

def addinfo(self,student,file_path):

read=io.io()

read.add(student,file_path)cat delete.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

import io

def index(file_path):                 #同理,这里也是通过与用户交互,获取到用户想要删除的记录的学号,然后交给delete类来实现删除记录的功能。(ps:这里少了一个判断用户输入的信息是否被成功执行的功能,时间仓促,没有完善哈。)

while True:

print(u"please input that you want to delete student's number!")

print(u"If you want to break,please input quit!")

keyword=raw_input(u"please input what you want:")

if keyword=="quit":

break

else:

deleteline=delete()

deleteline.deleteinfo(keyword,file_path)

class delete:                        #这个类通过io获取到所有学生信息,然后将用户想要删除的学生学号进行匹配,假如匹配到,则删除该条记录。

def deleteinfo(self,number,file_path):

read=io.io()

information=[]

information=read.read(information,file_path)

for i in information:

if i[0] == number:

information.remove(i)

read.write(information,file_path)cat change.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

import io

def index(file_path):                #这里通过交互获取到用户想要修改的学生的学号,然后传递给change类。

while True:

print(u"please input that you want to change student's number!")

print(u"If you want to break,please input quit!")

keyword=raw_input(u"please input what you want:")

if keyword=="quit":

break

else:

changeline=change()

changeline.changeinfo(keyword,file_path)

class change:                        #这里通过从io中获取学生信息,存储到list中,然后遍历list,获取到匹配学号的记录,然后获取到用户想要修改后的数据,将其写入到list中,最后再将这个新的List存入到文件中(PS:这里卡了我好久,因为文件中的学生记录是一条记录存储一行,需要在记录的最后面添加上换行符,但是修改后的数据是没有换行符的,为了将换行符添加进去,我想了很多办法,最后才想到直接将输入的字符串和换行符进行链接,然后再存储到list中去。。。。。。表示真想狠狠抽自己嘴巴子。。。)

def changeinfo(self,number,file_path):

read=io.io()

information=[]

information=read.read(information,file_path)

for i in information:

if i[0] == number:

print(u"please input the student's information that you want to change like:number name age score address")

keyword=raw_input(u"please input what you want:")

keyword=keyword+'\n'

information[information.index(i)]=keyword.split(" ")

read.write(information,file_path)cat select.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

import io

import printstudent

def index(file_path):                #通过交互,获取到用户想要查询的学生的学号,然后传入select类中进行查找。

while True:

print(u"please input that you want to select student's number!")

print(u"If you want to break,please input quit!")

keyword=raw_input(u"please input what you want:")

if keyword=="quit":

break

else:

selectline=select()

selectline.selectinfo(keyword,file_path)

class select:                        #通过获取到用户想要查找的记录的学号,同时获取到学生信息列表,然后将其传入到printstudent块中进行处理。

def selectinfo(self,number,file_path):

read=io.io()

information=[]

information=read.read(information,file_path)

printstudent.selectstudent(number,information)cat sort.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

import io

import printstudent

def index(file_path):                #同样的,通过交互获取到用户想要通过什么方式进行排序,可选择的有学号,年龄,成绩。

while True:

print(u"please input what keyword that you want to sort,you can choose 'number'or'age'or'score'those keywords")

print(u"If you want to break,please input quit!")

keyword=raw_input(u"please input what you want:")

if keyword=="quit":

break

elif keyword=="number":

numbersort=sortstudent()

numbersort.numbersort(file_path)

elif keyword=="age":

agesort=sortstudent()

agesort.agesort(file_path)

elif keyword=="score":

scoresort=sortstudent()

scoresort.scoresort(file_path)

else:

print(u"please input currect keyword")

class sortstudent:                #通过index函数调用类中不同的排序关键字对应的方法,可以对学生信息通过关键字进行排序。(PS:我觉得这部分写的比较繁琐,可能可以进行更简化的操作,提高代码重用率,可是目前我没想到更好的办法。。。抱歉哈。。。)这里提到了sorted函数,这个函数可以对传入进去的列表进行排序,生成一个新的列表副本,同时里面还可以使用lambda对应列表嵌套进行排序,这个功能是一个很实用的功能,只想说好顶赞!!!

def numbersort(self,file_path):

read=io.io()

information=[]

information=read.read(information,file_path)

sorted_information=sorted(information,key=lambda student:student[0])

printstudent.printstudent(sorted_information)

def agesort(self,file_path):

read=io.io()

information=[]

information=read.read(information,file_path)

sorted_information=sorted(information,key=lambda student:student[2])

printstudent.printstudent(sorted_information)

def scoresort(self,file_path):

read=io.io()

information=[]

information=read.read(information,file_path)

sorted_information=sorted(information,key=lambda student:student[3])

printstudent.printstudent(sorted_information)cat printstudent.py

#__author__ = 'Administrator'

# -*- coding: utf-8 -*-

def printstudent(information):                #这个没什么好说的,对查询和排序传过来的列表进行排序,其中,主要需要注意格式化输出。这里面使用了%+20s,其中的+20是占位20的宽度,数据向右对齐。由于排序和查询输出结构不一样,于是写了两个输出函数来实现(个人感觉这里也可以进行精简)。。。

for i in information:

print("number: %+20s" %str(i[0]))

print("name:   %+20s" %str(i[1]))

print("age:    %+20s" %str(i[2]))

print("score:  %+20s" %str(i[3]))

print("address:%+20s" %str(i[4]))

def selectstudent(num,information):

for i in information:

if i[0]==num:

print("number: %+20s" %str(i[0]))

print("name:   %+20s" %str(i[1]))

print("age:    %+20s" %str(i[2]))

print("score:  %+20s" %str(i[3]))

print("address:%+20s" %str(i[4]))cat io.py

#__author__ = 'huxianglin'

# -*- coding: utf-8 -*-

class io:                #这部分是写的最纠结的,最开始由于对文件操作不熟悉,总是无法实现正确的换行写入操作。。。。。最开始选择逃避的办法,一条一条插入数据,后面发现写不下去了,还是需要写出写入文件的正确办法,在网上找了好久的资料终于在最后想到了在每个列表的末尾添加换行符来解决操作,于是,就有了上面那个修改数据后怎么添加换行符的操作。。。(PS:总觉得这种方式是拆东墙补西墙的感觉。。。碰到一个问题,解决一个,然后因为改动,又出现了新的问题。。。)这里一条一条插入数据使用了print的重定向功能,这样就自动在每条数据的最后面添加了换行符。

def read(self,information,file_path):

with open(file_path,'r') as f:

for line in f:

information.append(line.split(' '))

return  information

def write(self,information,file_path):

f=open(file_path,'w')

for line in information:

f.write(' '.join(line))

f.close()

def add(self,information,file_path):

f=open(file_path,'a')

print>>f,' '.join(information)

f.close()cat student.txt

127 guojianlin 23 98 shenzhen

123 huxianglin 21 99 shenzhen

126 huxianglin 25 95 shenzhen

124 huxianglin 26 97 shenzhen

125 huxianglin 24 96 shenzhen

129 huxianglin 28 92 shenzhen

128 huxianglin 27 91 shenzhen

122 huxianglin 25 93 shenzhen

131 huxianglin 21 95 shenzhen

上面是文件里面存储的信息,随便刷的。。。总结来看这次小的程序设计做的磕磕绊绊主要是由于对python不熟悉的原因,有很多想法就是不知道该如何实现。。。QAQ果然我还是练得太少了!!!

但是在这次重写过程中,我发现python确实开发速度比起java来要快不少,特别是处理文件类的操作,list,dict简直就是python的大杀器,以前我实现这个功能用java写的,差不多有500行代码才实现,用python实现这个功能才用了200行左右的代码就搞定了,这还是在我对python不怎么熟悉的基础上,由以上对比可以看出,pyhthon开发确实比java等这些语言开发速度快多了。这也给了我继续将python学下去的信心!!!学习的路上总会碰到沟沟坎坎,坚持下去,终能走到终点!加油,各位共勉之!

python学生信息录入_使用python实现一个简单的学生信息管理系统相关推荐

  1. Python:结合列表和字典,编写一个简单的学生成绩管理系统

            本次主要使用新学的列表和字典,结合定义函数等知识点,成功编写了一个简单的学生成绩管理系统.实现了在系统内使用学生的姓名或者学号,即可实现显示.添加.删除.修改.查找(增删改查).成绩排 ...

  2. python开发语音录入_基于python实现语音录入识别代码实例

    这篇文章主要介绍了如何通过python实现语音录入识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 1.第一步录音存入本地 2.调用百度 ...

  3. java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序

    利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...

  4. java简单信息管理_用java写一个简单的学生信息管理系统

    您好,现在是想做一个有界面的应用程序,再利用输入输出流实现对数据的读写,从而实现对小型数据库中数据进行增删改查功能,目前界面已做好,问题是在程序怎样导入小型数据库并且实现功能.有程序示例就更好啦,非常 ...

  5. 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...

    一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...

  6. python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统

    原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...

  7. python小项目案例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

  8. python项目开发实例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

  9. python照片转卡通_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 ( 想要学习Python?Pyth ...

最新文章

  1. 如何把讨厌的人踢出局域网(kickthemout)
  2. Hibernate 基本配置文件+基本增删改查
  3. 【生活智慧】005.信守诺言的约束
  4. 关于ANTLR的通用库的需求:使用反射来构建元模型
  5. sql2000数据库置疑造成的原因以及如何解决置疑
  6. POJ1276:Cash Machine(多重背包)
  7. java mac excel 中文乱码_解决mac excel中文乱码的问题
  8. N个球放M个盒子问题
  9. android逆向神器,Android MT管理器(APK逆向修改神器) v2.9.8.0 正式版 / v2.5.0 VIP版
  10. 使用php的curl爬去青果教务系统 课表(转)
  11. 阿里达摩院(研究型实习生)
  12. 程序人生 - 为了避免惹上官司,你可以在这些免版权图片网站里寻找素材
  13. 如何用SQL做留存率分析
  14. 攻防世界-baby_web详解
  15. ffmpeg去除水印
  16. A Game of Thrones(84)
  17. NYOJ 买牛奶(水题)
  18. 线程条件队列ConditionObject源码解读
  19. Android开发必备工具
  20. 基于RVCT编译器的symbian平台搭建(完成版)

热门文章

  1. 网页特效代码集合+实例(C#)
  2. Android图灵聊天机器人-薇尔莉特
  3. MDK5(keil5)源文件列表中黄色的钥匙标识
  4. 管理案例:如何提高项目周例会的效率和效果?
  5. 国产办公软件崛起,金山WPS月活用户已超5.7亿;Meta指责苹果夺走部分广告收入;Python 3.11 发布
  6. merge语句中同时执行多个update或者insert操作
  7. linux 系统 JAVA_HOME is not set问题解决
  8. STM32物联网项目-低功耗模式
  9. signature=d0108467db7c8f306f2bd7cd45de4c83,Programmable data-routing multiplexer
  10. 关于现在如何引用Yahoo的股票数据