学生成绩排序与查找的设计与实现
『壹』 用C++编写函数实现排序,设计排序算法对N个学生的成绩进行排序,排序方式根据函数的style参数确定
//a为输来入的数据数自组,n 为数组的元素个数,style 为排序方式
//没有编译器,没测试
void sort(int a[],int n,char style)
{
int i,j,t;
n--;
if (style=='a')
{
while(n>0)
{j=0;
for(i=0;i<n;i++)
if(a[i]>a[i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
j=i;
}
n=j;
}
}
else
{
while(n>0)
{j=0;
for(i=0;i<n;i++)
if(a[i]<a[i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
j=i;
}
n=j;
}
}
}
『贰』 求答案!《学生成绩管理系统》的设计与实现
要免费的木有,想要找人代做,可以找我,联系方式见个人简介。
『叁』 学生成绩核算系统的设计与实现
#include "iostream.h"
#include "string.h"
#include "fstream.h"
#define N 100
struct stu
{
char name[10];
char sex[3];
char subject[10];
char subna[4];
char id[9];
float xf;
float pscj;
float sycj;
float jmcj;
float zhcj;
float sdxf;
};
struct stu s1[N];
struct stu *ps;
struct stu s;
void input();
void check();
void check_num();
void check_name();
void check_idcj();
void shrt();
void shrtzhjx();
void shrtzhsx();
void shrtsdjx();
void shrtsdsx();
void del();
void savequit();
void menu();
int all;
void text();
int main()
{
menu();
return 1;
}
void menu()
{
int x;
x=1;
while(x)
{
cout<<" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "<<endl;
cout<<" 学生成绩管理系统 "<<endl;
cout<<endl;
cout<<" 学生成绩录入(1) 学生信息查询(2) 删除学生记录(3) "<<endl;
cout<<endl;
cout<<" 排序 (4) 保存学生信息(5) 查看保存记录(6) "<<endl;
cout<<endl;
cout<<" 退出软件系统(0) "<<endl;
cout<<"\n请选择功能:";
cin>>x;
switch(x)
{
case 1: input();break;
case 2: check();break;
case 3: del();break;
case 4: shrt();break;
case 5: savequit();break;
case 6: text();break;
case 0: cout<<"成功退出系统."<<endl;break;
}
}
}
void input()
{
int i,u;
cout<<"请输入您要录入的学生人数(目前仅限100人):";
cin>>all;
ps=s1;
for(i=1;i<=all;i++,ps++)
{
cout<<"请输入第"<<i<<"名学生信息"<<endl;
cout<<"学号:";
cin>>ps->id;
cout<<endl;
cout<<"姓 名:";
cin>>ps->name;
cout<<endl;
cout<<"性 别:";
cin>>ps->sex;
cout<<endl;
cout<<"课程编号:";
cin>>ps->subna;
cout<<endl;
cout<<"课 程:";
cin>>ps->subject;
cout<<endl;
cout<<"学 分:";
cin>>ps->xf;
cout<<endl;
cout<<"平时成绩:";
cin>>ps->pscj;
cout<<endl;
cout<<"实验成绩:";
cin>>ps->sycj;
cout<<endl;
cout<<"卷面成绩:";
cin>>ps->jmcj;
cout<<endl;
cout<<"停止录入请输入0,继续录入输入1:";
cin>>u;
cout<<endl;
if(ps->sycj>0)
ps->zhcj=(float)(ps->pscj*0.15+ps->sycj*0.15+ps->jmcj*0.7);
else
ps->zhcj=(float)(ps->pscj*0.3+ps->jmcj*0.7);
if(ps->zhcj>=90&&ps->zhcj<=100)
ps->sdxf=ps->xf;
else if(ps->zhcj>=80&&ps->zhcj<90)
ps->sdxf=ps->xf*0.8;
else if(ps->zhcj>=70&&ps->zhcj<80)
ps->sdxf=ps->xf*0.75;
else if(ps->zhcj>=60&&ps->zhcj<70)
ps->sdxf=ps->xf*0.6;
else ps->sdxf=60;
if(u!=1) menu();
}
}
void check()
{
int a;
cout<<" <<查询界面>> "<<endl;
cout<<endl;
cout<<" <学生基本信息查询> "<<endl;
cout<<endl;
cout<<" (1) 按学号查询 "<<endl;
cout<<" (2) 按姓名查询 "<<endl;
cout<<endl;
cout<<" <学生考试成绩查询>"<<endl;
cout<<endl;
cout<<" (3) 按学号查询 "<<endl;
cout<<" (0)返回上一级菜单 "<<endl;
cout<<"请选择查询方式:";
cin>>a;
switch(a)
{
case 1: check_num();break;
case 2: check_name();break;
case 3: check_idcj();break;
case 0: break;
}
}
void check_num()
{
int student=0,i;
char id[9];
ps=s1;
cout<<"请输入您要查询的学号:";
cin>>id;
for(i=0;i<N;i++,ps++)
{
if(strcmp(id,ps->id)==0)
{cout<<"学 号:"<<ps->id<<" "<<"姓 名:"<<ps->name<<" "<<"性 别:"<<ps->sex<<endl;
student=1;}
}
if(student==0)
cout<<"----------------查询结果:无此学生!!";
cout<<endl;
check();
}
void check_name()
{
int student=0,i;
student=0;
ps=s1;
char name[10];
cout<<"请输入您要查询的姓名:";
cin>>name;
ps=s1;
for(i=0;i<N;i++,ps++)
{
if(strcmp(name,ps->name)==0)
{cout<<"学 号:"<<ps->id<<" "<<"姓 名:"<<ps->name<<" "<<"性 别:"<<ps->sex<<endl;
student=1;
}
}
if(student==0)
cout<<"----------------查询结果:无此学生!!"<<endl;
cout<<endl;
check();
}
void check_idcj()
{
int student=0,i;
char id[9];
cout<<"请输入您要查询的学号:";
cin>>id;
ps=s1;
for(i=0;i<N;i++,ps++)
{
if(strcmp(id,ps->id)==0)
{
cout<<"\n学号:"<<ps->id<<endl<<"姓名:"<<ps->name<<endl;
cout<<"课程编号:"<<ps->subna<<endl<<"课程:"<<ps->subject<<endl;
cout<<"学分:"<<ps->xf<<endl<<"平时成绩:"<<ps->pscj<<endl<<"卷面成绩:"<<ps->jmcj<<endl;
cout<<"综合成绩:"<<ps->zhcj<<endl<<"实得学分:"<<ps->sdxf<<endl;
student=1;
}
}
if(student==0)
cout<<"----------------查询结果:无此学生!!";
cout<<endl;
check();
}
void shrt()
{
int i;
cout<<" <<排序界面>>"<<endl;
cout<<endl;
cout<<" (1)按综合成绩降序."<<endl;
cout<<" (2)按综合成绩升序."<<endl;
cout<<" (3)按实得学分降序."<<endl;
cout<<" (4)按实得学分升序."<<endl;
cout<<" (0)返回主界面."<<endl;
cout<<"请选择排序方式: "<<endl;
cin>>i;
switch(i)
{
case 1: shrtzhjx();break;
case 2: shrtzhsx();break;
case 3: shrtsdjx();break;
case 4: shrtsdsx();break;
case 0: break;
}
}
void shrtzhjx()
{
int i,j,n,k;
float a[N],temp;
ps=s1;
for(i=0;i<N;i++,ps++)
a[i]=ps->zhcj;
for(i=1,k=all;i<all;i++,k--)
for(j=0;j<k-1;j++)
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
cout<<"------------是否查看排序后结果(1/0)? "<<endl;
cin>>n;
if(n)
for(i=1,j=0;i<=all;i++,j++)
cout<<"第"<<i<<"名:"<<" "<<a[j]<<endl;
shrt();
}
void shrtzhsx()
{
int i,j,n,k;
float a[N],temp;
ps=s1;
for(i=0;i<N;i++,ps++)
a[i]=ps->zhcj;
for(i=1,k=all;i<all;i++,k--)
for(j=0;j<k-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
cout<<"------------是否查看排序后结果(1/0)? "<<endl;
cin>>n;
if(n)
for(j=0;all>0;all--,j++)
cout<<"第"<<all<<"名:"<<" "<<a[j]<<endl;
shrt();
}
void shrtsdjx()
{
int i,j,n,k;
float a[N],temp;
ps=s1;
for(i=0;i<N;i++,ps++)
a[i]=ps->sdxf;
for(i=1,k=all;i<all;i++,k--)
for(j=0;j<k-1;j++)
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
cout<<"------------是否查看排序后结果(1/0)? "<<endl;
cin>>n;
cout<<endl;
i=1;
if(n)
while(i<=all)
{
j=0;
cout<<"第"<<i<<"名:"<<a[j]<<endl;
j++;
i++;
}
shrt();
}
void shrtsdsx()
{
int i,j,n,k;
float a[N],temp;
ps=s1;
for(i=0;i<N;i++,ps++)
a[i]=ps->sdxf;
for(i=1,k=all;i<all;i++,k--)
for(j=0;j<k-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
cout<<"------------是否查看排序后结果(1/0)? "<<endl;
cin>>n;
cout<<endl;
if(n)
while(all>0)
{
j=0;
cout<<"第"<<all<<"名:"<<a[j]<<endl;
j++;all--;
}
shrt();
}
void del()
{
char id[9];
cout<<"------------请输入学生学号进行删除:";
cin>>id;
int i;
ps=s1;
for(i=0;i<N;i++,ps++)
if(strcmp(id,ps->id)==0)
for(;i<(N-i);i++,ps++)
{
strcpy(ps->id,(ps+1)->id);
strcpy(ps->name,(ps+1)->name);
strcpy(ps->subject,(ps+1)->subject);
strcpy(ps->subna,(ps+1)->subna);
strcpy(ps->sex,(ps+1)->sex);
ps->jmcj=(ps+1)->jmcj;
ps->pscj=(ps+1)->pscj;
ps->sdxf=(ps+1)->sdxf;
ps->sycj=(ps+1)->sycj;
ps->xf=(ps+1)->xf;
ps->zhcj=(ps+1)->zhcj;
}
cout<<"-----------------已删除学号为"<<id<<"的学生-------------------"<<endl;
}
void savequit()
{
ofstream ofile("student.txt",ios::app);
int i;
ps=s1;
for(i=0;i<all;i++,ps++)
{
ofile<<"学号:"<<ps->id<<endl;
ofile<<"姓名:"<<ps->name<<endl;
ofile<<"性别:"<<ps->sex<<endl;
ofile<<"课程编号:"<<ps->subna<<endl;
ofile<<"课程:"<<ps->subject<<endl;
ofile<<"平时成绩:"<<ps->pscj<<endl;
ofile<<"卷面成绩:"<<ps->jmcj<<endl;
ofile<<"实验成绩:"<<ps->sycj<<endl;
ofile<<"综合成绩:"<<ps->zhcj<<endl;
ofile<<"学分:"<<ps->xf<<endl;
ofile<<"实得学分:"<<ps->sdxf<<endl;
}
ofile.close();
cout<<"-----------------------------学生信息已经保存."<<endl;
}
void text()
{
ifstream infile("student.txt",ios::in);
if(!infile) cout<<"不能打开此文档!"<<endl;
int i;
char put[101];
for(i=0;i<N;i++)
{
infile.getline(put,100);
cout<<put<<endl;
}
infile.close();
}
『肆』 学生成绩管理系统的设计与实现
给一个我以前写过的吧,功能应该差不多#include #include #include #include #include #include #include #include #include using namespace std;/*定义学生结构体*/struct Student{ char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average;};/*声明学生数组及学生数量*/struct Student students[1000];int num=0; /*求平均值*/float Avg(struct Student stu){ return (stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通过学号返回数组下标*/int Student_SearchByIndex(char id[]){ int i; for (i=0;i
『伍』 c语言实现设计一个学生成绩管理系统课程
参考代码如下,不过还是建议自己写一写比较好:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student //结构体
{
char name[20]; //姓名
char number[20]; //学号
double math; //数学
double english; //英语
double chinese; //语文
double program; //程序
}s[50];
void head() //界面
{
printf(
"**********************************************************************\n"
"** **\n"
"** **\n"
"** 学生成绩管理系统 **\n"
"** **\n"
"** 1.信息录入 **\n"
"** 2.信息统计 **\n"
"** 3.信息浏览 **\n"
"** 4.信息查询 **\n"
"** 5.信息排序 **\n"
"** 6.信息删除 **\n"
"** 0.退出系统 **\n"
"** **\n"
"**********************************************************************\n"
);
}
void ru(struct student s[], int* n) //文件导入函数
{
FILE *p;
int i=*n;
if((p=fopen("数据.txt", "r"))==NULL)
{
n=n;
}
else
{
while(!feof(p))
{
fscanf(p, "%s%s%lf%lf%lf%lf\n", s[i].name, s[i].number, &s[i].math, &s[i].english, &s[i].chinese, &s[i].program);
i++;
*n=*n+1;
}
}
fclose(p);
}
void chu(struct student s[], int n)
{
FILE *p;
int i=0;
if((p=fopen("数据.txt", "w"))==NULL)
{
printf("无法打开此文件!");
}
else
{
while(i<n-1)
{
fprintf(p, "%s %s %lf %lf %lf %lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
i++;
}
fprintf(p, "%s %s %lf %lf %lf %lf", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
fclose(p);
}
void dayin(struct student s[], int n) //显示所有信息
{
int i;
double all=0.0;
printf("\n姓名\t\t学号\t\t数学\t英语\t语文\t程序\t总分\n");
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program, all);
}
}
void shuru(struct student s[], int* n) //信息输入函数
{
int i=*n, j, k, m;
printf("请输入学生姓名:");
scanf("%s", s[i].name);
printf("请输入学生学号:");
for (j=0; ; j++)
{
m=0;
scanf("%s", s[i].number);
for (k=0; k<i; k++)
{
if (strcmp(s[i].number, s[k].number)==0)
{
m=m+1;
printf("学号重复,请重新输入学号:");
break;
}
}
if (m==0)
{
break;
}
}
printf("请输入数学成绩:");
scanf("%lf", &s[i].math);
printf("请输入英语成绩:");
scanf("%lf", &s[i].english);
printf("请输入语文成绩:");
scanf("%lf", &s[i].chinese);
printf("请输入程序成绩:") ;
scanf("%lf", &s[i].program);
printf("添加信息成功!\n");
*n=*n+1;
chu(s, *n);
}
void paixu(struct student s[], int n) //排序函数
{
int i, j;
double all1, all2;
struct student stu;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
all1=s[i].math+s[i].english+s[i].chinese+s[i].program;
all2=s[j].math+s[j].english+s[j].chinese+s[j].program;
if (all1<all2)
{
stu=s[i];
s[i]=s[j];
s[j]=stu;
}
}
}
printf("排序后的数据:\n");
dayin(s, n);
}
void chazhao(struct student s[], int n) //查找函数
{
char name[20], num[20];
int m1, m2=0, i, j;
printf("1.按姓名查找\n2.按学号查找\n选择查询方式(1或2):");
scanf("%d", &m1);
if (m1==1)
{
printf("请输入您要查找的学生姓名:");
scanf("%s", name);
for (i=0; i<n; i++)
{
if (strcmp(s[i].name, name)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("没有此学生信息!\n");
}
}
else if (m1==2)
{
printf("请输入您要查找的学生学号:");
scanf("%s", num);
j=0;
for (i=0; i<n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("没有此学生信息!\n");
}
}
}
void shanchu(struct student s[], int* n) //删除函数
{
char num[20];
int m=0, i, j;
printf("请输入您要删除的学生学号:");
scanf("%s", num);
for (i=0; i<=*n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m=m+1;
for (j=i; j<*n; j++)
{
s[j]=s[j+1];
}
*n=*n-1;
}
}
if (m==0)
{
printf("没有此学生信息!\n");
}
else
{
chu(s, *n);
printf("删除完毕!\n");
}
}
void allAndAver(struct student s[], int n)
{
int i ;
double all=0.0, aver=0.0;
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
aver=all/4;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\n", s[i].name, s[i].number, all, aver);
}
}
void Fail(struct student s[], int n) //统计单科不及格人数
{
int i, fail[4]={0};
for (i=0; i<n; i++)
{
if (s[i].math<60)
{
fail[0]++;
}
if (s[i].english<60)
{
fail[1]++;
}
if (s[i].chinese<60)
{
fail[2]++;
}
if (s[i].program<60)
{
fail[3]++;
}
}
printf("\n不及格信息:\n");
printf("数学不及格的人数为:%d人\n", fail[0]);
printf("英语不及格的人数为:%d人\n", fail[1]);
printf("语文不及格的人数为:%d人\n", fail[2]);
printf("程序不及格的人数为:%d人\n", fail[3]);
}
void Max(struct student s[], int n) //统计单科最高分人数
{
int i, counter[4]={0};
double max[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math>max[0])
{
max[0]=s[i].math;
}
if (s[i].math>max[1])
{
max[1]=s[i].math;
}
if (s[i].math>max[2])
{
max[2]=s[i].math;
}
if (s[i].math>max[3])
{
max[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==max[0])
{
counter[0]++;
}
if (s[i].math==max[1])
{
counter[1]++;
}
if (s[i].math==max[2])
{
counter[2]++;
}
if (s[i].math==max[3])
{
counter[3]++;
}
}
printf("\n最高分信息:\n");
printf("数学最高分为:%.1lf, 人数为:%d人\n", max[0], counter[0]);
printf("英语最高分为:%.1lf, 人数为:%d人\n", max[1], counter[1]);
printf("语文最高分为:%.1lf, 人数为:%d人\n", max[2], counter[2]);
printf("程序最高分为:%.1lf, 人数为:%d人\n", max[3], counter[3]);
}
void Min(struct student s[], int n) //统计单科最低分人数
{
int i, counter[4]={0};
double min[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math<min[0])
{
min[0]=s[i].math;
}
if (s[i].math<min[1])
{
min[1]=s[i].math;
}
if (s[i].math<min[2])
{
min[2]=s[i].math;
}
if (s[i].math<min[3])
{
min[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==min[0])
{
counter[0]++;
}
if (s[i].math==min[1])
{
counter[1]++;
}
if (s[i].math==min[2])
{
counter[2]++;
}
if (s[i].math==min[3])
{
counter[3]++;
}
}
printf("\n最低分信息:\n");
printf("数学最低分为:%.1lf, 人数为:%d人\n", min[0], counter[0]);
printf("英语最低分为:%.1lf, 人数为:%d人\n", min[1], counter[1]);
printf("语文最低分为:%.1lf, 人数为:%d人\n", min[2], counter[2]);
printf("程序最低分为:%.1lf, 人数为:%d人\n", min[3], counter[3]);
}
void tongji(struct student s[], int n) //统计函数
{
printf("统计信息如下:\n");
printf("\n姓名\t\t学号\t\t总分\t平均分\n");
allAndAver(s, n);
Max(s, n);
Min(s, n) ;
Fail(s, n);
}
int main() //主函数
{
int k, n=0;
ru(s, &n);
chu(s, n);
while (1)
{
head();
printf("\n请按对应的键选择相应的功能:");
scanf("%d",&k);
switch (k)
{
case 1:
shuru(s, &n);
break;
case 2:
tongji(s, n);
break;
case 3:
dayin(s, n);
break;
case 4:
chazhao(s, n);
break;
case 5:
paixu(s, n);
break;
case 6:
shanchu(s, &n);
break;
case 0:
exit(1);
break;
default : printf("请输入正确的命令!\n");
}
system("pause");
system("cls");
}
return 0;
}
『陆』 c语言程序设计作业学生成绩管理系统 1)实现成绩管理功能(添加、删除、排序) 2)实现成绩统计功能(最高
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 20
void read_file(); //导入数据
void input();//输入数据
void ave();//求每个学生平均分
void ave_all();//求三科成绩平均分
void save_score();//保存数据
void dis_menu(); //显示菜单
void ave_english();// 计算英语平均分
void ave_math();//计算数学平均分
void ave_c(); //计算c语言平均分
void sort_ave();//按每位同学的平均分排序
void display();//显示全部信息
void display_1(int);//打印学生个人信息
void display_2();//按学号打印学生成绩条
void display_3();//按姓名打印学生成绩条
int changeStrInt(char *ch);//把字符串转化为整型
typedef struct
{
int num;//学号
char name[30];
float english;
float math;
float c;
float ave;
}Stu;
Stu stu[MAX];
bool tag=true,Tag=true;
float sum_eng=0;
float sum_math=0;
float sum_c=0;
int class_num=0;
float ave_eng=0;
float ave_mat=0;
float ave_C=0;
//test.cpp
void main()
{
dis_menu();
}
//test.cpp
void dis_menu()
{
int i=0,j=0;
char ch,c;
do{
printf("******** *欢迎使用学生管理系统* ********** ***** *\n");
printf("****** ****输入要进行的操作****** ******* ***** *\n");
printf("***** *****1:原始数据导入********** **** ***** **\n");
printf("**** ******2重新输入学生数据:******* *** **** ****\n");
printf("*** *******3:信息检索(排序)********** * **** *****\n");
printf("**** ******4:信息查询<<<>>>>>>>***** *** **** ****\n");
printf("****** ****5:数据保存(成绩表)****** ***** **** ***\n");
printf("******* ***6:全班平均成绩显示***** ******* *** **\n");
printf("******** **0:退出系统*********** ********* *** *\n");
fflush(stdin);
scanf("%d",&i);
switch(i)
{
case 1:
read_file();
break;
case 2:
input();
break;
case 3:printf("*************按平均分排序*****************\n");
sort_ave();
printf("是否打印学生成绩信息?(Y or N)\n");
fflush(stdin);
c=getchar();
switch(c)
{
case 'Y':
case 'y':
display();
break;
default: break;
}
break;
case 4:
printf("***********1:按学号查询:******************\n");
printf("***********2:按姓名查询:******************\n");
scanf("%d",&j);
switch(j)
{
case 1:
display_2();
break;
case 2:
display_3();
break;
default:
break;
}
break;
case 5:
save_score();
break;
case 6:
ave_all();
printf("数学\t英语\tc语言\n");
printf("%.2f\t%.2f\t%.2f\n",ave_mat,ave_eng,ave_C);
break;
default:
printf("感谢使用本系统!\n");
system("exit");
exit(0);
}
printf("是否继续?(Y or N)\n");
fflush(stdin);
ch=getchar();
system("cls");
}while(ch=='Y'||ch=='y');
}
int changeStrInt(char *ch)
{ int a=1,b=0,c=0,i;
for (i=strlen(ch)-1;i>=0;i--)
{ if (ch[i]<='9'&&ch[i]>='0')
{ b=a*(ch[i]-'0');
a=a*10;
c=c+b;
}
else
{ printf("%c不合法,无法将此字符转化为整形!\n",ch[i]);
return 0;
}
}
return c;
}
void read_file()
{
FILE *fp;
char filepath[20];
long position; char ch;
int i=0; char str_num[20]="\0";
char str_english[20]="\0"; char str_c[20]="\0";
char str_math[20]="\0";
printf("输入原始数据存放路径:\n");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("原始数据导入失败,请检查输入路径是否正确\n");
return;
}
while(i!=1)
{
ch = fgetc(fp);
if(ch=='\n')
{
position=ftell(fp);
i++;
}
}
fseek(fp, position,SEEK_SET); //定位
for(i=0;i<MAX&&!feof(fp);i++)
{
fscanf(fp,"\t%s\t%s\t%s\t%s\t%s\t\n",str_num,stu[i].name,
str_english,str_c,str_math);
stu[i].num=changeStrInt(str_num);
stu[i].english=(float)changeStrInt(str_english);
stu[i].math=(float)changeStrInt(str_math);
stu[i].c=(float)changeStrInt(str_c);
class_num++;
}
fclose(fp);
ave();
printf("原始数据导入成功!\n");
}
void ave_all()
{ int i;
for(i=0;i<class_num;i++)
{
sum_math+=stu[i].math;
sum_eng+=stu[i].english;
sum_c+=stu[i].c;
}
ave_english();
ave_math();
ave_c();
}
void ave()
{
int i;
for(i=0;i<class_num;i++)
stu[i].ave=(stu[i].english+stu[i].math+stu[i].c)/3;
}
void ave_english()
{
ave_eng=sum_eng/class_num;
}
void ave_math()
{
ave_mat=sum_math/class_num;
}
void ave_c()
{
ave_C=sum_c/class_num;
}
void sort_ave()
{
ave();
Stu temp;
int i,j;
for(i=1;i<class_num;i++)
for(j=1;j<=class_num-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{
temp=stu[j-1];
stu[j-1]=stu[j];
stu[j]=temp;
}
}
if(tag)
{
printf("排序完成!\n");
}
}
void input()
{
char ch;
int i,num;
FILE *fp; char filepath[30];
printf("输入学生人数:\n");
scanf("%d",&num);
printf("输入学生信息: 学号 姓名 高等数学 大学英语 c语言\n");
for(i=0;i<num;i++)
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].math,&stu[i].english,&stu[i].c);
class_num=num;
printf("是否保存输入信息?(Y or N)\n");
fflush(stdin);
ch=getchar();
if(ch=='Y'||ch=='y')
{ printf("输入保存路径:\n");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("保存失败,请检查输入路径是否有误!\n");
return;
}
fprintf(fp,"学号\t姓名\t数学\t英语\tc语言\n");
for(i=0;i<class_num;i++)
{
fprintf(fp,"%d\t%s\t%.2f\t%.2f\t%.2f\n",stu[i].num,stu[i].name,stu[i].math,stu[i].english,stu[i].c);
}
printf("保存成功!\n");
}
}
void save_score()
{
char filepath[30];
FILE *fp;
int i;
tag=false;
sort_ave();
printf("输入要保存的路径:\n"); //例如C:\student.dat或.txt .dat是二进制文件
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w+"))==NULL)
{
printf("保存失败,请检查文件名,路径是否正确!\n");
return;
}
fprintf(fp,"学号\t姓名\t英语\tc语言\t高数\t平均成绩\n");
for(i=0;i<class_num;i++)
{
fprintf(fp,"%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].num,
stu[i].name,stu[i].english,stu[i].c,stu[i].math,stu[i].ave);
}
fclose(fp);
printf("学生成绩文件已经保存完毕!\n");
}
void display_1(int i)
{
if(Tag)
printf("学号\t姓名\t英语\tc语言\t高数\t平均成绩\n");
printf("%d\t%s\t%.2f\t%.2f\t %.2f\t%.2f\n",stu[i].num,stu[i].name,
stu[i].english,stu[i].c,stu[i].math,stu[i].ave);
fflush(stdin);
return;
}
void display_2()
{
int i,no;
volatile int flag=0;
printf("请输入你要查询学生的学号:\n");
fflush(stdin);
scanf("%d",&no);
for(i=0;i<class_num;i++)
{
if(no==stu[i].num&&!flag)
{
printf("学生信息如下:\n");
fflush(stdin);
display_1(i);
flag=1;
}
}
if(!flag)
{
printf("查询学生不存在,请检查学号输入是否正确!\n");
return;
}
}
void display_3()
{
char name[30];
int i;
volatile int flag=0;
printf("输入你要查询学生的姓名:\n");
fflush(stdin);
gets(name);
for(i=0;i<class_num;i++)
{
if((strcmp(stu[i].name,name)==0)&&!flag)
{
printf("学生信息如下:\n");
display_1(i);
flag=1;
}
}
if(!flag)
{
printf("查询学生不存在,请检查学号输入是否正确!\n");
return;
}
}
void display()
{
int i;
printf("学生信息如下:\n");
printf("名次\t学号\t姓名\t数学\t英语\tc语言\t平均分\n");
for(i=0;i<class_num;i++)
printf("%d\t%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",i+1,stu[i].num,stu[i].name,stu[i].math,stu[i].english,stu[i].c,stu[i].ave);
}
大体框架就是这样,只需要稍微修改或添加个别功能,应该能看懂吧,看懂的话修改还是挺Easy的,最近忙着考试,没空该了,呵呵,抱歉哈,希望对你有帮助...
『柒』 用c语言设计一个程序 要求:能实现对学生成绩的录入、显示、查找、排序、插入和删除操作。
你好!
是的,正如楼上所说,与其在这干等,还不如在网上下载一篇类似文章,将其中的代码按自己的要求修改,这样不但能增长知识,作出来了还能提升自己的成就感。
『捌』 如何用c语言程序设计实现学生成绩的录入,查询,排序,删除等操作。
录入的话,可以直接从文件里面导入。
查询,最简单的方法就是for循环一个一个查,当然,想要更快的话,可以用二分搜索。
排序嘛~~~快排就行了。
删除,这个比较麻烦,必须看你的数据结构。如果是数组的话,把后面每一个元素前移。如果是链表的话,就直接将next指针往下连就行了。
『玖』 设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的顺序表,可以不考虑重名的情
额,怎么看不到要求只要定义链表吗?那你定义一个结构体,链表的节点就是一个结构体对象,用指针指向next就好
『拾』 跪求C++:设计和实现简单的学生成绩管理程序(用链表实现),网上的程序太复杂了,谁给个简单的
#include<fstream>
#include<iostream>
usingnamespacestd;
#defineMAX4
structStudent
{
intstuId;//成绩排名
charstuName[20];//姓名
doublestuScore[MAX];//成绩
doublestuSum;//总成绩
Student*next;//指向下一节点
};
classStudentManager//链表管理类
{
public:
intaddStu(Student*stu);//添加结点,尾插法
intsortAllStu();//排序
Student*findStu(intstuId);//根据总成绩排名查找结点
voidsaveToFile();//保存到文件
StudentManager();
~StudentManager();
private:
intlength;//链表长度
Student*head,*end;//头指针、尾指针
};
StudentManager::StudentManager()
{
head=NULL;
end=NULL;
length=0;
}
StudentManager::~StudentManager()
{
if(head)
{
deletehead;
head=NULL;
}
if(end)
{
deleteend;
end=NULL;
}
}
intStudentManager::addStu(Student*stu)
{
if(head==NULL)
{
head=stu;
end=head;
}
else
{
end->next=stu;
stu->next=NULL;
end=stu;//一直保持指向链尾
}
length++;
returnlength;
}
intStudentManager::sortAllStu()
{
Student*p=head;
while(p)
{
//求和
inti=0;
for(i=0;i<MAX;i++)
{
p->stuSum+=p->stuScore[i];
}
p->stuId=-1;
p=p->next;
}
Student*t=newStudent(),*temp=NULL;
t->stuId=-1;
t->stuSum=-1;
inti;
for(i=0;i<length;i++)
{
p=head;
temp=t;
while(p)
{
if(p->stuId==-1&&p->stuSum>temp->stuSum)
{
temp=p;
}
p=p->next;
}
if(temp->stuSum!=-1)
{
temp->stuId=i;
}
else
break;
}
temp=NULL;//
if(t)
{
deletet;
t=NULL;
}
return0;
}
Student*StudentManager::findStu(intstuId)
{
Student*p=head;
while(p)
{
if(p->stuId==stuId)
{
returnp;
}
p=p->next;
}
returnNULL;
}
voidStudentManager::saveToFile()
{
ofstreamofile;
ofile.open("stu.txt",ios::out);
if(!ofile)
{
cerr<<"openfilefailed! ";
exit(1);
}
Student*p=NULL;
inti=0;
for(i=0;i<length;i++)
{
p=findStu(i);
if(!p)
{
cout<<"err ";
break;
}
ofile<<"name:"<<p->stuName<<"id:"<<p->stuId<<"sum:"<<p->stuSum<<"score:";
ofile<<p->stuScore[0]<<""<<p->stuScore[1]<<""<<p->stuScore[2]<<""<<p->stuScore[3]<<"";
ofile<<" ";
}
ofile.close();
cout<<"success! ";
}
intmain()
{
StudentManager*sm=newStudentManager();
Studentstu1={-1,"zhangsan",78.0f,89.0f,64.0f,90.0f,0.0f,NULL};
Studentstu2={-1,"lisi",58.0f,87.0f,96.0f,80.0f,0.0f,NULL};
Studentstu3={-1,"wangwu",79.0f,80.0f,82.0f,80.0f,0.0f,NULL};
sm->addStu(&stu1);
sm->addStu(&stu2);
sm->addStu(&stu3);
sm->sortAllStu();
sm->saveToFile();
return0;
}