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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么把已有的RSA公私钥转换成PKCS8格式

    怎么把已有的RSA公私钥转换成PKCS8格式

    2021年7月17日
    118
  • 实验六 有源滤波器

    实验六 有源滤波器实验六有源滤波器一、实验目的二、仪器及设备三、预习要求画出三个电路的幅频特性曲线。四、实验内容l.低通滤波电路2.高通滤波电路3.带阻滤波电路(1)实测电路中心频率。(2)以实测中心频率为中心,测出电路幅频特性。五、实验报告六,仿真图:图1低通滤波器仿真图图2高通滤波器仿真图图3带阻滤波电路仿真图一、实验目的1.熟悉有源滤波电路构成及其特性。2.学会测量有源滤波电路幅频特性。二、仪器及设备1.示波器2.信号发生器三、预习要求1.预习教材有关滤波电路

    2022年5月20日
    34
  • 海思Hi3798处理器参数,Hi3798芯片详细信息介绍[通俗易懂]

    海思Hi3798处理器参数,Hi3798芯片详细信息介绍[通俗易懂]Hi3798CV200集成4核64位高性能CortexA53处理器、内置NEON加速引擎,强大的CPU处理能力可以满足各种差异化的业务需求。在码流兼容性、在线视频播放的流畅性、图像质量以及整机性能方面保持业界最好的用户体验。支持4K2KP60@10bit超高清视频解码和显示,支持H.265/HEVC、H.264/AVC、AVS+、MVC、MPEG2、MPEG4、VC-1、VP6、VP…

    2022年6月30日
    105
  • 网上书城项目总结(servlet_jsp+javaBean)

    网上书城项目总结(servlet_jsp+javaBean)          网上书城项目总结1项目大纲设计:需求分析系统设计详细设计权限设计2技术选型:Servlet+jsp+javaBeanListener+Filter+jstl+fileupload+c3p0+dbutils+mysql3开发顺序:  从dao层到service层再到web层网上书城需求分析:分别对管理员,普通用户,系统三个用户…

    2022年7月27日
    15
  • 2019你会被裁员吗?「建议收藏」

    2019你会被裁员吗?「建议收藏」2019你会被裁员吗?

    2022年4月21日
    56
  • Oracle中的wm_concat函数用法

    Oracle中的wm_concat函数用法 &nbsp;&nbsp;&nbsp;在日常的数据查询过程中,经常遇到一条信息分多条记录存储,并以同一个ID关联的情况,比如常见的房产证权利人信息,因为共有权人可能有很多,不可能把所有的权利人都放到权利人表的权利人字段,把所有权利人的证件号都放到权利人证件号字段,所以在数据库设计时候,会采用一个权利人一条记录,并以权利ID关联的方式存…

    2022年5月26日
    94

发表回复

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

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