学生成绩系统(已完成)
#include "stdlib.h"
#include "stdio.h"
#include "windows.h"
#include "conio.h"
#include "string.h"
#define MYlist struct list
#define list_len sizeof(struct list)
#define stu_len sizeof(struct student)
#define DATA_DIS access->data.stuID,access->data.stuNAME,access->data.stuSEX,access->data.stuMAT,access->data.stuENG,access->data.stuC
#define DATAAM 41
MYlist *last,*head;
int Record=0;
FILE *target;
char Filename[20]="";
char Filenamecur[20]="";
int cFlag=0;
int FileopenFlag=0;
int FileModifyFlag=0;
typedef struct student{
int stuID;
char stuNAME[16];
char stuSEX[4];
int stuMAT;
int stuC;
int stuENG;
}stuDATA;
struct list{
stuDATA data;
MYlist *next;
};
void ShowMainMenue(){
system("cls");
printf("\t\t\t 学生成绩管理系统\n");
printf("******************************************************************************\n");
if(strcmp(Filenamecur,"")!=0)printf("当前打开的文件为:%s\n",Filenamecur);
else printf("当前没有打开文件\n");
printf("1.新建记录\t\t\t5.修改记录\t\t\t9. 从文件读取\n");
printf("2.添加记录\t\t\t6.删除记录\t\t\ta.保存到文件\n");
printf("---------\t\t\t----------\t\t\t-----------\n");
printf("3.查看记录\t\t\t7.排序\t\t\t\t0.退出\n");
printf("4.查询记录\t\t\t8.统计分析\t\t\t\t\n");
printf("******************************************************************************\n");
printf("请输入指令(0-10):");
}
void ShowModifyMenue(){
system("cls");
printf("\t\t\t 学生成绩管理系统:修改记录\n");
printf("******************************************************************************\n");
printf("\t\t\t\t1.修改学号\n");
printf("\t\t\t\t2.修改姓名\n");
printf("\t\t\t\t3.修改性别\n");
printf("\t\t\t\t4.修改数学成绩\n");
printf("\t\t\t\t5.修改英语成绩\n");
printf("\t\t\t\t6.修改C语言成绩\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("******************************************************************************\n");
}
void ShowRankMenue(){
system("cls");
printf("\t\t\t 学生成绩管理系统:排序系统\n");
printf("******************************************************************************\n");
printf("\t\t\t\t1.学号排序\n");
printf("\t\t\t\t2.数学成绩排序\n");
printf("\t\t\t\t3.英语成绩排序\n");
printf("\t\t\t\t4.C语言成绩排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("******************************************************************************\n");
}
void Freelist(MYlist *access){
MYlist *curFree;
while(1){
if(access->next!=NULL){
curFree=access;
access=access->next;
free(curFree);
}
else{
break;
}
if(access==head){
free(access);
break;
}
}
}
void SaveToFile(){
system("cls");
FILE *WRIT;
MYlist *access;
int i=0;
char cFlag;
access=head;
start:
printf("是否保存当前文件(y/n):");
scanf("%c",&cFlag);
fflush(stdin);
if(cFlag!='y'&&cFlag!='n'){
printf("输入指令错误,请重新输入!\n");
goto start;
}
if(cFlag=='n'){
return;
}
if(cFlag=='y'){
WRIT=fopen(Filenamecur,"w");
while(i<Record){
fwrite(&access->data,stu_len,1,WRIT);
if(access->next!=NULL)access=access->next;
else {
printf("保存成功!\n");
break;
}
}
}
FileModifyFlag=0;
fclose(WRIT);
}
void IDGets(MYlist *access){
MYlist *search;
start:
search=head;
printf("请输入学号:");
scanf("%d",&access->data.stuID);
fflush(stdin);
while(1){
if(search!=access&&access->data.stuID==search->data.stuID){
printf("学好重复,请重新输入!\n");
goto start;
}
if(access->data.stuID<0){
printf("学好输入错误,请重新输入!\n");
goto start;
}
if(search->next==NULL)break;
search=search->next;
}
}
void SEXGets(MYlist *access){
MYlist *search;
start:
printf("请输入性别(F/M):");
gets(access->data.stuSEX);
if(strcmp(access->data.stuSEX,"F")!=0&&strcmp(access->data.stuSEX,"M")!=0){
printf("输入错误,请输入(F/M)!\n");
goto start;
}
}
void MScore(MYlist *access){
start:
printf("请输入数学成绩:");
scanf("%d",&access->data.stuMAT);
getchar();
if(access->data.stuMAT>100||access->data.stuMAT<0){
printf("请输入合法的成绩(0~100)!\n");
goto start;
}
}
void EScore(MYlist *access){
start:
printf("请输入英语成绩:");
scanf("%d",&access->data.stuENG);
getchar();
if(access->data.stuENG>100||access->data.stuENG<0){
printf("请输入合法的成绩(0~100)!\n");
goto start;
}
}
void CScore(MYlist *access){
start:
printf("请输入C语言成绩:");
scanf("%d",&access->data.stuC);
getchar();
if(access->data.stuC>100||access->data.stuC<0){
printf("请输入合法的成绩(0~100)!\n");
goto start;
}
}
void ReadtestFile(char *readMode){
FileopenFlag=1;
cFlag=1;
MYlist *access,*creat,*accessbef;
int i=0;
target=fopen(Filenamecur,readMode);
if(target==NULL){
Record=-1;
}
while(!feof(target)){
if(Record==0){
creat=(MYlist*)malloc(list_len);
accessbef=access=head=creat;
}
if(Record!=0){
creat=(MYlist*)malloc(list_len);
accessbef=access;
access->next=creat;
access=creat;
}
if(fread(&access->data,stu_len,1,target)){
Record++;
}
else{
if(Record!=0)free(access);
}
}
last=accessbef;
last->next=NULL;
fclose(target);
}
void Openfile(){
if(cFlag==1&&Record!=0&&FileModifyFlag!=0){
printf("将为您打开新的文件,");
SaveToFile();
}
system("cls");
printf("请输入要打开的文件名称:");
gets(Filename);
target=fopen(Filename,"r");
if(target!=NULL&&cFlag==0){
printf("文件打开成功!\n");
FileModifyFlag=0;
FileopenFlag=1;
strcpy(Filenamecur,Filename);
ReadtestFile("r");
}
else if(target!=NULL&&cFlag==1&&Record!=0){
printf("文件打开成功!\n");
FileModifyFlag=0;
Freelist(head);
cFlag=0;
Record=0;
FileopenFlag=1;
strcpy(Filenamecur,Filename);
ReadtestFile("r");
}
else if(target!=NULL&&cFlag==1&&Record==0){
printf("文件打开成功!\n");
FileModifyFlag=0;
Freelist(head);
cFlag=0;
Record=0;
FileopenFlag=1;
strcpy(Filenamecur,Filename);
ReadtestFile("r");
}
else{
printf("文件打开失败(可能没有这个文件)!\n");
return;
}
fclose(target);
}
MYlist *SearchAddress(){
MYlist *search;
search=head;
int stuID;
printf("请输入学号:");
scanf("%d",&stuID);
fflush(stdin);
while(1){
if(stuID==search->data.stuID){
return search;
}
if(search->next!=NULL)search=search->next;
else break;
}
printf("没有找到该学生!\n");
return NULL;
}
MYlist *SearchAddressbef(MYlist *access){
MYlist *cur,*bef;
cur=access;
access=head;
while(1){
if(cur==head){
return cur;
}
else if(access->next==cur){
bef=access;
break;
}
else if(access->next==NULL){
bef=NULL;
break;
}
access=access->next;
}
return bef;
}
void DisplaySigalStu(MYlist *access){
printf("\t|%-15s%-10s%-10s%-10s%-10s%-11s|\n","学号","姓名","性别","数学","英语","C语言");
printf(" |------------------------------------------------------------------|\n");
printf("\t|%-15d%-10s%-11s%-10d%-10d%-10d|\n",DATA_DIS);
printf(" |------------------------------------------------------------------|\n");
}
void RankDataMathdw(){
MYlist *access,*cur,*befMAX,*befcur,*MAX;
MAX=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MAX=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MAX->data.stuMAT<access->data.stuMAT){
MAX=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MAX!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
befcur->next=MAX;
}
if(MAX==cur)cur=cur->next;
if(MAX!=cur&&cur==head){
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
head=MAX;
}
last=MAX->next;
}
}
void RankDataEngup(){
MYlist *access,*cur,*befMIN,*befcur,*MIN;
MIN=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MIN=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MIN->data.stuENG>access->data.stuENG){
MIN=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MIN!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
befcur->next=MIN;
}
if(MIN==cur)cur=cur->next;
if(MIN!=cur&&cur==head){
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
head=MIN;
}
last=MIN->next;
}
}
void RankDataEngdw(){
MYlist *access,*cur,*befMAX,*befcur,*MAX;
MAX=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MAX=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MAX->data.stuENG<access->data.stuENG){
MAX=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MAX!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
befcur->next=MAX;
}
if(MAX==cur)cur=cur->next;
if(MAX!=cur&&cur==head){
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
head=MAX;
}
last=MAX->next;
}
}
void RankDataCup(){
MYlist *access,*cur,*befMIN,*befcur,*MIN;
MIN=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MIN=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MIN->data.stuC>access->data.stuC){
MIN=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MIN!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
befcur->next=MIN;
}
if(MIN==cur)cur=cur->next;
if(MIN!=cur&&cur==head){
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
head=MIN;
}
last=MIN->next;
}
}
void RankDataCdw(){
MYlist *access,*cur,*befMAX,*befcur,*MAX;
MAX=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MAX=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MAX->data.stuC<access->data.stuC){
MAX=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MAX!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
befcur->next=MAX;
}
if(MAX==cur)cur=cur->next;
if(MAX!=cur&&cur==head){
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
head=MAX;
}
last=MAX->next;
}
}
void RankDataMathup(){
MYlist *access,*cur,*befMIN,*befcur,*MIN;
MIN=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MIN=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MIN->data.stuMAT>access->data.stuMAT){
MIN=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MIN!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
befcur->next=MIN;
}
if(MIN==cur)cur=cur->next;
if(MIN!=cur&&cur==head){
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
head=MIN;
}
last=MIN->next;
}
}
void RankDataIDdw(){
MYlist *access,*cur,*befMAX,*befcur,*MAX;
MAX=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MAX=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MAX->data.stuID<access->data.stuID){
MAX=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MAX!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
befcur->next=MAX;
}
if(MAX==cur)cur=cur->next;
if(MAX!=cur&&cur==head){
befMAX=SearchAddressbef(MAX);
befMAX->next=MAX->next;
MAX->next=cur;
head=MAX;
}
last=MAX->next;
}
}
void RankDataIDup(){
MYlist *access,*cur,*befMIN,*befcur,*MIN;
MIN=cur=access=head;
int i=0,j=0;
for(i=0;i<Record;i++){
MIN=cur;
if(cur->next!=NULL){
access=cur->next;
}
else{
break;
}
for(;;){
if(MIN->data.stuID>access->data.stuID){
MIN=access;
}
if(access->next!=NULL){
access=access->next;
}
else{
break;
}
}
if(MIN!=cur&&cur!=head){
befcur=SearchAddressbef(cur);
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
befcur->next=MIN;
}
if(MIN==cur)cur=cur->next;
if(MIN!=cur&&cur==head){
befMIN=SearchAddressbef(MIN);
befMIN->next=MIN->next;
MIN->next=cur;
head=MIN;
}
last=MIN->next;
}
}
void RankDataSystem(){
char iItem,iItem2;
ShowRankMenue();
printf("请输入指令(0-10):");
scanf("%c",&iItem);
fflush(stdin);
while(1){
switch(iItem){
case '0':
break;
case '1':
system("cls");
printf("\t\t\t\t1.学号升序排序\n");
printf("\t\t\t\t2.学号降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
while(1){
switch(iItem2){
case '0':
break;
case '1':
RankDataIDup();
printf("升序排序!\n");
FileModifyFlag=1;
break;
case '2':
RankDataIDdw();
printf("降序排序!\n");
FileModifyFlag=1;
break;
default:
printf("请输入正确的指令!\n");
}
if(iItem2=='0')break;
printf("|按任意键继续|\n");
getch();
system("cls");
printf("\t\t\t\t1.学号升序排序\n");
printf("\t\t\t\t2.学号降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
}
break;
case '2':
system("cls");
printf("\t\t\t\t1.数学升序排序\n");
printf("\t\t\t\t2.数学降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
while(1){
switch(iItem2){
case '0':
break;
case '1':
RankDataMathup();
printf("升序排序!\n");
FileModifyFlag=1;
break;
case '2':
RankDataMathdw();
printf("降序排序!\n");
FileModifyFlag=1;
break;
default:
printf("请输入正确的指令!\n");
}
if(iItem2=='0')break;
printf("|按任意键继续|\n");
getch();
system("cls");
printf("\t\t\t\t1.数学升序排序\n");
printf("\t\t\t\t2.数学降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
}
break;
case '3':
system("cls");
printf("\t\t\t\t1.英语升序排序\n");
printf("\t\t\t\t2.英语降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
while(1){
switch(iItem2){
case '0':
break;
case '1':
RankDataEngup();
printf("升序排序!\n");
FileModifyFlag=1;
break;
case '2':
RankDataEngdw();
printf("降序排序!\n");
FileModifyFlag=1;
break;
default:
printf("请输入正确的指令!\n");
}
if(iItem2=='0')break;
printf("|按任意键继续|\n");
getch();
system("cls");
printf("\t\t\t\t1.英语升序排序\n");
printf("\t\t\t\t2.英语降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
}
break;
case '4':
system("cls");
printf("\t\t\t\t1.C语言升序排序\n");
printf("\t\t\t\t2.C语言降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
while(1){
switch(iItem2){
case '0':
break;
case '1':
RankDataCup();
printf("升序排序!\n");
FileModifyFlag=1;
break;
case '2':
RankDataCdw();
printf("降序排序!\n");
FileModifyFlag=1;
break;
default:
printf("请输入正确的指令!\n");
}
if(iItem2=='0')break;
printf("|按任意键继续|\n");
getch();
system("cls");
printf("\t\t\t\t1.C语言升序排序\n");
printf("\t\t\t\t2.C语言降序排序\n");
printf("\t\t\t\t0.返回上级菜单\n");
printf("请输入指令(0-2):");
scanf("%c",&iItem2);
fflush(stdin);
}
break;
default:
printf("请输入正确的指令!\n");
}
if(iItem=='0')break;
printf("|按任意键继续|\n");
getch();
ShowRankMenue();
printf("请输入指令(0-6):");
scanf("%c",&iItem);
fflush(stdin);
}
}
void DisplaySearch(){
MYlist *access;
access=SearchAddress();
if(access!=NULL)DisplaySigalStu(access);
}
void ModifyData(){
MYlist *access;
char iItem;
access=SearchAddress();
if(access==NULL){
return;
}
ShowModifyMenue();
DisplaySigalStu(access);
printf("请输入指令(0-6):");
scanf("%c",&iItem);
fflush(stdin);
while (iItem){
switch(iItem){
case '0':
break;
case '1':
IDGets(access);
FileModifyFlag=1;
break;
case '2':
printf("请输入学生名称:");
gets(access->data.stuNAME);
FileModifyFlag=1;
break;
case '3':
SEXGets(access);
FileModifyFlag=1;
break;
case '4':
MScore(access);
FileModifyFlag=1;
break;
case '5':
EScore(access);
FileModifyFlag=1;
break;
case '6':
CScore(access);
FileModifyFlag=1;
break;
default:
printf("指令输入错误!请重新输入!\n");
}
if(iItem=='0')break;
printf("|按任意键继续|\n");
getch();
ShowModifyMenue();
DisplaySigalStu(access);
printf("请输入指令(0-6):");
scanf("%c",&iItem);
fflush(stdin);
}
}
void DeletData(){
MYlist *access,*cur,*bef;
char iItem;
access=SearchAddress();
cur=access;
if(cur==NULL){
return;
}
DisplaySigalStu(cur);
bef=SearchAddressbef(cur);
printf("是否删除该数据(y/n):");
scanf("%c",&iItem);
fflush(stdin);
while(1){
if(iItem=='y'){
if(iItem=='y'&&bef->next==cur&&cur->next!=NULL){
FileModifyFlag=1;
Record--;
bef->next=cur->next;
free(cur);
break;
}
else if(cur==head){
FileModifyFlag=1;
Record--;
head=cur->next;
free(cur);
break;
}
else if(cur->next==NULL){
FileModifyFlag=1;
Record--;
bef->next=NULL;
free(cur);
break;
}
}
else if(iItem=='n'){
break;
}
else{
printf("指令错误,请重新输入!\n");
printf("是否删除该数据(y/n):");
scanf("%c",&iItem);
fflush(stdin);
}
}
}
void dataADD(){
system("cls");
MYlist *access,*creat;
int i=0;
char iItem;
access=head;
if(Record==-1){
printf("文件打开失败!\n");
return;
}
do{
if(Record==0){
printf("数据库中没有数据,是否添加数据(y/n):");
scanf("%c",&iItem);
fflush(stdin);
if(iItem!='y'&&iItem!='n')printf("输入指令错误!请重新输入!\n");
if(iItem=='y'){
FileModifyFlag=1;
Record++;
IDGets(access);
printf("请输入学生名称:");
gets(access->data.stuNAME);
SEXGets(access);
MScore(access);
EScore(access);
CScore(access);
DisplaySigalStu(access);
if(Record>DATAAM){
printf("数据库已满!\n");
return;
}
}
}
if(Record!=-1&&Record!=0){
printf("是否添加数据(y/n):");
scanf("%c",&iItem);
fflush(stdin);
if(iItem!='y'&&iItem!='n')printf("输入指令错误!请重新输入!\n");
if(iItem=='y'){
FileModifyFlag=1;
access=last;
creat=(MYlist*)malloc(list_len);
access->next=creat;
access=last=creat;
last->next=NULL;
Record++;
IDGets(access);
printf("请输入学生名称:");
gets(access->data.stuNAME);
SEXGets(access);
MScore(access);
EScore(access);
CScore(access);
DisplaySigalStu(access);
if(Record>DATAAM){
printf("数据库已满!\n");
return;
}
}
}
}while(iItem!='n');
}
void NewDataAdd(){
if(cFlag==1&&Record!=0&&FileModifyFlag!=0){
printf("将为您新建文件,");
SaveToFile();
}
printf("新建记录,请输入要新建记录的文件名称(.txt):");
gets(Filename);
if(strstr(Filename,".txt")!=NULL){
if(fopen(Filename,"r")!=NULL){
printf("该文件夹已存在!\n");
return;
}
printf("新建文件成功!\n");
if(cFlag==1){
Freelist(head);
cFlag=0;
Record=0;
FileModifyFlag=1;
FileopenFlag=1;
}
Record=0;
target=fopen(Filename,"w");
strcpy(Filenamecur,Filename);
fclose(target);
ReadtestFile("r");
}
else{
printf("新建文件失败,请新建(.txt)文件\n");
}
}
void DisplayData(){
MYlist *access;
int i=0;
char iItem;
access=head;
if(Record==-1){
printf("文件打开失败!\n");
return;
}
if(Record==0){
printf("该文件中没有任何记录,请先添加记录!\n");
return;
}
printf("\t|%-15s%-10s%-10s%-10s%-10s%-11s|\n","学号","姓名","性别","数学","英语","C语言");
for(;;){
printf(" |------------------------------------------------------------------|\n");
printf("\t|%-15d%-10s%-11s%-10d%-10d%-10d|\n",DATA_DIS);
printf(" |------------------------------------------------------------------|\n");
if(access->next==NULL)break;
access=access->next;
}
}
void Analysis(){
MYlist *access,*cur;
access=cur=head;
int i=0,MAXC,MINC,MAXE,MINE,MAXM,MINM;
float SumAll=0,sumM=0,sumE=0,sumC=0,aveC=0,aveE=0,aveM=0;
if(Record==0){
printf("数据库中目前没有数据!请添加数据库后使用该功能\n");
return;
}
for(i=0;i<Record;i++){
sumM+=access->data.stuMAT;
sumC+=access->data.stuC;
sumE+=access->data.stuENG;
if(access->next!=NULL)access=access->next;
else break;
}
access=head;
MAXC=MINC=head->data.stuC;
MAXE=MINE=head->data.stuENG;
MAXM=MINM=head->data.stuMAT;
for(i=0;i<Record;i++){
if(MAXC<access->data.stuC)MAXC=access->data.stuC;
if(MAXE<access->data.stuENG)MAXE=access->data.stuENG;
if(MAXM<access->data.stuMAT)MAXM=access->data.stuMAT;
if(MINC>access->data.stuC)MINC>access->data.stuC;
if(MINE>access->data.stuENG)MINE=access->data.stuENG;
if(MINM>access->data.stuMAT)MINM=access->data.stuMAT;
if(access->next!=NULL)access=access->next;
else break;
}
aveC=sumC/Record;
aveE=sumE/Record;
aveM=sumM/Record;
printf("通过数据分析得出:\n数学:平均分为%.1f\t最高分为%d\n",aveM,MAXM);
printf("英语:平均分为%.1f\t最高分为%d\n",aveE,MAXE);
printf("C语言:平均分为%.1f\t最高分为%d\n",aveC,MAXC);
}
void ManageMain(){
char iItem;
ShowMainMenue();
scanf("%c",&iItem);
fflush(stdin);
while(iItem!=0){
switch(iItem){
case '0':
break;
case '1':
NewDataAdd();
break;
case '2':
if(FileopenFlag==1){
dataADD();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '3':
if(FileopenFlag==1){
DisplayData();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '4':
if(FileopenFlag==1){
DisplaySearch();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '5':
if(FileopenFlag==1){
ModifyData();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '6':
if(FileopenFlag==1){
DeletData();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '7':
if(FileopenFlag==1){
RankDataSystem();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '8':
if(FileopenFlag==1){
Analysis();
}
else{
printf("请先打开一个文件!\n");
}
break;
case '9':
Openfile();
break;
case 'a':
if(FileopenFlag==1){
SaveToFile();
}
else{
printf("请先打开一个文件!\n");
}
break;
default:
printf("请输入正确的指令!\n");
}
if(iItem=='0')break;
printf("|按任意键继续|\n");
getch();
ShowMainMenue();
scanf("%c",&iItem);
fflush(stdin);
}
if(iItem=='0'&&FileModifyFlag!=0){
printf("检测到您打开了文件在您退出之前,");
SaveToFile();
}
}
int main(){
ManageMain();
system("pause");
}