【Golang】【初学者】【仿C链表】简易学生管理系统

本文介绍了作者作为一个大一新生,利用Golang语言制作的一个简易学生管理系统,该系统实现了学生信息的添加、读取、查询、删除和修改功能,采用仿C风格的链表进行数据管理。文章提供了主要代码段,并表达了期待得到反馈的愿望。
摘要由CSDN通过智能技术生成

目录


引子

简易学生管理系统

代码一览

运行


引子

人是一个计算机专业的大一新生,适逢疫情,寒假期间无处可去,便想着不要虚度光阴,尽我所能的做些微不足道的小项目,作为一种娱乐,也可以使我更加熟悉go语言的语法和一些与C、C++和Python不同的特性。

只是一个小小的练习,有很多不足的地方,希望各位大佬能够不吝赐教


简易学生管理系统

系统仅有简单的 添加、读取、查询、删除、修改 功能

学生信息的格式为:

               学号  姓名  性别  年龄  成绩

本系统使用仿C风格链表实现对学生信息的管理


代码一览

全局变量及“student”结构体的定义:

type student struct {
	number string    //学号       //数据域
	name string      //姓名
	sex byte         //性别
	age int          //年龄
	score float64    //分数
	next *student  //指针域
}
var (
	People = 0  //用于记录学生的人数
	head *student = nil   //头指针
)

主函数 func main()

package main
import(
	"fmt"
	"os"
)
func main(){
	var(
		key string
		jud bool
		count = 0
		exit bool
	)
	fmt.Printf("请输入密码:")
	for true {
		if count != 0 {
			fmt.Println("请重新输入:")
		}
		fmt.Scan(&key)
		jud = Key_jud(&key)
		if jud == true{
			fmt.Println("密码通过!正在载入……")
			break
		}else{
			count ++     //超过三次错误退出程序
		}
		if count == 3{
			fmt.Println("多次错误!退出程序!")
			os.Exit(1)
		}
	}
	for exit != true{
		exit = Displaymenu()
	}
	fmt.Println("结束!")
}

密码函数 func Key_jud(p *string) bool

package main
import(
	"fmt"
)
func Key_jud(p *string) bool{
	var(
		key_builded = "wanlxj0429"
	)
	if *p == key_builded{
		return true
	}else{
		fmt.Println("密码错误!")
		return false
	}
}

主菜单打印函数 func Displaymenu() bool

package main
import(
	"fmt"
)
func Displaymenu() bool{
	var(
		choose int
	)
	fmt.Println(`******************************
欢迎来到Xunyira的学生管理系统!
******************************
*     输入数字键以选择功能       *
*        1.添加学生信息		 *
*        2.读取学生信息        *
*        3.查询学生信息        *
*        4.删除学生信息        *
*        5.修改学生信息        *
*        6.退出管理系统		 *
******************************`)
	fmt.Println("        当前学生人数为:",People)
	fmt.Println("请输入你的选择:")
	fmt.Scan(&choose)
	if choose == 1{
		head = Add(head)
	}else if choose == 2{
		Print_(head)
	}else if choose == 3{
		query(head)
	}else if choose == 4{
		head = delete(head)
	}else if choose == 5{
		head = alter(head)
	} else if choose == 6{
		return true
	}
	return false
}

添加学生信息函数 func Add(head *student) *student

package main
import(
	"fmt"
	"os"
)
func Add(head *student) *student{   //输入学生信息
	var(
		p *student = nil
		pr *student = nil
		num string
		Name string
		Sex byte
		Age int
		Score float64
		)
	fmt.Println("开始录入学生信息:")
	fmt.Println("请按照学号、姓名、性别、年龄、成绩的顺序录入:")
	fmt.Println("输入esc结束输入:")
	for true{
		p = new(student)  //申请内存
		if p == nil{
			fmt.Println("不够内存!")
			os.Exit(1)
		}
		if head == nil{
			head = p  //若 头指针 为 空,则头指针指向 新申请内存空间p
		}else{
			pr = head
			for pr.next != nil{
				pr = pr.next
			}
			pr.next = p
		}
		fmt.Scanf("%s",&num)
		if num == "esc"{
			fmt.Println("录入结束!")
			break
		}
		fmt.Scanf("%s %c %d %f",&Name,&Sex,&Age,&Score)
		p.number = num
		p.name = Name
		p.sex = Sex
		p.age = Age
		p.score = Score
		p.next = nil
		p = nil
		People ++
	}
	fmt.Println("录入成功!")
	return head  //返回
}

学生信息打印输出 func Print_(head *student) 

package main

import (
	"fmt"
)
func Print_(head *student){    //输出学生信息
	if head == nil{
		fmt.Println("你的学生信息表单为空!")
		return
	}
	var pr = head
	for pr.next != nil{
		if pr.age != 0 {
			fmt.Printf("%s %s %c %d %.2f\n",pr.number,
				pr.name,pr.sex,pr.age,pr.score)
		}
		pr = pr.next
	}
}

学生信息查询 func query(head *student)

package main

import (
	"fmt"
)
func query(head *student) {
	var (
		que string
		pr *student
		skip = 0
	)
	if head == nil{
		fmt.Println("学生信息为空!")
		return
	}
	fmt.Println("请输入你要查询的学生的姓名或学号:")
	fmt.Scan(&que)
	pr = head
	for pr.next != nil{
		if pr.number == que || pr.name == que{
			skip = 1
			fmt.Printf("%s %s %c %d %f",pr.number,pr.name,
				pr.sex,pr.age,pr.score)
			break
		}
		pr = pr.next
	}
	if skip == 0{
		fmt.Println("未查找到结果")
	}
}

删除学生信息 func delete(head *student) *student

package main

import (
	"fmt"
)
func delete(head *student) *student{
	var(
		pr *student
		p *student
		que string
		t_f byte
		skip = 0
	)
	if head == nil{
		fmt.Println("学生信息为空!")
		return head
	}
	fmt.Println("请输入你想要删除的学生的学号或姓名:")
	fmt.Println("输入esc以中断")
	fmt.Scan(&que)
	if que == "esc"{
		return head
	}
	p = head
	for p.next != nil{
		if p.name == que || p.number == que{
			fmt.Printf("%s %s %c %d %f\n",p.number,p.name,
				p.sex,p.age,p.score)
			fmt.Println("是否删除?(Y/N)")
			fmt.Scanf("%c",&t_f)
			skip = 1
			break
		}
		pr = p
		p = p.next
	}
	if skip == 0{
		fmt.Println("该学生不存在!")
	}else{
		if t_f == 'y' || t_f == 'Y'{
			if p == head && p.next != nil{
				head = p.next
			}else if p.next == nil && p != head{
				pr.next = nil
			}else{
				pr.next = p.next
			}
			People --
			fmt.Println("删除成功!")
		}
	}
	return head
}

修改学生信息 func alter(head *student) *student

package main

import "fmt"
func alter(head *student) *student{
	var(
		que string
		newnum string
		newnam string
		newsex byte
		newage int
		newsc float64
		p *student
		skip = 0
	)
	if head == nil{
		fmt.Println("学生信息为空!")
		return head
	}
	p = head
	fmt.Println("请输入你要修改的学生的姓名或学号")
	fmt.Println("输入esc以中断:")
	fmt.Scan(&que)
	if que == "esc"{
		return head
	}
	for p.next != nil{
		if p.number == que || p.name == que{
			fmt.Printf("%s %s %c %d %f\n",p.number,p.name,
				p.sex,p.age,p.score)
			fmt.Println("请输入修改后的内容:")
			fmt.Scanf("%s %s %c %d %f",&newnum,&newnam,
				&newsex,&newage,&newsc)
			p.number = newnum
			p.name = newnam
			p.sex = newsex
			p.age = newage
			p.score = newsc
			skip = 1
			break
		}
		p = p.next
	}
	if skip == 0{
		fmt.Println("查无此人!")
	}else{
		fmt.Println("修改后的信息为")
		fmt.Printf("%s %s %c %d %f\n",p.number,p.name,
			p.sex,p.age,p.score)
	}
	return head
}

运行



 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值