#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
struct student{ /* 学生信息结构 */
char no[]; /* 学号 */
char name[]; /* 姓名 */
char sex[]; /* 性别 */
int score[]; /* 成绩和总分 */
}; int menu(); /* 菜单*/
void readsi(struct student stud[],int *n); /* 读取数据*/
void printsi(struct student *pstud,int n); /* 输出文件内容*/
void ssort(struct student *pstud, int n); /*按总分的降序排序函数 */
void xsort(struct student *pstud, int n);/*按学号的升序排序函数 */
void tjave(struct student *pstud, int n);/*统计各门功课的平均分函数 */
void tjrs(struct student *pstud,int n);/*统计男女同学的人数函数 */
void namesort(struct student *pstud,int n);/*按姓名升序排序 */
void math_excellent(struct student *pstud,int n);/*数学考试成绩优秀(>=90)*/
void all_excellent(struct student *pstud,int n);/*每门考试成绩优秀(>=90)或者总分》=270*/ void main() /* 主函数 */
{
struct student stud[N];
int code, n=;
readsi(stud,&n);
printf("\n 按<Enter>, 进入菜单: ");
scanf("%*c"); /* 暂停 */
while()
{
code=menu(); /* 调用主控菜单 */
switch(code)
{
case : exit();
case : printsi(stud,n);
printf("\n 按<Enter>, 进入菜单: ");
scanf("%*c");
break;
case : ssort(stud,n);break;
case : xsort(stud,n);break;
case : tjave(stud,n);break;
case : tjrs(stud,n);break;
case : namesort(stud,n);break;
case : math_excellent(stud,n);break;
case : all_excellent(stud,n);break; } scanf("%*c");
}
} int menu() /* 主控菜单函数 */
{
int code;
printf(" 菜 单\n");
printf(" *****************************************************\n");
printf(" 0. 退出 1. 显示学生信息 \n");
printf(" 2. 按总分排序 3. 按学号排序\n");
printf(" 4. 统计各门功课平均分 5. 统计男女同学人数\n");
printf(" 6. 按姓名排序 7. 数学考试成绩优秀人数\n");
printf(" 8. 考试成绩优秀人数 \n");
printf(" *****************************************************\n");
printf(" 请按序号选择:\n");
scanf("%d",&code);
return code;
} void readsi(struct student stud[],int *n) /* 读数据函数 */ //int *n;n需要返回
{
FILE *fp;
int i;
// if((fp=fopen("studf.txt","r"))==NULL)
if((fp=fopen("C:/Users/minmin/Desktop/studf.txt","r"))==NULL)//文件存放在指定路径,把路径写上就可以了
{
printf("Cannot open file!\n");
exit();
}
for(i=;!feof(fp);i++)
{
(*n)++;
fscanf(fp,"%s %s %s %d %d %d %d", stud[i].no,stud[i].name,stud[i].sex,
&stud[i].score[], &stud[i].score[], &stud[i].score[], &stud[i].score[]); stud[i].score[]=stud[i].score[]+stud[i].score[]+stud[i].score[];
}
fclose(fp);
} void printsi(struct student *pstud, int n) /* 输出数据函数 */
{
int i;
printf(" 学号 姓名 性别 数学 英语 C 总分\n");
printf("******************************************************\n");
for(i=;i<n;i++)
{
printf("%-8s %-8s %-2s %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
pstud[i].score[], pstud[i].score[], pstud[i].score[], pstud[i].score[]);
}
} void ssort(struct student *pstud,int n) /*按总分的降序排序函数 */
{
struct student temp;
int i,j,min;
for(i=;i<n;i++)
{
min=i; /* 找最小值元素的下标*/
for(j=i+;j<n;j++)
if(pstud[j].score[]>pstud[min].score[]) min=j;
if(min!=i) /* 交换 */
{
temp=pstud[i]; pstud[i]=pstud[min]; pstud[min]=temp;
}
}
} void xsort(struct student *pstud,int n) /*按学号的升序排序函数 */
{
struct student temp;
int i, j;
for(i=;i<n-;i++)
{
for(j=i+;j<n;j++)
{
if(strcmp(pstud[i].no,pstud[j].no)>)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
}
} void tjave(struct student *pstud, int n) /*统计各门功课的平均分函数 */
{
float avemath=,aveeng=,avec=,avesum=;
int i;
for(i=;i<n;i++)
{
avemath+=pstud[i].score[];
aveeng+=pstud[i].score[];
avec+=pstud[i].score[];
avesum+=pstud[i].score[];
}
avemath/=n; aveeng/=n; avec/=n; avesum/=n;
printf("共有%d个同学,各门功课及总分的平均分为:\n",n);
printf(" 数学 英语 C 总分\n");
printf("%5.2f %5.2f %5.2f %5.2f\n",avemath,aveeng,avec,avesum);
} void tjrs(struct student *pstud,int n) /*统计男女同学的人数函数 */
{
int i, nummen=, numwomen=;
for(i=;i<n;i++)
{
if(strcmp(pstud[i].sex,"男")==) nummen++;
else numwomen++;
}
printf(" 共有%d个同学: \n",n);
printf(" 其中男同学有%d个,女同学有%d个\n",nummen,numwomen);
} void namesort(struct student *pstud,int n)/*按姓名升序排序 */
{
struct student temp;
int i, j;
for(i=;i<n;i++)
{
for(j=i+;j<n;j++)
{
if(strcmp(pstud[i].name,pstud[j].name)>)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
}
} void math_excellent(struct student *pstud,int n)/*数学考试成绩优秀(>=90)*/
{
int i, num = ;
for(i=;i<n;i++)
{
if(pstud[i].score[]>=)
{
num++;
printf("%-8s %-8s %-2s %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
pstud[i].score[], pstud[i].score[], pstud[i].score[], pstud[i].score[]);
}
}
printf("数学优秀的人数为:%d\n",num);
} void all_excellent(struct student *pstud,int n)/*每门考试成绩优秀(>=90)或者总分》=270*/
{
int i, num = ;
for(i=;i<n;i++)
{
if(((pstud[i].score[]>=)&&(pstud[i].score[]>=)&&(pstud[i].score[]>=))||(pstud[i].score[]>=))
{
num++;
printf("%-8s %-8s %-2s %4d %4d %4d %4d\n", pstud[i].no,pstud[i].name,pstud[i].sex,
pstud[i].score[], pstud[i].score[], pstud[i].score[], pstud[i].score[]);
}
}
printf("优秀的人数为:%d\n",num);
}

c语言 文件写入和读取的更多相关文章

  1. Python学习笔记——文件写入和读取

    1.文件写入 #coding:utf-8 #!/usr/bin/env python 'makeTextPyhton.py -- create text file' import os ls = os ...

  2. 【PHP】文件写入和读取详解

    文章提纲: 一.实现文件读取和写入的基本思路 二.使用fopen方法打开文件 三.文件读取和文件写入操作 四.使用fclose方法关闭文件 五.文件指针的移动 六.Windows和UNIX下的回车和换 ...

  3. Java文件写入与读取实例求最大子数组

    出现bug的点:输入数组无限大: 输入的整数,量大: 解决方案:向文件中输入随机数组,大小范围与量都可以控制. 源代码: import java.io.BufferedReader; import j ...

  4. PHP 文件写入和读取(必看篇)

    文章提纲: 一.实现文件读取和写入的基本思路 二.使用fopen方法打开文件 三.文件读取和文件写入操作 四.使用fclose方法关闭文件 五.文件指针的移动 六.Windows和UNIX下的回车和换 ...

  5. sql注入文件写入和读取

    系统固定文件路径:https://blog.csdn.net/ncafei/article/details/54616826 /etc/passwd c:/windows/win.ini 文件读取使用 ...

  6. 从PCD文件写入和读取点云数据

    (1)学习向PCD文件写入点云数据 建立工程文件ch2,然后新建write_pcd.cpp  CMakeLists.txt两个文件 write_pcd.cpp : #include <iostr ...

  7. unity文件写入与读取

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; us ...

  8. 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取

    装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...

  9. Java 通过 BufferReader 实现 文件 写入读取 示例

    package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...

随机推荐

  1. (原+转)Eclipse中Android调用OpenCv

    大部分都是参考下面的网址,如果感觉看起来不舒服,可以直接查看原网址.最后遇到了一点问题: Description      Resource Path Location   Type E:/~\cod ...

  2. SFTP信任公钥配置及JSCH库

    1.SFTP信用公钥配置 1.1 客户端生成密钥对 以DSA举例: ssh-keygen –t dsa 执行该命令后,在home/用户名/.ssh目录下,会生成id_dsa和id_dsa.pub两个文 ...

  3. Naive Bayes(朴素贝叶斯算法)[分类算法]

    Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2)   算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...

  4. SquirrelMQ消息队列

    SquirrelMQ是一个快速的消息队列. SquirrelMQ特性: 1. SquirrelMQ使用Slab内存分配算法来降低内存碎片,使用epoll来解决高并发问题.效率比redis要高,使用简单 ...

  5. bzoj 2648 SJY摆棋子 kd树

    题目链接 初始的时候有一些棋子, 然后给两种操作, 一种是往上面放棋子. 另一种是给出一个棋子的位置, 问你离它最近的棋子的曼哈顿距离是多少. 写了指针版本的kd树, 感觉这个版本很好理解. #inc ...

  6. Ice_cream's world I--hdu2120

    Ice_cream's world I Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. aliyun.com

    https://help.aliyun.com/knowledge_detail/39495.html?spm=5176.7839494.2.1.AhdvPM

  8. 深入剖析MFC中对于Windows消息处理、运行机制

    序: 本人对Windows系统.MFC谈不上有深入的了解,但对MFC本身包装API的机制很有兴趣,特别是读了候老师的<深入浅出MFC>后,感觉到VISUAL C++的Application ...

  9. 杭电oj1219 AC Me

    Tips:本题中,输入字符串之后,直接从头到尾处理一遍,调用函数判断是否是字母,不要自己写循环判断是否为字母,易超时! 不过本题中有一个疑问,自己最开始用C写的,一直是Time Limit Excee ...

  10. java中如何将char数组转化为String

    1.直接在构造String时建立. char data[] = {'s', 'g', 'k'}; String str = new String(data); 2.String有方法可以直接转换. S ...