基於“結構體”實現簡易版學生管理系統(Golang)
首先我們們在做專案之前,需要對專案進行分析。切記不可貪功冒進,從而導致無用功
分析
- 學生類
- 管理者類
- 選單欄
- 基於管理類實現功能
- 檢視
- 新增
- 修改
- 刪除
- 退出
結構圖如下:
採用自頂向下
的程式設計思維對以上分析進行復述,先整體、後細節(先全域性、後詳細)實現如上結構
定義全域性的學生類
在定義學生類之前,我們需瞭解學生類包含的欄位。這裡我只定義了Id、姓名。其中id為唯一,姓名可重複。程式碼如下所示
type student struct {
id int64
name string
}
定義全域性的管理(即操作類)
由於學號為唯一,且其對照關係,非常適合使用Map的Key-value
格式。在這裡僅做定義及宣告並不做初始化,程式碼如下所示
type studentMgr struct {
allStudent map[int64]student
}
借用好的資料結構,會讓您的程式設計效率,編碼思維,事半功倍
定義選單欄
定義選單欄,以供使用者選擇所對應的功能。根據其功能展示。並根據相對功能,定義應函式。如下
func showMenu() {
fmt.Printf("Welcome student Manage System, TimeNow:%v", time.Now())
fmt.Println(
`
1: 檢視學生
2: 增加學生
3: 修改學生
4: 刪除學生
5: 退出~
`)
fmt.Print("What are you want do? Please input Serial number:")
}
由以上所知,我們許定義的函式有5個,他們分別是檢視學生
,增加學生
,修改學生
,刪除學生
,退出
,如下所示:
func main() {
smr = studentMgr{
allStudent: make(map[int64]student),
}
for {
showMenu()
var choice int64
fmt.Scan(&choice)
fmt.Printf("You select %d\n", choice)
switch choice {
case 1:
smr.showStudent()
case 2:
smr.addStudent()
case 3:
smr.editStudent()
case 4:
smr.delStudent()
case 5:
os.Exit(1)
default:
fmt.Println("Invalid input, please select again:")
}
}
}
在這裡例項化了一個全域性的管理類,所有的操作都經過它。
使用switch語句,進行多項的條件分支,更有利於我們編寫更簡潔的程式碼
定義功能函式
檢視學生
,增加學生
,修改學生
,刪除學生
// 檢視學生函式
func (s studentMgr) showStudent() {}
// 增加學生函式
func (s studentMgr) addStudent() {}
// 修改學生函式
func (s studentMgr) editStudent() {}
// 刪除學生函式
func (s studentMgr) delStudent() {}
基本的就已經做完了,基礎結構就已經完成了,鼓掌~
那麼接下來,我們只需要一個個實現相對應的函式。即可實現功能。
首先我們實現的是檢視學生函式。
實現檢視學生功能
func (s studentMgr) showStudent() {
for _, stu := range s.allStudent {
fmt.Printf("ID:%d, Name:%s\n", stu.id, stu.name)
}
}
我們只需要遍歷Map中所有的鍵與值,即可拿到所有的學生。這裡沒什麼好說的
實現增加學生功能
func (s studentMgr) addStudent() {
var (
stuId int64
stuName string
)
// 1. 根據輸入內容建立學生
fmt.Print("Please input you need ID:")
fmt.Scanln(&stuId)
fmt.Print("Please input you need name:")
fmt.Scanln(&stuName)
newStu := student{
id: stuId,
name: stuName,
}
// 2. 將建立的學生加入stu中
s.allStudent[newStu.id] = newStu
fmt.Println("Added successfully")
}
在這裡,我們需要進行的有兩步
-
獲取使用者鍵盤輸入
var ( stuId int64 stuName string ) // 1. 根據輸入內容建立學生 fmt.Print("Please input you need ID:") fmt.Scanln(&stuId) fmt.Print("Please input you need name:") fmt.Scanln(&stuName)
-
將輸入的學生資訊加入到管理函式中
newStu := student{ id: stuId, name: stuName, } // 2. 將建立的學生加入stu中 s.allStudent[newStu.id] = newStu fmt.Println("Added successfully") }
新增成功則提示成功
做到這裡,我們們就可以進行一個小小的檢測,有木有點小激動以及一點小方張。反正我有,示例如下
留下一個小Bug,等你去解決,提示,如果key已存在,那麼該新增操作會進行?如果暫時沒思路,可以繼續往下看。雖然並沒有直接這裡告訴你,但卻在下方進行的相對應的解決
實現修改學生功能
func (s studentMgr) editStudent() {
// 獲取使用者輸入
var StuId int64
fmt.Print("Please input want change student IdCode:")
fmt.Scanln(&StuId)
// 檢查該學號學生是否存在,沒有則提示不存在
value, ok := s.allStudent[StuId]
if !ok {
fmt.Println("Not found")
return
}
fmt.Printf("You want change student message:"+
" Id: %d, Name:%s\n", value.id, value.name)
// 獲取修改
var newName string
fmt.Print("Please change to new message:")
fmt.Scanln(&newName)
value.name = newName
// 更新學生的姓名
s.allStudent[StuId] = value
}
-
首先我們獲取使用者輸入
// 獲取使用者輸入 var StuId int64 fmt.Print("Please input want change student IdCode:") fmt.Scanln(&StuId)
-
拿著使用者輸入的學生Id,去Map裡面查詢相對應的學生Id
value, ok := s.allStudent[StuId] if !ok { fmt.Println("Not found") return } fmt.Printf("You want change student message:"+ " Id: %d, Name:%s\n", value.id, value.name)
若想實現修改,是需要存在的。如果不存在此學生,提示沒有找到該學生,直接return掉。證明無法修改。如果存在那麼它一定是唯一的一個Id,因為我們用的是Map格式的嘛,key唯一。
-
如果存在我們就需要獲取到使用者所修改的值,並且將原有的Name覆蓋掉。即可實現修改
var newName string fmt.Print("Please change to new message:") fmt.Scanln(&newName) value.name = newName // 更新學生的姓名 s.allStudent[StuId] = value
測試時間,示例如下:
首先我是新增了一個學生在裡面,Id:1,Name:Payne
.
實現刪除學生功能
func (s studentMgr) delStudent() {
var studentID int64
// 獲取使用者需刪除的id
fmt.Print("Please input want delete studentId:")
fmt.Scanln(&studentID)
// 去map裡面查詢,若有則刪除。沒有則退出重新選擇
value, ok := s.allStudent[studentID]
if !ok {
fmt.Println("Not found")
return
}
fmt.Printf("You want delete student message:"+
" Id: %d, Name:%s\n", value.id, value.name)
delete(s.allStudent, studentID)
fmt.Print("Deleted Successfully\n")
}
-
首先我們需要刪除,那麼它是一定存在我們才能去刪除。這個沒毛病吧?我覺很ok。
var studentID int64 // 獲取使用者需刪除的id fmt.Print("Please input want delete studentId:") fmt.Scanln(&studentID)
-
不存在提示未找到
value, ok := s.allStudent[studentID] if !ok { fmt.Println("Not found") return } fmt.Printf("You want delete student message:"+ " Id: %d, Name:%s\n", value.id, value.name)
-
存在進行修改
fmt.Printf("You want delete student message:"+ " Id: %d, Name:%s\n", value.id, value.name) delete(s.allStudent, studentID) fmt.Print("Deleted Successfully\n")
相關文章
- Python學生資訊管理系統-簡易版(Python基礎)Python
- Python簡易學生管理系統Python
- 基於陣列的學生管理系統【C語言版】陣列C語言
- Python實現簡易版選課系統Python
- 基於php學生資訊管理系統PHP
- 第17章-golang實現簡易的分散式系統Golang分散式
- 基於long pull實現簡易的訊息系統參考
- 基於 Mysql 實現一個簡易版搜尋引擎MySql
- 基於jsp學生資訊管理系統的設計與實現(含原始檔)JS
- 基於java的大學生健康資訊管理系統的設計與實現Java
- 基於AOP和Redis實現的簡易版分散式鎖Redis分散式
- 基於Vue的簡易MVVM實現VueMVVM
- 基於Websocket的簡易webshell實現Webshell
- express框架+mongodb簡易學生管理Express框架MongoDB
- 基於react的hash路由簡易實現React路由
- VNPY 一種基於統計的交易策略簡易實現
- C++實現控制檯學生學籍管理系統C++
- 簡易版 vue實現Vue
- 網易基於 Iceberg 的實時湖倉一體系統構建經驗
- 基於SSH培訓機構管理系統的設計與實現
- Java 學生管理系統(MVC)開源原始碼(基礎版)JavaMVC原始碼
- 手寫實現java棧結構,並實現簡易的計算器(基於字尾演算法)Java演算法
- 基於golang分散式爬蟲系統的架構體系v1.0Golang分散式爬蟲架構
- go實現簡易分散式系統Go分散式
- Java學習筆記(二)JavaSE簡易學生管理系統(適合小白練手)Java筆記
- 基於vue的簡單許可權管理實現總結Vue
- Java簡單學生資訊管理系統Java
- 【Golang】基於beego/orm實現相同表結構不同表名的分表方法實現GolangORM
- 基於Spring Security實現許可權管理系統Spring
- 學生管理系統
- 基於 Twirp RPC 的簡易 JSON Api Gateway 實現RPCJSONAPIGateway
- Python基於Socket實現簡易多人聊天室Python
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- Golang 學習——結構體 struct (一)Golang結構體Struct
- Golang 學習——結構體 struct (二)Golang結構體Struct
- 教你如何運用python實現學生資訊管理系統Python
- 教你如何用python實現學生通訊錄管理系統Python