成绩统计系统 C语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%s%s",stu.num,stu.name);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
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++)
else
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);
}
fclose(fp);
getch();
}
3、查询数据函数
询分为按学号查询,当输入的学号不存在时将提示不存在,如果查的便将所查的数据显示出来,在查找完毕后返回主菜单。具体的程序段如下:
scanf("%d",&n);
putw(j+n,fp);//将一个整数写到文件中
fseek(fp,0L,2);//改变文件位置指针的位置
for(i=1;i<=n;i++)
{ printf("\n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:\n",i);
scanf("%s%s",stu.num,stu.name);
}
}
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);
{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)
strcpy(stu[j+1].name,temp.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)
int n,i,j;
struct student stu;
if((fp=fopen("c: \\student.txt","rb+"))!=NULL)
{j=getw(fp);//读取文件下一个整数值
rewind(fp);/*文件位置指针返回文件开头*/
printf("请输入要添加的学生数量,按回车键确认:");
xxxxxxx大学
课程设计
学号:
班 级:
姓 名:
指导教师:
课程设计任务书
一 , 课设设计时间
2008~09第2学期第15周,共计一周,20学时。
二,课程设计内容
用C语言编写软件完成以下任务:
(1)录入学生的信息,并保存到一个磁盘文件;、
(2)录入学生的平时成绩和考试成绩;
(3)统计学生的总成绩(计算方法:总成绩=考试成绩*70%+平时成绩30%);
scanf("%s%s",stu.num,stu.name);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
{if(stu[j].zcj<stu[j+1].zcj)
{strcpy(temp.num,stu[j].num);
strcpy(temp.name,stu[j].name);
temp.kscj=stu[j].kscj;
temp.pscj=stu[j].pscj;
temp.zcj=stu[j].zcj;
{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);
}
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);/*文件位置指针返回文件开头*/
}
}
}
fclose(fp);
}
2、总分排序函数
总分的排序采用的排序算法是冒泡法排序,整个排序过程在结构体数组stu中实现,排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下:
void zpx() /*按总成绩排序*/
if(strcmp(number,stu[i].num)==0) break;
if(i>=n)
{printf("没有找到该学生信息!\n");
return;
}
else
printf("\n%5s%5s%8.2f%8.2f%8.2f\n",stu[i].num,stu[i].name,stu[i].kscj,stu[i].pscj,stu[i].zcj);
(3)按照总成绩对学生进行排序;
(4)查询某个学生的成绩(按照学号,姓名,成绩等关键词进行查询)。
三, 课程设计要求
程序质量:
1.贯彻结构化的程序设计思想。
2.用户界面友好,功能明确,操作方便。
3.用户界面中的菜单至少应包括“录入学生信息”,“录入成绩”,“统计”,“退出”等项。
4.代码应适当缩进,并给出必须的注释,以增强程序的可读性。
{ 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;
课程设计说明书;
课程结束后,上交课程设计说明书的源程序。课程设计说明书的内容参见提供的摸板
四 指导教师和学生签字
指导教师:学生签名:
一
经过对程序设计题目的分析可知,整个程序的设计实现大致分为以下模块,其中每一个模块对应一个函数,他们的功能分别是:1输入学生姓名学号,考试成绩和平时成绩,2算出总成绩等于平时成绩乘以30%加上考试成绩乘以70%,3算出总成绩后按照分数排序,4查询某个学生的成绩(输入学号可以查询学生成绩信息),5最后退出程序。
{ printf("文件打开失败!\n");
return;
}
else
{
*n=getw(fp);
for(i=0;i<*n;i++)
fread(&stu[i],sizeof(struct student),1,Βιβλιοθήκη Baidup);
}
fclose(fp);
}
void luru()/*录入学生信息*/
{FILE *fp;
(2)按照学生总成绩排序(zpx)
三
本程序主要由4个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,输入学生信息,平时成绩,考试成绩,排序是程序中较为核心的部分,下面分别进行说明。
1、输入学生信息
添加数据分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。输入平时成绩和考试成绩,首先输入学生的学号,姓名,在定义的结构体中,运用指针变量分别输出该学生的相关信息。再对该生的平时成绩和考试成绩进行输入,同样运用指针来实现对数据的输入。总成绩等于平时成绩*30%+考试成绩*70%,具体的程序段如下:
五
1 谭浩强.C程序设计教程:清华大学出版社,2005
六、源程序
#include<stdio.h>
#include "conio.h"//其中定义了getch()函数。
#include<string.h>
#include"stdlib.h"
#include<math.h>
#define N 20
struct student
}
}
通过这次课程设计一整周的课程设计艰难奋斗的同时让我学会了很多C语言的知识,使我对C语言更充分的认识了它的实用性,我尝试了用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。使程序基本能完成编好和完善了程序,而且用户界面也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。
每一个学生记录都包含学号、姓名,以及平时成绩(pscj),考试成绩(kscj)和总成绩(zcj)。在程序当中,将学生记录类型定义为结构体类型,添加的学生信息直接写入C盘的student.txt文件中,其他函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
1、输入学生信息主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、统计学生总成绩总成绩=平时成绩乘以30%+考试成绩乘以70%
3、总成绩排序按照题目的具体要求实现的是总成绩的排序
4、成绩查询允许按照姓名对学生的各科成绩进行查询;
5、退出
二
1、程序总体结构图
2、具体功能框图
(1)输入学生信息
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
}
}
else
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);
strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].name,stu[j+1].name);
stu[j].kscj=stu[j+1].kscj;
stu[j].pscj=stu[j+1].pscj;
stu[j].zcj=stu[j+1].zcj;
strcpy(stu[j+1].num,temp.num);
printf("请输入要添加的学生数量,按回车键确认:");
scanf("%d",&n);
putw(j+n,fp);//将一个整数写到文件中
fseek(fp,0L,2);//改变文件位置指针的位置
for(i=1;i<=n;i++)
{ printf("\n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:\n",i);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
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++)
else
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);
}
fclose(fp);
getch();
}
3、查询数据函数
询分为按学号查询,当输入的学号不存在时将提示不存在,如果查的便将所查的数据显示出来,在查找完毕后返回主菜单。具体的程序段如下:
scanf("%d",&n);
putw(j+n,fp);//将一个整数写到文件中
fseek(fp,0L,2);//改变文件位置指针的位置
for(i=1;i<=n;i++)
{ printf("\n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:\n",i);
scanf("%s%s",stu.num,stu.name);
}
}
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);
{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)
strcpy(stu[j+1].name,temp.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)
int n,i,j;
struct student stu;
if((fp=fopen("c: \\student.txt","rb+"))!=NULL)
{j=getw(fp);//读取文件下一个整数值
rewind(fp);/*文件位置指针返回文件开头*/
printf("请输入要添加的学生数量,按回车键确认:");
xxxxxxx大学
课程设计
学号:
班 级:
姓 名:
指导教师:
课程设计任务书
一 , 课设设计时间
2008~09第2学期第15周,共计一周,20学时。
二,课程设计内容
用C语言编写软件完成以下任务:
(1)录入学生的信息,并保存到一个磁盘文件;、
(2)录入学生的平时成绩和考试成绩;
(3)统计学生的总成绩(计算方法:总成绩=考试成绩*70%+平时成绩30%);
scanf("%s%s",stu.num,stu.name);
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
{if(stu[j].zcj<stu[j+1].zcj)
{strcpy(temp.num,stu[j].num);
strcpy(temp.name,stu[j].name);
temp.kscj=stu[j].kscj;
temp.pscj=stu[j].pscj;
temp.zcj=stu[j].zcj;
{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);
}
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);/*文件位置指针返回文件开头*/
}
}
}
fclose(fp);
}
2、总分排序函数
总分的排序采用的排序算法是冒泡法排序,整个排序过程在结构体数组stu中实现,排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下:
void zpx() /*按总成绩排序*/
if(strcmp(number,stu[i].num)==0) break;
if(i>=n)
{printf("没有找到该学生信息!\n");
return;
}
else
printf("\n%5s%5s%8.2f%8.2f%8.2f\n",stu[i].num,stu[i].name,stu[i].kscj,stu[i].pscj,stu[i].zcj);
(3)按照总成绩对学生进行排序;
(4)查询某个学生的成绩(按照学号,姓名,成绩等关键词进行查询)。
三, 课程设计要求
程序质量:
1.贯彻结构化的程序设计思想。
2.用户界面友好,功能明确,操作方便。
3.用户界面中的菜单至少应包括“录入学生信息”,“录入成绩”,“统计”,“退出”等项。
4.代码应适当缩进,并给出必须的注释,以增强程序的可读性。
{ 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;
课程设计说明书;
课程结束后,上交课程设计说明书的源程序。课程设计说明书的内容参见提供的摸板
四 指导教师和学生签字
指导教师:学生签名:
一
经过对程序设计题目的分析可知,整个程序的设计实现大致分为以下模块,其中每一个模块对应一个函数,他们的功能分别是:1输入学生姓名学号,考试成绩和平时成绩,2算出总成绩等于平时成绩乘以30%加上考试成绩乘以70%,3算出总成绩后按照分数排序,4查询某个学生的成绩(输入学号可以查询学生成绩信息),5最后退出程序。
{ printf("文件打开失败!\n");
return;
}
else
{
*n=getw(fp);
for(i=0;i<*n;i++)
fread(&stu[i],sizeof(struct student),1,Βιβλιοθήκη Baidup);
}
fclose(fp);
}
void luru()/*录入学生信息*/
{FILE *fp;
(2)按照学生总成绩排序(zpx)
三
本程序主要由4个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,输入学生信息,平时成绩,考试成绩,排序是程序中较为核心的部分,下面分别进行说明。
1、输入学生信息
添加数据分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。输入平时成绩和考试成绩,首先输入学生的学号,姓名,在定义的结构体中,运用指针变量分别输出该学生的相关信息。再对该生的平时成绩和考试成绩进行输入,同样运用指针来实现对数据的输入。总成绩等于平时成绩*30%+考试成绩*70%,具体的程序段如下:
五
1 谭浩强.C程序设计教程:清华大学出版社,2005
六、源程序
#include<stdio.h>
#include "conio.h"//其中定义了getch()函数。
#include<string.h>
#include"stdlib.h"
#include<math.h>
#define N 20
struct student
}
}
通过这次课程设计一整周的课程设计艰难奋斗的同时让我学会了很多C语言的知识,使我对C语言更充分的认识了它的实用性,我尝试了用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。使程序基本能完成编好和完善了程序,而且用户界面也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。
每一个学生记录都包含学号、姓名,以及平时成绩(pscj),考试成绩(kscj)和总成绩(zcj)。在程序当中,将学生记录类型定义为结构体类型,添加的学生信息直接写入C盘的student.txt文件中,其他函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
1、输入学生信息主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、统计学生总成绩总成绩=平时成绩乘以30%+考试成绩乘以70%
3、总成绩排序按照题目的具体要求实现的是总成绩的排序
4、成绩查询允许按照姓名对学生的各科成绩进行查询;
5、退出
二
1、程序总体结构图
2、具体功能框图
(1)输入学生信息
printf("\n请输入第%d个学生的考试成绩和平时成绩,用空格分开,并按回车键确认:\n",i);
scanf("%f%f",&stu.kscj,&stu.pscj);
fwrite(&stu,sizeof(struct student),1,fp);
}
}
else
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);
strcpy(stu[j].num,stu[j+1].num);
strcpy(stu[j].name,stu[j+1].name);
stu[j].kscj=stu[j+1].kscj;
stu[j].pscj=stu[j+1].pscj;
stu[j].zcj=stu[j+1].zcj;
strcpy(stu[j+1].num,temp.num);
printf("请输入要添加的学生数量,按回车键确认:");
scanf("%d",&n);
putw(j+n,fp);//将一个整数写到文件中
fseek(fp,0L,2);//改变文件位置指针的位置
for(i=1;i<=n;i++)
{ printf("\n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:\n",i);