#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define cj xueshengchengji /*宏定义*/
#define ss struct student
#define t1 "---------------------------学生成绩------------------------------------ \n"
#define t2 "| 姓名 | 学号 |性别|班级 | 数学 | 英语 | 计算机 | 总成绩 |\n"
#define t3 "|%-6d|%-8s|%-4s|%-5d|%-6d|%-6d|%-8d|%-8d|\n"
#define t4 stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,stu[j].math,stu[j].en,stu[j].computer,stu[j].sum
#define t41 stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,stu[j].math,stu[j].en,stu[j].computer
#define t5 "------------------------------------------------------------------------\n"
struct student /*定义结构体数组*/
{
int num;
char name[20];
char sex[20];
int banji;
int math;
int en;
int computer;
int sum;
}stu[100];
int main()
{
int i=0,s=0;
void save(); /*声明已定义的函数*/
void chaxun();
void xianshiquanbu();
void paixu();
void saver();
void qiuhe();
FILE *fp;
fp=fopen("cj.txt","a+"); /*在作用前,若文件不存在,新建文件*/
fclose(fp);
printf("\n");
printf("-----------------------------主菜单---------------------------------------- \n");
printf(" 请选择功 1.成绩录入 2.成绩查询 0.退出程序\n");
printf(" 能并输入 3.浏览全部学生成绩 4.总成绩排序 \n");
printf(" 相应序号 5.求总成绩 6.保存数据 \n");
printf("--------------------------------------------------------------------------- \n");
scanf("%d",&s);
while(s)
{
switch(s) /*选择所需功能*/
{
case 1: system("cls");save();break;
case 2: system("cls");chaxun();break;
case 3: system("cls");xianshiquanbu();break;
case 4: system("cls");paixu();break;
case 5: system("cls");qiuhe();break;
case 6: system("cls");saver();break;
case 0: system("exit");exit(0);
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("-----------------------------主菜单---------------------------------------- \n");
printf(" 请选择功 1.成绩录入 2.成绩查询 0.退出程序\n");
printf(" 能并输入 3.浏览全部学生成绩 4.总成绩排序 \n");
printf(" 相应序号 5.求总成绩 6.保存数据 \n");
printf("--------------------------------------------------------------------------- \n");
scanf("%d",&s);
}
}
void save()
{
int i=0;
while(stu[i].num!=0) /*在录入数据前先将结构体数组指向相应位置*/
i++;
printf("请依次输入:学号 姓名 性别 班级 数学 英语 计算机\n");
scanf("%d%s%s%d%d%d%d",&stu[i].num,stu[i].name,stu[i].sex,&stu[i].banji,
&stu[i].math,&stu[i].en,&stu[i].computer);
system("cls");
if(stu[i].num!=0)
printf("保存成功!");
else printf("保存失败!");
}
void chaxun()
{
int m,j=0;
printf("请输入需要查询的学号:");
scanf("%d",&m);
FILE *fp;
fp=fopen("cj","ab+");
while(stu[j].num!=0)
{ /*判断输入学号是否存在*/
if (m==stu[j].num)
{
printf("-----------------------\n");
printf("| 数学 | 英语 | 计算机 |\n");
printf("|%-6d|%-6d|%-8d|\n",stu[j].math,stu[j].en,stu[j].computer);
printf("-----------------------");
break;
}
j++;
}
fclose(fp);
}
void xianshiquanbu()
{
int j=0;
printf(t1);
printf(t2);
while(stu[j].num!=0)
{
stu[j].sum=stu[j].math+stu[j].en+stu[j].computer;
printf(t3,t4);
j++;
}
printf(t5);
}
void paixu()
{
int j,k,i=0;
struct student temp;
while(stu[i].num!=0)
i++;
for(j=0;j<i-1;j++)
{
for( k=j+1;k<i;k++)
{
if(stu[j].sum<stu[k].sum) /*利用双重循环排序,此为交换两结构体位置*/
{
temp=stu[j];
stu[j]=stu[k];
stu[k]=temp;
}
}
}
printf(t1);
printf(t2);
for(j=0;j<i;j++){ /*利用循环输出程序*/
printf(t3,stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,
stu[j].math,stu[j].en,stu[j].computer,stu[j].sum);
}
printf(t5);
}
void qiuhe()
{
int j=0;
printf(t1);
printf(t2);
while(stu[j].num!=0) /*利用循环对每个结构体中的三项成绩求和*/
{
stu[j].sum=stu[j].math+stu[j].en+stu[j].computer;
printf(t3,stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,
stu[j].math,stu[j].en,stu[j].computer,stu[j].sum);
j++;
}
printf(t5);
}
void saver()
{
int j=0;
FILE *fp;
fp=fopen("myfile.txt","a+"); /*将其以txt形式保存*/
while(stu[j].num!=0)
{
fprintf(fp,"|%-6d|%-8s|%-4s|%-5d|%-6d|%-6d|%-8d|%-8d|",
stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,stu[j].math,stu[j].en,stu[j].computer,stu[j].sum);
fprintf(fp,"\n");
j++;
}
if(stu[j].num!=NULL)
printf("保存失败!");
else printf("保存成功!");
fclose(fp);
评论0