1. 程式人生 > >Python專案:學生資訊管理系統(完整版)

Python專案:學生資訊管理系統(完整版)

主要包括有:

            完善部分:輸入錯誤;無資料查詢等異常錯誤

            新的功能:檔案的操作:檔案的讀寫,其中重點是對文字字串的詳細解析(關於整個解析拆解和重組詳見程式碼,以及添加了註釋)

學生資訊管理系統(完整版)

學生資訊管理專案,要求帶操作介面,並完成每項操作:
+----------------------+
| 1)新增學生資訊             |
| 2)顯示所有學生的資訊          |
| 3)刪除學生資訊             |
| 4)修改學生資訊             |
| 5)按學生成績高-低顯示學生資訊     |
| 6)按學生成績低-高顯示學生資訊     |


| 7)按學生年齡高-低顯示學生資訊     |
| 8)按學生年齡低-高顯示學生資訊     |
| 9)儲存學生資訊到檔案(students.txt)           |
| 10)從檔案中讀取資料(students.txt)           |
| 退出:其他任意按鍵<回車>                             |

+----------------------+   

詳細程式碼如下:

# student_info.py
# 學生資訊管理專案,要求帶操作介面,並完成每項操作:
# +----------------------+
# | 1)新增學生資訊                      |
# | 2)顯示所有學生的資訊                 |
# | 3)刪除學生資訊                      |
# | 4)修改學生資訊                      |
# | 5)按學生成績高-低顯示學生資訊         |
# | 6)按學生成績低-高顯示學生資訊         |
# | 7)按學生年齡高-低顯示學生資訊         |
# | 8)按學生年齡低-高顯示學生資訊         |
# | 9)儲存學生資訊到檔案(students.txt)      |
# | 10)從檔案中讀取資料(students.txt)      |
# | 退出:其他任意按鍵<回車>                 |
# +----------------------+                        |


def meun():
    menu_info = '''+----------------------+
| 1)新增學生資訊                           |
| 2)顯示所有學生的資訊                     |
| 3)刪除學生資訊                           |
| 4)修改學生資訊                           |
| 5)按學生成績高-低顯示學生資訊           |
| 6)按學生成績低-高顯示學生資訊           |
| 7)按學生年齡高-低顯示學生資訊           |
| 8)按學生年齡低-高顯示學生資訊           |
| 9)儲存學生資訊到檔案(students.txt)      |
| 10)從檔案中讀取資料(students.txt)      |
| 退出:其他任意按鍵<回車>                 |
+----------------------+
'''
    print(menu_info)


# 以下二個函式用於sorted排序, key的表示式函式
def get_age(*l):
    for x in l:
        return x.get("age")
def get_score(*l):
    for x in l:
        return x.get("score")
        
# 1)新增學生資訊
def add_student_info():
    L = []
    while True:
        n = input("請輸入名字:")
        if not n:  # 名字為空 跳出迴圈
            break
        try:
            a = int(input("請輸入年齡:"))
            s = int(input("請輸入成績:"))
        except:
            print("輸入無效,不是整形數值....重新錄入資訊")
            continue
        info = {"name":n,"age":a,"score":s}
        L.append(info)
    print("學生資訊錄入完畢!!!")
    return L

# 2)顯示所有學生的資訊
def show_student_info(student_info):
    if not student_info:
        print("無資料資訊.....")
        return
    print("名字".center(8),"年齡".center(4),"成績".center(4))
    for info in student_info:
        print(info.get("name").center(10),str(info.get("age")).center(4),str(info.get("score")).center(4))

# 3)刪除學生資訊
def del_student_info(student_info,del_name = ''):
    if not del_name:
        del_name = input("請輸入刪除的學生姓名:")
    for info in student_info:
        if del_name == info.get("name"):
            return info
    raise IndexError("學生資訊不匹配,沒有找到%s" %del_name)

# 4)修改學生資訊
def mod_student_info(student_info):
    mod_name = input("請輸入修改的學生姓名:")
    for info in student_info:
        if mod_name == info.get("name"):
            a = int(input("請輸入年齡:"))
            s = int(input("請輸入成績:"))
            info = {"name":mod_name,"age":a,"score":s}
            return info
    raise IndexError("學生資訊不匹配,沒有找到%s" %mod_name)

# 5)按學生成績高-低顯示學生資訊
def score_reduce(student_info):
    print("按學生成績高-低顯示")
    mit = sorted(student_info ,key = get_score,reverse = True)
    show_student_info(mit)

# 6)按學生成績低-高顯示學生資訊
def score_rise(student_info):
    print("按學生成績低-高顯示")
    mit = sorted(student_info ,key = get_score)
    show_student_info(mit)

# 7)按學生年齡高-低顯示學生資訊
def age_reduce(student_info):   
    print("按學生年齡高-低顯示:")
    mit = sorted(student_info ,key = get_age,reverse = True)
    show_student_info(mit)

# 8)按學生年齡低-高顯示學生資訊
def age_rise(student_info): 
    print("按學生年齡低-高顯示:")
    mit = sorted(student_info ,key = get_age)
    show_student_info(mit)

# 9)儲存學生資訊到檔案(students.txt)
def save_info(student_info):
    try:
        students_txt = open("students.txt","w")     # 以寫模式開啟,並清空檔案內容
    except Exception as e:
        students_txt = open("students.txt", "x")    # 檔案不存在,建立檔案並開啟
    for info in student_info:
        students_txt.write(str(info)+"\n")          # 按行儲存,新增換行符
    students_txt.close()

# 10)從檔案中讀取資料(students.txt) 
def read_info():
    old_info = []
    try:
        students_txt = open("students.txt")
    except:
        print("暫未儲存資料資訊")                       # 開啟失敗,檔案不存在說明沒有資料儲存
        return
    while True:
        info = students_txt.readline()
        if not info:
            break
        # print(info)
        info = info.rstrip()    # 去掉換行符
        # print(info)
        info = info[1:-1]       # 去掉{}
        # print(info)
        student_dict = {}       # 單個學生字典資訊
        for x in info.split(","):   # 以,為間隔拆分
            # print(x)
            key_value = []      # 開闢空間,key_value[0]存key,key_value[0]存value
            for k in x.split(":"):  # 以:為間隔拆分
                k = k.strip()       # 去掉首尾空字元
                # print(k)
                if k[0] == k[-1] and len(k) > 2:        # 判斷是字串還是整數
                    key_value.append(k[1:-1])           # 去掉 首尾的'
                else:
                    key_value.append(int(k))
                # print(key_value)
            student_dict[key_value[0]] = key_value[1]   # 學生資訊新增
        # print(student_dict)
        old_info.append(student_dict)   # 所有學生資訊彙總
    students_txt.close()  
    return old_info   

def main():
    student_info = []
    while True:
        # print(student_info)
        meun()
        number = input("請輸入選項:")
        if number == '1':
            student_info = add_student_info()
        elif number == '2':
            show_student_info(student_info)
        elif number == '3':
            try:
                student_info.remove(del_student_info(student_info))
            except Exception as e:
                # 學生姓名不匹配
                print(e)            
        elif number == '4':
            try:                
                student = mod_student_info(student_info)
            except Exception as e:
                # 學生姓名不匹配
                print(e)
            else:
                # 首先按照根據輸入資訊的名字,從列表中刪除該生資訊,然後重新新增該學生最新資訊
                student_info.remove(del_student_info(student_info,del_name = student.get("name")))  
                student_info.append(student)
        elif number == '5':
            score_reduce(student_info)
        elif number == '6':
            score_rise(student_info)
        elif number == '7':
            age_reduce(student_info)
        elif number == '8':
            age_rise(student_info)
        elif number == '9':
            save_info(student_info)
        elif number == '10':
            student_info = read_info()
        else:
            break
        input("回車顯示選單")

main()

相關推薦

Python專案學生資訊管理系統整版

主要包括有:            完善部分:輸入錯誤;無資料查詢等異常錯誤            新的功能:檔案的操作:檔案的讀寫,其中重點是對文字字串的詳細解析(關於整個解析拆解和重組詳見程式碼,以及添加了註釋)學生資訊管理系統(完整版) 學生資訊管理專案,要求帶操作介面

Python--學生資訊管理系統簡易版

           學完Python基礎,結合前邊所學的知識,做一個小Demo,一來熟悉程式碼,二來鞏固和複習前邊所學的東西。 程式碼如下: #coding=utf-8 #學生管理系統 #用來儲存學生資訊 nameList = []         print("-"

Python實現學生資訊管理系統修改版

在學習之前先要了解sqlite遊標的使用方法python使用sqlite3時遊標的使用方法 繼上篇部落格Python實現學生資訊管理系統後,我就覺得寫的太複雜了,然後又是一通優化、優化、優化; 本次優化主要修改了: 1.使用遊標的方法連線、增、刪、改、查資

【新手任務】超低配學生資訊管理系統更新中

開發工具:Eclipse Java EE IDE 2018-09 (4.9.0) + MySQL Workbench 8.0 1. 準備資料庫 1.1 新建資料庫 students   1.2 新建兩張表 tblstudents,tblmanagers,用於存放學生資

企業框架寫的簡單學生資訊管理系統springMVC,mybatis

雖然搭建企業框架繁雜了些,但是搭建好後寫的程式碼還是少多了聽著用企業框架寫的感覺要高大上一點有木有先看看演示的效果圖:1.輸入:localhost:8080/rjday7/listStudent.action2.輸入id進行查詢3.id查詢結果:可見已經是另一個action了

物件陣列增刪練習之《學生資訊管理系統使用ArrayList

//請完善實驗給定程式碼,使得工程可以完成學生資訊的管理功能,主要功能包括:新增學生資料、列印學生名單、刪除學生資料三個功能。 import java.io.*; import java.util.ArrayList; import java.util.Scanner;

學生資訊管理系統c語言

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define LEN sizeof(STD) typedef st

Python學生資訊管理系統

簡單版本學生資訊管理系統,用python基礎語法實現,基於python 3.6 容錯率很高的程式碼,做了很多異常處理功能,出錯也不會丟失資訊 啟動時自動從檔案中讀取已有學生資訊,退出時自動儲存   程式分3個模組: Menu:進行選單管理 Student_man

Java——Web開發之MVC設計模式的學生資訊管理系統

為什麼這個標題為“(二)”,其實是對於上一個特別簡單學生資訊管理系統裡功能的完善。 所謂的“(一)”在這:學生資訊管理系統(一) 系統實現的功能: 實現新增學生 顯示查詢到的學生 刪除學生 更新學生資訊 模糊查詢符合相關資訊的學生

JSP牛刀小試學生資訊管理系統

    小弟這學期的JSP課程上完了,課程作業是學生資訊管理系統,在開發過程遇到了許多問題,記錄下來,作為自己學習的總結,也可以給大家作為參考。如果有錯誤的地方,多多包涵。 github地址如下: https://github.com/XiaoZhong233/Stude

很基礎的學生資訊管理系統僅用於記錄自學

#include<stdio.h> #include<Windows.h> #define N 100 int i, n; void Readscore(int number[], float mathscore[], float chscore[]);//錄入函式 int

java+SQL做學生資訊管理系統增刪改查學生新作

java+SQL做學生資訊管理系統(增刪改查) 過程中需要用到的所有工具資料庫以及資料庫管理器等等 密碼:q80t 大學學習java後做的第一個小專案忍不住分享一下,也是我自己的面向物件程式設計的實踐作業啦,有點水,不是很優。廢話不多數,下面進入正題 介面的編

學生資訊管理系統--Java+MySQL實現

基於Java swing+MySQL實現學生資訊管理系統:主要實現JDBC對學生資訊進行增刪改查,應付一般課設足矣,分享給大家。(由於篇幅原因,程式碼未全部列出,如有需要留下郵箱) 1、開發環境:jdk7+MySQL5+win7 程式碼結構:model-dao

c語言學生資訊管理系統連結串列、檔案

#include<stdio.h>                                               /*呼叫標頭檔案*/ #include<stdlib.h> #include<string.h> #inclu

jsp學生資訊管理系統

今天看了java1234網的小鋒老師的jsp實戰專案視訊,做了個簡單的登入驗證,寫的不是很好,有點小問題還沒寫好(密碼或賬號錯誤提示) 資料庫連線類 import java.sql.*; import java.util.List; public class ConnD

javaEE專案實踐——學生資訊管理系統

  一、專案執行環境及工具 myeclipse2014 + tomcat 7.x/tomcat 8.x + jdk 1.8 二、專案開發週期 10天(前端介面直接拿來使用的還有系統很多功能未能去實現,僅供開發學習); 三、開發期間實現的功能 時間緊、任務重、基礎差  ——>

學生資訊管理系統GUI

資料庫的內容:GUI介面:程式碼:StudentManagerment.javapackage 學生基本資訊; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.Actio

學生資訊管理系統js與php的資料傳輸

最近期末將至,比較忙,更得比較慢,見諒。 搭建完環境並且確認連線之後,我們可以開始編寫程式了。 然後建表 插入資料 (這裡僅作一個示例) 另外建表的時候要注意,因為要建立檢視,所以應該把要與另一個表連線的項建為外來鍵,然後另一個表通過refer

學生資訊管理系統——系統功能分析

       好多天,沒有學習資料庫了,更別說敲系統了。落下了有些東西又得從頭再來。最近這些天在看第二遍《SQL——入門經典》把基礎知識重溫一下,同時看了看這個小系統,不知道如何下手啊,所以先大致觀察

順序表構建學生資訊管理系統C++

順序表構建學生資訊管理系統–C++樣例 對於本文的任何建議和問題都可留言,我們共同探討,進步和提高。 上次編寫了根據單鏈表進行構建學生管理系統的C++樣例,本次使用順序表進行構建。單鏈表與順序表各有利弊,順序表能夠快速的進行定位,但是必須事先指定表的