怎样用C语言写学生成绩管理系统?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言写学生成绩管理系统?相关的知识,希望对你有一定的参考价值。
参考技术A 程序如下: #includeC语言学生成绩管理系统 怎么用文件排序
如题,要求成绩管理系统满足输入,输出,检索,排序,删除,修改等功能,要用文件完成。已知结构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);
怎么改
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语言写学生成绩管理系统?的主要内容,如果未能解决你的问题,请参考以下文章