#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
#define N 50
int n=3;
struct student
{
int sid;
char name[10];
char num[14];
float chinese;
float english;
float clanguage;
float totalscore;
float average;
};
void print(bool menu)
{
if(!menu)
{
cout<<"\t\t"<<"----------------------------------------------"<<endl;
cout<<"\t\t"<<"----------------------------------------------"<<endl;
cout<<"\t\t"<<"*** 学生成绩管理系统 ***"<<endl;
cout<<"\t\t"<<"*** 1.文件录入学生信息 ***"<<endl;
cout<<"\t\t"<<"*** 2.增加学生信息 ***"<<endl;
cout<<"\t\t"<<"*** 3.删除学生信息 ***"<<endl;
cout<<"\t\t"<<"*** 4.查找学生信息 ***"<<endl;
cout<<"\t\t"<<"*** 5.学生成绩排序 ***"<<endl;
cout<<"\t\t"<<"*** 6.显示学生信息 ***"<<endl;
cout<<"\t\t"<<"*** 7.退出系统 ***"<<endl;
cout<<"\t\t"<<"----------------------------------------------"<<endl;
cout<<"\t\t"<<"----------------------------------------------"<<endl;
}
}
void GetInformation(struct student *arr,int n)
{
FILE *fp;
int i;
char buffer[100];
if(fp=fopen("stu.dat","r"))
{
for(i=0;i<n;i++)
{
fgets(buffer,100,fp);
sscanf(buffer,"%s %s %f %f %f",&arr[i].name,arr[i].num,&arr[i].chinese,&arr[i].english,&arr[i].clanguage);
arr[i].totalscore=arr[i].chinese + arr[i].english + arr[i].clanguage;
arr[i].average=arr[i].totalscore/3;
if(feof(fp))
break;
}
cout<<"所有学生的成绩信息已录入!"<<endl<<endl;
fclose(fp);
}
}
void Display(struct student* arr,int n)
{
cout<<"序号"<<"\t"<<"姓名"<<"\t"<<" 学号"<<"\t\t"<<"语文"<<"\t"<<"英语"<<"\t"<<"C语言"<<"\t"<<"平均分"<<"\t"<<"总分"<<endl;
for(int i=0;i<n;i++)
{
cout<<" "<<i+1<<"\t"<<arr[i].name<<"\t"<<arr[i].num<<"\t "<<arr[i].chinese<<"\t "<<arr[i].english<<"\t "<<arr[i].clanguage
<<"\t "<<arr[i].average<<"\t"<<arr[i].totalscore<<endl;
}
cout<<endl;
}
void Save(struct student* arr,int n)
{
FILE *fp;
fp=fopen("stu1.dat","w+");
if(fp==NULL)
{
cout<<"文件不存在!"<<endl;
exit(0);
}
fwrite(arr,sizeof(struct student)*n,n,fp);
fclose(fp);
cout<<endl<<"*所有学生的成绩信息已保存!!!"<<endl<<endl;
}
void Delete(struct student* arr,int n)
{
char number[10];
bool flag=false;
cout<<"要删除的学生信息:"<<endl;
cout<<"请输入该学生的学号:"<<endl;
cin>>number;
for(int i=0;i<n;i++)
{
if (!strcmp(number,arr[i].num))
{
strcpy(arr[i].name," ");
strcpy(arr[i].num," ");
arr[i].chinese=0;
arr[i].english=0;
arr[i].clanguage=0;
arr[i].totalscore=0;
arr[i].average=0;
Save(arr,n);
flag=true;
}
}
if(flag==true)
{
cout<<endl<<"该学生不存在!"<<endl;
}
}
void Search(struct student* arr,int n)
{
int temp,i;
bool flag=false;
cout<<"---------------1.按学号查找---------------"<<endl;
cout<<"---------------2.按姓名查找---------------"<<endl;
cout<<"---------------3.返回上层菜单-------------"<<endl;
cout<<"请按数字键(1—3)选择相应的功能:"<<endl;
cin>>temp;
switch (temp)
{
case 1:
{
char number[14];
cout<<"请输入学号(10位整数的学号):"<<endl;
cin>>number;
for(i=0;i<n;i++)
{
if(!strcmp(number,arr[i].num))
{
cout<<"姓名"<<"\t"<<" 学号"<<"\t\t"<<"语文"<<"\t"<<"英语"<<"\t"<<"C语言"<<"\t"<<"平均分"<<"\t"<<"总分"<<endl;
cout<<arr[i].name<<"\t"<<arr[i].num<<"\t "<<arr[i].chinese<<"\t "<<arr[i].english<<"\t "<<arr[i].clanguage
<<"\t "<<arr[i].average<<"\t"<<arr[i].totalscore<<endl<<endl;
flag=true;
}
}
if(!flag)
{
cout<<endl<<"该学生不存在."<<endl<<endl;
}
}
break;
case 2:
{
char nam[10];
cout<<"请输入姓名(汉字):"<<endl;
cin>>nam;
for(i=0;i<n;i++)
{
if(!strcmp(nam,arr[i].name))
{
cout<<"姓名"<<"\t"<<"学号"<<"\t\t"<<"语文"<<"\t"<<"英语"<<"\t"<<"C语言"<<"\t"<<"平均分"<<"\t"<<"总分"<<endl;
cout<<arr[i].name<<"\t"<<arr[i].num<<"\t"<<arr[i].chinese<<"\t"<<arr[i].english<<"\t"<<arr[i].clanguage
<<"\t"<<arr[i].average<<"\t"<<arr[i].totalscore<<endl<<endl;
flag=true;
}
}
if(!flag)
{
cout<<endl<<"该学生不存在."<<endl<<endl;
}
}
break;
default:
break;
}
}
void Sort(struct student* arr,int n)
{
int temp,i;
bool flag=false;
student stemp;
cout<<"---------------1.按学号排序---------------"<<endl;
cout<<"---------------2.按总分排序---------------"<<endl;
cout<<"---------------3.返回上层菜单-------------"<<endl;
cout<<"请按数字键(1—3)选择相应的功能:"<<endl;
cin>>temp;
switch (temp)
{
case 1:
{
int j,index;
char min[14];
for(i=0;i<n;i++)
{
index=i;
strcpy(min,arr[i].num);
for(j=i+1;j<n;j++)
{
if(strcmp(min,arr[j].num)>0)
{
index=j;
}
}
if(index!=i)
{
stemp=arr[index];
arr[index]=arr[i];
arr[i]=stemp;
}
}
Display(arr,n);
}
break;
case 2:
{
int bound,exchange=n-1;
while(exchange!=0)
{
bound=exchange;
exchange=0;
for(i=0;i<bound;i++)
{
if(arr[i].totalscore<arr[i+1].totalscore)
{
stemp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=stemp;
exchange=i;
}
}
}
Display(arr,n);
}
break;
default:
break;
}
}
void Add(struct student* arr)
{
bool flag=false;
n+=1;
cout<<"请根据下面提示输入新的学生信息:"<<endl;
cout<<"姓名:";
cin>>arr[n-1].name;
cout<<"学号:";
cin>>arr[n-1].num;
cout<<"语文:";
cin>>arr[n-1].chinese;
cout<<"英语:";
cin>>arr[n-1].english;
cout<<"C语言:";
cin>>arr[n-1].clanguage;
arr[n-1].totalscore=arr[n-1].chinese + arr[n-1].english + arr[n-1].clanguage;
arr[n-1].average=arr[n-1].totalscore/3;
cout<<"新的学生信息已录入!"<<endl<<endl;
flag=true;
}
int main(int argc,char* argv[])
{
struct student arr[N];
bool flag=true;
if(flag)
{
int select;
print(false);
cout<<"请按数字键(1或7)选择相应的功能:"<<endl;
cin>>select;
while(0<select && select<7)
{
switch (select)
{
case 1:
GetInformation(arr,N);
print(true);
break;
case 2:
;
case 3:
;
case 4:
;
case 5:
;
case 6:
cout<<"学生基本信息未录入,功能无法实现。"<<endl<<endl;
print(false);
cout<<"请按数字键(1或7)选择相应的功能:"<<endl;
cin>>select;
break;
default:
break;
}
if(select==1)
break;
}
if(select>=7)
flag=false;
else
flag=true;
if(flag)
{
cout<<"请按数字键(1—7)选择相应的功能:"<<endl;
cin>>select;
while(select>0 && select<7)
{
switch (select)
{
case 1:
cout<<"学生信息已录入!"<<endl;
print(true);
break;
case 2:
Add(arr);
print(true);
break;
case 3:
Delete(arr,n);
print(true);
break;
case 4:
Search(arr,n);
print(true);
break;
case 5:
Sort(arr,n);
print(true);
break;
case 6:
Display(arr,n);
print(true);
break;
default:
break;
}
cout<<"请按数字键(1—7)选择相应的功能:"<<endl;
cin>>select;
}
}
Save(arr,n);
cout<<"感谢使用本系统!"<<endl;
}
return 0;
}