
学生成绩管理C语言程序设计源代码
这个是我大一的时候写的,你参考一下自己修改修改就能用了:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define PF printf
#define SF scanf
#define NUM_sub 4
#define SIZE 80
#define LEN sizeof(struct cj_statistic)
static int n=0;
int i=0;
struct cj_statistic
{
int num;
char name[15];
int score[NUM_sub];
int sum;
int aver_stu;
int aver_cour;
int index;
struct cj_statistic *next;
} stud[SIZE],temp;
void add();
void del();
void change();
void display();
void arrange();
void find();
void add()
{ FILE *fp;
float s1=0.0; int i; clrscr();
if((fp=fopen("xx.out","a"))==NULL)
{PF("磁盘已满!\n");
getchar();
return;}
PF("\n请输入要添加的学生学号:");
SF("%d",&stud[n].num);
PF("\n请输入要添加的学生姓名:");
SF("%s",stud[n].name);
PF("\n请输入该学生的各科成绩:");
s1=0;
for(i=0;i<NUM_sub;i++)
{
do
{
PF("score%d:",i+1);
SF("%d",&stud[n].score[i]);
if(stud[n].score[i]>100||stud[n].score[i]<0)
PF("wrong data,repeat input\n");
}
while(stud[n].score[i]>100||stud[n].score[i]<0);
s1=s1+stud[n].score[i]; /*算总分*/
}
stud[n].sum=s1;
stud[n].aver_stu=(float)s1/NUM_sub;
stud[n].index=n+1;
getchar();
if(fwrite(&stud[n],LEN,1,fp)) n++;
fclose(fp);
}
void del()
{
int k, m;
FILE *fp;
clrscr();
fp=fopen("xx.out","r");
for(i=0;i<n;i++)
fread(&stud[i],LEN,1,fp);
fclose(fp);
PF("\n请输入要删除的学号:");
SF("%d",&m);
getchar();
for(i=0;i<n;i++)
if(m==stud[i].num){k=1;break;}/*查找记录*/
if(k==1)/*删除记录*/
{ for(k=i;k<n-1;k++)
{ strcpy(stud[k].name,stud[k+1].name);
stud[k].num=stud[k+1].num;
for(i=0;i<NUM_sub;i++)
stud[k].score[i]=stud[k+1].score[i];
stud[k].sum=stud[k+1].sum;
stud[k].aver_stu=stud[k+1].aver_stu;
stud[k].index=stud[k+1].index;
} n--;PF("删除成功!");
}
else
{
PF("找不到要删除的记录:\n");
PF("按回车键返回:");
getchar();
}
fp=fopen("xx.out","a");/*打开新文件*/
for(i=0;i<n;i++)
fwrite(&stud[i],LEN,1,fp);/*写入信息*/
fclose(fp);
}
void change()
{ int k,m;
FILE *fp;
clrscr();/*清屏*/
fp=fopen("xx.out","r");
for(i=0;i<n;i++)
fread(&stud[i],LEN,1,fp);
fclose(fp);
PF("\n请输入要修改的学生学号:");
SF("%d",&m);
getchar();
for(i=0;i<n;i++)
if(m==stud[i].num)
{k=1;break;}/*查找*/
if(k==1)/*开始修改*/
{ PF("\n");
PF("\n请输入修改后的学生姓名:");
SF("%s",stud[i].name);
PF("\n请输入修改后的学生学号:");
SF("&d",&stud[i].num);
for(i=0;i<NUM_sub;i++)
{ PF("score%d:",i+1);
SF("%d",&stud[n].score[i]);}
}
else
{ PF("对不起,找不到要修改的记录!\n");
PF("按回车键返回:");
getchar();}
fp=fopen("xx.out","w");
for(i=0;i<n;i++)
fwrite(&stud[i],LEN,1,fp);/*写入数据*/
fclose(fp);
}
void display() /*浏览全部学生信息*/
{ FILE *fp;
clrscr();/*清屏*/
fp=fopen("xx.out","r");
printf("\n\n\n************************************STUDENT*************************************\n");
printf("| 学号 | 姓名 | 英语 | 高数 | C语言 | 物理 | 总分 | 平均分 |名次|\n");
printf("|--------|-----------|------|------|-------|--------|-------| -------|----|\n");
for(i=0;i<n;i++)
{
fread(&stud[i],LEN,1,fp);/*读一个输出一个*/
PF("| %d | %s | %d | %d | %d | %d | %d | %d |\n",stud[i].num,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].sum,stud[i].aver_stu,
stud[i].index);
}
PF("按任意键返回!");
fclose(fp);
getchar();
}
void arrange()
{
int k=0,j,sum1,sum2,sum3,sum4;
FILE *fp;
clrscr();
if((fp=fopen("xx.out","r"))==NULL)
{PF("磁盘已满!\n");
getchar();
return;}
for(i=0;i<n;i++)
{ for(j=0;j<n-i;j++)
if(stud[j].sum<stud[j+1].sum)
{temp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=temp;} }
fwrite(&stud[i],LEN,1,fp);/*写入数据*/
printf("\n\n\n*********************************STUDENT******************************************\n");
printf("| 学号 | 姓名 | 英语 | 高数 | C语言 | 物理 | 总分 | 平均分 |名次|\n");
printf("|--------|-----------|------|------|-------|--------|-------|--------|----|\n");
for(i=0;i<n;i++)
{
fread(&stud[i],LEN,1,fp);/*读一个输出一个*/
PF("| %d | %s | %d | %d | %d | %d | %d | %d | %d |\n",stud[i].num,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].sum,stud[i].aver_stu,
++k);}
for(sum1=0,sum2=0,sum3=0,sum4=0,i=0;i<n;i++)
{fread(&stud[i],LEN,1,fp);
sum1=sum1+stud[i].score[0]; sum2+=stud[i].score[1];
sum3+=stud[i].score[2];sum4+=stud[i].score[3];}
PF("各 科 成 绩 平均分:| %d | %d | %d | %d |",sum1/(n+1),sum2/(n+1),sum3/(n+1),sum4/(n+1));
PF("按任意键返回!");
fclose(fp);
getchar();
}
void find()
{ int k,m;
FILE *fp;
clrscr();/*清屏*/
if((fp=fopen("xx.out","r"))==NULL)
{PF("不能打开文件!\n");
PF("按回车键返回:");
getchar(); return;
}
for(i=0;i<n;i++)
fread(&stud[i],LEN,1,fp);
fclose(fp);
PF("\n请输入要查询的学生学号:");
SF("%d",&k);
getchar();
for(i=0;i<n;i++)
if(k==stud[i].num)/*查找记录*/
{m=1;break;}
if(m==1)
{PF("| 学号 | 姓名 | 英语 | 高数 | C语言 | 物理 | 总分 | 平均分 |名次|\n");
PF("|--------|-----------|------|------|-------|--------|-------|--------|----|\n");
PF("| %d | % s | %d | %d | %d | %d | %d | %d | %d |\n",stud[i].num,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].sum,stud[i].aver_stu,
stud[i].index);}
else PF("无记录显示,或记录已被删除!");
PF("按回车键返回!");
fclose(fp);
getchar();
}
void main()
{ FILE *fp;
char c;
int i; clrscr(); /**/
PF("\n\n\n\n\n\n\t\t\t *欢迎使用学生成绩统计系统*");
PF("\n\n\n\t\t\t\t\t 制作人 董伟");
PF("\n\n\n\t\t\t\t\t 2008年6月");
PF("\n\n\n\n\n\t 按回车键进入主菜单:");/**/
getchar();
do
{ clrscr();
PF("\n");
PF("\t\t\t **************\n");
PF("\t\t\t * 主菜单 *\n");
PF("\t\t\t **************\n\n\n");
PF("\t 1添加一个学生信息 2删除一个学生信息\n\n");
PF("\t 3修改一个学生信息 4浏览全部学生信息\n\n");
PF("\t 5学生成绩排序 6查找一个学生信息\n\n");
PF("\t 7 退出系统\n\n\n\n");
PF("\t 请选择[1/2/3/4/5/6/7]:");
do
{ c=getchar();}
while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='7');
getchar();
switch(c)
{ case'1':add();break;
case'2':del();break;
case'3':change();break;
case'4':display();break;
case'5':arrange();break;
case'6':find();break;
case'7':exit(0);
}
PF(" 按任意键返回主菜单:\n");
getchar();
clrscr();
} while(1);
}