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
- C语言课设-班级成绩统计分析
- C语言课设
- C语言课设-1
- C语言课设-2
- C语言课设-3
- C语言课设总结
- C语言班级财务管理系统
- 班级成绩计算
- C语言课设心得分享(一)
- C语言课设--电影院售票
- C语言课设--教师评价系统
- 外卖管理系统--C语言课设
- C语言编写班级花名册(链表版)
- c语言成绩管理
- [C语言]学生成绩管理
- c语言成绩统计系统
- C语言实验--成绩转换
- C语言:成绩最高学号
- 商务智能就是数据挖掘?一起来看BI是什么
- 一、mysql数据库的基本操作(备份、恢复数据库以及一些常用的命令)
- 几种概率分布
- 关于任哲的《嵌入式实时操作系统uC/OS II原理及应用(第二版)》开发环境搭建和第一个例子
- Hadoop 2.6.0的安装与配置
- C语言课设-班级成绩统计分析
- Django 上传文件出现 OSError Permission denied的解决办法
- C语言之辅助循环手段continue和break
- 关于Opengl各种矩阵变换的理解
- 【伤逝版 红颜劫】
- 控制执行流程
- cocos2dx[3.2] ——核心类Director/Scene/Layer/Sprite详细讲解
- is not allowed to connect to this MySql server
- java 集合类学习笔记