c语言班级成绩统计分析系统,C语言课设-班级成绩统计分析

2014年9月3日 帮别人写的 (王艺)

//定义头文件

#include

#include

#include

//宏定义

#define MAX 18

#define MAXLIN 100

//一个学生的结构体存储结构

typedef struct Stu{//存数据用的

char num[MAX];//学号

char name[MAX];//姓名

char sex[MAX];//性别

char banji[MAX];//班级

char math[MAX];//数学

char english[MAX];//英语

char wuli[MAX];//物理

}Stu;

//一个班级的数学结构体

typedef struct ban{

int name;

int math;

int renshu;

}ban;

int counts=0;//全局计数

//字符串截取函数

void substring(char *s,int i,int n,char *t)

{

int j=0;

for(;j

t[j]=s[i++];

t[j]=0;

}

//==================================================================================================================================

//只是读取

//==================================================================================================================================

//初始化函数 读取所有学生

void Init(Stu stu[MAXLIN]){//这个函数只是读取 别的函数调用了这个函数

counts=0;

char str1[20]={"D:\\File04.txt"};//读取的文件名

FILE *fp;//文件指针

char haha[35]={"NULL"};//取数据结构数组

char haha1[27];//取具体数值数组

if((fp=fopen(str1,"rt"))==NULL){//开始读取

printf("文件夹打开失败!\n");

exit(0);

}

fgets(haha,36,fp);//读取数据结构

while(fgets(haha1,28,fp)!=NULL){//循环读取具体数值,并输出

substring(haha1,0,3,stu[counts].num);//学号

substring(haha1,4,6,stu[counts].name);//姓名

substring(haha1,11,2,stu[counts].sex);//性别

substring(haha1,14,3,stu[counts].banji);//班级

substring(haha1,18,2,stu[counts].math);//数学

substring(haha1,21,2,stu[counts].english);//英语

substring(haha1,24,2,stu[counts].wuli);//物理

counts++;

}

fclose(fp);//关闭文件

}

//==================================================================================================================================

//求所有班级 功能3 调用

//==================================================================================================================================

//初始化班级

void InitBanji(Stu stu[MAXLIN],ban b[MAXLIN],int &p){//实现功能2

int countban=0;//记录一共多少条班级数据 有重复的班级

int a,bb,c;//字符串转为 数字 用到

Init(stu);//调用初始化函数,进行初始化

int countbanji[MAXLIN];//保存班级字符串

for(int i=0;i

a=stu[i].banji[0]-'0';//字符串变为整形 -'0'

bb=stu[i].banji[1]-'0';

c=stu[i].banji[2]-'0';

countbanji[countban++]=a*100+bb*10+c;//赋值成一个百位数

}

//数据去重 并把数据输出来

for(i=0;i

for(int j=0;j

if(countbanji[i]==countbanji[j]){

break;

}

}

if(i==j){

b[p++].name=countbanji[i];

}

}

}

//==================================================================================================================================

// 功能1

//==================================================================================================================================

//读入功能函数 这个是最开始写的功能 和初始化有点重复 本可以调用初始化函数 但也没问题 我懒得改了

void DuRu(Stu stu[MAXLIN]){//对应的功能是1

int count=0;//计数

char str1[20]={"D:\\File04.txt"};//读取的文件名

FILE *fp;//文件指针

char haha[35]={"NULL"};//取数据结构数组

char haha1[27];//取具体数值数组

if((fp=fopen(str1,"rt"))==NULL){//开始读取

printf("文件夹打开失败!\n");

exit(0);

}

fgets(haha,36,fp);//读取数据结构

printf("%s\n",haha);//输出数据结构

while(fgets(haha1,28,fp)!=NULL){//循环读取具体数值,并输出

substring(haha1,0,3,stu[count].num);//学号

substring(haha1,4,6,stu[count].name);//姓名

substring(haha1,11,2,stu[count].sex);//性别

substring(haha1,14,3,stu[count].banji);//班级

substring(haha1,18,2,stu[count].math);//数学

substring(haha1,21,2,stu[count].english);//英语

substring(haha1,24,2,stu[count].wuli);//物理

printf("%s\t",stu[count].num);//输出

printf("%s\t",stu[count].name);

printf("%s\t",stu[count].sex);

printf("%s\t",stu[count].banji);

printf("%s\t",stu[count].math);

printf("%s\t",stu[count].english);

printf("%s\n",stu[count].wuli);

count++;

}

printf("\n");

fclose(fp);//关闭文件

printf("文件%s输出完毕",str1);//输出完毕提示

printf("\n\n");//换行

}

//==================================================================================================================================

//功能2

//==================================================================================================================================

//确定班级函数

void BanJi(Stu stu[MAXLIN]){

int countban=0;//记录一共多少条班级数据 有重复的班级

int a,b,c;//字符串转为 数字 用到

Init(stu);//调用初始化函数,进行初始化

int countbanji[MAXLIN];//保存班级字符串

for(int i=0;i

a=stu[i].banji[0]-'0';//字符串变为整形 -'0'

b=stu[i].banji[1]-'0';

c=stu[i].banji[2]-'0';

countbanji[countban++]=a*100+b*10+c;//赋值成一个百位数

}

//数据去重 并把数据输出来

printf("\n这些学生所属的班级有:\n");

for(i=0;i

for(int j=0;j

if(countbanji[i]==countbanji[j]){

break;

}

}

if(i==j){

printf("%d\n",countbanji[i]);

}

}

printf("所有班级输出完毕!\n\n");

}

//==================================================================================================================================

//功能3

//==================================================================================================================================

//计算数学平均成绩函数

void Math(Stu stu[MAXLIN]){

int a,bb,c,m,n;

ban b[MAXLIN];

int p=0;

InitBanji(stu,b,p);//初始化班级信息

for(int i=0;i

//printf("%d\n",b[i].name);

b[i].math=0;

b[i].renshu=0;

}

//计算求各班 对应的数学成绩 与 人数

for(int j=0;j

a=stu[j].math[0]-'0';//数学成绩

bb=stu[j].math[1]-'0';

m=a*10+bb;

a=stu[j].banji[0]-'0';//班级

bb=stu[j].banji[1]-'0';

c=stu[j].banji[2]-'0';

n=a*100+bb*10+c;

for(i=0;i

if(b[i].name==n){

b[i].math+=m;

b[i].renshu++;

break;

}

}

}

printf("\n各班数学平均成绩如下\n");//对各个班级数学成绩进行输出

for(int z=0;z

printf("班级:%d\t",b[z].name);

printf("数学总分:%d\t",b[z].math);

printf("班级人数:%d\t",b[z].renshu);

printf("班级数学平均成绩:%d\n",b[z].math/b[z].renshu);

}

printf("输出完毕!\n\n");

}

//==================================================================================================================================

//退出函数

//==================================================================================================================================

void TuiChu(){

printf("\n谢谢您的使用!\n");//输出友情话语

}

//==================================================================================================================================

//主函数

//==================================================================================================================================

int main(){

int choice; //选择

Stu stu[MAXLIN];//结构体数组

while(true){//死循环,操作数不止一次

//输出界面

printf("**********欢迎使用班级成绩统计分析系统**********\n");

printf("----------读入数据请输入 1 --------------------\n");

printf("----------确定班级请输入 2 --------------------\n");

printf("----------计算班级数学平均成绩 请输入 3 ------\n");

printf("----------退出请输入 0 ------------------------\n");

printf("您的选择是:");

//输入要进行的操作选择

scanf("%d",&choice);

//异常处理

if(choice<0||choice>3){

printf("请输入 0--3 之间的数!\n");

//接着输入

continue;

}

//根据选择进入相应的功能函数

switch(choice){

case 1: DuRu(stu);

break;

case 2: BanJi(stu);

break;

case 3:Math(stu);

break;

case 0:TuiChu();

exit(0);

}

}

//返回0

return 0;

}

运行程序截图:

9c5027c45d511b80f36f3ddef877fa2a.png

选择1:

d6a35a571be109b83f3231b3ca4eeec9.png

选择2:

cf87a7cc5a9d7254fcc1b661bdbc5fe1.png

选择3:

c40f4f2af08f14c3e077f30f0b5170af.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值