大一做的实训项目
/* 学生成绩管理 */
#include "stdio.h"
#define PFORMAT "%4d %5d %4d %7d %8d %4d %6d %8d %7d\n"//整形输出格式控制
#define PF "%4.2f %5.2f %4.2f %7.2f %8.2f %4.2f %6.2f %8.2f %7.2f\n"//浮点形输出格式控制
#define IFORMAT " %d %5d %5d %4d %7d %8d %4d %6d %8d %7d\n"//输入格式控制
#define MAX 45//定义变量常量,最大人数只能达到45人
typedef struct{
int num; //学号
int practical; //应用文
int english; //英语
int math; //数学
int computer_based; //计算机基础
int c; //C语言
int pe; //体育
int mental_health; //心理健康
int thinking; //思想道德与法律基础
int sum;
}RECORD;
#include "stdio.h"
#define PFORMAT "%4d %5d %4d %7d %8d %4d %6d %8d %7d\n"//整形输出格式控制
#define PF "%4.2f %5.2f %4.2f %7.2f %8.2f %4.2f %6.2f %8.2f %7.2f\n"//浮点形输出格式控制
#define IFORMAT " %d %5d %5d %4d %7d %8d %4d %6d %8d %7d\n"//输入格式控制
#define MAX 45//定义变量常量,最大人数只能达到45人
typedef struct{
int num; //学号
int practical; //应用文
int english; //英语
int math; //数学
int computer_based; //计算机基础
int c; //C语言
int pe; //体育
int mental_health; //心理健康
int thinking; //思想道德与法律基础
int sum;
}RECORD;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 自定义函数声明 */
int printb();//显示
void cls();//清屏
void scanf1(int *x);
int identify(int i);//确定
int findnum(RECORD student[],int people);//查找学号
void sta(int x,int a[]);//统计各分数段人数
int fen(int *n);//显示提示录入子菜单的信息
int importing(RECORD student[],int *people);//输入子菜单
RECORD impor(RECORD student,char ch);//输入
int sum(RECORD student);//计算总分
int luru(int num,int k,int i,int);//输入各科
void output(RECORD student[],int *people);//输出子菜单
void outpu(RECORD student,int i);//输出
void add(RECORD student[],int *people);//添加记录
void delet(RECORD student[],int *people);//删除记录
void find(RECORD student[],int *people);//查找
void modify(RECORD student[],int *people);//修改
void statistical(RECORD student[],int *people);//统计人数
void most(RECORD student[],int people);//平均值
void ave(RECORD student[],int people);//求最值
void save_file(RECORD student[],int people);//保存文件
void open_file();//打开文件
/* 自定义函数声明 */
int printb();//显示
void cls();//清屏
void scanf1(int *x);
int identify(int i);//确定
int findnum(RECORD student[],int people);//查找学号
void sta(int x,int a[]);//统计各分数段人数
int fen(int *n);//显示提示录入子菜单的信息
int importing(RECORD student[],int *people);//输入子菜单
RECORD impor(RECORD student,char ch);//输入
int sum(RECORD student);//计算总分
int luru(int num,int k,int i,int);//输入各科
void output(RECORD student[],int *people);//输出子菜单
void outpu(RECORD student,int i);//输出
void add(RECORD student[],int *people);//添加记录
void delet(RECORD student[],int *people);//删除记录
void find(RECORD student[],int *people);//查找
void modify(RECORD student[],int *people);//修改
void statistical(RECORD student[],int *people);//统计人数
void most(RECORD student[],int people);//平均值
void ave(RECORD student[],int people);//求最值
void save_file(RECORD student[],int people);//保存文件
void open_file();//打开文件
/////////////////////////主函数///////////////////////////////////////////////////////////////////////////////////
void main()
{
int people=0,x,i=1;//people是总人数,相当于定义了全局变量,因为在函数调用时,需要改变值时都是传地址。i
RECORD student[MAX];//定义结构体数组
do
{
x=printb();//调用显示信息函数,x是返回的对应的选项
switch(x)
{
case 1: i=importing(student,&people);break;//传数组和people变量的地址过去
case 2: output(student,&people);break;
case 3: add(student,&people);break;
case 4: delet(student,&people);break;
case 5: find(student,&people);break;
case 6: modify(student,&people);break;
case 7: statistical(student,&people);break;
case 8: most(student,people);break;
case 9: ave(student,people);break;
case 10: save_file(student,people);break;
case 11: open_file();break;
case 12: return;
}
if(i==1)getch();
}while(x!=12);//当输入是12就退出系统
exit(0);
}
void main()
{
int people=0,x,i=1;//people是总人数,相当于定义了全局变量,因为在函数调用时,需要改变值时都是传地址。i
RECORD student[MAX];//定义结构体数组
do
{
x=printb();//调用显示信息函数,x是返回的对应的选项
switch(x)
{
case 1: i=importing(student,&people);break;//传数组和people变量的地址过去
case 2: output(student,&people);break;
case 3: add(student,&people);break;
case 4: delet(student,&people);break;
case 5: find(student,&people);break;
case 6: modify(student,&people);break;
case 7: statistical(student,&people);break;
case 8: most(student,people);break;
case 9: ave(student,people);break;
case 10: save_file(student,people);break;
case 11: open_file();break;
case 12: return;
}
if(i==1)getch();
}while(x!=12);//当输入是12就退出系统
exit(0);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 显示信息 */
int printb(){
int x=1;
do{
cls();
printf("\t\t**********************************************\n");
printf("\t\t* 成绩统计系统 *\n");
printf("\t\t* 欢迎进入主菜单 *\n");
printf("\t\t* 1 成绩录入 7 统计人数 *\n");
printf("\t\t* 2 查看成绩 8 计算最值 *\n");
printf("\t\t* 3 添加成绩 9 算平均分 *\n");
printf("\t\t* 4 删除记录 10 保存文件 *\n");
printf("\t\t* 5 查找成绩 11 打开文件 *\n");
printf("\t\t* 6 修改成绩 12 退出系统 *\n");
printf("\t\t* *\n");
printf("\t\t* 编者:张旺 班级:35111 *\n");
printf("\t\t**********************************************\n\n");
printf("\t\t\t 您的使用,是对我最大的支持\n");
printf("\t\t 如果您有什么意见或看法,请发E-mail给我\n");
printf("\t\t\t zhangwang6719@foxmail.com\n");
if(x<1||x>12)
{
printf("警告:请您重新选择进入的子菜单(1~12):");
}
else
printf("请您选择要进入的子菜单(1~12):");
scanf1(&x);
}
while(x<1||x>12);//如果输入1~12之外的数,就继续循环
return x;
}
/* 显示信息 */
int printb(){
int x=1;
do{
cls();
printf("\t\t**********************************************\n");
printf("\t\t* 成绩统计系统 *\n");
printf("\t\t* 欢迎进入主菜单 *\n");
printf("\t\t* 1 成绩录入 7 统计人数 *\n");
printf("\t\t* 2 查看成绩 8 计算最值 *\n");
printf("\t\t* 3 添加成绩 9 算平均分 *\n");
printf("\t\t* 4 删除记录 10 保存文件 *\n");
printf("\t\t* 5 查找成绩 11 打开文件 *\n");
printf("\t\t* 6 修改成绩 12 退出系统 *\n");
printf("\t\t* *\n");
printf("\t\t* 编者:张旺 班级:35111 *\n");
printf("\t\t**********************************************\n\n");
printf("\t\t\t 您的使用,是对我最大的支持\n");
printf("\t\t 如果您有什么意见或看法,请发E-mail给我\n");
printf("\t\t\t zhangwang6719@foxmail.com\n");
if(x<1||x>12)
{
printf("警告:请您重新选择进入的子菜单(1~12):");
}
else
printf("请您选择要进入的子菜单(1~12):");
scanf1(&x);
}
while(x<1||x>12);//如果输入1~12之外的数,就继续循环
return x;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 清屏 */
void cls()
{
system("cls");
}
/* 清屏 */
void cls()
{
system("cls");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*输入 字符串转化数字*/
void scanf1(int *x)
{
char ch[10];
int n,i,j=1,s=0;
gets(ch);//从键盘上读入字符串
for(i=strlen(ch)-1;-1!=i;i--)//测试字符串的长度,然后从前面开始取每个字符
{
n=ch[i]-'0';//原字符减去'0'字符,就得了相应的数值
if(n<0||n>9)//当数值不在0到9之间,就返回120,120在整个程序中无意义
{
*x=120;
return;
}
s+=n*j;//当输入两个以上的字符,就要对第二个字符乘j,j是不断乘10倍数
j*=10;
}
*x=s;
}
/*输入 字符串转化数字*/
void scanf1(int *x)
{
char ch[10];
int n,i,j=1,s=0;
gets(ch);//从键盘上读入字符串
for(i=strlen(ch)-1;-1!=i;i--)//测试字符串的长度,然后从前面开始取每个字符
{
n=ch[i]-'0';//原字符减去'0'字符,就得了相应的数值
if(n<0||n>9)//当数值不在0到9之间,就返回120,120在整个程序中无意义
{
*x=120;
return;
}
s+=n*j;//当输入两个以上的字符,就要对第二个字符乘j,j是不断乘10倍数
j*=10;
}
*x=s;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*显示提示录入子菜单的信息*/
int fen(int *people)
{
int k;
cls();
printf("\n\t\t\t欢迎进入成绩录入子菜单\n");
/*==========选择录入成绩的方式=======*/
printf("请选择录入成绩的方式\n");
printf("1 一次录入一个人的所有成绩\n");
printf("2 按科目录入\n");
printf("3 返回主菜单\n\n请选择:");
scanf1(&k);
if(3==k)return k;
while(k<1||k>3)
{
cls();
printf("\t\t\t欢迎进入成绩录入子菜单\n");
printf("警告:请重新选择录入成绩的方式\n");
printf("1 一次性把每个人的各科输完\n2 按科目输入\n3 返回主菜单\n\n请选择:");
scanf1(&k);
if(3==k)return k;
}
/*============输入人数==========*/
printf("请输入本班的人数,人数不能超过%d个: ",MAX);
scanf1(people);
while(*people<1||*people>MAX)
{
if(*people==0)
printf("警告:人数不可能是没有,请重新输入: ");
else if(*people>MAX)
printf("警告:人数超过最大数,请重新输入: ");
else
printf("警告:人数不可能是负数,请重新输入: ");
scanf1(people);
}
return k;//k是返回选择的方式
}
/*显示提示录入子菜单的信息*/
int fen(int *people)
{
int k;
cls();
printf("\n\t\t\t欢迎进入成绩录入子菜单\n");
/*==========选择录入成绩的方式=======*/
printf("请选择录入成绩的方式\n");
printf("1 一次录入一个人的所有成绩\n");
printf("2 按科目录入\n");
printf("3 返回主菜单\n\n请选择:");
scanf1(&k);
if(3==k)return k;
while(k<1||k>3)
{
cls();
printf("\t\t\t欢迎进入成绩录入子菜单\n");
printf("警告:请重新选择录入成绩的方式\n");
printf("1 一次性把每个人的各科输完\n2 按科目输入\n3 返回主菜单\n\n请选择:");
scanf1(&k);
if(3==k)return k;
}
/*============输入人数==========*/
printf("请输入本班的人数,人数不能超过%d个: ",MAX);
scanf1(people);
while(*people<1||*people>MAX)
{
if(*people==0)
printf("警告:人数不可能是没有,请重新输入: ");
else if(*people>MAX)
printf("警告:人数超过最大数,请重新输入: ");
else
printf("警告:人数不可能是负数,请重新输入: ");
scanf1(people);
}
return k;//k是返回选择的方式
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 输入子菜单 */
int importing(RECORD student[],int *people)//
{
int peo,i,k;//peo总人数 i是循环变量 k是fen函数返回的录入方式的值,1代表记录录入方式,2是单科录入方式,3直接返回
k=fen(&peo);//feo()函数是显示提示信息,继续把peo地址传到fen函数,feo()函数返回的K的值
*people=peo;//人数赋值
if(3==k)return 0;//直接返回主菜单
/*===========记录录入方式==========*/
if(1==k)
{
for(i=0;i<*people;i++)
{
student[i].num=3511101+i;//自动给学号赋值
student[i]=impor(student[i],'y');
}//调用录入函数,传单个的结构体的值,返回单个的结构体的全部值,y是在函数里相应输出学号,
}
/*==========单科录入方式==========*/
else
{
k=1;i=0;//k代表科目,i代表人数
while(k<9)
{
switch(k)
{
case 1: student[i].num=(3511101+i);//赋值学号
student[i].practical=luru(student[i].num,k,i,0);break;//函数调用里k,i主要是负责文字提示
case 2: student[i].english=luru(student[i].num,k,i,0);break;
case 3: student[i].math=luru(student[i].num,k,i,0);break;
case 4: student[i].computer_based=luru(student[i].num,k,i,0);break;
case 5: student[i].c=luru(student[i].num,k,i,0);break;
case 6: student[i].pe=luru(student[i].num,k,i,0);break;
case 7: student[i].mental_health=luru(student[i].num,k,i,0);break;
case 8: student[i].thinking=luru(student[i].num,k,i,0);break;
}//luru(a,b,c,d)单科录入函数,a学号输出,b科目代码,c科目输出提示的方式,d是否输出学号的提示0代表不输出
if(++i==*people)//当i与总人数相等时,k加1就跳到下一个科目,i又从零开始
{k++;i=0;}
}
}
for(i=0;i<*people;i++)
student[i].sum=sum(student[i]);//调用求和函数,
printf("\n成绩录入完毕!按任意键进入主菜单!");
return 1;
}
/* 输入子菜单 */
int importing(RECORD student[],int *people)//
{
int peo,i,k;//peo总人数 i是循环变量 k是fen函数返回的录入方式的值,1代表记录录入方式,2是单科录入方式,3直接返回
k=fen(&peo);//feo()函数是显示提示信息,继续把peo地址传到fen函数,feo()函数返回的K的值
*people=peo;//人数赋值
if(3==k)return 0;//直接返回主菜单
/*===========记录录入方式==========*/
if(1==k)
{
for(i=0;i<*people;i++)
{
student[i].num=3511101+i;//自动给学号赋值
student[i]=impor(student[i],'y');
}//调用录入函数,传单个的结构体的值,返回单个的结构体的全部值,y是在函数里相应输出学号,
}
/*==========单科录入方式==========*/
else
{
k=1;i=0;//k代表科目,i代表人数
while(k<9)
{
switch(k)
{
case 1: student[i].num=(3511101+i);//赋值学号
student[i].practical=luru(student[i].num,k,i,0);break;//函数调用里k,i主要是负责文字提示
case 2: student[i].english=luru(student[i].num,k,i,0);break;
case 3: student[i].math=luru(student[i].num,k,i,0);break;
case 4: student[i].computer_based=luru(student[i].num,k,i,0);break;
case 5: student[i].c=luru(student[i].num,k,i,0);break;
case 6: student[i].pe=luru(student[i].num,k,i,0);break;
case 7: student[i].mental_health=luru(student[i].num,k,i,0);break;
case 8: student[i].thinking=luru(student[i].num,k,i,0);break;
}//luru(a,b,c,d)单科录入函数,a学号输出,b科目代码,c科目输出提示的方式,d是否输出学号的提示0代表不输出
if(++i==*people)//当i与总人数相等时,k加1就跳到下一个科目,i又从零开始
{k++;i=0;}
}
}
for(i=0;i<*people;i++)
student[i].sum=sum(student[i]);//调用求和函数,
printf("\n成绩录入完毕!按任意键进入主菜单!");
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*计算总分*/
int sum(RECORD student)//传地址过来,返回总分
{
student.sum=student.practical+student.english+
student.math+student.computer_based+student.c+
student.pe+student.mental_health+student.thinking;
return student.sum;
}
/*计算总分*/
int sum(RECORD student)//传地址过来,返回总分
{
student.sum=student.practical+student.english+
student.math+student.computer_based+student.c+
student.pe+student.mental_health+student.thinking;
return student.sum;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 输出子菜单 */
void output(RECORD student[],int *people)
{
int i;
cls();//调用清屏函数
printf("\n\t\t\t欢迎进入成绩查看子菜单\n");
if(*people==0)
{
printf("您还没有录入成绩!\n按任意键进入主菜单!");
return;
}
for(i=0;i<*people;i++)
{
outpu(student[i],i);//调用单条记录输出,i为0时输出提示信息
}
printf("\n按任意键进入主菜单!");
}
/* 输出子菜单 */
void output(RECORD student[],int *people)
{
int i;
cls();//调用清屏函数
printf("\n\t\t\t欢迎进入成绩查看子菜单\n");
if(*people==0)
{
printf("您还没有录入成绩!\n按任意键进入主菜单!");
return;
}
for(i=0;i<*people;i++)
{
outpu(student[i],i);//调用单条记录输出,i为0时输出提示信息
}
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 添加子菜单 */
void add(RECORD student[],int *people)
{
int x,i,m,n=0,num;//x添加方式,i循环变量,n标志学号是否存在0表示不存在,nun学号
cls();
printf("\n\t\t\t欢迎进入成绩添加插入子菜单\n");
if(!(*people<MAX))//判断是否超过了最大范围
{
printf("警告:超过了最大限度!\n");
}
else
{
printf("请选择\n1 添加成绩 2 插入成绩\n请输入:");
scanf1(&x);
while(x<1||2<x)//只有当输入1和2才有效,其它数字都要重新输入
{
cls();
printf("警告:只能输入1或2,请重新输入!\n");
scanf1(&x);
}
if(x==1)//当X为1时,添加成绩
{
if(0==*people)
student[*people].num=3511101;//当人数为零时,就重新赋值为3511101
else
student[*people].num=student[*people-1].num+1;//学号增加1
student[*people]=impor(student[*people],'y');//调用录入函数
student[*people].sum=sum(student[*people]);//计算刚录入的总分
*people+=1;//总人数增加1
}
else//插入记录
{
cls();
printf("请输入学号:提示学号的范围是%d到%d\n",3511101,3511100+MAX);
scanf1(&num);
while(num<3511101||3511100+MAX<num)//判断学号的是否有效,如果不要这个范围内就重新输入
{
cls();
printf("警告:此学号超过了范围!提示学号的范围是%d到%d\n",3511101,3511100+MAX);
printf("请重新输入:");
scanf1(&num);
}
for(i=0;i<*people;i++)
if(num==student[i].num)//查找学号是否存在
{
cls();
printf("警告:此学号已经存在!");
n=1;//标示此学号已经存在
break;
}
if(0==n)
{
for(i=0;i<*people;i++)//查找学号所在的位置
if(num<student[i].num)
break;
for(m=*people;m>i;m--)//把后面的记录全部往后面移
{
student[m]=student[m-1];
}
student[i].num=num;
student[i]=impor(student[i],'y');//调用录入函数
student[i].sum=sum(student[i]);//计算刚录入的总分
*people+=1;//人数增加1
}
printf("\n成绩添加成功!");
}
}
printf("\n按任意键进入主菜单!");
return;
}
/* 添加子菜单 */
void add(RECORD student[],int *people)
{
int x,i,m,n=0,num;//x添加方式,i循环变量,n标志学号是否存在0表示不存在,nun学号
cls();
printf("\n\t\t\t欢迎进入成绩添加插入子菜单\n");
if(!(*people<MAX))//判断是否超过了最大范围
{
printf("警告:超过了最大限度!\n");
}
else
{
printf("请选择\n1 添加成绩 2 插入成绩\n请输入:");
scanf1(&x);
while(x<1||2<x)//只有当输入1和2才有效,其它数字都要重新输入
{
cls();
printf("警告:只能输入1或2,请重新输入!\n");
scanf1(&x);
}
if(x==1)//当X为1时,添加成绩
{
if(0==*people)
student[*people].num=3511101;//当人数为零时,就重新赋值为3511101
else
student[*people].num=student[*people-1].num+1;//学号增加1
student[*people]=impor(student[*people],'y');//调用录入函数
student[*people].sum=sum(student[*people]);//计算刚录入的总分
*people+=1;//总人数增加1
}
else//插入记录
{
cls();
printf("请输入学号:提示学号的范围是%d到%d\n",3511101,3511100+MAX);
scanf1(&num);
while(num<3511101||3511100+MAX<num)//判断学号的是否有效,如果不要这个范围内就重新输入
{
cls();
printf("警告:此学号超过了范围!提示学号的范围是%d到%d\n",3511101,3511100+MAX);
printf("请重新输入:");
scanf1(&num);
}
for(i=0;i<*people;i++)
if(num==student[i].num)//查找学号是否存在
{
cls();
printf("警告:此学号已经存在!");
n=1;//标示此学号已经存在
break;
}
if(0==n)
{
for(i=0;i<*people;i++)//查找学号所在的位置
if(num<student[i].num)
break;
for(m=*people;m>i;m--)//把后面的记录全部往后面移
{
student[m]=student[m-1];
}
student[i].num=num;
student[i]=impor(student[i],'y');//调用录入函数
student[i].sum=sum(student[i]);//计算刚录入的总分
*people+=1;//人数增加1
}
printf("\n成绩添加成功!");
}
}
printf("\n按任意键进入主菜单!");
return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 删除记录 */
void delet(RECORD student[],int *people)
{
int x;
cls();
printf("\n\t\t\t欢迎进入成绩删除子菜单\n");
if(0==*people)//判断总人数是否存在,如果没有一个人,就存在删除了
printf("还没有成绩,请输入成绩!");
else
{
x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
if(-1!=x)
{
if(1==identify(1))//调用确定函数,当返回1时表示要删除该条记录
{
*people-=1;//总人数减1
while(x<*people)
{
student[x]=student[x+1];//把后面的记录全部往前面移动
x++;
}
printf("删除成功!\n");
}
}
}
printf("\n按任意键进入主菜单!");
}
/* 删除记录 */
void delet(RECORD student[],int *people)
{
int x;
cls();
printf("\n\t\t\t欢迎进入成绩删除子菜单\n");
if(0==*people)//判断总人数是否存在,如果没有一个人,就存在删除了
printf("还没有成绩,请输入成绩!");
else
{
x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
if(-1!=x)
{
if(1==identify(1))//调用确定函数,当返回1时表示要删除该条记录
{
*people-=1;//总人数减1
while(x<*people)
{
student[x]=student[x+1];//把后面的记录全部往前面移动
x++;
}
printf("删除成功!\n");
}
}
}
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 查找记录 */
void find(RECORD student[],int *people)
{
int x;
cls();
printf("\n\t\t\t欢迎进入成绩查找子菜单\n");
if(0==*people)//判断总人数是否存在,如果没有一个人,就存在查找
printf("还没有成绩,无法查找,请输入成绩!");
else
{
x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
if(-1!=x)
{
outpu(student[x],0);//调用单条记录输出,0表示输出提示信息
}
}
printf("\n按任意键进入主菜单!");
}
/* 查找记录 */
void find(RECORD student[],int *people)
{
int x;
cls();
printf("\n\t\t\t欢迎进入成绩查找子菜单\n");
if(0==*people)//判断总人数是否存在,如果没有一个人,就存在查找
printf("还没有成绩,无法查找,请输入成绩!");
else
{
x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
if(-1!=x)
{
outpu(student[x],0);//调用单条记录输出,0表示输出提示信息
}
}
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*成绩修改子菜单*/
void modify(RECORD student[],int *people)
{
int x;
char c;
cls();
printf("\n\t\t\t欢迎进入成绩修改子菜单\n");
if(0==*people)//判断总人数是否存在,如果没有一个人,就存在修改
printf("还没有成绩,无法修改,请输入成绩!");
else
{
x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
if(-1!=x)
{
outpu(student[x],0);//显示出那条记录
if(1==identify(0))//调用确定函数,确定是否要删除本条记录
{
scanf("%c",&c);//用于接收回车字符
student[x]=impor(student[x],'n');//调用单条记录录入函数
student[x].sum=sum(student[x]);//重新计算总分
printf("\n修改在成功!");
}
else//当你输入N时,
printf("\n修改失败!");
}
}
printf("\n按任意键进入主菜单!");
}
/*成绩修改子菜单*/
void modify(RECORD student[],int *people)
{
int x;
char c;
cls();
printf("\n\t\t\t欢迎进入成绩修改子菜单\n");
if(0==*people)//判断总人数是否存在,如果没有一个人,就存在修改
printf("还没有成绩,无法修改,请输入成绩!");
else
{
x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
if(-1!=x)
{
outpu(student[x],0);//显示出那条记录
if(1==identify(0))//调用确定函数,确定是否要删除本条记录
{
scanf("%c",&c);//用于接收回车字符
student[x]=impor(student[x],'n');//调用单条记录录入函数
student[x].sum=sum(student[x]);//重新计算总分
printf("\n修改在成功!");
}
else//当你输入N时,
printf("\n修改失败!");
}
}
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 统计各分数段人数函数调用 */
void statistical(RECORD student[],int *people)
{
int i,j, a[8][5]={0};//每一行存放一科成绩,每一列存在一个等级
cls();
printf("\n\t\t\t欢迎进入成绩统计子菜单\n");
if(0==*people)//如果是0个人就直接返回
{
printf("还没有成绩,无法统计,请输入成绩!");
printf("\n按任意键进入主菜单!");
return;
}
for(i=0;i<*people;i++)
{
sta(student[i].practical,a[0]);//调用函数,一次只传一个人一科成绩
sta(student[i].english,a[1]);
sta(student[i].math,a[2]);
sta(student[i].computer_based,a[3]);
sta(student[i].c,a[4]);
sta(student[i].pe,a[5]);
sta(student[i].mental_health,a[6]);
sta(student[i].thinking,a[7]);
}
printf("\t各分数段人数 ");
printf("100-90 90-80 80-70 70-60 60以下\n");
for(i=0;i<8;i++)
{
for(j=0;j<5;j++)
{
if(j==0)
{
switch(i)
{
case 0: printf("\t 应用文 ");break;
case 1: printf("\t\t英语 ");break;
case 2: printf("\t\t数学 ");break;
case 4: printf("\t C语言 ");break;
case 3: printf("\t 计算机基础 ");break;
case 5: printf("\t\t体育 ");break;
case 6: printf("\t 心理健康 ");break;
case 7:printf("\t 思想道德 ");break;
}
}
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n按任意键进入主菜单!");
}
/* 统计各分数段人数函数调用 */
void statistical(RECORD student[],int *people)
{
int i,j, a[8][5]={0};//每一行存放一科成绩,每一列存在一个等级
cls();
printf("\n\t\t\t欢迎进入成绩统计子菜单\n");
if(0==*people)//如果是0个人就直接返回
{
printf("还没有成绩,无法统计,请输入成绩!");
printf("\n按任意键进入主菜单!");
return;
}
for(i=0;i<*people;i++)
{
sta(student[i].practical,a[0]);//调用函数,一次只传一个人一科成绩
sta(student[i].english,a[1]);
sta(student[i].math,a[2]);
sta(student[i].computer_based,a[3]);
sta(student[i].c,a[4]);
sta(student[i].pe,a[5]);
sta(student[i].mental_health,a[6]);
sta(student[i].thinking,a[7]);
}
printf("\t各分数段人数 ");
printf("100-90 90-80 80-70 70-60 60以下\n");
for(i=0;i<8;i++)
{
for(j=0;j<5;j++)
{
if(j==0)
{
switch(i)
{
case 0: printf("\t 应用文 ");break;
case 1: printf("\t\t英语 ");break;
case 2: printf("\t\t数学 ");break;
case 4: printf("\t C语言 ");break;
case 3: printf("\t 计算机基础 ");break;
case 5: printf("\t\t体育 ");break;
case 6: printf("\t 心理健康 ");break;
case 7:printf("\t 思想道德 ");break;
}
}
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 计算最值 */
void most(RECORD student[],int people)
{
RECORD stu[2];//stu[0]存在最大值,stu[1]存在最小值
int i;
cls();
printf("\n\t\t欢迎进入查看成绩最高分与最低分子菜单\n");
if(0==people)//如果是0个人就直接返回
{
printf("还没有成绩,无法查看,请输入成绩!");
printf("\n按任意键进入主菜单!");
return;
}
stu[0]=stu[1]=student[0];//把第一记录初始化为最大、最小
/*====查找最大、最小的各科的分数=====*/
for(i=1;i<people;i++)
{
if(stu[0].practical<student[i].practical)
stu[0].practical=student[i].practical;
if(stu[1].practical>student[i].practical)
stu[1].practical=student[i].practical;
if(stu[0].english<student[i].english)
stu[0].english=student[i].english;
if(stu[1].english>student[i].english)
stu[1].english=student[i].english;
if(stu[0].math<student[i].math)
stu[0].math=student[i].math;
if(stu[1].math>student[i].math)
stu[1].math=student[i].math;
if(stu[0].computer_based<student[i].computer_based)
stu[0].computer_based=student[i].computer_based;
if(stu[1].computer_based>student[i].computer_based)
stu[1].computer_based=student[i].computer_based;
if(stu[0].c<student[i].c)
stu[0].c=student[i].c;
if(stu[1].c>student[i].c)
stu[1].c=student[i].c;
if(stu[0].pe<student[i].pe)
stu[0].pe=student[i].pe;
if(stu[1].pe>student[i].pe)
stu[1].pe=student[i].pe;
if(stu[0].mental_health<student[i].mental_health)
stu[0].mental_health=student[i].mental_health;
if(stu[1].mental_health>student[i].mental_health)
stu[1].mental_health=student[i].mental_health;
if(stu[0].thinking<student[i].thinking)
stu[0].thinking=student[i].thinking;
if(stu[1].thinking>student[i].thinking)
stu[1].thinking=student[i].thinking;
if(stu[0].sum<student[i].sum)
stu[0].sum=student[i].sum;
if(stu[1].sum>student[i].sum)
stu[1].sum=student[i].sum;
}
printf("应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德 总分\n");
printf("单科最高分\n");
printf(PFORMAT,stu[0].practical,stu[0].english,stu[0].math,
stu[0].computer_based,stu[0].c,stu[0].pe,stu[0].mental_health,
stu[0].thinking,stu[0].sum);
printf("单科最低分\n");
printf(PFORMAT,stu[1].practical,stu[1].english,stu[1].math,
stu[1].computer_based,stu[1].c,stu[1].pe,stu[1].mental_health,
stu[1].thinking,stu[1].sum);
printf("\n按任意键进入主菜单!");
}
/* 计算最值 */
void most(RECORD student[],int people)
{
RECORD stu[2];//stu[0]存在最大值,stu[1]存在最小值
int i;
cls();
printf("\n\t\t欢迎进入查看成绩最高分与最低分子菜单\n");
if(0==people)//如果是0个人就直接返回
{
printf("还没有成绩,无法查看,请输入成绩!");
printf("\n按任意键进入主菜单!");
return;
}
stu[0]=stu[1]=student[0];//把第一记录初始化为最大、最小
/*====查找最大、最小的各科的分数=====*/
for(i=1;i<people;i++)
{
if(stu[0].practical<student[i].practical)
stu[0].practical=student[i].practical;
if(stu[1].practical>student[i].practical)
stu[1].practical=student[i].practical;
if(stu[0].english<student[i].english)
stu[0].english=student[i].english;
if(stu[1].english>student[i].english)
stu[1].english=student[i].english;
if(stu[0].math<student[i].math)
stu[0].math=student[i].math;
if(stu[1].math>student[i].math)
stu[1].math=student[i].math;
if(stu[0].computer_based<student[i].computer_based)
stu[0].computer_based=student[i].computer_based;
if(stu[1].computer_based>student[i].computer_based)
stu[1].computer_based=student[i].computer_based;
if(stu[0].c<student[i].c)
stu[0].c=student[i].c;
if(stu[1].c>student[i].c)
stu[1].c=student[i].c;
if(stu[0].pe<student[i].pe)
stu[0].pe=student[i].pe;
if(stu[1].pe>student[i].pe)
stu[1].pe=student[i].pe;
if(stu[0].mental_health<student[i].mental_health)
stu[0].mental_health=student[i].mental_health;
if(stu[1].mental_health>student[i].mental_health)
stu[1].mental_health=student[i].mental_health;
if(stu[0].thinking<student[i].thinking)
stu[0].thinking=student[i].thinking;
if(stu[1].thinking>student[i].thinking)
stu[1].thinking=student[i].thinking;
if(stu[0].sum<student[i].sum)
stu[0].sum=student[i].sum;
if(stu[1].sum>student[i].sum)
stu[1].sum=student[i].sum;
}
printf("应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德 总分\n");
printf("单科最高分\n");
printf(PFORMAT,stu[0].practical,stu[0].english,stu[0].math,
stu[0].computer_based,stu[0].c,stu[0].pe,stu[0].mental_health,
stu[0].thinking,stu[0].sum);
printf("单科最低分\n");
printf(PFORMAT,stu[1].practical,stu[1].english,stu[1].math,
stu[1].computer_based,stu[1].c,stu[1].pe,stu[1].mental_health,
stu[1].thinking,stu[1].sum);
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 平均值 */
void ave(RECORD student[],int people)
{
float average[9];
int i;
cls();
printf("\n\t\t\t欢迎进入计算平均分子菜单\n");
if(0==people)//如果是0个人就直接返回
{
printf("还没有成绩,无法计算,请输入成绩!");
printf("\n按任意键进入主菜单!");
return;
}
/*===把第一条记录初始化====*/
average[0]=student[0].practical;
average[1]=student[0].english;
average[2]=student[0].math;
average[3]=student[0].computer_based;
average[4]=student[0].c;
average[5]=student[0].pe;
average[6]=student[0].mental_health;
average[7]=student[0].thinking;
average[8]=student[0].sum;
/*========求和========*/
for(i=1;i<people;i++)
{
average[0]+=student[i].practical;
average[1]+=student[i].english;
average[2]+=student[i].math;
average[3]+=student[i].computer_based;
average[4]+=student[i].c;
average[5]+=student[i].pe;
average[6]+=student[i].mental_health;
average[7]+=student[i].thinking;
average[8]=student[i].sum;
}
/*========总分数除总人数==========*/
average[0]/=people;
average[1]/=people;
average[2]/=people;
average[3]/=people;
average[4]/=people;
average[5]/=people;
average[6]/=people;
average[7]/=people;
average[8]/=people;
printf("应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德 总分\n");
printf(PF,average[0],average[1],average[2],average[3],average[4],
average[5],average[6],average[7],average[8],average[8]);
printf("\n按任意键进入主菜单!");
/* 平均值 */
void ave(RECORD student[],int people)
{
float average[9];
int i;
cls();
printf("\n\t\t\t欢迎进入计算平均分子菜单\n");
if(0==people)//如果是0个人就直接返回
{
printf("还没有成绩,无法计算,请输入成绩!");
printf("\n按任意键进入主菜单!");
return;
}
/*===把第一条记录初始化====*/
average[0]=student[0].practical;
average[1]=student[0].english;
average[2]=student[0].math;
average[3]=student[0].computer_based;
average[4]=student[0].c;
average[5]=student[0].pe;
average[6]=student[0].mental_health;
average[7]=student[0].thinking;
average[8]=student[0].sum;
/*========求和========*/
for(i=1;i<people;i++)
{
average[0]+=student[i].practical;
average[1]+=student[i].english;
average[2]+=student[i].math;
average[3]+=student[i].computer_based;
average[4]+=student[i].c;
average[5]+=student[i].pe;
average[6]+=student[i].mental_health;
average[7]+=student[i].thinking;
average[8]=student[i].sum;
}
/*========总分数除总人数==========*/
average[0]/=people;
average[1]/=people;
average[2]/=people;
average[3]/=people;
average[4]/=people;
average[5]/=people;
average[6]/=people;
average[7]/=people;
average[8]/=people;
printf("应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德 总分\n");
printf(PF,average[0],average[1],average[2],average[3],average[4],
average[5],average[6],average[7],average[8],average[8]);
printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 单条记录录入 */
RECORD impor(RECORD student,char ch)//
{
if('y'==ch)
{
cls();
printf("学号:%d\n",student.num);
}//luru(a,b,c,d)单科录入函数,a学号上面已经输出,b科目代码,c科目输出提示的方式,d是否输出学号的提示
student.practical=luru(0,1,1,1);
student.english=luru(0,2,1,1);
student.math=luru(0,3,1,1);
student.computer_based=luru(0,4,1,1);
student.c=luru(0,5,1,1);
student.pe=luru(0,6,1,1);
student.mental_health=luru(0,7,1,1);
student.thinking=luru(0,8,1,1);
return student;
}
/* 单条记录录入 */
RECORD impor(RECORD student,char ch)//
{
if('y'==ch)
{
cls();
printf("学号:%d\n",student.num);
}//luru(a,b,c,d)单科录入函数,a学号上面已经输出,b科目代码,c科目输出提示的方式,d是否输出学号的提示
student.practical=luru(0,1,1,1);
student.english=luru(0,2,1,1);
student.math=luru(0,3,1,1);
student.computer_based=luru(0,4,1,1);
student.c=luru(0,5,1,1);
student.pe=luru(0,6,1,1);
student.mental_health=luru(0,7,1,1);
student.thinking=luru(0,8,1,1);
return student;
}
/////////////////////////////////////////////////////
/* 录入各科 */
int luru(int num,int k,int i,int ii)//学号 科目 提示科目
{
int x;//x是从键盘得到的一个分数,并返回
if(0==i)
cls();
if(0==ii)
{
if(0==i)
switch(k)
{
case 1: printf("请输入应用文的成绩\n");break;
case 2: printf("请输入英语的成绩\n");break;
case 3: printf("请输入数学的成绩\n");break;
case 4: printf("请输入计算机基础的成绩\n");break;
case 5: printf("请输入C语言的成绩\n");break;
case 6: printf("请输入体育的成绩\n");break;
case 7: printf("请输入心理健康的成绩\n");break;
case 8: printf("请输入思想道德与法律基础的成绩\n");break;
}
}
else
{
switch(k)
{
case 1: printf("请输入应用文的成绩:");break;
case 2: printf("请输入英语的成绩:");break;
case 3: printf("请输入数学的成绩:");break;
case 4: printf("请输入计算机基础的成绩:");break;
case 5: printf("请输入C语言的成绩:");break;
case 6: printf("请输入体育的成绩:");break;
case 7: printf("请输入心理健康的成绩:");break;
case 8: printf("请输入思想道德与法律基础的成绩:");break;
}
}
if(0==ii)
printf("学号是%d的成绩:",num);
scanf1(&x);
while(x>100||x<0)
{
printf("成绩错误!请重新输入:");
scanf1(&x);
}
return x;
}
/* 录入各科 */
int luru(int num,int k,int i,int ii)//学号 科目 提示科目
{
int x;//x是从键盘得到的一个分数,并返回
if(0==i)
cls();
if(0==ii)
{
if(0==i)
switch(k)
{
case 1: printf("请输入应用文的成绩\n");break;
case 2: printf("请输入英语的成绩\n");break;
case 3: printf("请输入数学的成绩\n");break;
case 4: printf("请输入计算机基础的成绩\n");break;
case 5: printf("请输入C语言的成绩\n");break;
case 6: printf("请输入体育的成绩\n");break;
case 7: printf("请输入心理健康的成绩\n");break;
case 8: printf("请输入思想道德与法律基础的成绩\n");break;
}
}
else
{
switch(k)
{
case 1: printf("请输入应用文的成绩:");break;
case 2: printf("请输入英语的成绩:");break;
case 3: printf("请输入数学的成绩:");break;
case 4: printf("请输入计算机基础的成绩:");break;
case 5: printf("请输入C语言的成绩:");break;
case 6: printf("请输入体育的成绩:");break;
case 7: printf("请输入心理健康的成绩:");break;
case 8: printf("请输入思想道德与法律基础的成绩:");break;
}
}
if(0==ii)
printf("学号是%d的成绩:",num);
scanf1(&x);
while(x>100||x<0)
{
printf("成绩错误!请重新输入:");
scanf1(&x);
}
return x;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 单条记录输出 */
/* 单条记录输出 */
void outpu(RECORD student,int i)//接收结构体的变量,i是否输出提示信息
{
if(0==i)
{
printf("\n 学号 应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德 总分\n");
}
printf(IFORMAT,student.num,student.practical,student.english,
student.math,student.computer_based,student.c,student.pe,
student.mental_health,student.thinking,student.sum);
}
{
if(0==i)
{
printf("\n 学号 应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德 总分\n");
}
printf(IFORMAT,student.num,student.practical,student.english,
student.math,student.computer_based,student.c,student.pe,
student.mental_health,student.thinking,student.sum);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/*查找学号*/
int findnum(RECORD student[],int people)//返回是数组的下标
{
int i,x;
printf("请输入学号:提示学号的范围是%d到%d\n",3511101,3511100+MAX);
scanf1(&x);
for(i=0;i<people;i++)
{
if(x==student[i].num)
{
return i;
}
}
printf("警告:没有这个学号!");
return -1;
}
/*查找学号*/
int findnum(RECORD student[],int people)//返回是数组的下标
{
int i,x;
printf("请输入学号:提示学号的范围是%d到%d\n",3511101,3511100+MAX);
scanf1(&x);
for(i=0;i<people;i++)
{
if(x==student[i].num)
{
return i;
}
}
printf("警告:没有这个学号!");
return -1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/* 确定 */
int identify(int i)//i为1显示删除 0修改 返回是1或0
{
char ch[10];
if(1==i)
printf("确定要删除记录吗?\n");
else
printf("确定要修改记录吗?\n");
printf("请输入Y或N: ");
scanf("%s",ch);
while(!(ch[0]=='y'||ch[0]=='n'||ch[0]=='Y'||ch[0]=='N'))
{
printf("警告:只能输入Y或N: ");
scanf("%s",ch);
}
if('Y'==ch[0]||'y'==ch[0])
return 1;
else
return 0;
}
/* 确定 */
int identify(int i)//i为1显示删除 0修改 返回是1或0
{
char ch[10];
if(1==i)
printf("确定要删除记录吗?\n");
else
printf("确定要修改记录吗?\n");
printf("请输入Y或N: ");
scanf("%s",ch);
while(!(ch[0]=='y'||ch[0]=='n'||ch[0]=='Y'||ch[0]=='N'))
{
printf("警告:只能输入Y或N: ");
scanf("%s",ch);
}
if('Y'==ch[0]||'y'==ch[0])
return 1;
else
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 统计各分数段人数函数 */
void sta(int x,int a[])
{
switch(x/10)
{
case 10: case 9: a[0]+=1; break;
case 8: a[1]+=1;break;
case 7: a[2]+=1;break;
case 6: a[3]+=1;break;
default: a[4]+=1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 文件保存 */
void save_file(RECORD student[],int people)
{
FILE *fp;
int i;
cls();
printf("\n\t\t\t欢迎进入保存文件子菜单\n");
if((fp=fopen(".\\成绩.txt","wb"))==NULL)
{
printf("文件新建失败!\n");
printf("\n按任意键进入主菜单!");
return;
}
for(i=0;i<people;i++)
{
fwrite(&student[i],sizeof(RECORD),1,fp);
/* 统计各分数段人数函数 */
void sta(int x,int a[])
{
switch(x/10)
{
case 10: case 9: a[0]+=1; break;
case 8: a[1]+=1;break;
case 7: a[2]+=1;break;
case 6: a[3]+=1;break;
default: a[4]+=1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 文件保存 */
void save_file(RECORD student[],int people)
{
FILE *fp;
int i;
cls();
printf("\n\t\t\t欢迎进入保存文件子菜单\n");
if((fp=fopen(".\\成绩.txt","wb"))==NULL)
{
printf("文件新建失败!\n");
printf("\n按任意键进入主菜单!");
return;
}
for(i=0;i<people;i++)
{
fwrite(&student[i],sizeof(RECORD),1,fp);
}
fclose(fp);
printf("文件保存成功!\n");
printf("提示:文件保存在当前目录下文件名是成绩.txt,请勿删除!");
printf("\n按任意键进入主菜单!");
}
fclose(fp);
printf("文件保存成功!\n");
printf("提示:文件保存在当前目录下文件名是成绩.txt,请勿删除!");
printf("\n按任意键进入主菜单!");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* 文件打开 */
void open_file()
{
RECORD student[MAX];
FILE *fp;
int i,n=1;
cls();
printf("\n\t\t\t欢迎进入打开文件子菜单\n");
/* 文件打开 */
void open_file()
{
RECORD student[MAX];
FILE *fp;
int i,n=1;
cls();
printf("\n\t\t\t欢迎进入打开文件子菜单\n");
if((fp=fopen(".\\成绩.txt","rb"))==NULL)
{
printf("文件打开失败!\n");
printf("\n按任意键进入主菜单!");
return;
}
n=0;
while(!feof(fp))
{
fread(&student[n],sizeof(RECORD),1,fp);
n++;
}
fclose(fp);
for(i=0;i<n-1;i++)
outpu(student[i],i);
printf("\n按任意键进入主菜单!");
}
{
printf("文件打开失败!\n");
printf("\n按任意键进入主菜单!");
return;
}
n=0;
while(!feof(fp))
{
fread(&student[n],sizeof(RECORD),1,fp);
n++;
}
fclose(fp);
for(i=0;i<n-1;i++)
outpu(student[i],i);
printf("\n按任意键进入主菜单!");
}