#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student_type{
char name[13];
char stuNo[12];
float score[3];
float sum;
}stu[20];
//向文件stuInfo.txt中输入信息保存学生信息 (追加)
void save1(int t){
FILE *fp;
int i;
fp = fopen("stuInfo.txt","a"); //D:\\C语言\\学生信息\\stuInfo.txt
if(fp==NULL){ //先判断是否存在这个文件,存在再进行下一步操作
printf("Can't open file");
exit(0);
}
printf("请输入学生信息(姓名,学号,语文成绩,数学成绩,英语成绩。每组数据之间以空格分开,每位学生换行输入):\n");
for(i=0;i<t;i++){ //获取追加的学生信息
scanf("%s %s %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
} for(i=0;i<t;i++){ //把学生信息写入文件
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum); }
fclose(fp);
}
//向文件stuInfo.txt中输入信息保存学生信息 (重写)
/*
C语言中,文件打开方式有多种。其中常用三种,
1. 'r'方式打开的文件只可以读,只能向计算机输入数据,且这个文件必须是存在的。
'r+'方式打开的文件可以读也可以写。
2. 'w'方式打开的方式只可以写,只能用于向打开的文件写数据.
如果这个文件不存在,计算机会建立一个以指定名字命名的文件。
如果这个文件存在,先把这个文件删除在重新建立一个以指定名字命名的文件。
'w+'方式打开的文件可读可写。
3. 'a'方式打开的只可以写,只能用于向打开的文件写数据.
如果文件不存在,出错。
如果文件存在,光标自动移动到文件末尾。
4.用'r+'方式打开的文件可以读也可以写。 文件一存在,方便读写。
用'w+'方式打开则是县新建一个文件,先向文件写入数据,再从文件中读取数据。
'a+'方式打开的文件可读可写。原来的文件不会被删除,文件读写文职标记移动到文件末尾,可以添加也可以读。 */
void save2(int t){
FILE *fp;
int i;
fp = fopen("stuInfo.txt","w");
printf("请输入学生信息(姓名,学号,成绩,成绩,成绩。每组数据之间以空格分开,每位学生换行输入):\n");
for(i=0;i<t;i++){
scanf("%s %s %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
}
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<t;i++){
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum); }
fclose(fp);
}
//从文件stuInfo .txt中获取信息并打印
void show(int count){
FILE *fp;
int i;
fp = fopen("stuInfo.txt","r");
if(fp==NULL){
printf("Can't open file");
system("pause");
exit(0);
}
printf( " 姓名 学号 语文 数学 英语 总分\n");
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
printf("%15s %12s %10f %10f %10f %10f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}
fclose(fp);
} //对文件里的数据进行排序兵重写
void order(int count){
struct Student_type temp;
FILE *fp;
int i,j,max;
fp = fopen("stuInfo.txt","w+");
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
}
for(i=0;i<count;i++){
max = i;
for(j=i+1;j<count;j++){
if(stu[j].sum>stu[max].sum){
max = j;
}
}
temp = stu[i];
stu[i]=stu[max];
stu[max]= temp; printf("============%f\n",stu[i].sum);
}
/* for(i=0;i<count;i++){
printf("%15s %12s %10f %10f %10f %10f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}*/
for(i=0;i<count;i++){
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}
}
//主菜单
void menu(){
printf("========菜单========\n");
printf("1.添加学生信息\n");
printf("2.查找学生信息\n");
printf("3.展示所有学生信息\n");
printf("4.排序\n");
printf("5.修改学生信息\n");
printf("0.退出\n");
}
//副菜单
void menu2(){
printf("1.按学号查找\n");
printf("2.按姓名查找\n");
}
//副菜单
void menu3(){
printf("1.重写学生信息\n");
printf("2.追加学生信息\n");
}
//按学号查找
void check1(int count){
FILE *fp;
int i,j,k=-1;
char vivo[12];
fp = fopen("stuInfo.txt","r");
printf("请输入学号:");
scanf("%s",vivo);
if(fp==NULL){
printf("Can't open file");
system("pause");
exit(0);
}
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
if(strcmp(stu[i].stuNo,vivo)==0){
k=i;
}
if(k>=0){
printf( " 姓名 学号 语文 数学 英语 总分\n");
printf("%15s %12s %10f %10f %10f %10f\n",stu[k].name,stu[k].stuNo,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].sum);
break;
} }
if(k<0){
printf("对不起,你要查找的学生不存在!\n");
} fclose(fp); }
//按姓名查找
void check2(int count){
FILE *fp;
int i,j,k=-1;
char oppo[15];
fp = fopen("stuInfo.txt","r");
printf("请输入姓名:");
scanf("%s",oppo);
if(fp==NULL){
printf("Can't open file");
system("pause");
exit(0);
}
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
if(strcmp(stu[i].name,oppo)==0){
k=i;
}
if(k>=0){
printf( " 姓名 学号 语文 数学 英语 总分\n");
printf("%15s %12s %10f %10f %10f %10f\n",stu[k].name,stu[k].stuNo,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].sum);
break;
} }
if(k<0){
printf("对不起,你要查找的学生不存在!\n");
}
fclose(fp); }
//修改学生信息
void update(int count){
FILE *fp;
int i,j,k;
char oppo[12];
fp = fopen("stuInfo.txt","w+");
printf("请输入学号或者姓名:");
scanf("%s",oppo);
if(fp==NULL){
printf("Can't open file");
}
for(i=0;i<2;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
k= -1;
if(strcmp(stu[i].name,oppo)==0||strcmp(stu[i].stuNo,oppo)==0){
k=i;
break;
}
}
if(k<0) {
printf("对不起,你要查找的学生不存在!\n");
} else{
for(i=0;i<count;i++){
fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
}
printf("请输入学生信息(姓名,学号,成绩,成绩,成绩。每组数据之间以空格分开):\n");
scanf("%s %s %f %f %f",stu[k].name,stu[k].stuNo,&stu[k].score[0],&stu[k].score[1],&stu[k].score[2]);
stu[k].sum=stu[k].score[0]+stu[k].score[1]+stu[k].score[2];
for(i=0;i<count;i++){
fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
} }
fclose(fp);
}
//主函数
int main()
{
int i,j,k,count;
printf("请输入已有学生的人数:(文件中有2个学生的信息):");
scanf("%d",&count);
while(1){
menu();
printf("请选择:");
scanf("%d",&j);
switch(j){
case 1:
menu3();
scanf("%d",&j);
switch(j){
case 1:
printf("请输入添加学生信息的人数:");
scanf("%d",&k);
save2(k);
count = 0;
count = count +k;
break;
case 2:
printf("请输入添加学生信息的人数:");
scanf("%d",&k);
save1(k);
count = count +k;
break;
default : printf("你输入的选项不存在");
break;
}
break;
case 2:
menu2();
scanf("%d",&j);
switch(j){
case 1: check1(count);
break;
case 2: check2(count);
break;
default : printf("你输入的选项不存在");
break;
}
break;
case 3: show(count);
break;
case 4 :
order(count);
break;
case 5: update(count);
break;
case 0: exit(0);
default : printf("你输入的选项不存在");
break; }
}
return 0;
}
/*
//向文件stuInfo.txt中输入信息保存学生信息
void save(int t){
FILE *fp;
int i;
fp = fopen("D:\stuInfo.txt","ab+");
printf("Please input data of student:\n");
for(i=0;i<t;i++){
scanf("%s%d%d%f%f%f",stu[i].name,stu[i].stuNo,&stu[i].age,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<t;i++){
if(fwrite(&stu[i],sizeof(struct Student_type),1,fp)!=1){
printf("File write error!");
fclose(fp);
}
}
}
//从文件stuInfo .txt中获取信息并打印
void show(){
FILE *fp;
int i;
fp = fopen("D:\stuInfo.txt","ab+");
if(fp==NULL){
printf("Can't open file");
exit(0);
}
for(i=0;i<10;i++){
fread(&stu[i],sizeof(struct Student_type),1,fp);
printf("%-13s%12d%4d%f\n",stu[i].name,stu[i].stuNo,stu[i].age,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
} fclose(fp);
}*/

  

最新文章

  1. js实现动态操作table
  2. div中iframe高度自适应问题
  3. 迅达云s3cmd客户端mac平台部署说明
  4. mysql 性能优化方案 (转)
  5. poj3180 强连通
  6. js高级程序设计(四)变量、作用域和内存问题
  7. HTTP的长短连接、长短轮询的区别(转载)
  8. hdu 4521 线段树改点求点的应用
  9. 关于各种数据库 Insert时同时取到Id的操作
  10. Android APK反编译详解(非常有用)
  11. 在Windows上安装Arduino-IDE
  12. Oracle索引之Btree索引
  13. Vnpy二次开发应用所需图标
  14. web app、hybrid app和native app区别
  15. oracle数据库中字符乱码
  16. maven 配置 阿里仓库
  17. Spring常用注解简单汇总
  18. 【数据库】MySQL 复制表结构
  19. centos7-java模拟cpu占用高及排查
  20. Redis的基本使用(基于maven和spring)

热门文章

  1. (转)HttpServletResquest对象
  2. CSS实现图片圆角显示
  3. 使用Maven那么久了,你对企业级Maven的核心配置了解多少?
  4. 正睿十一A班模拟赛day1
  5. Matlab中imagesc用法
  6. I2C总线的Arduino库函数
  7. k8s的namespace一直Terminating的完美解决方案
  8. 【硬核】Dubbo常见面试题
  9. Python+Appium自动化测试(4)-使用weditor进行元素定位
  10. CSGO 服务端扩展插件开发记录之&quot;DropClientReason&quot;(1)