哥们儿 珍惜啊 哥一夜没睡觉弄出来的····
虽然不是很完美···
#include
#include
void input(); //声明7个函数
void output();
void paixu();
void chazhao();
void charu();
void shanchu();
void tongji();
struct Student //结构体
{
int num;
char name[12];
float math;
float eng;
float com;
float sum;
float ave;
};
Student x[30];
int N=0;
void main()
{
int m;
do
{ //开场效果
cout<
switch(m)
{
case 1: input();break; //选择七个函数。。
case 2: output();break;
case 3: paixu();break;
case 4: chazhao();break;
case 5: charu();break;
case 6: shanchu();break;
case 7: tongji();break;
case 8: cout<<"谢谢使用!"<
}while(m!=8);
}
void input() //输入信息
{
char m;
do
{
int n=0;int z=N,t=0;
do{
t=0;
cout<<"请输入学号!"<
for( n=0;n
{
cout<<"该学号已存在!!"<
break;
}
}while(t==1);
cout<<"请输入姓名"<
do
{
cout<<"请输入数学成绩(0--100)"<
}while(x[N].math<0||x[N].math>100);
do
{
cout<<"请输入英语成绩(0--100)"<
}while(x[N].eng<0||x[N].eng>100);
do
{
cout<<"请输入计算机成绩"<
}while(x[N].com<0||x[N].com>100);
x[N].sum=x[N].math+x[N].eng+x[N].com;
x[N].ave=x[N].sum/3;
cout<<"是否继续输入?(继续请输入y,结束输入其他)"<
N++;
}while(m=='y');
}
void output() //输出信息
{
int m;
if(N>0)
{
cout<
else
cout<<"未输入任何信息!!"<
void paixu() //排序
{
if(N>0)
{
for(int k=0;k
Student max;
if(x[m].sum
max=x[m+1];
x[m+1]=x[m];
x[m]=max;
}
}
}
else
cout<<"未输入任何信息!!"<
void chazhao() //查找
{
int n;
if(N>0)
{
cout<<"请输入要查找学生的学号!"<
for(int m=0;m
{
cout<
break;
}
if(x[m].num!=n)
cout<<"该学号不存在!!"<
else
cout<<"未输入任何信息!!"<
void charu() //插入
{
char n;
do
{
cout<<"请输入学号!"<
cout<<"请输入姓名"<
do
{
cout<<"请输入数学成绩(0--100)"<
}while(x[N].math<0||x[N].math>100);
do
{
cout<<"请输入英语成绩(0--100)"<
}while(x[N].eng<0||x[N].eng>100);
do
{
cout<<"请输入计算机成绩"<
}while(x[N].com<0||x[N].com>100);
x[N].sum=x[N].math+x[N].eng+x[N].com;
x[N].ave=x[N].sum/3;
N++;
cout<<"是否继续输入?(继续,输入y,否则输入其他)"<
}while(n=='y');
}
void shanchu() //删除
{
if(N>0)
{
cout<<"请输入要删除学生的学号!"<
cin>>n;
for(int m=0;m
{
for(int k=m;k<=N+1;k++)
x[k]=x[k+1];
N--;
t=1;
}
if(t==0)
cout<<"该学号不存在!!"<
else
cout<<"未输入任何信息!!"<
void tongji() //统计
{
if(N>0)
{
int n,a=0,b=0,c=0,d=0,e=0,f=0;
for(int m=0;m
n=(int)x[m].ave/10;
switch(n)
{
case 10: a++;break;
case 9: b++;break;
case 8: c++;break;
case 7: d++;break;
case 6: e++;break;
default: f++;
}
}
cout<<"分数段 100"<<" 90--100"<<" 80--90 "<<" 70--80 "<<" 60--70 "<<" 60以下 "<
else
cout<<"未输入任何信息!!"<
有个用C写的,看不能不凑合着改改
该考试了,我没专门时间给你写
#include
#include
#include
#define SIZE 4//使用预定义,便于随时修改
//定义结构体
struct student_type
{
char name[8];
char num[11];
char cla[20];
int score[3];//int类型的成绩数组
double ave;//平均分
};
//定义结构体类型的学生数组
student_type stud[SIZE];
student_type temp;
//保存文件
void save()
{
FILE *fp;
int i;
//如果打开不成功
if(( fp = fopen("score.txt", "wb")) == NULL )
{
printf("The file can't open!\n");
return;
}
//以结构体形式保存到文件之中
for( i = 0; i < SIZE; i++ )
if( fwrite( &stud[i], sizeof( struct student_type ), 1, fp ) != 1 )
{
printf("file write error!");
return;
}
fclose( fp );//关闭文件流
//显示文件保存成功
printf("\n\nThe file save success.\n\n");
}
//文件输出
void display()
{
FILE *fp;
int i;
//打开所保存的文件
fp = fopen("score.txt","rb");
printf("Now, read the file...\n");
printf("*****************Welcome to The Score Manage System****************\n");
printf("Name No. Class score1 score2 score3 ave\n");
printf("*******************************************************************\n");
//将文件中的结构体读取出来,并显示到屏幕
for( i = 0; i < SIZE; i++ )
{
fread(&stud[i], sizeof( student_type ), 1, fp );
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
fclose( fp );//关闭文件
}
//读入各个成绩
void read()
{
int i;
double sum[SIZE] = {0};//总分数组初始化
for( i = 0; i < SIZE; i++ )
{
printf("Enter Name, No., Class, score1, score2 and score3:\n");
scanf("%s%s%s%d%d%d", stud[i].name, stud[i].num, stud[i].cla, &stud[i].score[0], &stud[i].score[1], &stud[i].score[2]);
sum[i] = stud[i].score[0] + stud[i].score[1] + stud[i].score[2];//求总分
stud[i].ave = sum[i] / 3;//求平均成绩
}
}
//插入数据元素
void Insert()
{
int i, t, n;
FILE *fp, *fp1;
printf("Please Enter the Information you Insert:\n");
printf("Name, Student ID, class, score1, score2, score3:\n");
//输入的变量临时存储在temp中
scanf("%s%s%s%d%d%d", temp.name, temp.num, temp.cla, &temp.score[0], &temp.score[1], &temp.score[2]);
temp.ave =( temp.score[0] + temp.score[1] + temp.score[2]) / 3.0;
//打开排序后的文件
if(( fp = fopen("sortScore.txt","r")) == NULL )
{
printf("The file can't epen.\n\n");
exit( 0 );
}
//输出原始数据
printf("\n\nThe original score is :\n");
printf("Name No. Class score1 score2 score3 ave\n");
printf("*******************************************************************\n");
for( i = 0; i < SIZE; i++ )
{
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
//从最后一个开始判断,是否大于,因为要插入,最后要向后移动一个位置
n = i;
for( t = 0; stud[t].ave > temp.ave && t < n; t++ );
//找到不大于的位置
printf("Now:\n");
fp1 = fopen("InsertScore.txt","w");
//输出没有变的一部分信息
for( i = 0; i < t; i++ )
{
fwrite( &stud[i], sizeof( struct student_type), 1, fp1 );
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
//输出要插入的信息
fwrite( &temp, sizeof( struct student_type ), 1, fp1 );
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", temp.name, temp.num,
temp.cla, temp.score[0], temp.score[1], temp.score[2], temp.ave );
//输出原来剩余一部分信息
for( i = t; i < n; i++ )
{
fwrite( &stud[i], sizeof( struct student_type), 1, fp1 );
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
printf("\n");
//关闭文件流
fclose( fp1 );
fclose( fp );
}
//排序,按照平均分从大到小排序
void Sort()
{
FILE *fp1, *fp2;
int i,j;
//打开原来存储信息的文件
if(( fp1 = fopen("score.txt","rb")) == NULL )
{
printf("The file can't epen.\n\n");
exit( 0 );
}
//建立一个存储排序后的信息的文件
if(( fp2 = fopen("sortScore.txt","wb")) == NULL )
{
printf("The file write error.\n");
exit(0);
}
for( i = 0; i < SIZE; i++ )
if(fread(&stud[i], sizeof(struct student_type), 1, fp1 ) != 1 )
{
printf("file read error.");
exit(0);
}
//循环遍历比较
for( i = 0; i < SIZE; i++ )
{
for( j = i + 1; j < SIZE; j++ )
{
//交换
if( stud[i].ave < stud[j].ave )
{
temp = stud[i];
stud[i] = stud[j];
stud[j] = temp;
}
fwrite( &stud[i], sizeof( struct student_type ), 1, fp2 );
}
}
fclose( fp1 );
fclose( fp2 );
//直接输出排序后的文件
FILE *fp;
fp = fopen("sortScore.txt","rb");
printf("\n\nAfter sort, the score is :\n");
printf("Name No. Class score1 score2 score3 ave\n");
printf("*******************************************************************\n");
for( i = 0; i < SIZE; i++ )
{
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
fclose(fp);
}
//删除指定信息,以姓名为关键字
void Delete()
{
FILE *fp;
int i, j, n, flag;
char name[10];
//打开添加后的文件
if( (fp = fopen("InsertScore.txt","rb")) == NULL )
{
printf("The file can't epen.\n\n");
exit( 0 );
}
//输出原始信息
printf("\n\nThe original score is :\n");
printf("Name No. Class score1 score2 score3 ave\n");
printf("*******************************************************************\n");
for( i = 0; fread(&stud[i], sizeof( struct student_type), 1, fp) != 0; i++ )
{
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
fclose( fp );
n = i;
//输入要删除的姓名
printf("\nEnter the name you delete:");
scanf("%s", name );
for( flag = 1, i = 0; flag && i < n; i++ )
{
if( strcmp( name, stud[i].name ) == 0 )
{
//如果找到该位置,将后面的依次向前移动一个位置
for( j = i; j < n - 1; j++ )
{
strcpy( stud[j].name, stud[j+1].name );
strcpy( stud[j].cla, stud[j+1].cla );
strcpy( stud[j].num, stud[j+1].num );
stud[j].ave = stud[j+1].ave;
stud[j].score[0] = stud[j+1].score[0];
stud[j].score[1] = stud[j+1].score[1];
stud[j].score[2] = stud[j+1].score[2];
}
flag = 0;
}
}
if( !flag )
n = n - 1;
else
printf("\nCan't found!\n");
//输出删除后的信息
printf("Now ,the socre are:\n");
if((fp = fopen("AfterDelete.txt","wb")) == NULL )
{
printf("Can't open file!\n");
exit(0);
}
for( i = 0; i < n; i++ )
fwrite(&stud[i], sizeof( struct student_type), 1, fp);
fclose(fp);
fp = fopen("AfterDelete.txt","r");
for( i = 0; fread( &stud[i], sizeof(struct student_type), 1, fp ) != 0; i++)
{
printf("%-10s%10s%10s %8d %8d %8d %10.2f\n", stud[i].name, stud[i].num,
stud[i].cla, stud[i].score[0], stud[i].score[1], stud[i].score[2], stud[i].ave );
}
printf("\n");
fclose(fp);
}
void main()
{
int choice;
printf("\t~~Welcome to the score Manage System~~\n");
printf("Enter you choice:\n");
printf("1, Add 2, sort 3, Insert 4, Delete 0 exit \n");
scanf("%d", &choice );
while( choice != 0 )
{
switch( choice )
{
case 1:read();save();display();break;
case 2:system("cls");Sort();break;
case 3:system("cls");Insert();break;
case 4:system("cls");Delete();break;
default:printf("Enter error.");
break;
}
printf("Enter you choice:\n");
printf("1, Add 2, sort 3, Insert 4, Delete 0 exit \n");
scanf("%d", &choice );
}
}
/*测试数据,直接拷贝,粘贴
Angle 48140623 0623 95 98 97
Lucy 48140624 0624 95 65 78
Mark 48140625 0625 99 100 85
Tom 48140626 0626 45 65 85
*/