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

来源:互联网 发布:信用卡可以在淘宝套现 编辑:程序博客网 时间:2024/04/25 14:43

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

//定义头文件#include<stdio.h>#include<string.h>#include<stdlib.h>//宏定义#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<n;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){//实现功能2int countban=0;//记录一共多少条班级数据  有重复的班级int a,bb,c;//字符串转为 数字 用到Init(stu);//调用初始化函数,进行初始化int countbanji[MAXLIN];//保存班级字符串for(int i=0;i<counts;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<countban;i++){for(int j=0;j<i;j++){if(countbanji[i]==countbanji[j]){break;}}if(i==j){b[p++].name=countbanji[i];}}}//==================================================================================================================================// 功能1//==================================================================================================================================//读入功能函数  这个是最开始写的功能 和初始化有点重复 本可以调用初始化函数 但也没问题 我懒得改了void DuRu(Stu stu[MAXLIN]){//对应的功能是1int 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<counts;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<countban;i++){for(int j=0;j<i;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<p;i++){//printf("%d\n",b[i].name);b[i].math=0;b[i].renshu=0;}//计算求各班 对应的数学成绩 与 人数for(int j=0;j<counts;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<p;i++){//成绩与人数匹配对应 班级if(b[i].name==n){b[i].math+=m;b[i].renshu++;break;}}}printf("\n各班数学平均成绩如下\n");//对各个班级数学成绩进行输出for(int z=0;z<p;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);}}//返回0return 0;}

运行程序截图:

 

选择1:

 

选择2:

 

 

选择3:



0 0