python實現學生資訊管理系統(從淺到深)

Tlimited發表於2018-05-08

題目

本文只是一個小練習題,功能不是很多,只是簡單實現增刪改查

使用自定義函式,完成對程式的模組化
學生資訊至少包含:姓名、年齡、學號,除外可以適當新增自己想要的資訊
必須完成系統的:新增、刪除、修改、查詢、退出

v1.0版
通過list和字典儲存

# -*- coding:utf-8 -*-
# 學生管理系統v1.0

# 新增學生資訊
def addStu(array):
    "新增學生資訊"
    stuDict = {} #定義字典儲存單個學生資訊
    try:
        id = input("請輸入學生學號:")
        for i in range(len(array)):
            if array[i]['id'] == id:
                print("該學號已存在,不能重複新增")
                return
        name = input("請輸入學生姓名:")
        age = input("請輸入學生年齡:")
        stuDict['id'] = id
        stuDict['name'] = name
        stuDict['age'] = age
        array.append(stuDict) #把單個學生新增到總列表中
        print("新增成功")
    except BaseException:
        print("發生異常,新增失敗")

# 刪除學生資訊
def delStu(array):
    "刪除學生資訊"
    try:
        id = input("請輸入要刪除的學生學號:")
        for i in range(len(array)):
            if array[i]['id'] == id:
               del array[i]
               return 0
        return 1
    except BaseException:
        print("發生異常,刪除失敗")
        return 2


# 修改學生資訊
def updateStu(array):
    "修改學生資訊"
    try:
        id = input("請輸入要修改的學生學號:")
        for i in range(len(array)):
            if array[i]['id'] == id:
                name = input("請輸入要修改的學生姓名:")
                age = input("請輸入要修改的學生年齡:")
                array[i]['name'] = name
                array[i]['age'] = age
                print("修改成功")
                return
        print("找不到該學號,沒法修改")
    except BaseException:
            print("發生異常,修改失敗")

# 查詢學生資訊
def selectStu(array):
    "查詢學生資訊"
    try:
        id = input("請輸入要查詢的學生學號:")
        for i in range(len(array)):
            if array[i]['id'] == id:
                print("查詢到的學生資訊:",array[i])
                return
        print("查詢失敗,查不到該學生資訊")
        return
    except BaseException:
            print("發生異常,查詢失敗")
            return
print("=="*30)
print("歡迎使用學生管理系統")
print("1.新增學生資訊")
print("2.刪除學生資訊")
print("3.修改學生資訊")
print("4.查詢學生資訊")
print("5.退出系統")
print("=="*30)
flag = 0
array = [] #定義list用於儲存學生資訊
while flag != 1:

    step = input("請輸入你的操作:")
    try:
        step = int(step)
    except BaseException:
        print("發生異常,輸入的不是數字型別")
        break
    if step == 1:
        addStu(array)
        print("學生資訊列印:", array)
    elif step == 2:
        num = delStu(array)
        if num == 0:
            print("刪除成功")
        elif num == 1 or num == 2:
            print("刪除失敗")
        print("學生資訊列印:", array)
    elif step == 3:
        updateStu(array)
        print("學生資訊列印:", array)
    elif step == 4:
        selectStu(array)
    else:
        flag = 1
print("退出系統成功")

執行結果:

============================================================
歡迎使用學生管理系統
1.新增學生資訊
2.刪除學生資訊
3.修改學生資訊
4.查詢學生資訊
5.退出系統
============================================================
請輸入你的操作:1
請輸入學生學號:123
請輸入學生姓名:ww
請輸入學生年齡:11
新增成功
學生資訊列印: [{'id': '123', 'age': '11', 'name': 'ww'}]
請輸入你的操作:1
請輸入學生學號:111
請輸入學生姓名:qq
請輸入學生年齡:12
新增成功
學生資訊列印: [{'id': '123', 'age': '11', 'name': 'ww'}, {'id': '111', 'age': '12', 'name': 'qq'}]
請輸入你的操作:3
請輸入要修改的學生學號:111
請輸入要修改的學生姓名:wq
請輸入要修改的學生年齡:14
修改成功
學生資訊列印: [{'id': '123', 'age': '11', 'name': 'ww'}, {'id': '111', 'age': '14', 'name': 'wq'}]
請輸入你的操作:4
請輸入要查詢的學生學號:111
查詢到的學生資訊: {'id': '111', 'age': '14', 'name': 'wq'}
請輸入你的操作:2
請輸入要刪除的學生學號:111
刪除成功
學生資訊列印: [{'id': '123', 'age': '11', 'name': 'ww'}]
請輸入你的操作:5
退出系統成功

Process finished with exit code 0

v2.0版
通過檔案儲存

# -*- coding:utf-8 -*-
# 學生管理系統v2.0
import os
import json
# 新增學生資訊
def addStu(array):
    "新增學生資訊"
    stuDict = {} # 定義字典儲存單個學生資訊
    id = input("請輸入學生學號:")
    for i in range(len(array)):
        if array[i]['id'] == id:
            print("該學號已存在,不能重複新增")
            return
    name = input("請輸入學生姓名:")
    age = input("請輸入學生年齡:")
    stuDict['id'] = id
    stuDict['name'] = name
    stuDict['age'] = age
    array.append(stuDict)  # 把單個學生新增到總列表中
    print("新增成功")

# 刪除學生資訊
def delStu(array):
    "刪除學生資訊"
    id = input("請輸入要刪除的學生學號:")
    for i in range(len(array)):
        if array[i]['id'] == id:
           del array[i]
           return 0
    return 1

# 修改學生資訊
def updateStu(array):
    "修改學生資訊"
    id = input("請輸入要修改的學生學號:")
    for i in range(len(array)):
        if array[i]['id'] == id:
            name = input("請輸入要修改的學生姓名:")
            age = input("請輸入要修改的學生年齡:")
            array[i]['name'] = name
            array[i]['age'] = age
            print("修改成功")
            return
    print("找不到該學號,沒法修改")

# 查詢學生資訊
def selectStu(array):
    "查詢學生資訊"
    id = input("請輸入要查詢的學生學號:")
    for i in range(len(array)):
        dict1 = array[i]
        if dict1['id'] == id:
            print("查詢到的學生資訊:",array[i])
            return
    print("查詢失敗,查不到該學生資訊")
    return

print("=="*30)
print("歡迎使用學生管理系統")
print("1.新增學生資訊")
print("2.刪除學生資訊")
print("3.修改學生資訊")
print("4.查詢學生資訊")
print("5.退出系統")
print("=="*30)
flag = 0
array = [] #定義list用於儲存學生資訊
filename = 'write_data.txt' #檔名
if not os.path.exists(filename) : # 判斷檔案是否存在
    file = open(filename, 'w') # 不存在就建立檔案
    file.close()
f = open(filename, "r")
content = f.readlines()
print("檔案內容:",content)
array.extend(content)
array_temp = [] # 臨時變數
for i in range(len(array)): # 遍歷轉成字典
    print("第"+str(i)+"行:", array[i])
    if isinstance(array[i], str):  # 判斷是否為字串
        dict1 = json.loads(array[i].replace("'", "\"")) # 字串轉字典(json)
        array_temp.append(dict1)
del array
array = array_temp
while flag != 1:
  #  try:
    step = input("請輸入你的操作:")
    step = int(step)
    if step == 1:
        addStu(array)
        print("學生資訊列印:", array)
    elif step == 2:
        num = delStu(array)
        if num == 0:
            print("刪除成功")
        elif num == 1 or num == 2:
            print("刪除失敗")
        print("學生資訊列印:", array)
    elif step == 3:
        updateStu(array)
        print("學生資訊列印:", array)
    elif step == 4:
        selectStu(array)
    elif step == 5:
        flag = 1
        with open(filename, 'w') as f:  # 如果filename不存在會自動建立, 'w'表示寫資料,寫之前會清空檔案中的原有資料!
            for i in range(len(array)):
                if i == len(array)-1 :
                    f.write(str(array[i]).replace("\n", ""))
                else:
                    f.write(str(array[i]).replace("\n", "") + "\n")
            f.close()
    else:
        print("輸入指令錯誤,請重新輸入!!")
'''  except BaseException as result:
        flag = 1
        with open(filename, 'w') as f:  # 如果filename不存在會自動建立, 'w'表示寫資料,寫之前會清空檔案中的原有資料!
             for i in range(len(array)):
                if i== len(array)-1 :
                    f.write(str(array[i]).replace("\n", ""))
                else:
                    f.write(str(array[i]).replace("\n", "") + "\n")
            f.close()
        print("發生異常")
        print("異常資訊是:" , result)'''
print("退出系統成功")

操作跟1.0版就不演示了,檔案儲存內容如下:

{'name': 'tom', 'id': '123', 'age': '15'}
{'name': '111', 'id': '111', 'age': '111'}
{'name': '11', 'age': '11', 'id': '145'}
{'name': '444', 'age': '444', 'id': '444'}

v3.0版
使用學生類替換字典儲存學生資訊

# -*- coding:utf-8 -*-
# 學生管理系統v3.0
import os
#定義學生類
class Student:
    #類似java的構造器
    def __init__(self,id,name,age):
        self.id = id
        self.name = name
        self.age = age

    #相當於java的toString()方法
    def __str__(self):
        #msg = "{'id':" + "'"+self.id +"'"+ ",'name':" + "'" +self.name + "'" + ",'age':" + "'" + self.age+"'}"
        msg = "學生資訊:id=" + self.id + ",name=" + self.name + ",age=" + self.age
        return msg

    #獲取id
    def getId(self):
        return self.id
    #獲取name
    def getName(self):
        return self.name
    #獲取age
    def getAge(self):
        return self.age
    #設定name
    def setName(self,name):
        self.name = name
    #設定age
    def setAge(self,age):
        self.age = age

# 新增學生資訊
def addStu(array):
    "新增學生資訊"
    id = input("請輸入學生學號:")
    for i in range(len(array)):
        stu2 = array[i]
        if id == stu2.getId():
            print("該學號已存在,不能重複新增")
            return
    name = input("請輸入學生姓名:")
    age = input("請輸入學生年齡:")
    stu = Student(id,name,age)
    array.append(stu)  # 把單個學生新增到總列表中
    print("新增成功:",stu)

# 刪除學生資訊
def delStu(array):
    "刪除學生資訊"
    id = input("請輸入要刪除的學生學號:")
    for i in range(len(array)):
        stu2 = array[i]
        if id == stu2.getId():
           del array[i]
           return 0
    return 1

# 修改學生資訊
def updateStu(array):
    "修改學生資訊"
    id = input("請輸入要修改的學生學號:")
    for i in range(len(array)):
        stu2 = array[i]
        if id == stu2.getId():
            name = input("請輸入要修改的學生姓名:")
            age = input("請輸入要修改的學生年齡:")
            stu2.setName(name)
            stu2.setAge(age)
            print("修改成功")
            return
    print("找不到該學號,沒法修改")

# 查詢學生資訊
def selectStu(array):
    "查詢學生資訊"
    id = input("請輸入要查詢的學生學號:")
    for i in range(len(array)):
        stu2 = array[i]
        if id == stu2.getId():
            print("查詢到的學生資訊:",stu2)
            return
    print("查詢失敗,查不到該學生資訊")
    return
#列印學生資訊
def printStuInfo(array):
    for i in range(len(array)):
        stu = array[i]
        print(stu)

print("=="*30)
print("歡迎使用學生管理系統")
print("1.新增學生資訊")
print("2.刪除學生資訊")
print("3.修改學生資訊")
print("4.查詢學生資訊")
print("5.退出系統")
print("=="*30)
flag = 0
array = [] #定義list用於儲存學生資訊
filename = 'write_data.txt' #檔名
if not os.path.exists(filename) : # 判斷檔案是否存在
    file = open(filename, 'w') # 不存在就建立檔案
    file.close()
f = open(filename, "r")
content = f.readlines()
print("檔案內容:",content)
array.extend(content)
array_temp = [] # 臨時變數
for i in range(len(array)): # 遍歷轉成學生物件
    print("第"+str(i)+"行:", array[i])
    if isinstance(array[i], str):  # 判斷是否為字串
        strArray = str(array[i]).split(",")
        id = strArray[0]
        name = strArray[1]
        age = strArray[2].replace("\n","")
        student = Student(id,name,age)#建立學生物件
        array_temp.append(student)
del array
array = array_temp
while flag != 1:
    step = input("請輸入你的操作:")
    step = int(step)
    if step == 1:
        addStu(array)
        #print("學生資訊列印:", array)
    elif step == 2:
        num = delStu(array)
        if num == 0:
            print("刪除成功")
        elif num == 1 or num == 2:
            print("刪除失敗")
        printStuInfo(array)
    elif step == 3:
        updateStu(array)
        printStuInfo(array)
    elif step == 4:
        selectStu(array)
    elif step == 5:
        flag = 1
        with open(filename, 'w') as f:  # 如果filename不存在會自動建立, 'w'表示寫資料,寫之前會清空檔案中的原有資料!
            for i in range(len(array)):
                if i == len(array)-1 :
                    stu =array[i]
                    f.write(stu.getId() + ","+stu.getName()+","+stu.getAge())
                else:
                    stu = array[i]
                    f.write(stu.getId() + ","+stu.getName()+","+stu.getAge() + "\n")
            f.close()
    else:
        print("輸入指令錯誤,請重新輸入!!")
print("退出系統成功")

v4.0版
把學生資訊儲存到mysql資料庫中
第一步建立表

CREATE TABLE `stu` (
  `id` varchar(10) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `age` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

下面是python程式碼:
需要安裝pymysql模組,
執行安裝命令是:

pip install PyMySQL

可參考學習連結:http://www.runoob.com/python3/python3-mysql.html

# -*- coding:utf-8 -*-
# 學生管理系統v4.0
import os
import pymysql
#定義學生類
class Student:
    #類似java的構造器
    def __init__(self,id,name,age):
        self.id = id
        self.name = name
        self.age = age

    #相當於java的toString()方法
    def __str__(self):
        msg = "學生資訊:id=" + self.id + ",name=" + self.name + ",age=" + self.age
        return msg

    #獲取id
    def getId(self):
        return self.id
    #獲取name
    def getName(self):
        return self.name
    #獲取age
    def getAge(self):
        return self.age
    #設定name
    def setName(self,name):
        self.name = name
    #設定age
    def setAge(self,age):
        self.age = age

# 新增學生資訊
def addStu():
    "新增學生資訊"
    id = input("請輸入學生學號:")
    conn = pymysql.connect(host='localhost', port=3306, db='test', user='root', passwd='123456', charset='utf8')
    cursor = conn.cursor()
    params = [id]
    sql = "select * from stu where id=%s"
    cursor.execute(sql,params)
    stu = cursor.fetchone()
    print("sql返回值:" ,stu)
    if stu != None:
        if id == stu[0]:
                print("該學號已存在,不能重複新增")
        conn.close()
        return
    name = input("請輸入學生姓名:")
    age = input("請輸入學生年齡:")
    params = [id,name,age]
    sql = "insert into stu(id,name,age) value(%s,%s,%s)"
    cursor.execute(sql, params) # 把單個學生新增到總列表中
    # 向資料庫提交
    conn.commit()
    # 關閉連線
    conn.close()
    print("新增成功:")

# 刪除學生資訊
def delStu():
    "刪除學生資訊"
    id = input("請輸入要刪除的學生學號:")
    conn = pymysql.connect(host='localhost', port=3306, db='test', user='root', passwd='123456', charset='utf8')
    cursor = conn.cursor()
    params = [id]
    sql = "delete from stu where id=%s"
    try:
       cursor.execute(sql, params)
       # 向資料庫提交
       conn.commit()
       conn.close()
       return 0
    except Exception as e:
       conn.rollback()
       conn.close()
       print(e)
       return 1

# 修改學生資訊
def updateStu():
    "修改學生資訊"
    id = input("請輸入要修改的學生學號:")
    conn = pymysql.connect(host='localhost', port=3306, db='test', user='root', passwd='123456', charset='utf8')
    cursor = conn.cursor()
    params = [id]
    sql = "select * from stu where id=%s"
    cursor.execute(sql, params)
    stu = cursor.fetchone()
    if stu != None:
        if id == stu[0]:
            name = input("請輸入要修改的學生姓名:")
            age = input("請輸入要修改的學生年齡:")
            sql = "update stu set name=%s,age=%s where id=%s"
            params = [name,age,id]
            try:
                cursor.execute(sql, params)
                conn.commit()
                conn.close()
                print("修改成功")
            except Exception as e1:
                # 發生錯誤時回滾
                conn.rollback()
                conn.close()
                print("修改失敗")
                print(e1)
            return
    print("找不到該學號,沒法修改")

# 查詢學生資訊
def selectStu():
    "查詢學生資訊"
    id = input("請輸入要查詢的學生學號:")
    conn = pymysql.connect(host='localhost', port=3306, db='test', user='root', passwd='123456', charset='utf8')
    cursor = conn.cursor()
    params = [id]
    sql = "select * from stu where id=%s"
    cursor.execute(sql, params)
    stu = cursor.fetchone()
    if stu != None:
        student = Student(stu[0],stu[1],stu[2])
        print("查詢到的學生資訊:",student)
    else:
        print("查詢失敗,查不到該學生資訊")

print("=="*30)
print("歡迎使用學生管理系統")
print("1.新增學生資訊")
print("2.刪除學生資訊")
print("3.修改學生資訊")
print("4.查詢學生資訊")
print("5.退出系統")
print("=="*30)
flag = 0

while flag != 1:
    step = input("請輸入你的操作:")
    step = int(step)
    if step == 1:
        addStu()
    elif step == 2:
        num = delStu()
        if num == 0:
            print("刪除成功")
        elif num == 1:
            print("刪除失敗")
    elif step == 3:
        updateStu()
    elif step == 4:
        selectStu()
    elif step == 5:
        flag = 1
    else:
        print("輸入指令錯誤,請重新輸入!!")
print("退出系統成功")

相關文章