简易的学生成绩录入程序(完整版)

C++学生类和成绩排序 程序最终输出界面是三个部分,1、录入学生成绩,2、查找学生成绩,3、显示全部学生成绩;首先定义一个学生类,将所有的成员信息放入私有数据,再构造函数默认赋值。处理对象,写出所需要的录入学生成绩信息,姓名、学号、数据结构、软件工程;查找学生: 输入对应的学生姓名。使用strcmp字符串比较,相同返回0;输出对应的学生信息。在main函数里先定义类的对象数组,再定义一个switch,设置功能。学生总成绩... 阅读详情

从开始学习C语言开始,不知不觉已经接近一个月了。通过一步一步的写小程序,自己也渐渐掌握了C语言的一些基础语法。最后以这个简易的学生成绩录入小程序来巩固一下这段时间的学习成果,就当做是一次期末测验吧。

该程序总体上包括两个模块,分为是登录模块(log.c)和处理模块(system.c),登录模块包含注册账号密码和验证账号密码功能,只有成功登录,才能进入处理模块进行学生信息的录入。处理模块包含录入新学生信息,修改学生信息,获取所有学生成绩信息(按平均分从高到低排序)功能。每个学生信息包括:学号,姓名,数学成绩,英语成绩和平均分。经过保存后,学生信息会以二进制文件的形式保存下来,下次登录程序时会自动读取。

log.c(主程序)

#include <stdio.h>
#include <string.h>
#include "system.c"                     //导入模块
//用户登录验证系统-改良 

struct log                            //定义log结构用于存储用户账号和密码信息 
{
	char name[15];                  
	char password[10];
};
int num;
void logging(struct log person);      //登录函数 
void regis(struct log person);        //注册函数 
void jiami(char*p);                   //密码加密函数 
int main()
{
	FILE*fp;
	int choice;                    //操作序号 
	struct log person;
	if ((fp=fopen("num.dat","rb"))!=NULL)     //读取当前已注册用户的人数 
	{
		fread(&num,sizeof(int),1,fp);
		fclose(fp);
	}	
	do{
		printf("输入操作对应序号:1.登录 2.注册 3.退出(目前已注册用户:%d)\n",num);
		scanf("%d",&choice);
		switch (choice)
		{
			case 1:logging(person);break;
			case 2:regis(person);break;
			case 3:break;
			default:break;
		}
	}while(choice!=3);
	if ((fp=fopen("num.dat","wb"))!=NULL)       //存储当前已注册用户的人数 
	{
		fwrite(&num,sizeof(int),1,fp);
		fclose(fp);
	}
	return 0;
} 

void logging(struct log person)
{
	FILE*fp;
	struct log read;
	int flag=0;                                 //辅助开关 
	if ((fp=fopen("logging.dat","rb"))==NULL)     //若没有一个注册用户,则无法登录 
	{
		printf("不存在注册用户\n");
	}else
	{
		printf("请输入账号\n");
		scanf("%s",person.name);
		printf("请输入密码\n");
		scanf("%s",person.password);
		jiami(person.password);
		fread(&read,sizeof(struct log),1,fp);
		while(!feof(fp))
		{
			if((strcmp(person.name,read.name)==0) && (strcmp(person.password,read.password)==0))           //从注册信息文件读取信息,验证账号和密码 
			{
				printf("登录成功\n");
				fclose(fp);
				flag=1;
				score();
				break;
			}
			fread(&read,sizeof(struct log),1,fp);
		}
		if (flag==0) {printf("用户名不存在或密码不正确\n"); fclose(fp);}
	}
} 

void regis(struct log person)
{
	FILE*fp;
	char check[10];
	int flag_check,flag_check1;      //两个辅助开关 
	struct log read;
	do{
		flag_check1=0;
		printf("请输入新账号\n");
		scanf("%s",person.name);
		if ((fp=fopen("logging.dat","rb"))!=NULL)
		{
			fread(&read,sizeof(struct log),1,fp);
			while(!feof(fp))
			{
				if (strcmp(person.name,read.name)==0)           //防止用户名被重复注册 
				{
					printf("该账户已被注册\n");
					flag_check1=1;
					break;
				}
				fread(&read,sizeof(struct log),1,fp);
			}
			fclose(fp);
		}
	}while(flag_check1);
	do{
		flag_check=0;
		printf("请输入新账号的密码\n");
		scanf("%s",person.password);
		printf("请再次输入密码\n");
		scanf("%s",check);
		if (strcmp(person.password,check)!=0)           //防止密码误输入 
		{
			printf("两次输入的密码不一致\n"); 
			flag_check=1;
		}
	}while(flag_check);
	jiami(person.password);
	if ((fp=fopen("logging.dat","ab"))==NULL)
	{
		printf("注册失败\n"); 
	}else
	{
		fwrite(&person,sizeof(struct log),1,fp);        //把账号和密码写入注册文件 
		printf("注册成功\n");
		num++;
		fclose(fp);
	}	
}

void jiami(char*p)             //对密码进行加密 
{
	for (;*p!='\0';p++)
	{
		*p=*p^15;
	}
}

system.c(被导入的模块)

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
//定义学生的数据结构,包含学号,姓名,数学成绩,英语成绩,平均分信息,进行录入,修改学生信息,打印成绩表等操作 
struct student
{
	int num;
	char name[10];
	int math,english;
	double average;
};
int sum=0;
void score()
{
	int choice;
	struct student students[MAXSIZE];
	void new_student(struct student *p);        //录入新学生信息 
	void change(struct student*p);              //修改学生信息 
	void get(struct student*p);                //获取所有学生成绩 
	void open(struct student*,int*);           //读取二进制文件中的学生 
	void save(struct student*,int*);          //保存学生信息 
	open(students,&sum);
	do{
		printf("输入操作对应的序号\n1.录入成绩 2.修改成绩 3.获取所有学生成绩 4.保存 5.注销\n");
		scanf("%d",&choice);
		switch (choice)
		{
			case 1: new_student(students);break;
			case 2: change(students);break;
			case 3: get(students);break;
			case 4: {if (sum!=0) {save(students,&sum);}else{printf("保存成功\n");}break;}
			case 5: break;
			default: printf("无效操作序号\n");break;
		}
	}while(choice!=5);
} 

void open(struct student*p,int*psum)
{
	FILE*fp;
	FILE*num;
	if ((num=fopen("studentnum.dat","rb"))!=NULL)
	{
		fread(psum,sizeof(int),1,num);
		fclose(num);
	}
	if ((fp=fopen("info.dat","rb"))!=NULL)
	{
		fread(p,sizeof(struct student),*psum,fp);
		fclose(fp);
		printf("读取数据成功\n");
	}
} 

void save(struct student*p,int*psum)
{
	FILE*fp;
	FILE*num;
	if ((num=fopen("studentnum.dat","wb"))!=NULL)
	{
		fwrite(psum,sizeof(int),1,num);
		fclose(num);
	}else
	{
		printf("保存失败\n");
	}
	if ((fp=fopen("info.dat","wb"))!=NULL)
	{
		fwrite(p,sizeof(struct student),*psum,fp);
		fclose(fp);
		printf("保存成功\n");
	}else
	{
		printf("保存失败\n");
	}	
}
 
 void new_student(struct student *p)
 {
	int flag =0,num_new,i,flag1;
	struct student *p1;               //用于检查学号是否重复 
	do {
		if (sum<MAXSIZE){
		do {
			p1=p;
			flag1=0;
			printf("输入学生学号\n");
			scanf("%d",&num_new);
			for (i=0;i<sum;p1++)         //检查学号是否重复 
			{
				if (p1->num==num_new)
				{
					printf("学号重复\n");
					flag1=1;
					break;
				}
				i++;
			}
			if (flag1==0) (p+sum)->num=num_new;
		}while(flag1==1);
		printf("输入学生姓名\n");
		scanf("%s",(p+sum)->name);
		printf("输入学生数学成绩\n");
		scanf("%d",&((p+sum)->math));
		printf("输入学生英语成绩\n");
		scanf("%d",&((p+sum)->english));
		(p+sum)->average=((p+sum)->math+(p+sum)->english)/2;
		sum+=1;
		printf("继续录入输入1,否则输入0\n");
		scanf("%d",&flag);
		}else
		{
			printf("系统已满,无法录入\n");
			break;	
		}
	}while(flag==1);	
 } 
 
 void change(struct student*p)
 {
	int num_change,i,choice;
	printf("输入待修改学生的学号\n");
	scanf("%d",&num_change);
	for (i=0;i<sum;p++)
	{
		if (p->num==num_change)
		{ 
			printf("输入修改的信息类型对应的序号\n1.学号 2.姓名 3.数学成绩 4.英语成绩\n");
			scanf("%d",&choice); 
			switch (choice)
			{
				case 1:
				{
					printf("输入新学号\n");
					scanf("%d",&(p->num));
					break;
				}
				case 2:
				{
					printf("输入新姓名\n");
					scanf("%s",p->name);
					break;
				}
				case 3:
				{
					printf("输入新数学成绩\n");
					scanf("%d",&(p->math));
					break;
				}
				case 4:
				{
					printf("输入新英语成绩\n");
					scanf("%d",&(p->english));
					break;
				}
				default:{
					printf("无效输入\n");
					break;
				}
			}
			if (choice==3 ||choice==4)       //如果修改成绩,则平均分也要变 
			{
				p->average=(p->math+p->english)/2;
			}
			break;
		}
		i++;
	}
	if (i==sum)
	{
		printf("没有此学生\n"); 
	}
 }
 
 void get(struct student*p)
 {
	int compare( const void*a,const void*b);
	int i;
	if (sum==0)
	{
		printf("空\n");
	}else
	{
		printf("学号  姓名  数学成绩  英语成绩  平均分\n");
		qsort(p,sum,sizeof(struct student),compare);          //按平均分从高到低排序 
		for (i=0;i<sum;p++)
		{
			printf("%d  %s  %d  %d  %.1f\n",p->num,p->name,p->math,p->english,p->average);
			i++;
		}
	}
 }
 
 int compare( const void*a,const void*b)
 {
	return ((struct student*)b)->average - ((struct student*)a)->average;  
 }


Shell实现录入学生名字和成绩,输出成绩等级及计算总分数和平均数 @冰冰的190619小作业 Shell实现录入学生名字和成绩,显示成绩单以及总分数和平均数 #!/bin/bash #实现学生成绩的录入及总分数和平均数的计算 #首先定义一个函数,通过循环实现多次录入 decide=n i=0 until [ ${decide} = y ] do echo -n "请输入学生名字:" read name[i] echo -n "请输入他的成绩:" rea... 阅读详情

相关推荐

python——录入学生成绩并打印成绩最好的一个学生信息

python——录入学生成绩并打印成绩最好的一个学生信息 本系统和上篇博客类似:https://blog.youkuaiyun.com/csdnmgq/article/details/91168287 但是也有一点新的内容 在之前的内容上增加了 1、max函数的使用 2、输出成绩最好的学生信息 同样数据我依然使用列表,,一是想通过两个列子熟悉列表的使用方法,二是偷懒,,你懂的 代码如下: p...

沧海一滴水 3903

设计算法,根据输入的学生人数和成绩建立一个单链表,并累计成绩不及格的人数。

设计算法,根据输入的学生人数和成绩建立一个单链表,并累计成绩不及格的人数。 要求: (1)学生人数和成绩均从键盘输入; (2)输出所有学生的成绩和不及格的人数。 #include<stdio.h> #include<malloc.h> typedef int ElemType; typedef struct node { ElemType data; struct no...

南岛鹋 1658

学生成绩录入管理系统

一个简单的录入系统,录入学生的姓名,学号,和三科考试成绩,主要考察结构体,指针数组,函数构造与if的应用 #include<stdio.h> #include<stdlib.h> #include<string.h> //定义数据 struct Student { int id; char name[16]; int score[3]; }; Student data[100];//存储所有数据 int count = 0;//总个数 int input(Student*

m0_51835877的博客 3327

编写一个程序,提示用户输入学生姓名和他们的成绩,并按照成绩的降序来打印学生的姓名...

packageHomeWork; importjava.util.Scanner; /** *@类名:Lx_01 *@描述:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数)凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 *@作者:MaoDehao *@版本:1.0 *@日期:2017-8-12下午4:...

qq_34692870的博客 1万+

PTA-实验7-学生成绩录入及查询

7-3 学生成绩录入及查询 (20分) 学生成绩表中,一名学生的信息包含如下信息: 学号(11位)、姓名、数学成绩、英语成绩、程序设计成绩、物理成绩。 本题要求编写程序,录入N条学生的信息,并且按查询要求显示学生成绩等信息。 输入格式: 输入在第一行给出正整数N(N<=10);随后N行,每行按格式: 学号 姓名 数学成绩 英语成绩 程序设计成绩 物理成绩 给出一名学生的信息。 其中学号是11位数字;姓名是不超过10个字符、不包含空格的非空字符串;成绩是<=100的非负整数; 在学生信息输入完成后

u011339832的博客 2955

C语言之学生管理系统代码(完整)

<span style="font-size:18px;">#include <stdio.h> #include <stdlib.h> #define FILENAME "student.dat" typedef enum{MAN, WOMAN} SEX; typedef struct tagStudent { int num; //学生...

MachineLP的专栏 9万+

Java实现文件检索系统

在这里插入package Demo; import java.io.File; import java.io.FilenameFilter; import java.util.Scanner; import java.lang.Exception; import java.io.IOException; public class Demo8_1 { public static void main(String[] args) { while(true) { System.out.println

weixin_48235970的博客 1719

设计一个应用程序,用于学生成绩的输入,要求能输入学生姓名、学号、性别以及3门课程成绩。在该程序中要用到的控件:静态文本、编辑框(单行和多行)、单选框、复选框、组框、按钮等,结果如附件程序。

设计一个应用程序,用于学生成绩的输入,要求能输入学生姓名、学号、性别以及3门课程成绩。在该程序中要用到的控件:静态文本、编辑框(单行和多行)、单选框、复选框、组框、按钮等,结果如附件程序。

学生成绩录入及查询(C语言)-PTA

学生成绩表中,一名学生的信息包含如下信息: 学号(11位)、姓名、数学成绩、英语成绩、程序设计成绩、物理成绩。 本题要求编写程序,录入N条学生的信息,并且按查询要求显示学生成绩等信息。 输入格式: 输入在第一行给出正整数N(N<=10);随后N行,每行按格式: 学号 姓名 数学成绩 英语成绩 程序设计成绩 物理成绩 给出一名学生的信息。 其中学号是11位数字;姓名是不超过10个字符、不包含空格的非空字符串;成绩是<=100的非负整数; 在学生信息输入完成后,给出要查询的姓名。 输出格式: 对查询

m0_46625346的博客 1万+

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 308

告别全局搜索!7种SRP-PHAT快速算法实战对比:哪个更适合你的麦克风阵列?

本文深入探讨了7种SRP-PHAT改进算法在声源定位领域的实战表现,包括SRC、CFRC、SPF等方案。通过对比计算效率、定位精度和环境鲁棒性等核心指标,为不同场景(如会议室、智能家居、工业机器人)提供算法选型建议,帮助工程师优化麦克风阵列性能。

weixin_42546392的博客 397

录入查询学生成绩C语言,学生成绩录入查询系统C语言程序

#include #include #include #define M 50/********************************全局变量***************************/typedef struct{ long id; /*学号*/char name[20]; /* 姓名 */...

weixin_42591908的博客 3137

电容式麦克风:从原理到实际电路波形解析

本文深入解析电容式麦克风的工作原理,从核心的振膜与背板结构、电荷锁定机制到场效应管放大器的作用。通过实物拆解与等效电路分析,阐明声音振动如何转换为电压信号,并指导如何用示波器实测波形,直观展现声电转换过程,适合电子爱好者和音频技术学习者。

Black的专栏 1080

java编写学生成绩录入系统

1.学生类  包括学生的姓名和各科成绩 public class Score { public String name; public double EnglishGrade, MathGrade,phyicalGrade, chemicalGrade,biologicalGrade; Score() { } public Score(String name,doub

Java语言学习日志 2万+

Android SystemUI——自定义状态栏和导航栏(十二)

通过前面的文章内容,我们了解了Android系统原生的状态栏StatusBar和车载系统状态栏CarStatusBar的启动流程以及视图构建流程,这里我们来简单的看一下自定义状态栏和导航栏视图的实现流程。

小旭的专栏 2012

让 VK31 的条件维护树长出你想要的分支:用 ABAP SE43 扩展定价 Area Menu COND_AV

摘要:本文深入解析了SAP系统中价格条件维护(VK31/VK32)的菜单结构优化方法。通过分析Area Menu(COND_AV)的三层架构(菜单对象、节点、报表),提出将业务语言融入菜单设计的解决方案。重点介绍了使用SE43事务码扩展标准菜单的具体步骤:创建Enhancement ID、新增业务节点、挂接定价报表,并强调需同步验证条件表映射关系。文章还提供了常见问题排查思路,建议从岗位视角重构菜单结构,最终实现高效、精准且符合业务语义的价格维护入口体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 89

学生成绩管理系统——JAVA

学生成绩管理系统 1.简介 本学生成绩管理系统具有录入学生成绩、查询学生成绩、输出学 生按成绩的排名、输出学科的分数四个功能,其中后两个功能在“输出成绩”这一目录下。 此系统可以实现学生成绩管理的一些基本操作。 1.1各模块功能简介 录入成绩 输入若干同学的学号、姓名以及四个科目的成绩(应用数学、大学英语、Java 程序设计、计算机应用基础),并将其保存在建立好的数据库中。 查询成绩 进入该模块后,输入想要查询成绩的学生姓名,即可在数据库中检索该学生 的成绩信息并输出其各科成绩。 输出成绩 该模块主要分为两

swy66的博客 7万+

Android 12.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析

在android12.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右滑出控制中心模块,接下来分析下 状态栏下滑坐标等相关功能代码分析

安卓兼职framework和app工程师的博客 2768

学生成绩管理系统(完整版)

说明 一.设计报告的基本内容至少包括封面、 正文、 参考文献三部分。 1. 封面 封面按照模版填写,不得随意更改。 2. 正文 正文是设计报告的主体, 具体由以下几部分组成: (1) 问题描述 描述要求编程解决的问题。 (2) 基本要求 给出程序要达到的具体的要求。 (3) 需求分析 以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。 (4)

m0_63499023的博客 4万+

14、PostgreSQL日志文件、系统统计与查询优化全解析

本文全面解析了PostgreSQL数据库中的系统统计、日志文件配置与查询优化技巧。详细介绍了如何利用pg_stat_statements模块进行性能监控,配置日志记录以发现潜在问题,并深入探讨了查询优化器的工作原理和优化策略。通过实际案例分析,展示了如何综合应用这些技术提升数据库性能。适合希望提升PostgreSQL性能与稳定性的数据库管理员和开发人员阅读。

efc123456的博客 94

【大模型】AI 辅助编程操作实战使用详解

AI 编程实战使用详解

congge 8461

(c++)简易学生成绩管理系统(超简单)

一个简单的学生成绩管理系统自然要包括增删改查。学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。此代码是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改学生数据;删除学生数据。打印不及格学生信息。

weixin_56187542的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

对象和类:使用java编写一个模拟录入学生成绩的程序

哈工大javaee实验1:对象和类

weixin_51322795的博客 3360

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java录入学生信息_java实现学生成绩录入系统

本文为大家分享了java实现学生成绩录入系统,供大家参考,具体内容如下1.学生类,包括学生的姓名和各科成绩public class Score {public String name;public double EnglishGrade, MathGrade,phyicalGrade,chemicalGrade,biologicalGrade;Score() {}public Score(Stri...

weixin_39604189的博客 5478

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C语言简易学生成绩管理系统

某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,编程实现如下学生成绩管理: (1)录入每个学生的学号和考试成绩; (2)计算课程的总分和平均分; (3)按成绩由高到低排出名次表; (4)按学号由小到大排出成绩表; (5)按学号查询学生排名及其考试成绩; (6)按优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别...

子奕°的博客 1万+

【学生成绩管理系统】课程设计

面向对象程序设计C语言(课程设计):学生成绩管理系统

qq_56824903的博客 7624
上一篇: 改良的用户注册和登录系统(2)
下一篇: 绪论
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值