c语言文件
任务1
你现在拥有一个数组,数组中储存着总共10个人的姓名字符串
你需要为每个人创建一个txt文件,以他们的名字命名。
生成效果如下
代码如下
#include
int main() {
FILE* fp;
char name[10][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" };
int i;
for (i = 0;i < 10;i++) {
sprintf(name[i], "%s.txt", name[i]);
fp = fopen(name[i], "w");
if (fp == NULL) {
break;
}
fclose(fp);
}
return 0;
}
任务2
在任务一的基础上,这次不仅仅要创建txt文件,还需要往文件中写入
每个人的学号,性别,班级,线代成绩
生成效果如下
代码如下
#include
struct stu {
char id[100];
char name[30];
char grade[10];
char sex[10];
char Class[10];
}s1[100];
int main() {
FILE* fp;
char name[10][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" };
int i;
for (i = 0;i < 10;i++) {
sprintf(name[i], "%s.txt", name[i]);
fp = fopen(name[i], "w+");
scanf("%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
fprintf(fp, "%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
fclose(fp);
}
return 0;
}
任务3
在任务二生成的文件中,将每个人的信息再重新读取出来,放入数组中。
[要求使用结构体数组,结构体需要包含姓名,学号,性别,班级,线代成绩5个属性]
生成效果如下
代码如下
#include
#include
#include
struct stu {
char id[100];
char name[30];
char grade[10];
char sex[10];
char Class[10];
}s1[100];
int main() {
FILE* fp;
char name[100][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" };
char name2[100][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" };
int i;
for (i = 0;i < 10;i++) {
sprintf(name[i], "%s.txt", name[i]);
//fp = fopen(name[i], "w+");
//scanf("%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
//fprintf(fp, "%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
//fclose(fp);
}
system("cls");
for (i = 0;i < 10;i++) {
if ((fp = fopen(name[i], "r")) == NULL) {
printf("File open error");
exit(0);
}
while (!feof(fp)) {
fscanf(fp, "%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
}
strcpy(s1[i].name, name2[i]);
printf("%s\t%s\t%s\t%s\t%s\n", s1[i].name,s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
}
fclose(fp);
return 0;
}
任务四:
试着使用一下system("cls"),system("pause")这两个命令,看看这两个
命令能不能对你的程序起到一些美化的作用。
对程序的美化
最终的运行效果如下
代码如下
#include
#include
#include
#include
struct stu {
char id[100];
char name[30];
char grade[10];
char sex[10];
char Class[10];
}s1[100];
int main() {
system("color E1");
FILE* fp;
char name[100][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" };
char name2[100][20] = { "宋林涛","黄力强","陈汉煜","张旭","李龙生","蔡泓顺","郝冰冰","茅志雄","雷雯雯","朱仕岳" };
int i;
printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━┓ \n");
printf(" ┃ 学生管理系统 ┃ \n");
printf(" ┣━━━━━━━━━━━━━━━━━━━━━━━┫ \n");
printf(" ┃ 欢迎使用 ┃ \n");
printf(" ┃ 按任意键继续 ┃ \n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━┛ \n");
system("pause");
system("cls");
printf("请依次输入\n");
printf("学号 性别 班级 线代成绩\n");
for (i = 0;i < 10;i++) {
sprintf(name[i], "%s.txt", name[i]);
fp = fopen(name[i], "w+");
scanf("%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
fprintf(fp, "%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
fclose(fp);
}
system("pause");
system("cls");
printf("查看学生成绩\n");
system("pause");
system("cls");
printf("学生成绩如下\n");
for (i = 0;i < 10;i++) {
if ((fp = fopen(name[i], "r")) == NULL) {
printf("File open error");
exit(0);
}
while (!feof(fp)) {
fscanf(fp, "%s %s %s %s", s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
}
strcpy(s1[i].name, name2[i]);
printf("%s\t%s\t%s\t%s\t%s\n", s1[i].name,s1[i].id, s1[i].sex, s1[i].Class, s1[i].grade);
}
system("pause");
system("cls");
printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━┓ \n");
printf(" ┃ 学生管理系统 ┃ \n");
printf(" ┣━━━━━━━━━━━━━━━━━━━━━━━┫ \n");
printf(" ┃ 感谢使用 ┃ \n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━┛ \n");
Sleep(3000);
fclose(fp);
return 0;
}
总结
1.对system函数的了解
要引入头文件include
system("cls");清屏
system("pause");暂停程序,按任意键继续
system ("color ab")改变界面的背景色和字体颜色,前面的为背景色,后面的为字体颜色。
- 0=黑色 8=灰色
- 1=蓝色 9=淡蓝色
- 2=绿色 10=淡绿色
- 3=湖蓝色 11=淡浅绿色
- 4=红色 12=淡红色
- 5=紫色 13=淡紫色
- 6=黄色 14=淡黄色
- 7=白色 15=亮白色
system(“ shutdown -s -t ”) 可以让电脑关机
2.了解了文件的一些处理方法,以及各种函数的格式及使用他们的情况。
3.对文件的操作有了一定了解
注意到打开文件后一定要关闭文件,否则会报错,进而了解到文件打开后,可能有一些操作被缓冲在内存中,若不正常关闭,缓冲在内存中的数据就不能真正写入到文件中,可能造成数据丢失。