📄 ds.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
long id;
char name[10];
float math1;
float math2;
float linearalgebra;
float english;
float chinese;
float base;
float sports;
float sum;
float ave;
}STUDENT;
int n=0;
STUDENT st[100];
FILE *tp;
char title[200]={"学号 姓名 数学1 数学2 线数 英语 语文 基础 体育 总分 平均成绩 \n"};
/*输入信息*/
STUDENT InputAstudent()
{
STUDENT a;
printf("学号: "); scanf("%ld",&a.id);
printf("姓名: "); scanf("%s",a.name);
printf("数学1: "); scanf("%f",&a.math1);
printf("数学2: "); scanf("%f",&a.math2);
printf("线数: "); scanf("%f",&a.linearalgebra);
printf("英语: "); scanf("%f",&a.english);
printf("语文: "); scanf("%f",&a.chinese);
printf("基础: "); scanf("%f",&a.base);
printf("体育: "); scanf("%f",&a.sports);
a.sum=a.math1+a.math2+a.linearalgebra+a.english+a.chinese+a.base+a.sports;
a.ave=float(a.sum/7.0);
printf("\n");
return a;
}
void InputStudents()
{
int x;
printf("\n请输入学生的信息\n\n");
st[n]=InputAstudent();
n++;
printf("是否需要继续输入? 1.是,2.否 ");
scanf("%d",&x);
if (x==1)
InputStudents();
else
printf("\n退出输入!\n");
}
/*输出信息*/
void OutAstudent(STUDENT *p)
{
printf("学号 姓名 数学1 数学2 线数 英语 语文 基础 体育 总分 平均成绩 \n");
printf("%ld ",p->id);
printf("%s ",p->name);
printf("%5.3f ",p->math1);
printf("%5.3f ",p->math2);
printf("%5.3f ",p->linearalgebra);
printf("%5.3f ",p->english);
printf("%5.3f ",p->chinese);
printf("%5.3f ",p->base);
printf("%5.3f ",p->sports);
printf("%5.3f ",p->sum);
printf("%5.3f ",p->ave);
printf("\n\n\n");
}
void OutputStudents()
{
int i;
for(i=0;i<n;i++)
{
OutAstudent(st+i);
}
}
/*按姓名查找*/
int SrchByname(char *name)
{
int i=0;
while(strcmp(st[i].name,name)&&i<n) i++;
if(i<n) return i;
else return -1;
}
void Srchname()
{
int k;
char name[10];
printf("请输入需要查找的学生的姓名: ");
scanf("%s",name);
printf("\n");
k=SrchByname(name);
if(k>=0) OutAstudent(st+k);
else printf("\n查无此人!\n");
}
/*按学号查找*/
int SrchByid(long id)
{
int i=0;
while(st[i].id!=id&&i<n) i++;
if(i<n) return i;
else return -1;
}
void Srchid()
{
int k;
long id;
printf("请输入需要查找的学生的学号: ");
scanf("%ld",&id);
printf("\n");
k=SrchByid(id);
if(k>=0) OutAstudent(st+k);
else printf("\n查无此人!\n");
}
/*删除*/
void DeleteAstudent(int k)
{
int i;
for(i=k;i<n;i++)
{
st[i]=st[i+1];
}
n--;
}
/*依姓名删除*/
void DeleteByname()
{
int i;
char name[10];
printf("请输入需要删除的学生姓名: "); scanf("%s",name);
printf("\n");
i=SrchByname(name);
DeleteAstudent(i);
OutputStudents();
}
/*依学号删除*/
void DeleteByid()
{
int i;
long k;
printf("请输入需要删除的学生学号: "); scanf("%ld",&k);
printf("\n");
i=SrchByid(k) ;
DeleteAstudent(i);
OutputStudents();
}
/*依姓名修改成绩*/
int ChangeByname(char *name,float math1,float math2,float linearalgebra,float english,float chinese,float base,float sports)
{
int k;
float sum=0.0,ave;
k=SrchByname(name);
if(k==-1) return -1;
else st[k].math1=math1;
st[k].math2=math2;
st[k].linearalgebra=linearalgebra;
st[k].english=english;
st[k].chinese=chinese;
st[k].base=base;
st[k].sports=sports;
sum=math1+math2+linearalgebra+english+chinese+base+sports;
ave=float(sum/7.0);
st[k].sum=sum;
st[k].ave=ave;
OutAstudent(st+k);
return 1;
}
void Changename()
{
float math1,math2,linearalgebra,english,chinese,base,sports;
char name[10];
printf("请输入需要修改的学生的姓名: ");
scanf("%s",name);
printf("\n");
printf("请输入修改后的成绩:\n");
printf("数学1: "); scanf("%f",&math1);
printf("数学2: "); scanf("%f",&math2);
printf("线数: "); scanf("%f",&linearalgebra);
printf("英语: "); scanf("%f",&english);
printf("语文: "); scanf("%f",&chinese);
printf("基础: "); scanf("%f",&base);
printf("体育: "); scanf("%f",&sports);
printf("\n");
ChangeByname(name,math1,math2,linearalgebra,english,chinese,base,sports);
}
/*依学号修改成绩*/
int ChangeByid(long id,float math1,float math2,float linearalgebra,float english,float chinese,float base,float sports)
{
int k;
float sum=0.0,ave;
k=SrchByid(id);
if(k==-1) return -1;
else st[k].math1=math1;
st[k].math2=math2;
st[k].linearalgebra=linearalgebra;
st[k].english=english;
st[k].chinese=chinese;
st[k].base=base;
st[k].sports=sports;
sum=math1+math2+linearalgebra+english+chinese+base+sports;
ave=float(sum/7.0);
st[k].sum=sum;
st[k].ave=ave;
OutAstudent(st+k);
return 1;
}
void Changeid()
{
long id;
float math1,math2,linearalgebra,english,chinese,base,sports;
printf("请输入需要修改的学生的学号: ");
scanf("%ld",&id);
printf("\n");
printf("请输入修改后的成绩:\n");
printf("数学1: "); scanf("%f",&math1);
printf("数学2: "); scanf("%f",&math2);
printf("线数: "); scanf("%f",&linearalgebra);
printf("英语: "); scanf("%f",&english);
printf("语文: "); scanf("%f",&chinese);
printf("基础: "); scanf("%f",&base);
printf("体育: "); scanf("%f",&sports);
printf("\n");
ChangeByid(id,math1,math2,linearalgebra,english,chinese,base,sports);
}
/*学生成绩降序排序*/
void SortByave()
{
STUDENT t;
int i,j,m;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(st[j+1].ave>st[j].ave)
{
t.id=st[j].id;
for(m=0;m<10;m++)
t.name[m]=st[j].name[m];
t.math1=st[j].math1;
t.math2=st[j].math2;
t.linearalgebra=st[j].linearalgebra;
t.english=st[j].english;
t.chinese=st[j].chinese;
t.base=st[j].base;
t.sports=st[j].sports;
t.sum=st[j].sum;
t.ave=st[j].ave;
st[j].id=st[j+1].id;
for(m=0;m<10;m++)
st[j].name[m]=st[j+1].name[m];
st[j].math1=st[j+1].math1;
st[j].math2=st[j+1].math2;
st[j].linearalgebra=st[j+1].linearalgebra;
st[j].english=st[j+1].english;
st[j].chinese=st[j+1].chinese;
st[j].base=st[j+1].base;
st[j].sports=st[j+1].sports;
st[j].sum=st[j+1].sum;
st[j].ave=st[j+1].ave;
st[j+1].id=t.id;
for(m=0;m<10;m++)
st[j+1].name[m]=t.name[m];
st[j+1].math1=t.math1;
st[j+1].math2=t.math2;
st[j+1].linearalgebra=t.linearalgebra;
st[j+1].english=t.english;
st[j+1].chinese=t.chinese;
st[j+1].base=t.base;
st[j+1].sports=t.sports;
st[j+1].sum=t.sum;
st[j+1].ave=t.ave;
}
}
}
OutputStudents();
}
/*学生学号升序排序*/
void SortByid()
{
STUDENT t;
int i,j,m;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(st[j+1].id<st[j].id)
{
t.id=st[j].id;
for(m=0;m<10;m++)
t.name[m]=st[j].name[m];
t.math1=st[j].math1;
t.math2=st[j].math2;
t.linearalgebra=st[j].linearalgebra;
t.english=st[j].english;
t.chinese=st[j].chinese;
t.base=st[j].base;
t.sports=st[j].sports;
t.sum=st[j].sum;
t.ave=st[j].ave;
st[j].id=st[j+1].id;
for(m=0;m<10;m++)
st[j].name[m]=st[j+1].name[m];
st[j].math1=st[j+1].math1;
st[j].math2=st[j+1].math2;
st[j].linearalgebra=st[j+1].linearalgebra;
st[j].english=st[j+1].english;
st[j].chinese=st[j+1].chinese;
st[j].base=st[j+1].base;
st[j].sports=st[j+1].sports;
st[j].sum=st[j+1].sum;
st[j].ave=st[j+1].ave;
st[j+1].id=t.id;
for(m=0;m<10;m++)
st[j+1].name[m]=t.name[m];
st[j+1].math1=t.math1;
st[j+1].math2=t.math2;
st[j+1].linearalgebra=t.linearalgebra;
st[j+1].english=t.english;
st[j+1].chinese=t.chinese;
st[j+1].base=t.base;
st[j+1].sports=t.sports;
st[j+1].sum=t.sum;
st[j+1].ave=t.ave;
}
}
}
OutputStudents();
}
/*统计各分数段人数*/
int CountByave(int low,int high)
{
int i,s=0;
for(i=0;i<n;i++)
{
if(st[i].ave>=low&&st[i].ave<high)
s++;
}
return s;
}
void DisplayCount()
{
int i,low,high;
printf("各个分数段的人数:\n");
for(i=0;i<10;i++)
{
low=i*10;
high=i*10+9;
printf("%d ~ %d: ",low,high);
printf("%5d\n",CountByave(low,high));
}
}
/*文件输出*/
void FileWrite()
{
int i;
char file[10];
printf("请输入要保存文件名: ");
scanf("%s",file);
tp = fopen(file,"w+");
fputs(title,tp);
for(i=0;i<n;i++)
{
fprintf(tp,"%d %s %5.3f %5.3f %5.3f %5.3f %5.3f %5.3f %5.3f %5.3f %5.3f \n",st[i].id,st[i].name,st[i].math1,st[i].math2,st[i].linearalgebra,st[i].english,st[i].chinese,st[i].base,st[i].sports,st[i].sum,st[i].ave);
}
fclose(tp);
printf("\n文件保存成功!\n");
}
/*分离函数*/
void Depart(char to[200])
{
int i = 0;
int j = 0;
int k = 0;
static int ni=0;
char ch[30]={'\0'};
int len = strlen(to);
if(len>4)
{
while(j<len)
{
if(to[j]!=' '&&to[j]!='\t')
{
for(i=0; to[j]!=' '&&j<len&&to[j]!='\t'; i++,j++)
{
ch[i]=to[j];
}
k++;
ch[i]='\0';
switch(k)
{
case 1:
st[ni].id=atol(ch);
break;
case 2:
strcpy(st[ni].name,ch);
break;
case 3:
st[ni].math1=float(atof(ch));
break;
case 4:
st[ni].math2=float(atof(ch));
break;
case 5:
st[ni].linearalgebra=float(atof(ch));
break;
case 6:
st[ni].english=float(atof(ch));
break;
case 7:
st[ni].chinese=float(atof(ch));
break;
case 8:
st[ni].base=float(atof(ch));
break;
case 9:
st[ni].sports=float(atof(ch));
break;
case 10:
st[ni].sum=float(atof(ch));
break;
case 11:
st[ni].ave=float(atof(ch));
break;
}
}
else
j++;
}
ni++;
}
n=ni;
}
/*文件读入*/
void FileRead()
{
char file[20],read[200];
printf("请输入要导入的文件名: ");
scanf("%s",file);
tp=fopen(file,"r");
fgets(title,200,tp);
printf("\n%s",title);
while(!feof(tp))
{
fgets(read,200,tp);
printf("%s\n",read);
Depart(read);
}
OutputStudents();
printf("\n导入信息成功!\n");
}
/*显示菜单*/
int Displaymenu()
{
int c;
printf("\n");
printf(" *******************************************\n");
printf(" 欢迎使用学生信息管理系统 by ycyin\n");
printf(" *******************************************\n");
printf("\n");
printf("\n");
printf("1.输入学生信息 2.输出学生信息\n");
printf("\n");
printf("3.依姓名查询学生信息 4.依学号查询学生信息\n");
printf("\n");
printf("5.依姓名删除学生信息 6.依学号删除学生信息\n");
printf("\n");
printf("7.依姓名修改学生分数 8.依学号修改学生分数\n");
printf("\n");
printf("9.按学生平均成绩降序显示信息 10.按学生学号升序显示信息\n");
printf("\n");
printf("11.统计各分数段人数 12.将学生信息保存到文件\n");
printf("\n");
printf("13.从文件导入学生信息 14.退出系统\n");
printf("\n");
printf("\n 请选择: ");
scanf("%d",&c);
printf("\n");
return c;
}
/*返回菜单*/
int Backtomenu()
{
int d,a;
printf("\n是否返回主菜单? 1.是 2.否 ");
scanf("%d",&d);
if(d==1) a=Displaymenu();
else a=14;
return a;
}
/*主函数*/
void main()
{
int ch,i=1;
ch=Displaymenu();
while(i==1)
{
switch(ch)
{
case 1: InputStudents(); ch=Backtomenu(); break;
case 2: OutputStudents(); ch=Backtomenu(); break;
case 3: Srchname(); ch=Backtomenu(); break;
case 4: Srchid(); ch=Backtomenu(); break;
case 5: DeleteByname(); ch=Backtomenu(); break;
case 6: DeleteByid(); ch=Backtomenu(); break;
case 7: Changename(); ch=Backtomenu(); break;
case 8: Changeid(); ch=Backtomenu(); break;
case 9: SortByave(); ch=Backtomenu(); break;
case 10: SortByid(); ch=Backtomenu(); break;
case 11: DisplayCount(); ch=Backtomenu(); break;
case 12: FileWrite(); ch=Backtomenu(); break;
case 13: FileRead(); ch=Backtomenu(); break;
case 14: printf("\n谢谢使用,退出系统!"); i=0; break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -