C语言学生成绩管理系统

C语言实现了学生成绩管理系统,可以对学生成绩进行录入、查询、修改、删除和排序。#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructStuScore{ intstuID; charstuName[10]; intyuwen;

大家好,又见面了,我是你们的朋友全栈君。

C语言实现了学生成绩管理系统,可以对学生成绩进行录入、查询、修改、删除和排序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct StuScore{
	int stuID;
	char stuName[10];
	int yuwen;
	int shuxue;
	int yingyu;
} STUSCORE;
typedef struct StuScoreNode{
	STUSCORE stu;
	struct StuScoreNode *NEXT;
}  SSN,*SSNLINK;
 
//创建学生信息的结构体
STUSCORE createStuScore()
{
	STUSCORE stu;
	printf("请输入学生的学号:\n");
	scanf("%d",&stu.stuID);
		if(stu.stuID==-1) return stu;
	printf("请输入学生的姓名:\n");
	scanf("%9s",stu.stuName);
	printf("请输入学生的语文成绩:\n");
	scanf("%d",&stu.yuwen);
	printf("请输入学生的数学成绩:\n");
	scanf("%d",&stu.shuxue);
	printf("请输入学生的英语成绩:\n");
	scanf("%d",&stu.yingyu);
	return stu;
}
 
//创建一个学生信息节点
SSNLINK addStuScoreNode()
{
	SSNLINK assn;
	assn=(SSNLINK)malloc(sizeof(SSN));
	assn->stu=createStuScore();
	assn->NEXT=NULL;
	return assn;
}
 
//将一个节点添加到列表中去,返回列表的头指针
SSNLINK addToList(SSNLINK * list,SSNLINK stunode)
{
	stunode->NEXT=*list;
	*list=stunode;
	return *list;
}
 
void showOneInfo1(STUSCORE ss)
{
	printf("学号:%d\n姓名:%s\n语文:%d\n数学:%d\n英语:%d\n",ss.stuID,ss.stuName,ss.yuwen,ss.shuxue,ss.yingyu);
 
}
 
void showOneInfo2(STUSCORE ss)
{
	printf("%8d%8s%8d%8d%8d\n",ss.stuID,ss.stuName,ss.yuwen,ss.shuxue,ss.yingyu);
}
 
void showAllInfo(SSNLINK list)
{
	SSNLINK  p;
	p=list;
	printf("%8s%8s%8s%8s%8s\n","学号","姓名","语文","数学","英语");
	while(p!=NULL)
	{
		showOneInfo2((*p).stu);
		p=p->NEXT;
	}
	getchar();getchar();
}
 
/* 查询  */
SSNLINK searchInfo(SSNLINK  head)
{
	int sno;
	SSNLINK p;
	printf("请输入要选择的学号:\n");
	scanf("%d",&sno);
	p=head;
	while(p!=NULL)
	{
		if(p->stu.stuID==sno)
			break;
		p=p->NEXT;
	}
	if(p==NULL)
		printf("查无此人!");
	else
		showOneInfo1(p->stu);
	getchar();getchar();
	return p;
}
 
/* 修改  */
void modifyInfo(SSNLINK  head)
{
	SSNLINK p;
	p=searchInfo(head);
	if(p==NULL)
	{
	getchar();getchar();
	return ;
	}
	printf("请输入新的学生成绩信息:\n");
	p->stu=createStuScore();
	printf("信息修改成功!");
	getchar();getchar();
}
 
/* 删除 */
void  deleteInfo(SSNLINK * head)
{
	SSNLINK p,q;//p是要删除的节点指针,q是p节点的上一个节点的指针
	int choice;
	p=searchInfo(*head);
	if(p==NULL)
	{
	getchar();getchar();
	return ;
	}
	printf("您确定要删除该信息吗?(1删除/0取消)\n");
	scanf("%d",&choice);
	if(choice==0)
		return;
	//真删除节点
	if(p==*head)//删除头节点
	{
		*head=(*head)->NEXT;//实现了在函数内,把外部变量(list)的值改变
		free(p); //malloc的反函数
	}
	else
	{
		//先找到P指向的上一个节点
		q=*head;
		while(q->NEXT!=p)
			q=q->NEXT;
		q->NEXT=p->NEXT;
		free(p);
	}
	getchar();getchar();
}
 
/* 排序 */
void sortInfo(SSNLINK  head)
{
	//冒泡排序法
	SSNLINK tail=head,p;
	STUSCORE t;
	//让tail指针指向链表结尾
	while(tail->NEXT!=NULL)
		tail=tail->NEXT;
	while(head->NEXT!=tail)//控制冒泡的次数
	{
		p=head;
		while(p->NEXT!=tail)//每一次的循环比较
		{
			if(p->stu.stuID> p->NEXT->stu.stuID)
			{
				t=p->stu;
				p->stu=p->NEXT->stu;
				p->NEXT->stu=t;
			}
			p=p->NEXT;
		}
		if(p->stu.stuID> p->NEXT->stu.stuID)
			{
				t=p->stu;
				p->stu=p->NEXT->stu;
				p->NEXT->stu=t;
			}
		tail=p;//尾指针前移一个
	}
	printf("排序完成\n");
	getchar();getchar();
}
 
int main()
{
	SSNLINK list=NULL,node;//list是列表的头指针,node为单节点的指针
	int choice;
	while(1)
	{
		system("cls");
	printf("*********学生成绩管理系统********\n");
	printf("1.输入学生成绩信息\n");
	printf("2.显示所有学生的成绩信息\n");
	printf("3.按学号查询学生成绩信息\n");
	printf("4.按学号修改学生成绩信息\n");
	printf("5.按学号删除学生成绩信息\n");
	printf("6.按学号排序学生成绩信息\n");
	printf("*********************************\n");
	printf("请输入您的选择:\n");
	scanf("%d",&choice);
	switch(choice)
        {
        case 1://添加学生信息
            while(1)
            {
                node=addStuScoreNode();
                if(node->stu.stuID==-1)
                    break;
                list=addToList(&list,node);
            }
            break;
        case 2:showAllInfo(list);break;
        case 3:searchInfo(list);break;
        case 4:modifyInfo(list);break;
        case 5:	deleteInfo(&list);break;
        case 6:sortInfo(list);break;
        case -1:exit(0);
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127116.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • zookeeper入门教程_kubernetes github

    zookeeper入门教程_kubernetes githubzookeeperwatcher架构zookeeper 配置中心分布式ID分布式锁集群搭建数据一致性协议:zab协议Zookeeper Leader选举Observer角色及其配置watcher架构客户端首先将Watcher注册到服务器,同时将Watch对象保存到客户端的Watch管理器中。当Zookeeper服务器监听到的数据发生变化时,服务器会通知客户端,接着客户端的Watch管理器会触发相关的Watcher来回调响应处理逻辑,从而完成整体的数据发布/订阅流程。javaAPIJava

    2022年8月9日
  • linux查看cuda版本「建议收藏」

    linux查看cuda版本「建议收藏」1.cat/usr/local/cuda/version.txt2.或者nvcc-v

    2022年6月11日
  • iOS自动化之WDA(WebDriverAgent)安装

    iOS自动化之WDA(WebDriverAgent)安装1、WDA介绍WebDriverAgent在iOS端实现了一个WebDriverserver,借助这个server我们可以远程控制iOS设备。你可以启动、杀死应用,点击、滚动视图

    2022年7月4日
  • PEST 分析法

    PEST 分析法PEST分析法:用于对宏观环境的分析。宏观环境又称一般环境,是指影响一切行业和企业的各种宏观力量。对宏观环境因素作分析时。由于不同行业和企业有其自身特点和经营需要,分析的具体内容会有差异,但一般都应对政治(Political)、经济(Economic)、技术(Technological)和社会(Social)这四大类影响企业的主要外部环境因素进行分析,这种方法简称为PEST分析法…

    2022年4月27日
  • 一步步学习SPD2010–第十章节–SP网站品牌化(12)–关键点

    一步步学习SPD2010–第十章节–SP网站品牌化(12)–关键点1.      SPD提供了许多工具帮助你管理CSS样式和文件2.      SPD使用一系列配置选项来决定它如何添加CSS标签到你的页面。3.      SPFoundation和SPServer主要的CSS是corev4.css。

    2022年6月21日
  • C语言刷屏

    C语言刷屏QQ刷屏原理和复制粘贴差不多,只不过是叫系统帮你粘贴并摁下回车键。#include<stdio.h>#include<Windows.h>intmain(){ intn; charname[100]; printf(“请输入窗口名字:”); scanf(“%s”,&name);//窗口名字 printf(“请输入刷屏次数:”);…

    2022年6月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号