1、目录 学生成绩管理程序 2 题目要求 2 设计目的 3 总体设计 3 详细设计 4 1、宏定义,进行预处理。 4 2、主菜单函数 4 3、输入函数 6 4、查询函数 8 5、修改函数 9 6、插入函数 11 7、显示函数 13 8、统计函数 14 9、删除函数 17 10、菜单选择函数 19 11、退出系统 20 心得体验 21 程序清单: 21 学生成绩管理程序 题目要求 1. 问题描述: 对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,性别,数学,英语,程序,语文成绩,默认以学号为序存放. 2. 要求:
2、 (1)一个文件按以班为单位存储学生记录. (2)将允许的操作分为四种,以A,B ,C,D,E,F为标志: A:插入一个学生记录; B:修改学生记录; C:删除一个学生记录; D:查找一个学生记录; E:浏览学生成绩: F:退出 3. 计算学生的总成绩. 4. 按学号排序输出全班学生成绩表 . 设计目的 根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择. 总体设计 根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修
3、改模块,删除模块,查找模块,显示模块.排序模块。其中嵌入相关函数
以下为大概模块框架:
详细设计
1、宏定义,进行预处理。
#include
4、t proj; float ywen; float aver; float sum; }stu; 2、主菜单函数 //菜单 void menu() { system("cls"); /*清屏*/ printf("======================================================================\n"); printf(" * 欢迎使用学生成绩管理系统 * \n");
5、 printf(" * ======================= * \n"); printf(" * 请按键选择相应的功能: * \n"); printf(" * 1.成绩录入 * \n"); printf(" * 2.查询成绩 * \n"); printf(" *
6、 3.修改成绩 * \n"); printf(" * 4.插入成绩 * \n"); printf(" * 5.报表输出 * \n"); printf(" * 6.统计输出 * \n"); printf(" * 7.删除操作 * \n"); p
7、rintf(" * 0.退出系统 * \n" ); printf(" * ======================= * \n"); printf("======================================================================\n"); printf(" \n\n\n\n\n\n\n * * 电子14-1,潘才身(14034
8、520123)制作 * * \n"); } 3、输入函数 //成绩录入函数 void input() { system("cls"); FILE *fp; student xs;/*定义一个结构体变量来装从文件中读出来的数据*/ int c=1; if((fp=fopen("student.dat","ab"))==NULL) { printf("can't open file!\n"); exit(0); } printf("\n 成绩录入 "); printf("\n******
9、"); while(c++) { printf("\n 请输入您的姓名(结束请输入姓名为ok):"); scanf("%s",xs.name); if(strcmp(xs.name,"ok")==0) break;/*判断姓名是否为ok,用字符串判断*/ printf("\n 请输入学号:"); scanf("%d",&xs.num); printf("\n 性别:"); scanf("%s",&xs.sex)
10、 printf("\n 请输入高数的成绩:"); scanf("%f",&xs.math); printf("\n 请输入英语的成绩:"); scanf("%f",&xs.yingyu); printf("\n 请输入程序的成绩:"); scanf("%f",&xs.proj); printf("\n 请输入语文的成绩:"); scanf("%f",&xs.ywen); xs.aver=0;/*给平均分变量赋初值*/ xs.aver=(xs.math+xs.
11、yingyu+xs.proj+xs.ywen)/4; xs.sum=0; xs.sum=xs.math+xs.yingyu+xs.proj+xs.ywen; fwrite(&xs,sizeof(stu),1,fp); //将成绩信息写入文件 system("cls"); } fclose(fp); } //姓名查找函数 void xingming() { FILE *fp; student xs; char name[10]; printf("\n 输入要查学生的姓名: "); scanf("%s",name);
12、 if((fp=fopen("student.dat","rb"))==NULL)//读取存放好的数据 { printf("can't open file!\n"); exit(0); } while(!feof(fp)) { fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)==0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/ { printf("\n 学生的信息如下:\n"); printf("\n %10s %6s %6s %6s %6s %6s
13、 %6s %6s %6s\n","姓名","学号","性别","高数","英语","程序","语文","平均成绩","总成绩"); printf("\n %10s %6d%6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.proj,xs.ywen,xs.aver,xs.sum); break; } } if(feof(fp)) printf("\n 查找失败!!!"); /*学生不存在*/ fclose(fp)
14、 } //学号查询函数 void xuehao() { FILE *fp; student xs; int num; printf("\n 输入要查学生的学号: "); scanf("%d",&num); if((fp=fopen("student.dat","rb"))==NULL)//读取数据 { printf("can't open file!\n"); exit(0); } while(!feof(fp)) { fread(&xs,sizeof(stu),1,fp); if(xs.num==
15、num)/*按学号查询时判断输入的学号是否存在,会循环从数据中找取*/ { printf("\n 学生的信息如下:\n"); printf("\n %10s %6s %6s %6s %6s %6s %6s %6s %6s\n","姓名","学号","性别","高数","英语","程序 ","语文","平均成绩","总成绩"); printf("\n %10s %6d%6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.proj,xs.
16、ywen,xs.aver,xs.sum); break; } } if(feof(fp)) printf("\n 查找失败!!!"); fclose(fp); } 4、查询函数 //查询函数 void search() { char ch1; system("cls"); printf(" 请输入按何种方式查询:\n"); printf("\n 1-姓名,2-学号:"); ch1=getchar();/*用字符接收*/ switch(ch1)/*判断*/ { case
17、'1':xingming();break;//姓名查询 case '2':xuehao();break;//学号查询 } printf("\n 按任意键返回主菜单 "); getch();/*让屏幕停留同时按任意键返回*/ } 5、修改函数 //修改:输入学生的姓名,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果; void modi() { student xs; FILE *fp; char name[10]; system("cls"); printf("\n 输入要
18、修改的学生的姓名: "); scanf("%s",name); if((fp=fopen("student.dat","rb+"))==NULL) { printf("can't open file!\n"); exit(0); } while(!feof(fp)) { fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)==0)/*判断输入要修改的姓名是否存在*/ { printf(" 修改前学生的信息如下:\n"); printf("\n %10s %
19、6s %6s %6s %6s %6s %6s %6s %6s\n","姓名","学号","性别","高数","英语","程序 ","语文","平均成绩","总成绩"); printf("\n %10s %6d %6s %6.2f %6.2f %6.2f %6.2f %6.2f\n",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.proj,xs.ywen,xs.aver,xs.sum); printf("\n 请输入该生的高数成绩:");scanf("%f",&xs.math); printf("\n 英语成绩:
20、");scanf("%f",&xs.yingyu); printf("\n 程序成绩:");scanf("%f",&xs.proj); printf("\n 语文成绩:");scanf("%f",&xs.ywen); xs.aver=(xs.math +xs.yingyu +xs.proj +xs.ywen)/4; xs.sum=xs.math +xs.yingyu +xs.proj +xs.ywen; break; } } if(!feof(fp)) { printf(" \n 修改后的学生的
21、信息如下:\n"); printf("\n %10s %6s %6s %6s %6s %6s %6s %6s %6s\n","姓名","学号","性别","高数","英语","程序 ","语文","平均成绩","总成绩"); printf("\n %10s %6d %6s %6.2f %6.2f %6.2f %6.2f %6.2f\n",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.proj,xs.ywen,xs.aver,xs.sum); fseek(fp,sizeof(stu),1);/*负号表示后退,1表示文件当前位置*/
22、 fwrite(&xs,sizeof(stu),1,fp);/*再写入,同时把要修改的那个覆盖掉*/ } else printf("\n 学生不存在,修改失败!!"); fclose(fp); printf("\n 按任意键返回主菜单 "); getch(); } 6、插入函数 //插入:输入学生的平时的各项成绩,插入到指定位置;当指定的位置超出范围时,将其插入到全班的最后,并显示插入成功后的结果。 void insert() { int i=0,j,k,lenth; FIL
23、E *fp; student s,xs[N]; system("cls"); printf("\n 请输入插入的学生的姓名:"); scanf("%s",&s.name); printf("\n 学生的学号:");scanf("%d",&s.num); printf("\n 学生的性别:");scanf("%s",&s.sex); printf("\n 高数成绩:");scanf("%f",&s.math); printf("\n 英语成绩:");scanf("%f",&s
24、yingyu); printf("\n 程序成绩:");scanf("%f",&s.proj); printf("\n 语文成绩:");scanf("%f",&s.ywen); s.aver=(s.math+s.yingyu+s.proj+s.ywen)/4; s.sum= s.math+s.yingyu+s.proj+s.ywen; printf("\n 插入位置:"); scanf("%d",&k); if((fp=fopen("student.dat","rb"))==NULL) { p
25、rintf(" can't open file!\n");
exit(0);
}
while(!feof(fp))
{
fread(&xs[i],sizeof(stu),1,fp);/*把数据读入到结构体数组中*/
if(feof(fp)) break;
i++;
}
fclose(fp);
lenth=i;
if(k
26、样移动避免数据被覆盖*/
/*循环是只循环这一句的*/
xs[k]=s;/*将输入的学生信息加入这个k位置*/
lenth++;/*长度+1*/
//写回
if((fp=fopen("student.dat","wb"))==NULL)
{
printf(" 不能建立文件!!\n");
exit(0);
}
for(i=0;i 27、sizeof(stu),1,fp);
}
else/*不再数组范围之内*/
{
if((fp=fopen("student.dat","ab"))==NULL)
{
printf(" 不能建立文件!!\n");
exit(0);
}
fwrite(&s,sizeof(stu),1,fp);
}
printf("\n 按任意键返回主菜单 ");
fclose(fp);
}
7、显示函数
//显示函数
void print()
{
F 28、ILE *fp;
student s;
system("cls");
if((fp=fopen("student.dat","rb"))==NULL)
{
printf(" can't open file!\n");
exit(0);
}
printf(" 学生成绩表 ");
printf("\n *****************************************************");
printf("\n %10s %10s%6s %6s 29、 %6s %6s %6s %6s %6s \n","姓名","学号","性别","高数","英语"," 程序"," 语文"," 平均成绩","总成绩");
while(!feof(fp))
{
fread(&s,sizeof(stu),1,fp);//从文件中读取成绩信息
if(feof(fp)) break;//判断是否文件尾
printf("\n %10s %6d %6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n",s.name,s.num,s.sex,s.math,s.yingyu,s.proj,s.ywe 30、n,s.aver,s.sum);
}
fclose(fp);
printf("\n 按任意键返回主菜单 ");
getch();
}
8、统计函数
//统计函数
void tongji()
{
int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u;
FILE *fp;
student s[N], *p1[N],*p2[N],*p3[N],*p4[N];/*用指针数组*/
system("cls");
if((fp=fopen("student.dat","r 31、b"))==NULL)
{
printf("cant't open file!\n");
exit(0);
}
while(!feof(fp))
{
fread(&s[i++],sizeof(stu),1,fp);/*读入数据*/
if(feof(fp)) break;
}
t=i;
i=0;
for(u=0;u 32、
}/*每个学生信息只能位于一个分数段*/
if(s[i].aver>=60&&s[i].aver<80)
{
p2[k++]=&s[i++];
continue;
}
if(s[i].aver>=80&&s[i].aver<90)
{
p3[l++]=&s[i++];
continue;
}
if(s[i].aver>=90)
{
p4[m++]=&s[i++];
continue;
}
}
printf(" 33、 学生成绩单 ");
printf("\n 90以上的人有: 姓名 学号 平均分\n");
for(r=0;r 34、 %10s %6d %6.2f\n",p3[q]->name,p3[q]->num,p3[q]->aver);
}
printf("\n 60-79分的人有: 姓名 学号 平均分\n");
for(p=0;p 35、1;n++)
{
printf("\n %10s %6d %6.2f\n",p1[n]->name,p1[n]->num,p1[n]->aver);
}
fclose(fp);
printf("\n 按任意键返回主菜单 ");
getch();
}
9、删除函数
//删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息
void dele()
{
student xs[N];
FILE *fp;
char name[10];
in 36、t i=0,len,k=-1/*k<0是为后面if判断用的*/;
system("cls");
printf("\n 输入要删除的学生姓名: ");
scanf("%s",name);
if((fp=fopen("student.dat","rb+"))==NULL)
{
printf(" can't open file!\n");
exit(0);
}
while(!feof(fp))
{
fread(&xs[i],sizeof(stu),1,fp);
if(feof(fp)) break;
if(strcmp(xs[ 37、i].name,name)==0) k=i;
i++;
}
fclose(fp);
//以下是删除后重新写文件
len=i;/*结构体数组上限*/
if(k>=0)/*k>0说明找到删除学生位置*/
{
if((fp=fopen("student.dat","wb+"))==NULL)
{
printf(" can't open file!\n");
exit(0);
}
for(i=0;i 38、xs[i],sizeof(stu),1,fp);
}
fclose(fp);
}
else
{
printf("\n 删除失败!!!\n");
getch();
} /*失败后重新返回菜单*/
printf("\n 按任意键返回主菜单 ");
print();
}
10、菜单选择函数
//菜单选择
void main()
{
char ch;
system("color 3f");
while(1)
{
menu();// 显示菜单
ch=get 39、ch();//选择菜单
if(ch=='0') break;
switch(ch)//判断功能项
{
case'1':input();break;
case '2':search();break;
case '3':modi();break;
case '4':insert();break;
case '5':print( );break;
case '6':tongji();break;
case '7':dele();break;
}
}
}
11、退出系统
在主函数中,加一个if函数,判断功 40、能选择项是否为“0”,如果为“0”,则中断整个主函数,否则继续主函数:
if(ch=='0') break;
心得体验
C语言,个人认为是一门很有趣的科目,就像人和机器对话,这次做作业也得心应手,除了文件处理这个模块没有细学,感到吃紧之外,其余的都还可以。
这次的课程设计总体来说,比前段时期的C语言综合实验难度大了,而且综合性更强,少了综合实验是老师给我们提供的那些函数,所有的函数都要自己去想,自己去找,翻阅好多的书,上机自己动手体验,极大的促进了自己的动手能力及独立思考能力,总体上完成了老师要求的基本功能,没有完成其他的扩展功能,有待改进的地方就是未能设置很好的界面,以及没有细学 41、的文件处理模块的知识。
不管怎样,这次作业让我对c语言的操作更加深刻了解,更加熟悉如何运用函数的调用和嵌套,还有对指针,for语句,switch语句的理解和使用。同时自己对程序的条理整洁,注释清楚,可读性等的要求更加高了。
程序清单:
#include 42、 float math;
float yingyu;
float proj;
float ywen;
float aver;
float sum;
}stu;
//菜单
void menu()
{
system("cls"); /*清屏*/
printf("======================================================================\n");
printf(" * 43、欢迎使用学生成绩管理系统 * \n");
printf(" * ======================= * \n");
printf(" * 请按键选择相应的功能: * \n");
printf(" * 1.成绩录入 * \n");
printf(" * 2.查询成绩 * \n");
printf 44、" * 3.修改成绩 * \n");
printf(" * 4.插入成绩 * \n");
printf(" * 5.报表输出 * \n");
printf(" * 6.统计输出 * \n");
printf(" * 7.删除操 45、作 * \n");
printf(" * 0.退出系统 * \n" );
printf(" * ======================= * \n");
printf("======================================================================\n");
printf(" \n\n\n\n\n\n\n 46、 * * 电子14-1,潘才身(14034520123)制作 * * \n");
}
//成绩录入函数
void input()
{
system("cls");
FILE *fp;
student xs;/*定义一个结构体变量来装从文件中读出来的数据*/
int c=1;
if((fp=fopen("student.dat","ab"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
printf("\n 成绩录入 ");
prin 47、tf("\n****************************************************");
while(c++)
{
printf("\n 请输入您的姓名(结束请输入姓名为ok):");
scanf("%s",xs.name);
if(strcmp(xs.name,"ok")==0) break;/*判断姓名是否为ok,用字符串判断*/
printf("\n 请输入学号:");
scanf("%d",&xs.num);
printf("\n 性别:");
scanf(" 48、s",&xs.sex);
printf("\n 请输入高数的成绩:");
scanf("%f",&xs.math);
printf("\n 请输入英语的成绩:");
scanf("%f",&xs.yingyu);
printf("\n 请输入程序的成绩:");
scanf("%f",&xs.proj);
printf("\n 请输入语文的成绩:");
scanf("%f",&xs.ywen);
xs.aver=0;/*给平均分变量赋初值*/
xs.aver= 49、xs.math+xs.yingyu+xs.proj+xs.ywen)/4;
xs.sum=0;
xs.sum=xs.math+xs.yingyu+xs.proj+xs.ywen;
fwrite(&xs,sizeof(stu),1,fp); //将成绩信息写入文件
system("cls");
}
fclose(fp);
}
//姓名查找函数
void xingming()
{
FILE *fp;
student xs;
char name[10];
printf("\n 输入要查学生的姓名: ");
scanf("%s 50、",name);
if((fp=fopen("student.dat","rb"))==NULL)//读取存放好的数据
{
printf("can't open file!\n");
exit(0);
}
while(!feof(fp))
{
fread(&xs,sizeof(stu),1,fp);
if(strcmp(xs.name,name)==0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/
{
printf("\n 学生的信息如下:\n");
printf("\n %10s %6s %6s %
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818