📄 finalwork.c
字号:
#include<stdio.h>
#include<string.h>
void file();
void init(); //声明函数
void init1();
void init2();
void init3();
void init4();
void doChoice1();
void doChoice2();
void doChoice3();
void doChoice4();
void doChoice5();
///////////////////////////////////////////////////////////////////////////////////////////////
#define FORMAT "%-7s%-9s%-10.3f%-14.3f%-12.3f%-14.3f%.3f" //定义FORMAT输出格式
float total_ave,math_ave,data_ave,eng_ave,c_ave;
//定义全局变量 total_ave总平均分,math_ave数学,data_ave数据库,eng_ave英语,c_ave C语言平均分
int n=0; //n学生个数
FILE *fp;
struct student //定义student结构体
{
char num[7]; //学号
char name[20]; //姓名
float score[4]; //成绩
float average; //平均分
}stu[80]; //学生数组长度
struct student *p; //定义全局结构体指针变量
void load(char filename[]) //定义读取文件中数据的函数
{
n=0; //学生个数n
if((fp=fopen(filename,"rb"))==NULL) //判断文件是否存在
{
printf("Cannot open file.\n");
return; //文件不存在,返回主函数
}
do //读取数据
{
if(fread(&stu[n],sizeof(struct student),1,fp)!=1) //判断读取是否成功
{
if(feof(fp)) return; //若读取结束,返回主函数
printf("file read error!!!\n\n"); //读取出错
}
n++; //n学生人数加1
}while(1);
fclose(fp); //关闭文件
}
void save(char filename[]) //保存数据
{
int i;
if((fp=fopen(filename,"wb"))==NULL) //判断文件是否存在
{
printf("Cannot open file.\n");
return;
}
else //保存数据
{
for(i=0;i<n;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) //判断数据保存是否成功
printf("file write error!!!");
fclose(fp); //关闭文件
}
}
void Edit() //编辑数据
{
char choice;
do //输出菜单
{
init();
choice=getch(); //赋值
if(choice=='1')
doChoice1(); //执行命令
else if(choice=='2')
doChoice2();
else if(choice=='3')
doChoice3();
else if(choice=='4')
doChoice4();
else if(choice=='5')
doChoice5();
else if(choice=='6')
return; //返回
else
printf("Input error!!!!\n\n");
} while(1);
}
void newfile() //文件菜单
{
char ch,filename[15]; //filename文件名
do
{
file(); //输出菜单
ch=getch();
if(ch=='1') //新建文件
{
printf("请输入filename:");
gets(filename); //取文件名
fp=fopen(filename,"wb+");
printf("已成功建立数据库文件。\n\n");
fclose(fp);
}
else if(ch=='2') //载入数据
{
printf("\n请输入filename:");
gets(filename);
fp=fopen(filename,"rb"); //判断是否存在该文件
if(fp==NULL) printf("输入有误,不存在该文件!!!\n\n"); //不存在该文件
else //存在该文件
{
load(filename); //载入数据
printf("已成功载入数据。\n\n");
}
}
else if(ch=='3') //编辑数据
{
printf("\n");
Edit();
}
else if(ch=='4')
{
printf("\n请输入filename:");
gets(filename);
fp=fopen(filename,"rb"); //判断是否存在该文件
if(fp==NULL) printf("输入有误,不存在该文件,请新建立文件!!!\n\n"); //不存在该文件
else //存在该文件
{
save(filename); //保存数据
printf("已成功保存数据。\n\n");
}
}
else if(ch=='5') return; //返回主函数
else printf("Input error!!!\n\n");
}while(1);
}
main() //主函数
{ //filename文件名
system("cls"); //清屏 //调用函数
printf("\t*****************************************************************\n");
printf("\t\t\t欢迎使用学生考试成绩数据处理系统\n");
printf("\t\t\t作者 麻闽政 电31 2003010885\n");
printf("\t*****************************************************************\n");
newfile();
printf("谢谢本处理系统^_^。\n");
}
void file() //文件菜单函数
{
printf("请选择操作菜单:\n");
printf("\t①.建立新的数据文件\n");
printf("\t②.载入数据\n");
printf("\t③.编辑数据\n");
printf("\t④.保存\n");
printf("\t⑤.退出\n");
}
void init() //菜单函数
{
printf("请选择操作菜单:\n");
printf("\t①.增加或删除学生记录\n");
printf("\t②.查询成绩\n");
printf("\t③.统计平均成绩\n");
printf("\t④.不及格统计\n");
printf("\t⑤.特定查询\n");
printf("\t⑥.返回\n");
}
////////////////////////////////////////////////////////////////////////////////////////////
void init1() //菜单函数
{
printf("\n请选择操作菜单:\n");
printf("\t①.增加学生的记录\n");
printf("\t②.删除学生的记录\n");
printf("\t③.返回!!\n");
}
void Add() //添加记录
{
char c;
do
{
printf("\n请输入学生的学号:");
scanf("%s",stu[n].num);
printf("请输入学生的姓名:");
scanf("%s",stu[n].name);
printf("请输入<数学>成绩:");
scanf("%f",&stu[n].score[0]);
printf("请输入<数据库概论>成绩:");
scanf("%f",&stu[n].score[1]);
printf("请输入<英语>成绩:");
scanf("%f",&stu[n].score[2]);
printf("请输入<C语言程序设计>成绩:");
scanf("%f",&stu[n].score[3]);
getchar();
n++; //人数增加1
printf("继续录入附否?(按y继续,其他退出)");
c=getch();
printf("\n");
}while(c=='y'||c=='Y');
printf("\t数据已成功输入^_^!\n");
}
void Del() //删除记录
{
int i,flag=1; //定一变量,flag作记号
char number[8];
printf("请输入学生的学号:"); //输入学号
gets(number);
for(i=0;i<n;i++)
if(strcmp(stu[i].num ,number)==0) //寻找要删除的数据
{
stu[i]=stu[n-1]; //换数据
n--; //人数减1
flag=0; //判断是否存在该学生数据
}
if(flag) printf("输入有误,不存在该学生数据!!!\n"); //flag=1,不存在该数据
printf("\t已成功删除该学生数据^_^!\n");
}
void doChoice1() //选项1
{
char choice1;
do
{
init1(); //输出菜单
choice1=getch();
if(choice1=='1') Add(); //添加记录
else if(choice1=='2') Del(); //删除记录
else if(choice1=='3') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
printf("\n");
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void init2() //菜单
{
printf("\n请选择操作菜单:\n");
printf("\t①.输入学号查成绩(包括平均成绩)\n");
printf("\t②.按平均成绩顺序输出学生成绩\n");
printf("\t③.按学号顺序输出所有学生成绩\n");
printf("\t④.按某门课成绩好坏顺序输出学生成绩\n");
printf("\t⑤.返回!!\n");
}
void average() //求平均成绩
{
float sum=0,sum0=0,sum1=0,sum2=0,sum3=0;
for(p=stu;p<stu+n;p++)
{
p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3])/4;
sum=sum+p->average;
sum0=sum0+p->score[0];
sum1=sum1+p->score[1];
sum2=sum2+p->score[2];
sum3=sum3+p->score[3];
}
total_ave=sum/n; //总成绩求平均
math_ave=sum0/n; //数学平均成绩
data_ave=sum1/n; //数据库概论平均成绩
eng_ave=sum2/n; //英语平均成绩
c_ave=sum3/n; //c语言平均成绩
}
void doChoice2_1() //输入学号查成绩
{
char number[8]; //学号字符数组
int flag=1;
printf("\n请输入学号:"); //输入学号
gets(number);
for(p=stu;p<stu+n;p++)
if(strcmp(number,p->num)==0) //寻找该学生数据
{ //输出成绩
printf("\n姓名%s 数学%.3f 数据库概论%.3f ",p->name,p->score[0],p->score[1]);
printf("\n英语%.3f C语言程序设计%.3f 平均成绩%.3f",p->score[2],p->score[3],p->average);
flag=0; //判断是否存在该学生数据
}
printf("\n");
if(flag) printf("输入有误,没有该学生数据!!!\n"); //不存在该数据
}
void Oder1() //按成绩排序
{
int i,j;
struct student t; //定义结构体t
for(i=0;i<=n-2;i++) //冒泡法排序
for(j=0;j<=n-2-i;j++)
if(stu[j].average<stu[j+1].average)
{
t=stu[j]; //互换数据
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
void Oder2() //按学号排序
{
int i,j;
struct student t;
for(i=0;i<=n-2;i++) //冒泡法排序
for(j=0;j<=n-2-i;j++)
if(strcmp(stu[j].num,stu[j+1].num)>0)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -