c语言文件
最终代码:
主要函数块
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<time.h> 5 struct student //定义结构体 6 { 7 char name[20]; 8 int number; 9 int class; 10 char gender[10]; 11 char score[20]; 12 }stu[500]; 13 int i; 14 int n; 15 char ch[10]; 16 char name1[20]; 17 char name2[20]; 18 int num,class; 19 char sex[10]; 20 char score[20]; 21 FILE *fp; 22 int main() 23 { 24 int x; 25 Menu(); 26 while(1) 27 { 28 scanf("%d", &x); 29 switch(x) 30 { 31 case 1: Txt_Read(); 32 break; 33 case 2: Txt_Write(); 34 break; 35 case 3: Txt_Up(); 36 break; 37 case 4: Txt_Remove(); 38 break; 39 case 5: 40 system("clear"); 41 printf("\n已退出\n"); 42 printf("欢迎下次使用:)\n"); 43 return 0; 44 default: 45 system("clear"); 46 printf("请检查你的输入:(\n"); 47 Menu(); 48 } 49 } 50 return 0; 51 }
菜单函数块
1 void Head() 2 { 3 char str[100]; //时间显示 4 time_t t; //无法显示实时秒数 5 struct tm *lt; 6 t = time(NULL); 7 lt = localtime(&t); 8 strftime(str,100,"%Y-%m-%d %H:%M ",lt); 9 printf("\t\t\t\t ╭═════════════════════════════════○●○●═══╮\n"); 10 printf("\t\t\t\t │ 学生信息管理系统 │\n"); 11 printf("\t\t\t\t │ ● ▽ ● │ \n"); 12 printf("\t\t\t\t │ %s │ \n",str); 13 printf("\t\t\t\t ╰═══○●○●═════════════════════════════════╯\n"); 14 printf("\n"); 15 } 16 void Menu() 17 { 18 Head(); 19 printf("\t\t\t\t ╭════════════════════════════════○●○●════╮\n"); 20 printf("\t\t\t\t │ │\n"); 21 printf("\t\t\t\t │ [1] 查询信息 [2] 添加信息 │\n"); 22 printf("\t\t\t\t │ [3] 修改信息 [4] 移除信息 │\n"); 23 printf("\t\t\t\t │ [5] 退出程序 │\n"); 24 printf("\t\t\t\t │ │\n"); 25 printf("\t\t\t\t ╰═══○●○●═════════════════════════════════╯\n\n"); 26 printf("\t\t\t\t 请选择(0-5):"); 27 }
添加函数块
1 void Txt_Write() //写入txt 2 { 3 system("cls"); 4 Head(); 5 printf("请输入所添加的人数:\n"); 6 scanf("%d",&n); 7 printf("请输入姓名,学号,班级,性别,线代成绩:\n"); 8 for(i=1;i<=n;i++) 9 { 10 scanf("%s",name1); 11 strcpy(name2,name1); 12 strcat(name1,".txt"); 13 if ((fp = fopen(name1,"w")) == NULL) 14 { 15 printf("打开失败:(\n"); 16 } 17 fprintf(fp,"姓名 学号 班级 性别 线代成绩\n"); 18 scanf("%d%d%s%s",&num,&class,sex,score); 19 fprintf(fp,"%-17s%-17d%-15d%-19s%-s",name2,num,class,sex,score); //数据对齐 20 fclose(fp); 21 fp = fopen(name1,"r"); 22 fscanf(fp,"%*[^\n]"); //略过第一行 23 fscanf(fp,"%s %d %d %s %s",&stu[i].name,&stu[i].number,&stu[i].class,&stu[i].gender,&stu[i].score); 24 printf("姓名 学号 班级 性别 线代成绩\n"); 25 printf("%-17s%-17d%-15d%-19s%-s\n",stu[i].name,stu[i].number,stu[i].class,stu[i].gender,stu[i].score); 26 } 27 printf("数据已创建,请打开文件夹查看:)\n"); 28 printf("是否继续输入?[Y/N]\n"); 29 scanf("%s",ch); 30 if(ch[0]=='y'||ch[0]=='Y'){ 31 system("cls"); 32 return Txt_Write(); 33 }else if(ch[0]=='n'||ch[0]=='N'){ 34 system("cls"); 35 return Menu(); 36 } 37 exit(0); 38 }
查询函数块
1 void Txt_Read() //读取txt 2 { 3 system("cls"); 4 Head(); 5 printf("请输入所查询姓名(按’#‘返回菜单):\n"); 6 scanf("%s",name1); 7 if(name1[0]=='#') 8 { 9 printf("\n\n\n"); 10 system("cls"); 11 printf("已返回菜单:)\n"); 12 return Menu(); 13 }else{ 14 strcpy(name2,name1); 15 strcat(name1,".txt"); 16 if ((fp = fopen(name1,"r")) == NULL) 17 { 18 printf("请检查输入(1秒后重新输入)\n"); 19 sleep(1000000); 20 return Txt_Read(); 21 } 22 fp = fopen(name1,"r"); 23 fscanf(fp,"%*[^\n]"); //略过第一行 24 fscanf(fp,"%s %d %d %s %s",&stu[i].name,&stu[i].number,&stu[i].class,&stu[i].gender,&stu[i].score); 25 printf("姓名 学号 班级 性别 线代成绩\n"); 26 printf("%-17s%-17d%-15d%-19s%-s\n",stu[i].name,stu[i].number,stu[i].class,stu[i].gender,stu[i].score); 27 sleep(3000000); 28 fclose(fp); 29 return Txt_Read(); 30 } 31 exit(0); 32 }
修改函数块
1 void Txt_Up() 2 { 3 system("cls"); 4 Head(); 5 printf("请输入姓名:\n"); 6 scanf("%s",name1); 7 strcpy(name2,name1); 8 strcat(name1,".txt"); 9 if ((fp = fopen(name1,"r")) == NULL) 10 { 11 printf("打开失败:(\n请检查输入是否正确\n"); 12 sleep(1000000); 13 return Txt_Up(); 14 } 15 fp = fopen(name1,"r"); 16 fscanf(fp,"%*[^\n]"); //略过第一行 17 fscanf(fp,"%s %d %d %s %s",&stu[i].name,&stu[i].number,&stu[i].class,&stu[i].gender,&stu[i].score); 18 printf("姓名 学号 班级 性别 线代成绩\n"); 19 printf("%-17s%-17d%-15d%-19s%-s\n",stu[i].name,stu[i].number,stu[i].class,stu[i].gender,stu[i].score); 20 printf("请输入学号、班级、性别、现代成绩以进行更新:\n"); 21 scanf("%d%d%s%s",&num,&class,sex,score); 22 fp = fopen(name1,"w"); 23 fprintf(fp,"姓名 学号 班级 性别 线代成绩\n"); 24 fprintf(fp,"%-17s%-17d%-15d%-19s%-s",name2,num,class,sex,score); 25 fclose(fp); 26 fp = fopen(name1,"r"); 27 fscanf(fp,"%*[^\n]"); //略过第一行 28 fscanf(fp,"%s %d %d %s %s",&stu[i].name,&stu[i].number,&stu[i].class,&stu[i].gender,&stu[i].score); 29 printf("姓名 学号 班级 性别 线代成绩\n"); 30 printf("%-17s%-17d%-15d%-19s%-s\n",stu[i].name,stu[i].number,stu[i].class,stu[i].gender,stu[i].score); 31 fclose(fp); 32 printf("数据已更新,请打开文件夹查看:)\n"); 33 printf("是否继续修改?[Y/N]\n"); 34 scanf("%s",ch); 35 if(ch[0]=='y'||ch[0]=='Y'){ 36 system("cls"); 37 return Txt_Up(); 38 }else if(ch[0]=='n'||ch[0]=='N'){ 39 system("cls"); 40 return Menu(); 41 } 42 exit(0); 43 }
移除函数块
1 void Txt_Remove() 2 { 3 system("cls"); 4 Head(); 5 printf("请输入您要删除的文件名: "); 6 scanf("%s",name1); 7 strcat(name1,".txt"); 8 if(remove(name1) == 0) 9 printf("文件已删除:)\n"); 10 else{ 11 printf("失败:(\n"); 12 printf("失败原因分析:\n"); 13 printf("可能是因为你没给我买大白兔奶糖:(\n"); 14 } 15 printf("是否继续输入?[Y/N]\n"); 16 scanf("%s",ch); 17 if(ch[0]=='y'||ch[0]=='Y') 18 { 19 system("cls"); 20 return Txt_Remove(); 21 } 22 if(ch[0]=='n'||ch[0]=='N') 23 { 24 system("cls"); 25 return Menu(); 26 } 27 }
运行结果:
菜单界面
添加信息
查询信息
修改信息
删除信息
(删除后废纸篓里找不到)
退出程序
任务四:
system("pause"):实现冻结屏幕
system("cls"):实现清屏操作
system("clear"):同上
system("color 0A"):其中color后面的0是背景色代号,A是前景色代号
各颜色代码如下:
0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色
9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色
system("mkdir D:\zero\one") 可以在D盘下建立一个文件夹zero,在zero下面建立一个文件夹one
system("data"): 显示使用者当时使用时间
总结:
1.熟悉了文件基本操作相关函数的使用
2.结构体的使用使数据处理的方式高效简洁
3.了解缓冲区及EOF的概念,尝试如何打开二进制文件