C语言实战
学生管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <direct.h>
struct Stu
{
char name[32];
char num[24];
int grade;
};
int main()
{
int max = 0,min;
int sum = 0;
int t;
float ave = 0;
char a[30];
printf("请输入文件名\n");
scanf("%s",a);
strcat(a,".csv");
int n;
printf("请输入学生人数\n");
scanf("%d",&n);
struct Stu str[n];
min = n-1;
FILE *pFile = fopen(a,"w");
printf("使用方法:同一行的不同数据之间使用空格来隔开\n下一行使用回车键来换行\n");
printf("请输入数据 (姓名 学号 成绩)\n");
system("pause");
system("cls");
int i;
for(i = 0 ; i < n ; i++)
{
fflush(stdin);
scanf("%s %s %d",&str[i].name,&str[i].num,&str[i].grade);
sum+=str[i].grade;
}
ave = (float)sum/(float)n;
for(i = 0 ; i < n ; i++)
{
if(str[max].grade < str[i].grade)
{
max = i;
}
if(str[min].grade > str[i].grade)
{
min = i;
}
}
fprintf(pFile, "姓名,学号,成绩\n");
for(i = 0 ; i < n ; i++)
{
fprintf(pFile,"%s,'%s,%d\n",str[i].name,str[i].num,str[i].grade);
}
fputs("\n",pFile);
fprintf(pFile,",,average=%.2f\n",ave);
fprintf(pFile,"%s,'%s,%d\n",str[max].name,str[max].num,str[max].grade);
fprintf(pFile,"%s,'%s,%d\n",str[min].name,str[min].num,str[min].grade);
char* buffer = getcwd(NULL,0);
printf("输入成功,请查看文件,保存目录为:%s\\%s",buffer,a);
fclose(pFile);
system("pause");
return 0;
}
- 这是一个比较简单的使用文件操作来进行csv文件的读写程序。下面介绍知识点:
- 结构体数组,使用了一个数组来装每个学生的信息,这也是很多c语言程序中都有的一个技巧。
- 文件名拼接,使用了
strcat
函数,在输入的文件名后面拼接上后缀,确保我们创建的是既能使用EXCEL打开,又能被c语言写入的csv文件。 - 还是要注意
fopen
的第二个参数,如果是要在上一个程序中写入没写完的数据,应使用"a"
。 - 使用了暂停,和清屏指令,提高程序可执行性。
- 使用
fprintf
时,一定要注意在数据之间,使用英文输入法下的逗号,
隔开,这样在csv里面会自动当成本行中的下一列,换行要使用\n
。 - 在最后使用了函数
getcwd
,其作用是返回当前操作位置的路径的地址,所以使用指针变量取装,该函数的参数意义不大,所以我们直接分别写NULL,0
即可。 - 最后一定不要忘记
fclose
函数,有打开一定有关闭。 - 在最后还要加上
system("pause");
指令,防止程序在scanf
进行完之后直接闪退,不要养成dev带来的坏习惯。