学生成绩管理系统核心代码
在这里插入代码片
```#include <stdio.h>
#include "Student.h"
#include <string.h>
static int col;
static FORMAT format;
void SelectALL()
{
col=0;
}
void SelectId()
{
col=1;
}
void SelectClass()
{
col=2;
}
void SelectName()
{
col=3;
}
void SelectSex()
{
col=4;
}
void SelectMobile()
{
col=4;
}
void SelectChinese()
{
col=5;
}
void SelectMath()
{
col=6;
}
void SelectEnglish()
{
col=7;
}
void SelectScore()
{
col=8;
}
void SelectSum()
{
col=9;
}
int SelectPass()
{
int t;
printf("\n┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄\n");
printf("1-语文不及格 2-数学不及格 3-英语不及格 4-平均分低于及格线 \n\n5-语文成绩优秀 6-数学成绩优秀 7->英语成绩优秀 0-退出 >");
scanf("%d",&t);
while((t<1||t>7)&&(t!=0))
{
printf("输入错误 请您重新输入!\n");
while(getchar()!='\n');
scanf(" %d",&t);
}
if(t>=1&&t<=7)
{
col=t;
}
}
int PersonPass(const PERSON *x)
{
int r;
switch(col)
{
case 1:
r=x->Chinese-60 ;
break;
case 2:
r=x->Math-60 ;
break;
case 3:
r=x->English-60 ;
break;
case 4:
r=x->sum-60;
break;
case 5:
r=90-x->Chinese;
break;
case 6:
r=90-x->Math;
break;
case 7:
r=90-x->English;
}
return r;
}
int SelectOn(int y)
{
if(y>=1&&y<=4)
{
if(y==4)
{
col=0;
}
else
{
col=y+4;
}
}
}
int SelectIn()
{
int t;
printf("请选择您要输入的学科 语文---1 数学---2 英语---3 添加新成绩---4 退出---0 -> ");
scanf(" %d",&t);
printf("\n\n");
while((t<1||t>4)&&(t!=0))
{
printf("输入错误 请您重新输入!\n");
while(getchar()!='\n');
scanf("%d",&t);
}
if(t>=1&&t<=4)
{
return t;
}
}
int SelectCol()
{
int t;
printf("\n┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄\n");
printf("1-学号 2-班级 3-姓名 4-性别 5-语文 6-数学 7- 英语 8-总分 9-平均分 0-退出 > ");
scanf(" %d",&t);
while((t<1||t>9)&&(t!=0))
{
printf("输入错误 请您重新输入!\n");
while(getchar()!='\n');
scanf("%d",&t);
}
if(t>=1&&t<=9)
{
col=t;
}
}
int SelectRank()
{
int t;
printf("\n┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄\n");
printf("1-语文成绩 2-数学成绩 3-英语成绩 4-总成绩 5-平均分 0-退出 > ");
scanf(" %d",&t);
while((t<1||t>5)&&(t!=0))
{
printf("输入错误 请您重新输入!\n");
while(getchar()!='\n');
scanf("%d",&t);
}
if(t>=1&&t<=5)
{
col=t+4;
}
}
void Card()
{
format = card;
}
void Table()
{
format = table;
}
void Title()
{
printf("\n\n\n");
printf("┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━━┓\n");
printf("┃ 学号 ┃ 班级 ┃ 姓名 ┃ 性别 ┃ 语文 ┃ 数学 ┃ 英语 ┃ 总分┃ 平均分┃ \n");
}
void PersonInput(PERSON *person)
{
switch (col)
{
case 0:
printf("学号: ");
scanf("%d%*c",&person->id);
printf("班级: ");
scanf(" %s",&person->Class);
printf("姓名: ");
scanf(" %s",&person->name);
printf("性别: ");
scanf(" %s",&person->sex);
printf("语文成绩: ");
scanf("%d%*c",&person->Chinese );
while((person->Chinese>100)||(person->Chinese<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("语文成绩: ");
scanf("%d%*c",&person->Chinese );
}
printf("数学成绩: ");
scanf("%d%*c",&person->Math );
while((person->Math>100)||(person->Math<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("数学成绩: ");
scanf("%d%*c",&person->Math );
}
printf("英语成绩: ");
scanf("%d%*c",&person->English );
while((person->English>100)||(person->English<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("英语成绩: ");
scanf("%d%*c",&person->English);
}
break;
case 1:
printf("学号: ");
scanf("%d%*c",&person->id);
break ;
case 2:
printf("班级: ");
gets(person->Class);
break;
case 3:
printf("姓名: ");
gets(person->name);
break;
case 4:
printf("性别: ");
gets(person->sex );
break;
case 5:
printf("语文成绩: ");
scanf("%d%*c",&person->Chinese );
while((person->Chinese>100)||(person->Chinese<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("语文成绩: ");
scanf("%d%*c",&person->Chinese );
}
break ;
case 6:
printf("数学成绩: ");
scanf("%d%*c",&person->Math );
while((person->Math>100)||(person->Math<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("数学成绩: ");
scanf("%d%*c",&person->Math );
}
break;
case 7:
printf("英语成绩: ");
scanf("%d%*c",&person->English );
while((person->English>100)||(person->English<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("英语成绩: ");
scanf("%d%*c",&person->English );
}
break;
}
person->score =person->Chinese+person->English +person->Math ;
person->sum =person->score / 3.0;
}
void PersonInput2(PERSON *person)
{
switch (col)
{
case 0:
printf("学号: ");
scanf("%d%*c",&person->id);
printf("班级: ");
scanf(" %s",&person->Class);
printf("姓名: ");
scanf(" %s",&person->name);
printf("性别: ");
scanf(" %s",&person->sex);
printf("语文成绩: ");
scanf("%d%*c",&person->Chinese );
while((person->Chinese>100)||(person->Chinese<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("语文成绩: ");
scanf("%d%*c",&person->Chinese );
}
printf("数学成绩: ");
scanf("%d%*c",&person->Math );
while((person->Math>100)||(person->Math<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("数学成绩: ");
scanf("%d%*c",&person->Math );
}
printf("英语成绩: ");
scanf("%d%*c",&person->English );
while((person->English>100)||(person->English<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
printf("英语成绩: ");
scanf("%d%*c",&person->English);
}
break;
case 1:
printf("学号: ");
scanf("%d%*c",&person->id);
break ;
case 2:
printf("班级: ");
gets(person->Class);
break;
case 3:
printf("姓名: ");
gets(person->name);
break;
case 4:
printf("性别: ");
gets(person->sex );
break;
case 5:
scanf("%d%*c",&person->Chinese );
while((person->Chinese>100)||(person->Chinese<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
scanf("%d%*c",&person->Chinese );
}
break ;
case 6:
scanf("%d%*c",&person->Math );
while((person->Math>100)||(person->Math<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
scanf("%d%*c",&person->Math );
}
break;
case 7:
scanf("%d%*c",&person->English );
while((person->English>100)||(person->English<0))
{
printf(" -----您输入的成绩不在正确的范围内 请重新输入-----\n");
scanf("%d%*c",&person->English );
}
break;
}
person->score =person->Chinese+person->English +person->Math ;
person->sum =person->score / 3.0;
}
void PersonOutput(const PERSON *person)
{
switch (format)
{
case card:
switch(col)
{
case 0:
printf("┏━━━━━━━━━━━━┳━━━━━━━━━━━━┓\n");
printf("┃ 学号 ┃ %d ┃\n",person->id);
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 班级 ┃ %s ┃\n",person->Class);
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 姓名 ┃ %s ┃\n",person->name);
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 性别 ┃ %s ┃\n",person->sex );
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 语文成绩 ┃ %3d ┃ \n",person->Chinese);
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 数学成绩 ┃ %3d ┃\n",person->Math);
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 英语成绩 ┃ %3d ┃\n",person->English);
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 总分 ┃ %3d ┃\n",person->score );
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");
printf("┃ 平均分 ┃ %5.3g ┃\n",person->sum );
printf("┗━━━━━━━━━━━━┻━━━━━━━━━━━━┛\n");
break;
case 1:
printf("学号: %d\n",person->id);
break;
case 2:
printf("班级: %s\n",person->Class);
break;
case 3:
printf("姓名: %s\n",person->name);
break;
case 4:
printf("性别: %s\n",person->sex );
break;
case 5:
printf("语文成绩: %d\n",person->Chinese );
break;
case 6:
printf("数学成绩: %d\n",person->Math );
break;
case 7:
printf("英语成绩: %d\n",person->English );
break;
case 8:
printf("总分: %d\n",person->score );
break;
case 9:
printf("平均分: %g\n",person->sum);
break;
}
break ;
case table:
printf("┣━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━╋━━━━━━━╋━━━━━━━╋━━━━━━╋━━━━━━━┫\n");
printf("┃%12d┃ %10s ┃%8s ┃",person->id ,person->Class,person->name);
printf("%6s ",person->sex );
printf("┃%7d┃%7d┃%7d┃%6d┃%7.2g┃\n",person->Chinese ,person->Math ,person->English,person->score,person->sum);
break ;
}
}
void PersonOutput2(const PERSON *person)
{
switch (format)
{
case card:
switch(col)
{
case 0:
printf("学号: %d\n",person->id);
printf("班级: %s\n",person->Class);
printf("姓名: %s\n",person->name);
printf("性别: %s\n",person->sex );
printf("语文成绩: %d\n",person->Chinese);
printf("数学成绩: %d\n",person->Math);
printf("英语成绩: %d\n",person->English);
printf("总分: %d\n",person->score );
printf("平均分: %g\n",person->sum );
break;
case 1:
printf("%d",person->id);
break;
case 2:
printf("%s",person->Class);
break;
case 3:
printf("%s",person->name);
break;
case 4:
printf("%s",person->sex );
break;
case 5:
printf("语文成绩: %d\n",person->Chinese );
break;
case 6:
printf("数学成绩: %d\n",person->Math );
break;
case 7:
printf("英语成绩: %d\n",person->English );
break;
case 8:
printf("总分: %d\n",person->score );
break;
case 9:
printf("平均分: %g\n",person->sum);
break;
}
break ;
case table:
putchar('\n');
printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("%8d%10s%8s",person->id ,person->Class,person->name);
printf("%8s",person->sex );
printf("%10d%10d%10d%10d%10g\n",person->Chinese ,person->Math ,person->English,person->score,person->sum);
printf("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
break ;
}
}
void PersonBook()
{
printf(" 向系统中添加学生的成绩单\n");
printf(" ----------- A-添加 分别输入学号 班级 姓名 性别 语文成绩 数学成绩 外语成绩 \n");
printf(" 系统会自动计算该学生的总分以及平均分 \n\n");
printf(" ----------- S-显示 显示系统中所有已经输入的学生成绩 \n\n");
printf(" ----------- F-查找 根据您提供的信息单独查找该学生的成绩 \n\n");
printf(" ----------- M-修改 按您的要求修改学生的信息 \n\n");
printf(" ----------- D-删除 删除学生的信息 \n\n");
printf(" ----------- X-排名 根据您的要求 显示单科成绩排名 总分排名 \n\n");
printf(" ----------- T-统计 统计系统中不及格的人数 学生优秀的人数 \n\n");
printf(" ----------- C-班级 显示同一个班级的学生成绩 并按照总分降序排序 \n\n");
printf(" ----------- Q-退出 退出学生成绩管理系统 \n\n");
}
int PersonCmp(const PERSON *x,const PERSON *y)
{
int r;
switch(col)
{
case 1:
r=x->id -y->id ;
break;
case 2:
r=strcmp(x->Class ,y->Class );
break;
case 3:
r=strcmp(x->name ,y->name);
break;
case 4:
r=strcmp(x->sex ,y->sex);
break;
case 5:
r=x->Chinese -y->Chinese ;
break;
case 6:
r=x->Math -y->Math ;
break;
case 7:
r=x->English -y->English ;
break;
case 8:
r=x->score -y->score ;
break;
case 9:
r=x->sum-y->sum;
}
return r;
}
void PersonSwap(PERSON *x,PERSON *y)
{
PERSON a;
a=*x;
*x=*y;
*y=a;
}
int PersonCode(char *code ,char *cd)
{
int r,x;
r=strcmp(code ,cd);
if(r==0)
{
x=1;
}
else
{
x=0;
}
return x;
}
void PersonWrite(FILE *file ,const PERSON *person)
{
fprintf(file,"%d\n",person->id);
fprintf(file,"%s\n",person->Class );
fprintf(file,"%s\n",person->name );
fprintf(file,"%s\n",person->sex );
fprintf(file,"%d\n",person->Chinese );
fprintf(file,"%d\n",person->Math );
fprintf(file,"%d\n",person->English );
fprintf(file,"%d\n",person->score );
fprintf(file,"%g\n",person->sum );
}
void PersonRead(FILE *file,PERSON *person)
{
int n;
char temp[1000];
fscanf(file,"%d%*c",&person->id);
fgets(temp ,1000 ,file);
n=strlen(temp);
temp[n-1]='\0';
strcpy(person->Class,temp);
fgets(temp ,1000 ,file);
n=strlen(temp);
temp[n-1]='\0';
strcpy(person->name ,temp);
fgets(temp ,1000 ,file);
n=strlen(temp);
temp[n-1]='\0';
strcpy(person->sex,temp);
fscanf(file,"%d%*c",&person->Chinese);
fscanf(file,"%d%*c",&person->Math);
fscanf(file,"%d%*c",&person->English);
fscanf(file,"%d%*c",&person->score);
fscanf(file,"%lg%*c",&person->sum);
}
```c
#include <stdio.h>
#include <stdlib.h>
#include "Book.h"
void BookCreate(BOOK *book)
{
book->size=maxSize;
book->number=0;
book->person=(PERSON*)malloc(book->size * sizeof(PERSON));
}
void BookDestroy(BOOK *book)
{
free(book->person);
book->person = NULL;
book->size=book->number=0;
}
void BookAppend(BOOK *book,const PERSON *person)
{
if(book->number < book->size)
{
book->person[book->number]=*person;
++book->number;
}
}
void BookIn(BOOK *book,int w)
{
PERSON person;
int k;
Card();
printf("┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓\n") ;
printf("┃ 学号 ┃ 班级 ┃ 姓名 ┃ ");
if(w==1)
{
printf("语文成绩");
}
if(w==2)
{
printf("数学成绩");
}
if(w==3)
{
printf("英语成绩");
}
printf(" \n");
for(k=0;k<book->number;++k)
{
printf("┣━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━┫\n") ;
SelectId();
printf("┃ ");
PersonOutput2(&book->person[k]);
printf(" ┃ ");
SelectClass();
PersonOutput2(&book->person[k]);
printf(" ┃ ");
SelectName();
PersonOutput2(&book->person[k]);
printf(" ┃ ");
if((w>=5)||(w<=7))
{
SelectOn(w);
printf(" ");
PersonInput2(&book->person[k]);
}
}
printf("┗━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┛\n") ;
printf(" --------您已输入完成 欢迎下次使用--------\n");
}
void BookOutput(const BOOK *book)
{
int k;
Table();
Title();
for(k=0;k<book->number;++k)
{
PersonOutput(&book->person[k]);
}
printf("┗━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━┻━━━━━━━┛\n");
}
void BookInputPerson(const BOOK *book,int index)
{
if(index>=0 && index<book->number)
{
PersonInput(&book->person[index]);
}
else
{
puts("内部错误!");
}
}
void BookOutputperson(const BOOK *book,int index)
{
if(index>=0 && index<book->number)
{
Card();
PersonOutput(&book->person[index]);
}
else
{
puts("内部错误!");
}
}
int BookFind(BOOK *book ,const PERSON *person)
{
int r=-1,k;
for(k=0 ; -1==r&&k<book->number ;++k)
{
if(!PersonCmp(&book->person[k],person))
{
r=k;
}
}
return r;
}
void BookSort(BOOK *book)
{
int i,j,k,n=book->number-1;
for(i=0;i<n;++i)
{
for(k=i,j=i+1;j<book->number ;++j)
{
if(PersonCmp((&book->person[j]),&book->person[k])<0)
{
k=j;
}
}
if(k>i)
{
PersonSwap(&book->person[i],&book->person[k]);
}
}
}
void BookRank(BOOK *book)
{
Table();
int i,j,k,n=book->number-1;
for(i=0;i<n;++i)
{
for(k=i,j=i+1;j<book->number ;++j)
{
if(PersonCmp((&book->person[j]),&book->person[k])>=0)
{
k=j;
}
}
if(k>i)
{
PersonSwap(&book->person[i],&book->person[k]);
}
}
}
void BookClass(BOOK *book ,BOOK *bk)
{
Table();
SelectClass();
int i,j,k,n=book->number-1,m=0,h=0,flag;
for(i=0;i<=n;i++)
{
flag=0;
for(m=i,h=i-1;h>=-1;h--)
{
if(PersonCmp(&book->person[m],&book->person[h])==0)
{
flag=1;
}
}
if(flag!=1)
{
putchar('\n');
Title();
PersonOutput(&book->person[i]);
for(k=i,j=i+1;j<book->number ;j++)
{
if(PersonCmp((&book->person[j]),&book->person[k])==0)
{
PersonOutput(&book->person[j]);
}
}
printf("┗━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━┻━━━━━━━┛\n");
}
}
}
void BookPass(BOOK *book)
{
Table();
int i,j,k=0,n=book->number-1;
for(i=0;i<=n;i++)
{
if(PersonPass(&book->person[i])<0)
{
if(k==0)
{
Title();
}
PersonOutput(&book->person[i]);
k=1;
}
}
if(k==0)
{
printf("没有符合要求的同学!\n");
}
else
{
printf("┗━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━┻━━━━━━━┛\n");
}
}
void BookWrite( const char *filename, const BOOK *book)
{
int k;
FILE *file=fopen(filename,"w");
if(file)
{
fprintf(file,"%d\n",book->number);
for (k=0 ; k<book->number; ++k)
{
PersonWrite(file,&book->person[k]);
}
fclose(file);
}
else
{
puts("Error!");
}
}
void BookRead(const char *filename ,BOOK *book)
{
int k;
FILE *file = fopen(filename , "r");
if(file)
{
fscanf(file,"%d%*c",&book->number);
for(k=0;k<book->number ;++k)
{
PersonRead(file,&book->person [k]);
}
fclose(file);
}
else
{
puts("Error!");
}
}
void Bookdelete(BOOK *book,int index)
{
int i=index-1,j,k,n=book->number,m;
printf("是否选择删除该学生成绩?\n 是 -- 1 否 -- 0\n");
scanf("%d",&m);
while(m!=1&&m!=0)
{
printf("输入错误的信息 请重新输入! \n");
scanf(" %d",&m);
}
if(m==1)
{
for(k=i+1;k<n;++k)
{
book->person[k-1]=book->person[k];
}
--book->number ;
printf("学生成绩已被删除!!!\n");
}
else
{
printf("您已放弃删除学生成绩!!!\n");
}
}