qq_26493231 2021-01-05 22:01 采纳率: 0%
浏览 88

C语言问题学生成绩管理程序

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct student)
int number=0;
struct student
{
	char name[10];//记录学生姓名
	long num;//记录学生学号
	float chinese;//记录语文成绩 
	float math;//记录数学成绩 
	float english;//记录英语成绩 
	float sum;//记录语数英总分 
	struct student *next;//定义结构体指针 
 } student1;

struct student * create (void)
{
	FILE *fp; 
	struct student *head, *p1,*p2;
	int i=0;
	//打开文件
	if ((fp = fopen("成绩管理.txt", "r")) = NULL)//以只读的模式打开文件
	{
	printf("无法打开此文件");
	exit( 0);
	} 
	//读取文件中的数据创建成链表
	head = NULL ;
	p1 = p2 = (struct student *)malloc(sizeof(struct student));
	while (fread(p1, sizeof(struct student), 1, fp)!= 0)
	{
		i++;
	if (i ==1)
		head = p1;
	else
		p2->next = p1;
	p2 = p1;
	p1 = (struct student *)malloc( sizeof(struct student));
	}
	p2->next = NULL;
	free(p1);
	fclose(fp);
	return head;
} //把文件数据读入链表 

int main(void)
{
	int n, flag;
	void analyze ();
	void save();
	printf("         学生成绩管理系统\n");
	printf("***********************************\n");
	printf("1 录入成绩\n");
	printf("2 输出成绩\n");
	printf("3 修改成绩\n");
	printf("4 删除记录\n");
	printf("5 统计成绩\n");
	printf("6 成绩排序\n");
	printf("0 退出\n");
	printf("***********************************\n");

	do
	{
		printf("\n请选择您需要的功能:");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			save();
			break;
		case 2:
			//xxxx;
			break;
		case 3:
			//xxxx;
			break;
		case 4:
			//xxxx;
			break;
		case 5:
			analyze (); 
			break;
		case 6:
			//xxxx;
			break;
		case 0:
			return 0;
		}\
		printf("是否需要继续操作(是:1/否:2):");
		scanf("%d", &flag);
		if (flag == 2)
			break;
	}while(1);

	return 0;
}

 void save()//定义函数save,录入学生成绩 
 {
 	FILE *fp;//定义文件指针 
 	int temp=0;//定义变量temp判断是否继续循环 
 	if((fp=fopen("成绩管理.txt","wb"))==NULL)//打开输入文件成绩管理.txt
	 {printf("cannot open file\n");
	 return;
	 } 
	do
	{
		printf("请依次输入:学生姓名、学号、语文成绩、数学成绩、英语成绩(用空格键隔开)\n");
		scanf("%s %d %f %f %f",student1.name,&student1.num,&student1.chinese,&student1.math,&student1.english);
		student1.sum=student1.chinese+student1.english+student1.math;
		if(fwrite(&student1,LEN,1,fp)!=1) printf("录入失败"); 
		number++;//统计录入的学生人数 
		printf("继续录入请输入1,停止录入请输入2\n");
		scanf("%d",&temp);
		
	}while(temp==1);
	fclose(fp);
	
 }




void analyze()
 {
 	struct student *now,*next;//now为当前,next为下一个 
	int flag=0; //标志 
	int k;
	float avermath=0,averchinese=0,averenglish=0,sum=0,peraver;//平均成绩 
	float pmath=0,pchinese=0,penglish=0;//及格人数 
	printf ("计算平均分和及格率请输入1,查看及格率请输入2,查看优秀学生请输入3,查看2科及以上不合格的学生请输入4\n");
	scanf("%d",&k);
	
	
	
	now=create();
	
	
	if (k==1)
	{
		while (now !=NULL)//开始统计成绩 
		{
			avermath=avermath+(*now).math;//数学总分 
			averchinese=averchinese+now->chinese;//语文总分 
			averenglish=averenglish+now->english;//英语总分 
			sum=sum+now->sum;//所有总分
			now=(*now).next; 
		}
		avermath=avermath/number; 
		averchinese=averchinese/number;
		averenglish=averenglish/number;
		sum=sum/number;
		printf("数学平均分为%.1f",avermath);
		printf("语文平均分为%.1f",averchinese);
		printf("英语平均分为%.1f",averenglish);
		printf("三科平均分为%.1f",sum); 
	}//计算平均分
	 
	if (k==2)
	{
		while (now !=NULL)//开始统计成绩 
		{
			if (now->math>60)
			pmath+=1;
			if (now->chinese>60)
			pchinese+=1;
			if (now->english>60)
			penglish+=1;
			now=(*now).next; 
		}
		printf("数学及格率为%f",pmath/number);
		printf("语文及格率为%f",pchinese/number);
		printf("英语及格率为%f",penglish/number);
	} //计算及格率 
	
	if (k==3)
	{
		while (now !=NULL)//开始统计成绩 
		{
			if (  (peraver=(now->math+now->chinese+now->english)/3)  > 85)
			printf("%d号%s成绩优异",now->num,now->name);
			now=(*now).next; 
		}
	}//找到平均分到达85分的优秀学生 
	
	if (k==4)
	{
		while (now !=NULL)//开始统计成绩 
		{
				if (now->chinese<60)
			flag=flag+1;
		else if (now->math<60)
			flag=flag+1;
		else if (now->english<60)
			flag=flag+1;
		if (flag>=2)
		printf ("%d号%s成绩偏差",now->num,now->name);
		now=(*now).next; 
		}
	}//找到2科及以上不合格的学生 
	free(now);
	printf("\n");
 }

save函数的作用是把数据写入数据文件

create函数的作用是把数据文件写入链表

analyze是用链表的数据进行计算

但好像输出结果都是0

  • 写回答

1条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2021-01-06 02:31
    关注

    > 但好像输出结果都是0

    你把链表的数据都打印出来看看, 是否正确地存储了数据?

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器