Java学生管理系统使用线性表任务台程序

点此去下载
运行截图:在这里插入图片描述
在这里插入图片描述

(线性表)
基本概念与设计思路:链表的每个元素称为一个节点,每个节点都可以存储在内存中的不同的位置,为了表示每个元素与后继元素的逻辑关系,以便构成“一个节点链着一个节点”的链式存储结构,除了存储元素本身的信息外,还要存储其直接后继信息,因此,每个节点都包含两个部分,第一部分称为链表的数据区域,用于存储元素本身的数据信息,这里用data表示,它不局限于一个成员数据,也可是多个成员数据,第二部分是一个结构体指针,称为链表的指针域,用于存储其直接后继的节点信息,这里用next表示,next的值实际上就是下一个节点的地址,当前节点为末节点时,next的值设为空指针
在这里插入图片描述

                                图1--1

为了方便对链表各项操作的理解,把链表应用到具体的实例中,
我选的程序为:学生信息管理系统
问题描述:
学生信息管理对于学校管理中异常重要的一个环节,作为学校,除了育人,就是育知,学生信息管理的计算机化是在整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,由于它的重要性,学生信息管理系统的开发与应用就逐渐提入议程,并占着越来越重要的份量。 运用学生信息管理系统可以减轻学院教学人员的工作量,缩小开支,提高工作效率与准确率,能够合理安排时间,能够尽快的知道自己的考试成绩,投入新的课程的学习或复习这次没有考过的课程。而学生信息管理系统的应用也为今天的民办教育在未来市场的竞争力有所提高。从大的方向说,就是为了加速我国四化建设的发展,实现全部的自动化,使我国发展成为通讯网络化,决策科学化,办公自动化的国家。 在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,怎样提高工作效率是人们首先考虑的问题。学生信息管理是一个非常繁琐与复杂的一项工作,一个原因就是工作量大不好管。对于一个学校而言,更应该运用一些本地资源,提高管理的力度,对学生负责,对国家负责。
程序功能:

  1. 添加学生成绩信息

  2. 根据学号将学生信息插入到指定位置

  3. 显示所有学生的信息

  4. 删除指定学生成绩信息

  5. 修改指定学生成绩信息

  6. 查询当前链表中有多少为同学

  7. 查询指定分数的学生个数,并输出查询的学生信息

  8. 退出程序

            图1-2
    

详细设计:
声明程序中关于需要的变量
class StudentLinkNode
{
public int stuno;//学生学号
public String name;//学生姓名
public int score;//学生班级
public int mathscore;//数学分数
public int englishscore;//英语分数
public int computerscore;//计算机分数
public StudentLinkNode next;//指向下一个结点的指针
//构造器
public StudentLinkNode() {}
public StudentLinkNode(int stuno,String name,int score,int mathscore,int englishscore,int computerscore) {
this.stuno = stuno;
this.name = name;
this.score = score;
this.mathscore = mathscore;
this.englishscore = englishscore;
this.computerscore = computerscore;
}
为了显示方法,重写toString方法
public String toString() {
return "学号: “+stuno+” “+“姓名”+name+” "+“班级”+score "+“数学分数”+mathscore "+“英语分数”+englishscore "+“计算机分数”+computerscore;
}
}
遇到的困难——最重要的关于链表的操作:
有两种插入方式,先初始化一个头节点,头节点不要动,不存放具体的数据,添加结点到单向链表,不考虑编号顺序时,找到当前链表的最后结节点,将最后这个节点的next 指向 新的结点,head节点不能动,因此我们需要一个辅助遍历的节点 temp,找到链表的最后的节点,如果遍历的当前结点不是尾结点,将temp节点向后移动,当退出while循环时,表示temp就指向了链表的尾节点另一种添加方式,在添加学生时根据学号将学生插入到指定位置此我们仍然通过一个辅助指针(变量)来帮助找到添加的位置
因为是单链表,我们找的temp是位于添加位置的前一个节点,否则插入不了
class LinkedList{

private StudentLinkNode head = new StudentLinkNode(0,"",0);


public void add(StudentLinkNode stuNode)
{

	StudentLinkNode temp = head;
	while(true) {
		
		if(temp.next == null)
		{ 
			break;
		}
		
		temp = temp.next;
	}
	
	temp.next = stuNode;
}


public void addBystuno(StudentLinkNode stuNode)
{

	StudentLinkNode temp = head;
	boolean flag = false;
	while(true)
	{
		if(temp.next == null) 
		{
			break;
		}
		if(temp.next.stuno > stuNode.stuno) 
		{
			break;
		}
		else if(temp.next.stuno == stuNode.stuno) 
		{
			flag = true;
			break;
		}
		temp = temp.next;
	}

	if(flag)
	{   
		System.out.println("准备添加的学生的学号:"+stuNode.stuno+"已经存在不能添加了");
	}else {
		
		stuNode.next = temp.next;
		temp.next = stuNode;
	}
}

删除结点:根据学生学号删除指定学生节点
head不能动,因此我们需要一个temp辅助节点找到待删除节点的前一个节点
说明我们在比较时,是temp.next.stuno和需要删除的节点的stuno比较
public void del(int stuno)
{
StudentLinkNode temp = head;
boolean flag =false;
while(true)
{
if(temp.next == null)
{
break;
}
if(temp.next.stuno == stuno)
{

			flag = true;
			break;
		}
		temp = temp.next; 
	}
	if(flag)
	{ 
	
		temp.next = temp.next.next;
	}else {
		System.out.println("学号"+stuno+"的学生不存在");
	}	
}

遍历链表

public void showlist() {
if(head.next == null)
{
System.out.println(“链表为空”);
return;
}
因为头节点,不能动,因此我们需要一个辅助变量来遍历
StudentLinkNode temp = head.next;
while(true)
{
判断是否到链表最后
if(temp == null)
{
break;
}
输出节点的信息
System.out.print(temp);前面StudentLinkNode类中已经重写toString方法
System.out.println();

		temp = temp.next;
	}
}
返回链表中共有多少个学生的信息
public int len()
{
	int count=0;
	判断链表是否为空
	if(head.next == null)
	{
		System.out.println("链表为空");
		return 0;
	}
	因为头节点,不能动,因此我们需要一个辅助变量来遍历
	StudentLinkNode temp = head.next;
	while(true)
	{
		判断是否到链表最后
		if(temp == null)
		{
			break;
		}
		输出节点的信息
		count++;
		将temp后移
		temp = temp.next;
	}
	return count;
	
}
删除结点:根据学生学号删除指定学生节点
head不能动,因此我们需要一个temp辅助节点找到待删除节点的前一个节点
说明我们在比较时,是temp.next.stuno和需要删除的节点的stuno比较
public void del(int stuno)
{
	StudentLinkNode temp = head;
	boolean flag =false; 
	while(true)
	{
		if(temp.next == null)
		{
			break;//已经到链表的最后
		}
		if(temp.next.stuno == stuno)
		{
			//找到待删除的节点的前一个节点temp
			flag = true;
			break;
		}
		temp = temp.next;//temp后移,遍历
	}
	//判断flag
	if(flag)
	{//找到
	//可以删除
		temp.next = temp.next.next;
	}else {
		System.out.println("学号"+stuno+"的学生不存在");
	}	
}

修改节点信息,根据stuno 编号来修改
public void update(StudentLinkNode stuNode)
{
	//判断是否为空
	if(head.next == null)
	{
		System.out.println("链表为空");
		return;
	}
	找到需要修改的节点,根据stuno编号
	定义一个辅助变量
	StudentLinkNode temp = head.next;
	boolean flag =false;//表示是否找到该节点
	while(true)
	{
		if(temp == null)
		{
			break;//已经遍历完链表
		}
		if(temp.stuno == stuNode.stuno)//找到
		{
			flag = true;
			break;
		}
		temp = temp.next;
	}
	根据flag判断是否找到要修改的节点
	if(flag) {
		temp.name = stuNode.name;
		temp.score = stuNode.score;
		temp.mathscore = stuNode.mathscore;
		temp.englishscore = stuNode.englishscore;
		temp.computerscore = stuNode.computerscore;
	}else {
		System.out.println("没有找到学号为"+stuNode.stuno+"的学生");
	}
}
查询指定班级的学生个数,并输出查询的学生信息
public void getbyScore(int score)
{
	StudentLinkNode temp = head;
	int count=0;
	System.out.println("班级为"+score+"的学生有:");
	while(temp != null)
	{
		if(temp.score == score)
		{
			count++;
			System.out.println("学号:"+temp.stuno+"姓名:"+temp.name);
		}
		temp = temp.next;
	}
	System.out.println("共上面"+count+"个");
}

不足与改进:学生信息管理系统有诸多信息,所以对输入的信息没有一个甄别的话,很容易造成问题,所以改进的地方就是给数据的合法性进行检验。
特色功能:在本程序中最大的特色就是有多种查找学生信息的方式

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵舒敲代码

我的公v是cxyy1106,欢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值