# Python實作範例 - 學生成績管理
### 開發一個學生成績管理系統,有三個主要功能:
1. 管理學生成績
2. 查詢學生成績
3. 關於
##### 管理學生成績
有兩個子功能:
1. 新增學生成績:學號、姓名、國文、英文、數學
2. 刪除學生成績:可以輸入學號或姓名來刪除
##### 查詢學生成績
有兩個子功能:
1. 依學號查詢
2. 顯示全部成績
> 1. 成績查詢皆會自動加總分數
> 2. 子選單需要有回主選單功能
> 3. 主選單需要有離開功能
### 程式碼
##### 無函式版:
```
grades = {} # 空的dict(字典)
while True:
print('===================')
print('學生成績管理系統')
print('===================')
print('1. 管理學生成績')
print('2. 查詢學生成績')
print('3. 關於')
print('4. 離開')
cmd = input('==>')
if cmd == '1': # 管理學生成績
while True:
print('===================')
print('子選單: 管理學生成績')
print('===================')
print('1. 新增學生成績')
print('2. 刪除學生成績')
print('3. 回主選單')
sub_cmd = input('==>')
if sub_cmd == '1': # 新增學生成績
num = input('請輸入學號: ')
name = input('請輸入姓名: ')
mandiran = int(input('請輸入國文成績: ')) # int()轉成數字
math = int(input('請輸入數學成績: '))
english = int(input('請輸入英文成績: '))
# 新增一筆成績
grades[num] = [name, mandiran, math, english]
#print(grades) # for 開發時除錯用
print('新增完成!')
elif sub_cmd == '2': # 刪除學生成績
num = input('請輸入要刪除成績的學號: ')
if num in grades.keys():
del grades[num]
print('刪除完成!')
else:
print('查無此人!')
#print(grades) # for 開發時除錯用
elif sub_cmd == '3': # 回主選單
break
elif cmd == '2': # 查詢學生成績
while True:
print('===================')
print('子選單: 查詢學生成績')
print('===================')
print('1. 依學號查詢')
print('2. 顯示全部成績')
print('3. 回主選單')
sub_cmd = input('==>')
if sub_cmd == '1': # 依學號查詢
num = input('請輸入要查詢成績的學號: ')
if num in grades.keys():
grade = grades[num]
print('學號', num, ', ', grade[0], '的成績: 國文=', grade[1], \
', 數學=', grade[2], ', 英文=', grade[3], ', 總分: ', \
grade[1] + grade[2] + grade[3])
else:
print('查無此人!')
elif sub_cmd == '2': # 顯示全部成績
if len(grades) == 0:
print('無學生成績資料')
else:
for num, grade in grades.items():
print('學號', num, ', ', grade[0], '的成績: 國文=', grade[1], \
', 數學=', grade[2], ', 英文=', grade[3], ', 總分: ', \
grade[1] + grade[2] + grade[3])
elif sub_cmd == '3': # 回主選單
break
elif cmd == '3': # 關於
print('學生成績管理系統')
print('版本: 0.01')
print('日期: 2020-08-01')
print('開發者: Aaron Ho')
elif cmd == '4': # 離開
break
else:
print('輸入錯誤!')
```
##### 函式版
students_system.py
```
grades = {}
def student_system():
while True:
print('-------------------')
print('學生成績管理系統')
print('-------------------')
print('1. 管理學生成績')
print('2. 查詢學生成績')
print('3. 結束')
c = input('=> ')
if c == '1':
func_1()
elif c == '2':
func_2()
elif c == '3':
break
else:
print('輸入錯誤!')
def func_1():
while True:
print('-------------------')
print('管理學生成績')
print('-------------------')
print('1. 新增學生成績')
print('2. 刪除學生成績')
print('3. 回主功能表')
c = input('=> ')
if c == '1':
add_grade()
elif c == '2':
del_grade()
elif c == '3':
break
else:
print('輸入錯誤!')
def func_2():
while True:
print('-------------------')
print('查詢學生成績')
print('-------------------')
print('1. 依學號查詢')
print('2. 查詢全部成績')
print('3. 回主功能表')
c = input('=> ')
if c == '1':
find_grade()
elif c == '2':
show_grades()
elif c == '3':
break
else:
print('輸入錯誤!')
def add_grade():
n = input('請輸入學號: ')
name = input('請輸入學生姓名: ')
mandrain = input('請輸入國文成績: ')
math = input('請輸入數學成績: ')
english = input('請輸入英文成績: ')
grades[n] = [name, mandrain, math, english]
print('新增完成!')
def del_grade():
n = input('請輸入要刪除的學號: ')
if n in grades.keys():
del grades[n]
print('刪除完成.')
else:
print('查無此人.')
def find_grade():
n = input('請輸入要查詢的學號: ')
if n in grades.keys():
grade = grades[n]
print('學號: ', n, ', ', grade[0], '的成績: 國文=', grade[1], ', 數學=', grade[2], ', 英文=', grade[3])
else:
print('查無此人.')
def show_grades():
if len(grades) == 0:
print('無學生成績.')
return
for n, grade in grades.items():
print('學號: ', n, ', ', grade[0], '的成績: 國文=', grade[1], ', 數學=', grade[2], ', 英文=', grade[3])
```
main.py
```
import student_system
st = student_system
st.student_system()
```
#### 練習
1. 請將學生成績管理系統改為類別版本。