小白找的C语言管理系统,有很多地方看不懂。有哪些大神能帮忙解释一下,跪谢

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

struct stu_type{
char num[15];
char name[10];
int age;
int c;
int math;
int en;
int sum;
float ave;
};

struct stu_type stu[100];
int stu_num=0;
void add();//添加
int display(char str[]);//显示
void modify();//修改
void del();//删除
void find();//查找
void compute();//计算
void sort();//排序
void save_txt();//保存文件
void load_txt();//加载文件
void save_bin();//
void load_bin();//
void main()
{
while(1)
{
int choice;
printf("\n 欢迎使用学生信息管理系统\n");
printf("-----------------------------------------\n");
printf(“1.添加学生信息 2.显示学生信息\n”);
printf(“3.修改学生信息 4.删除学生信息\n”);
printf(“5.查找学生信息 6.统计不及格人数、最高分和平均分\n”);
printf(“7.按总分排序 8.保存至文件(文本方式)\n”);
printf(“9.从文件读入 10.保存至文件(二进制方式)\n”);
printf(“11.从文件读入(二进制方式)12.退出程序\n”);
printf("-----------------------------------------\n");
printf(“请选择功能模块,输入数字1-12”);

	while(1)
	{
		scanf("%d",&choice);
		if(choice>=1 && choice<=12)
			break;
		else
			printf("输入数字不正确,请重输入1-12:");
	}

	switch(choice)
	{
		case 1:	add();	break;
		case 2:	display("");	break;
		case 3: modify();	break;
		case 4: del();	break;
		case 5: find();	break;
		case 6:	compute();	break;
		case 7:	sort();	break;
		case 8:	save_txt();	break;
		case 9:	load_txt();	break;
		case 10:save_bin();	break;
		case 11:load_bin(); break;
		case 12:exit(0);
	}
}

}

void add()//添加
{
int i=stu_num;//学号
printf(“说明:依次输入学生信息,当输入的学号为0时表示输入结束\n”);
while(1)
{
printf(“请输入第%d个学生的信息\n”,i+1);
printf(“请输入学号:”);
scanf("%s",stu[i].num);
if(strcmp(stu[i].num,“0”) == 0)//学号是否为0 ,是0就返回0
break;
printf(“请输入姓名:”);
scanf("%s",stu[i].name);
printf(“请输入年龄:”);
scanf("%d",&stu[i].age);
printf(“请输入c语言成绩:”);
scanf("%d",&stu[i].c);
printf(“请输入数学成绩:”);
scanf("%d",&stu[i].math);
printf(“请输入英语成绩:”);
scanf("%d",&stu[i].en);
stu[i].sum = stu[i].c + stu[i].math + stu[i].en;//计算总分
stu[i].ave = (float)stu[i].sum/3;//计算平均分
i++;
}
stu_num = i;
printf(“总共已输入%d个学生的信息\n”,stu_num);
}

void compute()//计算
{
int i, n=0, max=0, sum=0;
for(i=0; i<stu_num; i++)
{
if(stu[i].c<60)//c语言成绩小于60继续循环直到成绩大于60
n++;
if(max<stu[i].c)//如果c语言成绩大于最大值,那么这个成绩就是最高分
max=stu[i].c;
sum = sum + stu[i].c;
}
printf(" C语言统计结果如下:\n");
printf(“不及格人数\t最高分\t平均分\n”);
printf(" %d \t %d \t%5.2f\n",n,max,(float)sum/stu_num);
}

void del()//删除
{
char str[15], m;
int i, j;
printf(“请输入要删除学生的学号:”);
scanf("%s",str);
i = display(str);//显示输出学号
if(i!=-1)
{
printf(“确认要删除该学生的信息吗?(y/n)”);
m = getche();//输入后立即从控制台取字符
if(m==‘y’ || m==‘Y’)
{
stu_num–;
for(j=i; j<stu_num; j++)//输出的学号小于总学号个数一直循环直到等于总学号个数
stu[j] = stu[j+1];
printf("\n记录删除成功!\n");
}
}
}

int display(char str[])//显示
{
int i, k=-1;
if(strlen(str) == 0)//遇到0结束
{
if(stu_num>0)
{
printf(“学生学号\t姓名\t年龄\tC语言\t数学\t英语\t总分\t平均分\n”);
for(i=0; i<stu_num; i++)
printf("%-16s%s\t%d\t%d\t%d\t%d\t%d\t%5.1f\n",stu[i].num,stu[i].name,
stu[i].age, stu[i].c, stu[i].math, stu[i].en, stu[i].sum, stu[i].ave);
}
else
printf(“学生信息为空!”);
}
else
{
for(i=0; i<stu_num; i++)
{
if(strcmp(str,stu[i].num) == 0)//stu[i]中num这个成员与字符串str是否相等,如果相等就执行
{
printf(“学生学号\t姓名\t年龄\tC语言\t数学\t英语\t总分\t平均分\n”);
printf("%-16s%s\t%d\t%d\t%d\t%d\t%d\t%5.1f\n",stu[i].num,stu[i].name,
stu[i].age, stu[i].c, stu[i].math, stu[i].en, stu[i].sum, stu[i].ave);
k = i;
}
}
if(k==-1)
printf(“没有找到符合条件的学生\n”);
}
return k;
}

void find()//查找
{
char str[15];
printf(“请输入要查找的学生学号:”);
scanf("%s",str);

display(str);

}
void load_bin()//加载到文件里
{
FILE * fp;
char fname[20];
int i=0, flag;
printf(“请输入文件名(如:stu.dat):”);
scanf("%s",fname);
if((fp=fopen(fname,“rb”))==NULL)
{
printf(“不能打开文件,文件读取失败!\n”);
return;
}
while(1)
{
flag = fread(&stu[i], sizeof(struct stu_type), 1, fp);

	if(flag == 0)
		break;
	i++;
}
stu_num = i;
printf("从文件中成功读取%d条记录!\n",i);
fclose(fp);

}
void load_txt()
{
FILE * fp;
char fname[20];
int i=0, flag;
printf(“请输入文件名(如:stu.txt):”);
scanf("%s",fname);
if((fp=fopen(fname,“r”))==NULL)
{
printf(“不能打开文件,文件读取失败!\n”);
return;
}
while(1)
{
flag=fscanf(fp, “%s %s %d %d %d %d %d %f”,stu[i].num,
stu[i].name, &stu[i].age, &stu[i].c, &stu[i].math, &stu[i].en,
&stu[i].sum, &stu[i].ave);

	if(flag == EOF)
		break;
	i++;
}
stu_num = i;
printf("从文件中成功读取%d条记录!\n",i);
fclose(fp);

}
void modify()
{
char str[15], m;
int i;
printf(“请输入要修改的学生学号:”);
scanf("%s",str);
i = display(str);
if(i!=-1)
{
printf("\n确认修改该学生的信息吗?(y/n)\n");
m = getche();
if(m==‘y’ || m==‘Y’)
{
printf("\n请重新输入该学生的信息\n");
printf("\n请输入学号:");
scanf("%s",stu[i].num);
printf(“请输入姓名:”);
scanf("%s",stu[i].name);
printf(“请输入年龄:”);
scanf("%d",&stu[i].age);
printf(“请输入C语言成绩:”);
scanf("%d",&stu[i].c);
printf(“请输入数学成绩:”);
scanf("%d",&stu[i].math);
printf(“请输入英语成绩:”);
scanf("%d",&stu[i].en);
stu[i].sum = stu[i].c + stu[i].math + stu[i].en;
stu[i].ave = (float)stu[i].sum/3;

	}

 }

}
void save_txt()
{
FILE * fp;
char fname[20];
int i;
printf(“请输入文件名(如:stu.txt):”);
scanf("%s",fname);
if((fp=fopen(fname,“w”))==NULL)
{
printf(“不能打开文件,文件保存失败!\n”);
return;
}
for(i=0; i<stu_num; i++)
fprintf(fp, “%s %s %d %d %d %d %d %5.2f\n”,stu[i].num, stu[i].name,
stu[i].age, stu[i].c, stu[i].math, stu[i].en, stu[i].sum, stu[i].ave);
printf(“文件保存成功!\n”);
fclose(fp);
}

void sort()
{
int i,j;
struct stu_type temp;
for(i=1; i<=stu_num; i++)
for(j=0; j<stu_num; j++)
if(stu[j].sum<stu[j+1].sum)
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
printf(“排序结果如下:\n”);
printf(“名次\t学生学号\t姓名\t年龄\tC语言\t数学\t英语\t总分\t平均分\n”);
for(i=0; i<stu_num; i++)
printf("%d\t%-16s%s\t%d\t%d\t%d\t%d\t%d\t%5.1f\n",i+1,stu[i].num,
stu[i].name, stu[i].age, stu[i].c, stu[i].math, stu[i].en,
stu[i].sum, stu[i].ave);
}

void save_bin()
{
FILE * fp;
char fname[20];
printf(“请输入文件名(如:stu.dat):”);
scanf("%s",fname);
if((fp=fopen(fname,“wb”))==NULL)
{
printf(“不能打开文件,文件保存失败!\n”);
return;
}

fwrite(stu,sizeof(struct stu_type), stu_num,fp);
printf("文件保存成功!\n");
fclose(fp);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_52245283

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值