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);
        }
    }
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • shell中if语句_shell脚本if判断

    shell中if语句_shell脚本if判断提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、if语句1.if单分支判断2.if双分支判断3.if多分支判断总结提示:以下是本篇文章正文内容,下面案例可供参考一、if语句1.if单分支判断●当“条件成立”时执行命令序列●否则不执行任合操作语法格式♦if空格条件测试then命令序列fiif加空格加一个条件测试,如果这个条件测试结果为真那么就执行then后面的命令序列,这个命令序列可以是一条命令也可以是多条命令只要条件测试为真,.

  • ValidateRequest

    ValidateRequestASP.Net1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个HttpRequestValidationExceptioin。默认情况下会返回如下文字的页面:   这是ASP.Net提供的一个很重要的安全特性。因为很多程序员对安全没有概念,甚至都不知道XSS这种攻击的存在,知道主动

  • 华为模拟器ensp命令_vmware命令大全

    华为模拟器ensp命令_vmware命令大全命令符从用户视图切换到系统视图system–view从系统视图切换到用户视图quit连入接口命令interfaceIP地址、子网掩码配置命令ipaddress接口IP信息查看命令displayipinterfacebriefIPv4路由表信息查询命令displayiprouting–table配置完成退回视图界面命令return命令自动补全快捷键【Tab】…

    2022年10月29日
  • bindingnavigator如何与datagridview绑定

    bindingnavigator如何与datagridview绑定2019独角兽企业重金招聘Python工程师标准>>>…

  • 0x00000000代码电脑蓝屏的原因_计算机0x是什么意思

    0x00000000代码电脑蓝屏的原因_计算机0x是什么意思在我们平时工作使用电脑的过程中难免会遇到各种各样的问题,有些电脑的故障,可以轻松解决,而有些问题就连重装系统都不一定解决的了,例如电脑蓝屏,而电脑蓝屏代码0x000000BE又是怎么回事呢?又该怎么解决呢?莫慌,小编这就将解决电脑蓝屏代码0x000000BE的方法告诉大家。相信遇到过蓝屏的用户都知道,当蓝屏出现时,Windows操作系统的蓝屏死机提示已经成为标志性的画面,大部分是系统崩溃的现象,令…

  • SQL语法(五) 多表联合查询

    SQL语法(五) 多表联合查询前言当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99)范例1.笛卡儿积将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积。结果的数量为所有表的数量的乘积。–SQL92方式–表名以逗号隔开实现多表查询–SQL99方式–使用crossjoin关键字2.等值连接筛选&不等…

发表回复

您的电子邮箱地址不会被公开。

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