输入学生信息,保存于文件当中

输入学生信息,保存于文件中(基础)

【输入学生信息,将信息保存于文件里,还有涉及一点点的进度条】

目录

1、进度条

主要是一些进度条的相关代码

2、文章主题 :输入信息并保存于文件中

文章写的简单,专针对小白了解!

大家好,我是辰梦!
在这里我主要向大家介绍几个函数,如fscanf();fprintf();…
笔者的写作水平较低,可能会写的不够精彩!在这里,还是以代码居多,话不多说,进入我们的第一个代码环节——进度条。这也是看了其他大佬的文章,原处在这里:

这里有原网站,点击这里👉🏻文章在这里

这里我也贴下我自己改的代码,算是大同小异,可以说是一模一样。

int i,num = 1;   
	const char* pic = "|/-\\";//简单的动画特效
	printf("等待中......\n");//输入提示
    while(1)
    {
	   if(101 == num)//当进度条达到101的时候,进度条已满,说明可以跳出循环了
	   {
	      printf("\n加载成功!!\n");//提示加载成功
		  break;//退出循环
	   }
	   printf("[");//进度条开始
	   for(i = 0;i < num/10;i++)//到达 10% 就加个*
	   {
	   printf("*");//输入*号
	   }
	   printf("]");//进度条结束

	   printf("%d%%...%c\r",num++,pic[num%4]);//\r为回车符,不加\r会导致出现进度条不好看,记住d后面是它的百分符号%(别记错啦)  num%4其中4代表有四个动画特效,分为|、/、-、\。 
	   fflush(stdout);//清空标准输出缓存区中多余的数据
	   Sleep(200);//这里通过修改睡眠时间来控制进度条更新的速度
	}

哈哈,这只是开头,还没到我们本章节的内容。这里我将介绍一下我们即将用到的几个函数:

1)fscanf函数:
fscanf函数只能够从文本文件当中按格式输入,和scanf函数相似,只不过输入的对象是磁盘上的文本文件的数据。
调用形式为:
fscanf(文件指针,格式控制字符串,输入项表)
例如:fscanf(fp,"%d%d",&a,&b);
例如 : fscanf(stdin,"%d%d",&a,&b);
等价于scanf("%d%d",&a,&b);
2)fprintf函数
fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCLL代码形式输出到文本文件中。fprintf函数和printf函数相似,只是将输出的内容按格式存放到磁盘的文本文件中。
调用格式为:
fprintf(文件指针,格式控制字符串,输入项表)
如:fprintf(fp,"%d%d",x,y);
fprintf(stdout,"%d%d",x,y);
等价于printf("%d%d",x,y);

了解了相关的知识点之后,就是令我们兴奋的编代码时刻了!
在这里,你要学会用头文件,如#include<stdio.h>等,而这里的代码将会会用到哦!

输入信息,保存于文件当中

首先我先以学生管理系统为例:
代码如下:

struct student{//定义struct结构体类型
       int num;//学号
	   char name[20];//学生名字
	   float Clanguage;//学生成绩	   
	   float math;//学生成绩
	   float chinese;//学生成绩	 
	   float ave;//三门课程的平均值,计算	   
}stu[20];

在其中我们可以看到被定义了关于学生的多种信息:学生的学号、学生的姓名、学生各科成绩及其他们的成绩平均值!
其实,输入信息保存于文件当中只要学会之前的fprintf()函数、fscanf()函数就没那么复杂,所以为了这篇文章不显得单调,这里浅谈一些关于学生管理系统的知识。

来来,直接见代码块!!
输入学生信息,详见如下:

	for(i = 0; i < n;i++)
	{//在终端屏上输入学生信息
	 printf("学生信息:学号\t姓名\tC语言成绩\t数学成绩\t语文成绩\n");
	 scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].Clanguage,&stu[i].math,&stu[i].chinese);
	 stu[i].ave=(stu[i].Clanguage+stu[i].math+stu[i].chinese)/3.0;
	}

这是输入学生信息的,想见输出学生信息的吗?
输出学生信息到终端屏的其实有两种办法:

  1. 第一种方法:结构体当中的学生信息直接输出到终端屏上,就是运用printf()函数,就可以了,代码与上面输入学生信息大同小异,把scanf改为printf;
  2. 第二种方法:就是从文件当中一次读取内容,直到输完文件的所有内容为止!

为了增加文章字数,我就把两种方法的代码给打出来!
看好了:
这是第一种!

	for(i = 0; i < n;i++)
	{//终端屏上输出学生信息	 
			printf("____________________________________________________________________________________________________\n");
			printf("|                                                  报告                                             |\n");
			printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			printf("|        学号      |    姓名   |    C 语言    |    数学 成绩   |     语文 成绩    |     平均分      |\n");
			printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			printf("|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
			printf("|___________________________________________________________________________________________________|\n\n");	
//	 printf("输出学生信息:学号\t姓名\t语文成绩\t数学成绩\tC语言成绩\n");
//	 printf("              %d\t%s\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
	}

这是第二种!!

	//运用另外一种方法,将学生信息打到终端屏上
	//实现原理:将输入到文件的内容,依次从文件读取到终端屏
	char str[100];//定义字符串 
	FILE *fp;
	fp = fopen("d:\\学习资料\\c语言\\student01.txt","r");
	while(fgets(str,100,fp) != 0)//运用fgets函数,实现读取文件的功能
	{
	 printf("%s",str);//输出文件中的内容	
	}

好了,这就是两种办法!
要想学好C语言,多去掌握一些函数吧,别老抱着scanf()、printf()啃,从我们选择代码的这一条路的时候,我们时刻都要学习,学习新的技术,笔者也在努力的去学习C语言的更多内容,偷偷告诉你们,我在学习C语言的图形库,就是EasyXC语言插件,有人学吗?

网上有很多的,当然你们也可以在评论中求插件链接。

忘了说了,还有输出到文件的代码块
看这里!

	for(i = 0; i < n;i++)
	{//打印学生信息到指定文件,即所打开的文件地址	 
//			fprintf(fp,"____________________________________________________________________________________________________\n");
//			fprintf(fp,"|                                                  报告                                             |\n");
//			fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			fprintf(fp,"|        学号      |    姓名   |    C 语言    |    数学 成绩   |     语文 成绩    |     平均分      |\n");
//			fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			fprintf(fp,"|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
//			fprintf(fp,"|___________________________________________________________________________________________________|\n\n");		 
//	 fprintf(fp,"          %d\t%s\t%f\t%f\t%f\t\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
	}

其实说实话,到这里就是完整的代码了!

只要我们再把它们拼接起来,就可以编译——连接——运行了!!

完整代码展示及其效果图:

#include<stdio.h>
#include<string.h>
#include<windows.h> 
void readfile();//读取文件中的函数
struct student{//定义struct结构体类型
       int num;//学号
	   char name[20];//学生名字
	   float Clanguage;//学生成绩	   
	   float math;//学生成绩
	   float chinese;//学生成绩	 
	   float ave;//三门课程的平均值,计算	   
}stu[20];
int main()
{
	int i,n,num = 1;//num = 1表示进度(进度初始值为1)  n表示输入(即统计的学生个数) 
	char ch;//定义字符变量
	const char* pic = "|/-\\";//简单的动画特效
	//制作进度条
	//原理:进度,即num增加10%就打出一个星号“* ”,动画特效的4个  |/-\ 也是要做起的  通过num%4来实现变换 
	MessageBox(NULL,"这是一个学生记录系统,准备好了吗 ?","窗口",MB_OK);//用头文件<windows.h>制作窗口 
	printf("等待中......\n");//输入提示
    while(1)
    {
	   if(101 == num)//当进度条达到101的时候,进度条已满,说明可以跳出循环了
	   {
	      printf("\n加载成功!!\n");//提示加载成功
		  break;//退出循环
	   }
	   printf("[");//进度条开始
	   for(i = 0;i < num/10;i++)//到达 10% 就加个*
	   {
	   printf("*");//输入*号
	   }
	   printf("]");//进度条结束

	   printf("%d%%...%c\r",num++,pic[num%4]);//\r为回车符,不加\r会导致出现进度条不好看,记住d后面是它的百分符号%(别记错啦)  num%4其中4代表有四个动画特效,分为|、/、-、\。 
	   fflush(stdout);//清空标准输出缓存区中多余的数据
	   Sleep(20);//这里通过修改睡眠时间来控制进度条更新的速度
	}
    FILE *fp;//定义文件
	struct student stu[20];//在主函数中定义学生结构体
	fp = fopen("d:\\学习资料\\c语言\\student01.txt","w");//打开文件,fopen("d:\\stu.txt->指文件地址,可以自己修改","w->指新建一个文件,若已创建文件覆盖原内容");
	printf("请输入学生数:");//在这里填写你想记录的学生信息
	scanf("%d",&n);//输入学生个数
    if(fp == NULL)
	{
	    printf("文件打开失败,文件内容为空!!\n");//当文件内容为空,就提示这个
	}

	for(i = 0; i < n;i++)
	{//在终端屏上输入学生信息
	 printf("学生信息:学号\t姓名\tC语言成绩\t数学成绩\t语文成绩\n");
	 scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].Clanguage,&stu[i].math,&stu[i].chinese);
	 stu[i].ave=(stu[i].Clanguage+stu[i].math+stu[i].chinese)/3.0;
	}

	for(i = 0; i < n;i++)
	{//终端屏上输出学生信息	 
			printf("____________________________________________________________________________________________________\n");
			printf("|                                                  报告                                             |\n");
			printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			printf("|        学号      |    姓名   |    C 语言    |    数学 成绩   |     语文 成绩    |     平均分      |\n");
			printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			printf("|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
			printf("|___________________________________________________________________________________________________|\n\n");	
//	 printf("输出学生信息:学号\t姓名\t语文成绩\t数学成绩\tC语言成绩\n");
//	 printf("              %d\t%s\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
	}
	 fprintf(fp,"\n\n");
	 fprintf(fp,"汇总学生信息:\n");
	for(i = 0; i < n;i++)
	{//打印学生信息到指定文件,即所打开的文件地址	 
//			fprintf(fp,"____________________________________________________________________________________________________\n");
//			fprintf(fp,"|                                                  报告                                             |\n");
//			fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			fprintf(fp,"|        学号      |    姓名   |    C 语言    |    数学 成绩   |     语文 成绩    |     平均分      |\n");
//			fprintf(fp,"|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
			fprintf(fp,"|%11d%15s%13f%17f%18f%19.2f\n",stu[i].num,stu[i].name,stu[i].Clanguage,stu[i].math,stu[i].chinese,stu[i].ave);
//			fprintf(fp,"|___________________________________________________________________________________________________|\n\n");		 
//	 fprintf(fp,"          %d\t%s\t%f\t%f\t%f\t\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].Clanguage);
	}

	fclose(fp);//关闭文件
	readfile();//调用readfile函数 
    return 0;
}
void readfile(){
	//运用另外一种方法,将学生信息打到终端屏上
	//实现原理:将输入到文件的内容,依次从文件读取到终端屏
	char str[100];//定义字符串 
	FILE *fp;
	fp = fopen("d:\\学习资料\\c语言\\student01.txt","r");
	while(fgets(str,100,fp) != 0)//运用fgets函数,实现读取文件的功能
	{
	 printf("%s",str);//输出文件中的内容	
	}
}

终端屏上的效果:
在这里插入图片描述
文件上的效果:
在这里插入图片描述
既然完整代码已上传,效果图已经展示!
我们本次的C语言旅行就到此结束了,输入学生信息保存至文件,你学会了吗?
加油~!
编码路上不孤单,因为还有我们与你共同并肩,挑战C语言!

posted @ 2021-05-21 08:27  辰梦starDream  阅读(10)  评论(0编辑  收藏  举报  来源