当前位置:文档之家› 成绩统计系统 C语言

成绩统计系统 C语言

void query() /*查询学生成绩*/
{
struct student stu[N];
char number[20];
int i,n;
reads(stu,&n);
printf("\n请输入待查询的学生学号,按回车键确认:\n");
scanf("%s",number);
for(i=0;i<n;i++)
if((fp=fopen("c: \\student.txt","rb"))==NULL)
{ printf("文件打开失败!\n");
return;
}
else
{
*n=getw(fp);
for(i=0;i<*n;i++)
fread(&stu[i],sizeof(struct student),1,fp);
{char num[20];
char name[10];
floatkscj;
float pscj;
float zcj;
};
void reads(struct student stu[N],int *n)
{
FILE *fp;
int i=0;
if((fp=fopen("c: \\student.txt","rb"))==NULL)
每一个学生记录都包含学号、姓名,以及平时成绩(pscj),考试成绩(kscj)和总成绩(zcj)。在程序当中,将学生记录类型定义为结构体类型,添加的学生信息直接写入C盘的student.txt文件中,其他函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
printf("请输入要添加的学生数量,按回车键确认:");
scanf("%d",&n);
putw(j+n,fp);//将一个整数写到文件中
fseek(fp,0L,2);//改变文件位置指针的位置
for(i=1;i<=n;i++)
{ printf("\n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:\n",i);
}
}
}
fclose(fp);
}
2、总分排序函数
总分的排序采用的排序算法是冒泡法排序,整个排序过程在结构体数组stu中实现,排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下:
void zpx() /*按总成绩排序*/
课程设计说明书;
课程结束后,上交课程设计说明书的源程序。课程设计说明书的内容参见提供的摸板
四 指导教师和学生签字
指导教师:学生签名:

经过对程序设计题目的分析可知,整个程序的设计实现大致分为以下模块,其中每一个模块对应一个函数,他们的功能分别是:1输入学生姓名学号,考试成绩和平时成绩,2算出总成绩等于平时成绩乘以30%加上考试成绩乘以70%,3算出总成绩后按照分数排序,4查询某个学生的成绩(输入学号可以查询学生成绩信息),5最后退出程序。
1、输入学生信息主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、统计学生总成绩总成绩=平时成绩乘以30%+考试成绩乘以70%
3、总成绩排序按照题目的具体要求实现的是总成绩的排序
4、成绩查询允许按照姓名对学生的各科成绩进行查询;
5、退出

1、程序总体结构图
2、具体功能框图
(1)输入学生信息
scanf("%s%s",stu.num,);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
}
}
else
{if(stu[j].zcj<stu[j+1].zcj)
{strcpy(temp.num,stu[j].num);
strcpy(,stu[j].name);
temp.kscj=stu[j].kscj;
temp.pscj=stu[j].pscj;
temp.zcj=stu[j].zcj;
strcpy(stu[j+1].name,);
stu[j+1].kscj=temp.kscj;
stu[j+1].pscj=temp.pscj;
stu[j+1].zcj=temp.zcj;
}
}
}
if((fp=fopen("c: \\student.txt","wb"))==NULL)
}
fclose(fp);
}
void luru()/*录入学生信息*/
{FILE *fp;
int n,i,j;
struct student stu;
if((fp=fopen("c: \\student.txt","rb+"))!=NULL)
{j=getw(fp);//读取文件下一个整数值
rewind(fp);/*文件位置指针返回文件开头*/
int n,i,j;
struct student stu;
if((fp=fopen("c: \\student.txt","rb+"))!=NULL)
{j=getw(fp);//读取文件下一个整数值
rewind(fp);/*文件位置指针返回文件开头*/
printf("请输入要添加的学生数量,按回车键确认:");

1 谭浩强.C程序设计教程:清华大学出版社,2005
六、源程序
#include<stdio.h>
#include "conio.h"//其中定义了getch()函数。
#include<string.h>
#include"stdlib.h"
#include<math.h>
#define N 20
struct student
{printf("打开文件失败!");
return;
}
putw(n,fp);
j=1;
for(i=0;i<n;i++)
{ fwrite(&stu[i],sizeof(struct student),1,fp);
if(stu[i].zcj==stu[i+1].zcj)//排名次
printf("\n%3d%5s%5s%8.2f%8.2f%8.2f\n",j,stu[i].num,stu[i].name,stu[i].kscj,stu[i].pscj,stu[i].zcj);
{ FILE *fp;
struct student stu[N],temp;
int i,j,n;
reads(stu,&n);
for(i=0;i<n;i++)//冒泡法*进行N次循环
for(j=0;j<n-i;j++)//在每次循环中进行N-I次比较
{stu[i].zcj=(stu[i].kscj)*0.7+stu[i].pscj*0.3;
}
}
else
{
if((fp=fopen("c: \\student.txt","wb"))!=NULL)
{
printf("请输入要添加的学生数量,按回车键确认:");
scanf("%d",&n);
putw(n,fp);
for(i=1;i<=n;i++)
{ printf("\n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:\n",i);
}
}
通过这次课程设计一整周的课程设计艰难奋斗的同时让我学会了很多C语言的知识,使我对C语言更充分的认识了它的实用性,我尝试了用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。使程序基本能完成编好和完善了程序,而且用户界面也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。
scanf("%s%s",stu.num,);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
相关主题