功能摘要
(1)按学期、按班级完成对学生成绩的录入。
(2)按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行 排序
(3)能查询学生成绩,不及格科目及学生名单
(4)能按班级输出学生的成绩单
(5)能按学号删除学生纪录,成绩等。
(6)将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件中(txt文 件)。
(7)添加了一个界面可显示以保存的数据里面已有的学年、班级,方便查询
(8)添加可自定义界面背景、字体颜色的功能
程序界面浏览
结构体的定义
typedef struct person //定义结构体
{
char num[15]; //学号
char name[20]; //姓名
float chinese; //语文成绩
float en; //英语成绩
float math; //数学成绩
float history; //历史成绩
float physics; //物理成绩
int term; //学期
int classnum; //班级
float sum; //总分
float average; //平均分
}person;
界面的函数封装
减少代码的行数,方便调用,避免不停地转移光标
void no_sql() //数据库无信息ui界面
{
system("cls");
toxy(45,8);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ 数据库无信息! ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ 正在返回... ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ ┃");
toxy(45,15);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
Sleep(1000);
}
void printf_ui(char str[],int line,char str1[],int line1,int flag) //自定义界面输出内容
{
if(flag==1)
{
system("cls");
}
toxy(45,8);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ ┃");
toxy(71,12);
printf("┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(45,line);
printf("┃ %s",str);
toxy(45,line1);
printf("┃ %s",str1);
toxy(56,14);
}
void printf_change(char str[],int line,char str1[],int line1,int flag) //只改变界面某行内容
{
if(flag==1)
{
system("cls");
}
toxy(45,line);
printf(" %s",str);
toxy(45,line1);
printf(" %s",str1);
toxy(56,14);
}
void printf_title() //学生界面
{
system("cls");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 学年 班级 姓名 学号 语文 英语 数学 历史 物理 总分 平均分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
void printf_data(struct person per[],int flag) //成绩输出界面
{
for(int i=0;i<flag;i++)
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
系统已有数据显示界面
void read_sql(struct person per[],int n)
{
int flag=12,i,j,k;
toxy(75,6);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(75,7);
printf("┃ ┃");
toxy(75,8);
printf("┃ 数据库中可查询数据: ┃");
toxy(75,9);
printf("┃ ┃");
toxy(75,10);
printf("┃ 已有学年,班级: ┃");
toxy(75,11);
printf("┃ ┃");
toxy(75,12);
printf("┃ ┃");
toxy(75,13);
printf("┃ ┃");
toxy(75,14);
printf("┃ ┃");
toxy(75,15);
printf("┃ ┃");
toxy(75,16);
printf("┃ ┃");
toxy(75,17);
printf("┃ ┃");
toxy(75,18);
printf("┃ ┃");
toxy(75,19);
//printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(75,12);
for(i=0;i<n;i++)
{
printf("┃ %d %d ┃",per[i].term,per[i].classnum);
for(i=1;per[i].term!=0;i++)
{
k = 0;
for(j=0;j!=i;j++)
{
if(per[i].term==per[j].term && per[i].classnum==per[j].classnum)
{
k = 1;
break;
}
}
if(k==0)
{
toxy(75,++flag);
printf("┃ %d %d ┃",per[i].term,per[i].classnum);
}
}
}
toxy(75,++flag);
printf("┃ ┃");
toxy(75,++flag);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
}
系统菜单自定义
void system_menu()
{
short back_Color;
short text_Color;
printf_ui("系统背景字体颜色修改:",10," 请输入字体颜色代码:",12,1);
printf_change("0 = 黑色 ,1 = 蓝色 ,2 = 绿色 ,3 = 湖蓝色 ",18, "4 = 红色 ,5 = 紫色 ,6 = 黄色 ,7 = 白色 ",19,0);
printf_change("8 = 灰色 ,9 = 淡蓝色 ,10 = 淡绿色 ,11 = 淡浅绿色 ",20,"12 = 淡红色 ,13 = 淡紫色 ,14 = 淡黄色 ,15 = 亮白色 ",21,0);
scanf("%d",&text_Color);
printf_ui("系统背景字体颜色修改:",10," 请输入背景颜色代码:",12,0);
scanf("%d",&back_Color);
char command[9]="color 3A";
if(text_Color>9&&text_Color<16)
{
command[7]=text_Color-10+'A';
}
else
{
command[7]='0'+text_Color; //将textColor变量改为字符型
}
if(back_Color>9&&back_Color<16)
{
command[6]=back_Color-10+'A';
}
else
{
command[6]='0'+back_Color; //将backColor变量改为字符型
}
system(command);
toxy(56,14);
Sleep(1000);
return;
}
成绩录入功能
void add() //成绩的录入与添加函数
{
FILE *fp;
int i=0,n=0;
char sign='y'; //首先定义sign='y'
system("cls"); //清屏函数 系统中调用
person p[200] ;
while(sign!='n'&&sign!='N') //其实只有当输入N或n时才跳出循环
{
printf_ui(" 学生信息添加",10,"请输入学年(格式20xx):",12,1);
toxy(56,14);
scanf("%d",&p[i].term);
printf_ui(" 学生信息添加",10," 请输入班级:",12,1);
toxy(56,14);
scanf("%d",&p[i].classnum);
printf_ui(" 学生信息添加",10," 请输入姓名:",12,1);
toxy(56,14);
scanf("%s",&p[i].name);
printf_ui(" 学生信息添加",10," 请输入学号:",12,1);
toxy(56,14);
scanf("%s",&p[i].num);
printf_ui(" 学生信息添加",10," 请输入语文:",12,1);
toxy(56,14);
scanf("%f",&p[i].chinese);
printf_ui(" 学生信息添加",10," 请输入英语:",12,1);
toxy(56,14);
scanf("%f",&p[i].en);
printf_ui(" 学生信息添加",10," 请输入数学:",12,1);
toxy(56,14);
scanf("%f",&p[i].math);
printf_ui(" 学生信息添加",10," 请输入历史:",12,1);
toxy(56,14);
scanf("%f",&p[i].history);
printf_ui(" 学生信息添加",10," 请输入物理:",12,1);
toxy(56,14);
scanf("%f",&p[i].physics);
printf_ui(" 是否继续添加? ",10," 输n退出,否则继续:",12,1);
toxy(56,14);
scanf("\t%c",&sign);
p[i].sum = p[i].chinese + p[i].en + p[i].history + p[i].math + p[i].physics;
p[i].average = p[i].sum / 5;
i++;
n=n+1;
printf_ui(" ",10," 正在保存... ",11,1);
Sleep(1000);
system( "cls ");
}
if((fp=fopen("studata.txt","a"))==NULL) //以2进制形式进行文件尾追加//
{
no_sql();
system("pause");
return; //如果文件出现错误 就返回
}
for(i=0;i<n;i++)
{
fprintf(fp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average); //以2进制形式写入文件中//一次写入一个数组//
}
fclose(fp); //关闭文件
system("pasue");
}
学生成绩总览
void scan() //显示记录 进行全面信息浏览
{
person per[200];
FILE *fp;
struct person temp; //定义临时数组用于交换时存放数组信息用于后面的交换//
float sum; //总分
float s[200];
int i=0,n=0;
int j=0,k,t;
int m,term,flag,classnum;
system("cls");
if((fp=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
system("pause");
return;
}
while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
{
i++;
n=n+1;
}
fclose(fp);
read_sql(per,n);
toxy(45,8);
printf_ui(" 班级成绩查询",10,"请输入学年(格式20xx):",12,0);
toxy(56,14);
scanf("%d",&term);
printf_ui(" 班级成绩查询",10," 请输入班级:",12,0);
toxy(56,14);
scanf("%d",&classnum);
system("cls");
for(i=0;i<n;i++)
{
if(per[i].term==term&&per[i].classnum==classnum)
{
per[flag]=per[i];
flag++;
}
}
printf_title();
printf_data(per,flag);
system("pause");
system("cls");
}
学生信息查询
void query() //学生信息的不同方式查询
{
system("cls");
person p[200];
FILE *fp1;
int i=0;
int n=0;
char m;
toxy(45,2);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,3);
printf("┃ ┃");
toxy(45,4);
printf("┃ 学生成绩查询 ┃");
toxy(45,5);
printf("┃ ┃");
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(45,7);
printf("┃ ┃");
toxy(45,8);
printf("┃ [ 1 ].模糊查询 ┃");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ [ 2 ].姓名查询 ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ [ 3 ].学号查询 ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ [ 4 ].返回 ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(64,6);
scanf("%c",&m);
while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='0')
{
toxy(45,4);
printf("┃ 学生成绩查询 ┃");
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(64,6);
scanf("%c",&m);
}
if((fp1=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
return;
}
while(fscanf(fp1,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
{
i++;
n=n+1;
}
if(m=='1') //模糊查询
{
char s[3]; //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出
int i=0;
system("cls");
printf_ui(" 学生成绩查询",10," 请输入学生的姓:",12,1);
scanf("%s",s);
printf_title();
for(i=0;i<n;i++) //文件信息已经读取到数组中 此处进行循环用于下一语句的查找
{
if(p[i].name[0]==s[0]&&p[i].name[1]==s[1]) //比较per[i].name与所输入的前俩个字符是否相同//
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
}
if(m=='2') //姓名查询
{
system("cls");
char s[20];
int i=0;
printf_ui(" 学生成绩查询",10," 请输入学生的姓名:",12,1);
scanf("\t%s",s);
printf_title();
for(i=0;i<n;i++) //文件信息已经读取到数组中 此处进行循环用于下一语句的查找
{
if((strcmp(p[i].name,s))==0) //比较per[i].name与所输入的前俩个字符是否相同//
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
i=0;
while(strcmp(p[i].name,s)!=0&&i<n) i++; //比较per[i].name与所输入学号是否相同//
if(i==n)
{
no_sql();
return;
}
}
if(m=='3') //学号查询
{
char s[15];
int i=0;
toxy(45,8);
printf_ui(" 学生成绩查询",10," 请输入学生的学号:",12,1);
scanf("\t%s",s);
printf_title();
for(i=0;i<n;i++) //文件信息已经读取到数组中 此处进行循环用于下一语句的查找
{
if((strcmp(p[i].num,s))==0) //比较per[i].name与所输入的前俩个字符是否相同//
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
i=0;
while(strcmp(p[i].num,s)!=0&&i<n) i++; //比较per[i].name与所输入学号是否相同//
if(i==n)
{
no_sql();
return;
}
}
fclose(fp1);
toxy(50,18);
system("pause");
}
学生成绩排名
void date() //查询排名
{
person per[200];
FILE *fp;
struct person temp; //定义临时数组用于交换时存放数组信息用于后面的交换//
float sum,pass=60; //总分
float s[200];
int i=0,n=0;
int j=0,k,t;
int term,flag,classnum,flagg;
char m;
system("cls");
if((fp=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
return;
}
while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
{
i++;
n=n+1;
}
fclose(fp);
toxy(45,2);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,3);
printf("┃ ┃");
toxy(45,4);
printf("┃ 学生成绩排名 ┃");
toxy(45,5);
printf("┃ ┃");
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(45,7);
printf("┃ ┃");
toxy(45,8);
printf("┃ [ 1 ].语文 ┃");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ [ 2 ].英语 ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ [ 3 ].数学 ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ [ 4 ].历史 ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┃ [ 5 ].物理 ┃");
toxy(45,17);
printf("┃ ┃");
toxy(45,18);
printf("┃ [ 6 ].总分 ┃");
toxy(45,19);
printf("┃ ┃");
toxy(45,20);
printf("┃ [ 7 ].各科班级平均分 ┃");
toxy(45,21);
printf("┃ ┃");
toxy(45,22);
printf("┃ [ 8 ].不及格同学 ┃");
toxy(45,23);
printf("┃ ┃");
toxy(45,24);
printf("┃ [ 0 ].返回上级 ┃");
toxy(45,25);
printf("┃ ┃");
toxy(45,26);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(64,6);
scanf("%c",&m);
while(m!='0'&&m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7'&&m!='8')
{
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(64,6);
scanf("%c",&m);
}
if(m=='0')
{
return;
}
read_sql(per,n);
printf_ui(" 学生成绩排名",10,"请输入学年(格式20xx):",12,0);
scanf("%d",&term);
printf_ui(" 学生成绩排名",10," 请输入班级:",12,0);
scanf("%d",&classnum);
system("cls");
for(i=0;i<n;i++) //选择符合条件的班级
{
if(per[i].term==term&&per[i].classnum==classnum)
{
per[flag]=per[i];
flag++;
}
}
if(m=='2')
{
for(int i=0;i<flag-1;i++) //采用冒泡法进行排序//
{
k=i;
for(j=i+1;j<flag;j++)
{
if(per[j].en>per[k].en) //排序//比较大小//
{
k=j;
}
}
temp=per[k];per[k]=per[i];per[i]=temp; //当符合条件时进行数据交换//
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='3')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].math>per[k].math)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='1')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].chinese>per[k].chinese)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='4')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].history>per[k].history)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='5')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].physics>per[k].physics)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='6')
{
for(int i=0;i<flag-1;i++) //采用冒泡法进行排序//
{
k=i;
for(j=i+1;j<flag;j++)
{
if(per[j].sum>per[k].sum) //排序//比较大小//
{
k=j;
}
}
temp=per[k];per[k]=per[i];per[i]=temp; //当符合条件时进行数据交换//
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='7') //各科班级平均分
{
for(i=0;i<flag;i++)
{
s[0]=per[i].chinese+s[0];
s[1]=per[i].en+s[1];
s[2]=per[i].math+s[2];
s[3]=per[i].history+s[3];
s[4]=per[i].physics+s[4];
}
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 语文 英语 数学 历史 物理 \n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" %.1f %.1f %.1f %.1f %.1f \n",s[0]/flag,s[1]/flag,s[2]/flag,s[3]/flag,s[4]/flag);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
system("pause");
}
if(m=='8')
{
printf_title();
for(int i=0;i<flag;i++)
{
if(per[i].chinese<pass||per[i].en<pass||per[i].math<pass||per[i].history<pass||per[i].physics<pass)
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
system("pause");
}
}
学生数据删除
void delet() //数据删除
{
person p[200];
FILE *fp;
char s[10];
int i=0,n=0;
if((fp=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
return;
}
while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
{
i++;
n=n+1;
}
fclose(fp);
system("cls");
printf_ui(" 学生数据删除",10," 请输入学号:",12,1);
scanf("%s",s);
i=0;
while(strcmp(p[i].num,s)!=0&&i<n)
{
i++;
} //进行比较 找到所需要的信息
if(i==n)
{
no_sql();
return;
}
else
{
system("cls");
FILE *fin,*ftp;
fin=fopen("studata.txt","r");//读打开原文件123.txt
ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n");
exit(0);
}
int kk=0;
while(kk<n) //从原文件读取一行
{
if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
{
fprintf(ftp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[kk].term,p[kk].classnum,p[kk].name,p[kk].num,p[kk].chinese,p[kk].en,p[kk].math,p[kk].history,p[kk].physics,p[kk].sum,p[kk].average); //以2进制形式写入文件中//一次写入一个数组//
}
kk++;
}
fclose(fin);
fclose(ftp);
remove("studata.txt");//删除原文件
rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
printf_ui(" 删除成功!",10," 正在返回...",12,1);
Sleep(1500);
}
}
菜单
int menu_select() //菜单选择系统函数
{
char c;
do{
system("cls");
char t;
toxy(45,2);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,3);
printf("┃ ┃");
toxy(45,4);
printf("┃ 成绩查询管理系统 ┃");
toxy(45,5);
printf("┃ ┃");
toxy(45,6);
printf("┃ HM ┃");
toxy(45,7);
printf("┃ ┃");
toxy(45,8);
printf("┃ [ 1 ].添加学生信息 ┃");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ [ 2 ].班级成绩查询 ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ [ 3 ].学生信息搜索 ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ [ 4 ].学生成绩排名 ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┃ [ 5 ].删除学生信息 ┃");
toxy(45,17);
printf("┃ ┃");
toxy(45,18);
printf("┃ [ 6 ].系统界面设置 ┃");
toxy(45,19);
printf("┃ ┃");
toxy(45,20);
printf("┃ [ 0 ].退出管理系统 ┃");
toxy(45,21);
printf("┃ ┃");
toxy(45,22);
printf("┃ 请您选择(0-6): ┃");
toxy(45,23);
printf("┃ ┃");
toxy(45,24);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(64,22);
c=getchar();
}while(c<'0'||c>'6');
return (c-'0'); //字符减去'0'得到的是数字整型//
}
主函数
int main()
{
system("color 0F");
for(;;) //循环使用主界面直到遇到结束命令
{
switch(menu_select()) // 函数的调用//
{
case 1:
add(); //学生记录添加
break;
case 2:
scan(); //学生信息浏览
break;
case 3:
query(); //学生信息查询
break;
case 4:
date(); //数据计算
break;
case 5:
delet(); //数据删除
break;
case 6:
system_menu(); //系统菜单修改
break;
case 0:
system("cls");
printf_ui(" 感谢使用!",10," 正在退出...",12,1);
Sleep(1000);
exit(0);
}
}
system("cls");
return 0;
}
代码全览
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#define N sizeof(struct BOOK)
typedef struct person //定义结构体
{
char num[15]; //学号
char name[20]; //姓名
float chinese; //语文成绩
float en; //英语成绩
float math; //数学成绩
float history; //历史成绩
float physics; //物理成绩
int term; //学期
int classnum; //班级
float sum; //总分
float average; //平均分
}person;
person per[200]; //定义100
void HideCursor() //隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void color(short x)
{
if(x>=0&&x<=15)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
}
void toxy(int x, int y) //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
}
void no_sql()
{
system("cls");
toxy(45,8);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ 数据库无信息! ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ 正在返回... ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ ┃");
toxy(45,15);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
Sleep(1000);
}
void read_sql(struct person per[],int n)
{
int flag=12,i,j,k;
toxy(75,6);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(75,7);
printf("┃ ┃");
toxy(75,8);
printf("┃ 数据库中可查询数据: ┃");
toxy(75,9);
printf("┃ ┃");
toxy(75,10);
printf("┃ 已有学年,班级: ┃");
toxy(75,11);
printf("┃ ┃");
toxy(75,12);
printf("┃ ┃");
toxy(75,13);
printf("┃ ┃");
toxy(75,14);
printf("┃ ┃");
toxy(75,15);
printf("┃ ┃");
toxy(75,16);
printf("┃ ┃");
toxy(75,17);
printf("┃ ┃");
toxy(75,18);
printf("┃ ┃");
toxy(75,19);
//printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(75,12);
for(i=0;i<n;i++)
{
printf("┃ %d %d ┃",per[i].term,per[i].classnum);
for(i=1;per[i].term!=0;i++)
{
k = 0;
for(j=0;j!=i;j++)
{
if(per[i].term==per[j].term && per[i].classnum==per[j].classnum)
{
k = 1;
break;
}
}
if(k==0)
{
toxy(75,++flag);
printf("┃ %d %d ┃",per[i].term,per[i].classnum);
}
}
}
toxy(75,++flag);
printf("┃ ┃");
toxy(75,++flag);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
}
void printf_ui(char str[],int line,char str1[],int line1,int flag)
{
if(flag==1)
{
system("cls");
}
toxy(45,8);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ ┃");
toxy(71,12);
printf("┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(45,line);
printf("┃ %s",str);
toxy(45,line1);
printf("┃ %s",str1);
toxy(56,14);
}
void printf_change(char str[],int line,char str1[],int line1,int flag)
{
if(flag==1)
{
system("cls");
}
toxy(45,line);
printf(" %s",str);
toxy(45,line1);
printf(" %s",str1);
toxy(56,14);
}
void printf_title()
{
system("cls");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 学年 班级 姓名 学号 语文 英语 数学 历史 物理 总分 平均分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
void printf_data(struct person per[],int flag)
{
for(int i=0;i<flag;i++)
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
void system_menu()
{
short back_Color;
short text_Color;
printf_ui("系统背景字体颜色修改:",10," 请输入字体颜色代码:",12,1);
printf_change("0 = 黑色 ,1 = 蓝色 ,2 = 绿色 ,3 = 湖蓝色 ",18, "4 = 红色 ,5 = 紫色 ,6 = 黄色 ,7 = 白色 ",19,0);
printf_change("8 = 灰色 ,9 = 淡蓝色 ,10 = 淡绿色 ,11 = 淡浅绿色 ",20,"12 = 淡红色 ,13 = 淡紫色 ,14 = 淡黄色 ,15 = 亮白色 ",21,0);
scanf("%d",&text_Color);
printf_ui("系统背景字体颜色修改:",10," 请输入背景颜色代码:",12,0);
scanf("%d",&back_Color);
char command[9]="color 3A";
if(text_Color>9&&text_Color<16)
{
command[7]=text_Color-10+'A';
}
else
{
command[7]='0'+text_Color; //将textColor变量改为字符型
}
if(back_Color>9&&back_Color<16)
{
command[6]=back_Color-10+'A';
}
else
{
command[6]='0'+back_Color; //将backColor变量改为字符型
}
system(command);
toxy(56,14);
Sleep(1000);
return;
}
int menu_select() //菜单选择系统函数
{
char c;
do{
system("cls");
char t;
toxy(45,2);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,3);
printf("┃ ┃");
toxy(45,4);
printf("┃ 成绩查询管理系统 ┃");
toxy(45,5);
printf("┃ ┃");
toxy(45,6);
printf("┃ HM ┃");
toxy(45,7);
printf("┃ ┃");
toxy(45,8);
printf("┃ [ 1 ].添加学生信息 ┃");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ [ 2 ].班级成绩查询 ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ [ 3 ].学生信息搜索 ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ [ 4 ].学生成绩排名 ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┃ [ 5 ].删除学生信息 ┃");
toxy(45,17);
printf("┃ ┃");
toxy(45,18);
printf("┃ [ 6 ].系统界面设置 ┃");
toxy(45,19);
printf("┃ ┃");
toxy(45,20);
printf("┃ [ 0 ].退出管理系统 ┃");
toxy(45,21);
printf("┃ ┃");
toxy(45,22);
printf("┃ 请您选择(0-6): ┃");
toxy(45,23);
printf("┃ ┃");
toxy(45,24);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(64,22);
c=getchar();
}while(c<'0'||c>'6');
return (c-'0'); //字符减去'0'得到的是数字整型//
}
void add() //成绩的录入与添加函数
{
FILE *fp;
int i=0,n=0;
char sign='y'; //首先定义sign='y'
system("cls"); //清屏函数 系统中调用
person p[200] ;
while(sign!='n'&&sign!='N') //其实只有当输入N或n时才跳出循环
{
printf_ui(" 学生信息添加",10,"请输入学年(格式20xx):",12,1);
toxy(56,14);
scanf("%d",&p[i].term);
printf_ui(" 学生信息添加",10," 请输入班级:",12,1);
toxy(56,14);
scanf("%d",&p[i].classnum);
printf_ui(" 学生信息添加",10," 请输入姓名:",12,1);
toxy(56,14);
scanf("%s",&p[i].name);
printf_ui(" 学生信息添加",10," 请输入学号:",12,1);
toxy(56,14);
scanf("%s",&p[i].num);
printf_ui(" 学生信息添加",10," 请输入语文:",12,1);
toxy(56,14);
scanf("%f",&p[i].chinese);
printf_ui(" 学生信息添加",10," 请输入英语:",12,1);
toxy(56,14);
scanf("%f",&p[i].en);
printf_ui(" 学生信息添加",10," 请输入数学:",12,1);
toxy(56,14);
scanf("%f",&p[i].math);
printf_ui(" 学生信息添加",10," 请输入历史:",12,1);
toxy(56,14);
scanf("%f",&p[i].history);
printf_ui(" 学生信息添加",10," 请输入物理:",12,1);
toxy(56,14);
scanf("%f",&p[i].physics);
printf_ui(" 是否继续添加? ",10," 输n退出,否则继续:",12,1);
toxy(56,14);
scanf("\t%c",&sign);
p[i].sum = p[i].chinese + p[i].en + p[i].history + p[i].math + p[i].physics;
p[i].average = p[i].sum / 5;
i++;
n=n+1;
printf_ui(" ",10," 正在保存... ",11,1);
Sleep(1000);
system( "cls ");
}
if((fp=fopen("studata.txt","a"))==NULL) //以2进制形式进行文件尾追加//
{
no_sql();
system("pause");
return; //如果文件出现错误 就返回
}
for(i=0;i<n;i++)
{
fprintf(fp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average); //以2进制形式写入文件中//一次写入一个数组//
}
fclose(fp); //关闭文件
system("pasue");
}
void scan() //显示记录 进行全面信息浏览
{
person per[200];
FILE *fp;
struct person temp; //定义临时数组用于交换时存放数组信息用于后面的交换//
float sum; //总分
float s[200];
int i=0,n=0;
int j=0,k,t;
int m,term,flag,classnum;
system("cls");
if((fp=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
system("pause");
return;
}
while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
{
i++;
n=n+1;
}
fclose(fp);
read_sql(per,n);
toxy(45,8);
printf_ui(" 班级成绩查询",10,"请输入学年(格式20xx):",12,0);
toxy(56,14);
scanf("%d",&term);
printf_ui(" 班级成绩查询",10," 请输入班级:",12,0);
toxy(56,14);
scanf("%d",&classnum);
system("cls");
for(i=0;i<n;i++)
{
if(per[i].term==term&&per[i].classnum==classnum)
{
per[flag]=per[i];
flag++;
}
}
printf_title();
printf_data(per,flag);
system("pause");
system("cls");
}
void query() //学生信息的不同方式查询
{
system("cls");
person p[200];
FILE *fp1;
int i=0;
int n=0;
char m;
toxy(45,2);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,3);
printf("┃ ┃");
toxy(45,4);
printf("┃ 学生成绩查询 ┃");
toxy(45,5);
printf("┃ ┃");
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(45,7);
printf("┃ ┃");
toxy(45,8);
printf("┃ [ 1 ].模糊查询 ┃");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ [ 2 ].姓名查询 ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ [ 3 ].学号查询 ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ [ 4 ].返回 ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(64,6);
scanf("%c",&m);
while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='0')
{
toxy(45,4);
printf("┃ 学生成绩查询 ┃");
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(64,6);
scanf("%c",&m);
}
if((fp1=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
return;
}
while(fscanf(fp1,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
{
i++;
n=n+1;
}
if(m=='1') //模糊查询
{
char s[3]; //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出
int i=0;
system("cls");
printf_ui(" 学生成绩查询",10," 请输入学生的姓:",12,1);
scanf("%s",s);
printf_title();
for(i=0;i<n;i++) //文件信息已经读取到数组中 此处进行循环用于下一语句的查找
{
if(p[i].name[0]==s[0]&&p[i].name[1]==s[1]) //比较per[i].name与所输入的前俩个字符是否相同//
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
}
if(m=='2') //姓名查询
{
system("cls");
char s[20];
int i=0;
printf_ui(" 学生成绩查询",10," 请输入学生的姓名:",12,1);
scanf("\t%s",s);
printf_title();
for(i=0;i<n;i++) //文件信息已经读取到数组中 此处进行循环用于下一语句的查找
{
if((strcmp(p[i].name,s))==0) //比较per[i].name与所输入的前俩个字符是否相同//
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
i=0;
while(strcmp(p[i].name,s)!=0&&i<n) i++; //比较per[i].name与所输入学号是否相同//
if(i==n)
{
no_sql();
return;
}
}
if(m=='3') //学号查询
{
char s[15];
int i=0;
toxy(45,8);
printf_ui(" 学生成绩查询",10," 请输入学生的学号:",12,1);
scanf("\t%s",s);
printf_title();
for(i=0;i<n;i++) //文件信息已经读取到数组中 此处进行循环用于下一语句的查找
{
if((strcmp(p[i].num,s))==0) //比较per[i].name与所输入的前俩个字符是否相同//
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
i=0;
while(strcmp(p[i].num,s)!=0&&i<n) i++; //比较per[i].name与所输入学号是否相同//
if(i==n)
{
no_sql();
return;
}
}
fclose(fp1);
toxy(50,18);
system("pause");
}
void date() //查询排名
{
person per[200];
FILE *fp;
struct person temp; //定义临时数组用于交换时存放数组信息用于后面的交换//
float sum,pass=60; //总分
float s[200];
int i=0,n=0;
int j=0,k,t;
int term,flag,classnum,flagg;
char m;
system("cls");
if((fp=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
return;
}
while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
{
i++;
n=n+1;
}
fclose(fp);
toxy(45,2);
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
toxy(45,3);
printf("┃ ┃");
toxy(45,4);
printf("┃ 学生成绩排名 ┃");
toxy(45,5);
printf("┃ ┃");
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(45,7);
printf("┃ ┃");
toxy(45,8);
printf("┃ [ 1 ].语文 ┃");
toxy(45,9);
printf("┃ ┃");
toxy(45,10);
printf("┃ [ 2 ].英语 ┃");
toxy(45,11);
printf("┃ ┃");
toxy(45,12);
printf("┃ [ 3 ].数学 ┃");
toxy(45,13);
printf("┃ ┃");
toxy(45,14);
printf("┃ [ 4 ].历史 ┃");
toxy(45,15);
printf("┃ ┃");
toxy(45,16);
printf("┃ [ 5 ].物理 ┃");
toxy(45,17);
printf("┃ ┃");
toxy(45,18);
printf("┃ [ 6 ].总分 ┃");
toxy(45,19);
printf("┃ ┃");
toxy(45,20);
printf("┃ [ 7 ].各科班级平均分 ┃");
toxy(45,21);
printf("┃ ┃");
toxy(45,22);
printf("┃ [ 8 ].不及格同学 ┃");
toxy(45,23);
printf("┃ ┃");
toxy(45,24);
printf("┃ [ 0 ].返回上级 ┃");
toxy(45,25);
printf("┃ ┃");
toxy(45,26);
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
toxy(64,6);
scanf("%c",&m);
while(m!='0'&&m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7'&&m!='8')
{
toxy(45,6);
printf("┃ 请输入选择: ┃");
toxy(64,6);
scanf("%c",&m);
}
if(m=='0')
{
return;
}
read_sql(per,n);
printf_ui(" 学生成绩排名",10,"请输入学年(格式20xx):",12,0);
scanf("%d",&term);
printf_ui(" 学生成绩排名",10," 请输入班级:",12,0);
scanf("%d",&classnum);
system("cls");
for(i=0;i<n;i++) //选择符合条件的班级
{
if(per[i].term==term&&per[i].classnum==classnum)
{
per[flag]=per[i];
flag++;
}
}
if(m=='2')
{
for(int i=0;i<flag-1;i++) //采用冒泡法进行排序//
{
k=i;
for(j=i+1;j<flag;j++)
{
if(per[j].en>per[k].en) //排序//比较大小//
{
k=j;
}
}
temp=per[k];per[k]=per[i];per[i]=temp; //当符合条件时进行数据交换//
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='3')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].math>per[k].math)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='1')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].chinese>per[k].chinese)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='4')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].history>per[k].history)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='5')
{
for(int i=0;i<flag-1;i++)
{
k=i;
for(j=i+1;j<flag;j++)
if(per[j].physics>per[k].physics)
k=j;
temp=per[k];per[k]=per[i];per[i]=temp;
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='6')
{
for(int i=0;i<flag-1;i++) //采用冒泡法进行排序//
{
k=i;
for(j=i+1;j<flag;j++)
{
if(per[j].sum>per[k].sum) //排序//比较大小//
{
k=j;
}
}
temp=per[k];per[k]=per[i];per[i]=temp; //当符合条件时进行数据交换//
}
printf_title();
printf_data(per,flag);
system("pause");
}
if(m=='7') //各科班级平均分
{
for(i=0;i<flag;i++)
{
s[0]=per[i].chinese+s[0];
s[1]=per[i].en+s[1];
s[2]=per[i].math+s[2];
s[3]=per[i].history+s[3];
s[4]=per[i].physics+s[4];
}
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 语文 英语 数学 历史 物理 \n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" %.1f %.1f %.1f %.1f %.1f \n",s[0]/flag,s[1]/flag,s[2]/flag,s[3]/flag,s[4]/flag);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
system("pause");
}
if(m=='8')
{
printf_title();
for(int i=0;i<flag;i++)
{
if(per[i].chinese<pass||per[i].en<pass||per[i].math<pass||per[i].history<pass||per[i].physics<pass)
{
printf(" %d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
}
system("pause");
}
}
void delet() //数据删除
{
person p[200];
FILE *fp;
char s[10];
int i=0,n=0;
if((fp=fopen("studata.txt","r"))==NULL) //以2进制方式读取文件信息//
{
no_sql();
return;
}
while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
{
i++;
n=n+1;
}
fclose(fp);
system("cls");
printf_ui(" 学生数据删除",10," 请输入学号:",12,1);
scanf("%s",s);
i=0;
while(strcmp(p[i].num,s)!=0&&i<n)
{
i++;
} //进行比较 找到所需要的信息
if(i==n)
{
no_sql();
return;
}
else
{
system("cls");
FILE *fin,*ftp;
fin=fopen("studata.txt","r");//读打开原文件123.txt
ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n");
exit(0);
}
int kk=0;
while(kk<n) //从原文件读取一行
{
if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
{
fprintf(ftp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[kk].term,p[kk].classnum,p[kk].name,p[kk].num,p[kk].chinese,p[kk].en,p[kk].math,p[kk].history,p[kk].physics,p[kk].sum,p[kk].average); //以2进制形式写入文件中//一次写入一个数组//
}
kk++;
}
fclose(fin);
fclose(ftp);
remove("studata.txt");//删除原文件
rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
printf_ui(" 删除成功!",10," 正在返回...",12,1);
Sleep(1500);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
//运用switch语句进行菜单选择//
}
int main()
{
system("color 0F");
for(;;) //循环使用主界面直到遇到结束命令
{
switch(menu_select()) // 函数的调用//
{
case 1:
add(); //学生记录添加
break;
case 2:
scan(); //学生信息浏览
break;
case 3:
query(); //学生信息查询
break;
case 4:
date(); //数据计算
break;
case 5:
delet(); //数据删除
break;
case 6:
system_menu(); //系统菜单修改
break;
case 0:
system("cls");
printf_ui(" 感谢使用!",10," 正在退出...",12,1);
Sleep(1000);
exit(0);
}
}
system("cls");
return 0;
}