怎样用C语言写学生成绩管理系统?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言写学生成绩管理系统?相关的知识,希望对你有一定的参考价值。

参考技术A 程序如下: #include\\x0d\\x0avoid main()\\x0d\\x0a\\x0d\\x0a float student[100][7];\\x0d\\x0a//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,\\x0d\\x0a//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名\\x0d\\x0a int n,i,j,k,p,t,count,flag;\\x0d\\x0a int a[100],b[100],c[100];\\x0d\\x0a//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据\\x0d\\x0a printf("输入学生的个数:\n");\\x0d\\x0a scanf("%d",&n);\\x0d\\x0a for(i=0;i<=n-1;i++)\\x0d\\x0a \\x0d\\x0a printf("输入第%d个学生的学号:",i+1);\\x0d\\x0a scanf("%f",&student[i][0]);\\x0d\\x0a for(j=0,student[i][5]=0;j<=3;j++)\\x0d\\x0a \\x0d\\x0a printf("输入第%d个学生的第%d门成绩:",i+1,j+1);\\x0d\\x0a scanf("%f",&student[i][j+1]);\\x0d\\x0a student[i][5]+=student[i][j+1]; //计算总分\\x0d\\x0a \\x0d\\x0a b[i]=student[i][5]; //把总分再赋给b[]数组,以后排序用\\x0d\\x0a student[i][6]=student[i][5]/4; //计算平均分\\x0d\\x0a \\x0d\\x0a \\x0d\\x0a for(i=0;i<=n-2;i++) //对数组b[](即总分)进行排序\\x0d\\x0a for(j=0;j<=n-2-i;j++)\\x0d\\x0a \\x0d\\x0a if(b[j]b[i+1])\\x0d\\x0a \\x0d\\x0a c[i]=count;\\x0d\\x0a count++;\\x0d\\x0a \\x0d\\x0a \\x0d\\x0a printf("\n以下是统计结果:\n");\\x0d\\x0a printf("学号 s[1] s[2] s[3] s[4] 总分 平均分 排名\n");\\x0d\\x0a for(i=0;i<=n-1;i++)\\x0d\\x0a \\x0d\\x0a printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);\\x0d\\x0a \\x0d\\x0a 有疑问提出

C语言学生成绩管理系统 怎么用文件排序

如题,要求成绩管理系统满足输入,输出,检索,排序,删除,修改等功能,要用文件完成。已知结构struct student
char num[10];
char name[10];
int score[6];
int sum;
float ave;
stu[N];
char subject[6][20];

急求啊,就是不会排序,求解救,万分感谢!
void sort_num(int m,char subject[6][20])

FILE *fp;
struct student stu;
int i,j,k,n;
char temp[10];
if((fp=fopen("stu","ab"))==NULL)

printf("open error");
exit(1);

struct student t1;
for(i=0;i<n-1;i++)

k=i;
for(j=i+1;j<m;j++)
if(strcmp(stu[k].num,stu[j].num)<0) k=j;
t1=stu[i];
stu[i]=stu[k];
stu[k]=t1;

output(m,subject);


怎么改

参考技术A 文件是用来保存数据的,是无法用文件来进行排序的。应该从文件中把数据读入到链表或数组中,再用数组或链表结构进行排序。

typedef struct/*学生结构体*/

char num[10]; /*学生学号*/
char name[20]; /*学生姓名*/
char sex[4];/*学生性别*/
int year,month,day;/*出生年月日*/
char face[4];/*政治面貌*/
float math,gaoji,dianlu,aver; /*数学分析,高级语言程序设计,电路与电子学成绩*/

Student;
Student stu[30];

void paixu_xuehao(Student stud[],int n) /*按学号排序*/
float p,q,w;
int i,j,r,g,h;
double y;
char x[20],t[10],z[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
strcpy(t,stud[j].num);strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j+1].num,t);
strcpy(x,stud[j].name);strcpy(stud[j].name,stud[j+1].name);strcpy(stud[j+1].name,x);
r=stu[j].year;stu[j].year=stu[j+1].year;stu[j+1].year=r;
g=stu[j].month;stu[j].month=stu[j+1].month;stu[j+1].month=g;
h=stu[j].day;stu[j].day=stu[j+1].day;stu[j+1].day=h;
strcpy(z,stud[j].face);strcpy(stud[j].face,stud[j+1].face);strcpy(stud[j+1].face,z);
y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
p=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=p;
q=stu[j].gaoji;stu[j].gaoji=stu[j+1].gaoji;stu[j+1].gaoji=q;
w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;

return;


int wenjian2(Student stu[],int n) /*从文件中读入数据*/

int i=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
printf("\t\t\t");

fread(&stu[i],sizeof(Student),1,fp);
while(!feof(fp))fread(&stu[i++],sizeof(Student),1,fp);
fclose(fp); /*关闭文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(i);
参考技术B 文件是用来保存数据的,不是用来排序的!
从文件中把数据读入链表或数组中,用数组或链表结构进行排序!
typedef struct/*学生结构体*/

char num[10]; /*学生学号*/
char name[20]; /*学生姓名*/
char sex[4];/*学生性别*/
int year,month,day;/*出生年月日*/
char face[4];/*政治面貌*/
float math,gaoji,dianlu,aver; /*数学分析,高级语言程序设计,电路与电子学成绩*/

Student;
Student stu[30];

void paixu_xuehao(Student stud[],int n) /*按学号排序*/
float p,q,w;
int i,j,r,g,h;
double y;
char x[20],t[10],z[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
strcpy(t,stud[j].num);strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j+1].num,t);
strcpy(x,stud[j].name);strcpy(stud[j].name,stud[j+1].name);strcpy(stud[j+1].name,x);
r=stu[j].year;stu[j].year=stu[j+1].year;stu[j+1].year=r;
g=stu[j].month;stu[j].month=stu[j+1].month;stu[j+1].month=g;
h=stu[j].day;stu[j].day=stu[j+1].day;stu[j+1].day=h;
strcpy(z,stud[j].face);strcpy(stud[j].face,stud[j+1].face);strcpy(stud[j+1].face,z);
y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
p=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=p;
q=stu[j].gaoji;stu[j].gaoji=stu[j+1].gaoji;stu[j+1].gaoji=q;
w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;

return;


int wenjian2(Student stu[],int n) /*从文件中读入数据*/

int i=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
printf("\t\t\t");

fread(&stu[i],sizeof(Student),1,fp);
while(!feof(fp))fread(&stu[i++],sizeof(Student),1,fp);
fclose(fp); /*关闭文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(i);
追问

光是对学号排序就要用到两个函数吗?就是排完序以后再调用wenjian2 吗?

追答

不是,文件2在前面就已经调用了,文件2已经把文件里的数据存到数组中了!

参考技术C //排序的子函数
void paixu(struct student *s,int n)
int i,j;
struct student m;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (s[i].sum<s[j].sum)
m=s[i];s[i]=s[j];s[j]=m;


//调用方法,
//调用之前应该先计算好sum总分,
paixu(str,N); //调用子函数排序追问

我也是用了一个结构变量struct student t1 来进行交换,排序,可是一直报错呢

追答

subject与stu有什么关系,数据都应该保存在stu[N]中,
stu[N]中没有数据,就谈不上排序
你已经打开了文件,可是并没有向stu中写入数据

本回答被提问者和网友采纳

以上是关于怎样用C语言写学生成绩管理系统?的主要内容,如果未能解决你的问题,请参考以下文章

C语言编写一个学生成绩管理系统

学生成绩管理系统 用C语言编写

C语言程序设计学生成绩管理系统

C语言学生成绩管理系统 怎么用文件排序

用C语言设计一个学生成绩管理系统

C语言(学生成绩管理系统)