收藏 分销(赏)

c语言大作业-成绩管理.dox.doc

上传人:仙人****88 文档编号:9465200 上传时间:2025-03-27 格式:DOC 页数:32 大小:271.04KB
下载 相关 举报
c语言大作业-成绩管理.dox.doc_第1页
第1页 / 共32页
c语言大作业-成绩管理.dox.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述
目录 学生成绩管理程序 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. 要求: (1)一个文件按以班为单位存储学生记录. (2)将允许的操作分为四种,以A,B ,C,D,E,F为标志: A:插入一个学生记录; B:修改学生记录; C:删除一个学生记录; D:查找一个学生记录; E:浏览学生成绩: F:退出 3. 计算学生的总成绩. 4. 按学号排序输出全班学生成绩表 . 设计目的 根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择. 总体设计 根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块.排序模块。其中嵌入相关函数 以下为大概模块框架: 详细设计 1、宏定义,进行预处理。 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define N 100 struct student { char name[10]; int num; char sex[10]; float math; float yingyu; float proj; float ywen; float aver; float sum; }stu; 2、主菜单函数 //菜单 void menu() { system("cls"); /*清屏*/ printf("======================================================================\n"); printf(" * 欢迎使用学生成绩管理系统 * \n"); printf(" * ======================= * \n"); printf(" * 请按键选择相应的功能: * \n"); printf(" * 1.成绩录入 * \n"); printf(" * 2.查询成绩 * \n"); printf(" * 3.修改成绩 * \n"); printf(" * 4.插入成绩 * \n"); printf(" * 5.报表输出 * \n"); printf(" * 6.统计输出 * \n"); printf(" * 7.删除操作 * \n"); printf(" * 0.退出系统 * \n" ); printf(" * ======================= * \n"); printf("======================================================================\n"); printf(" \n\n\n\n\n\n\n * * 电子14-1,潘才身(14034520123)制作 * * \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****************************************************"); 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); 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.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); 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 %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); } //学号查询函数 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==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.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 '1':xingming();break;//姓名查询 case '2':xuehao();break;//学号查询 } printf("\n 按任意键返回主菜单 "); getch();/*让屏幕停留同时按任意键返回*/ } 5、修改函数 //修改:输入学生的姓名,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果; void modi() { student xs; FILE *fp; char name[10]; 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,sizeof(stu),1,fp); if(strcmp(xs.name,name)==0)/*判断输入要修改的姓名是否存在*/ { printf(" 修改前学生的信息如下:\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); 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=(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 修改后的学生的信息如下:\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表示文件当前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再写入,同时把要修改的那个覆盖掉*/ } else printf("\n 学生不存在,修改失败!!"); fclose(fp); printf("\n 按任意键返回主菜单 "); getch(); } 6、插入函数 //插入:输入学生的平时的各项成绩,插入到指定位置;当指定的位置超出范围时,将其插入到全班的最后,并显示插入成功后的结果。 void insert() { int i=0,j,k,lenth; FILE *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.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) { printf(" 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<lenth && k>=0)/*k的位置要位于数组范围之内*/ {//插入 for(j=lenth-1;j>=k;j--) xs[j+1]=xs[j]; /*一开始j是最大的,往后移一个这样移动避免数据被覆盖*/ /*循环是只循环这一句的*/ xs[k]=s;/*将输入的学生信息加入这个k位置*/ lenth++;/*长度+1*/ //写回 if((fp=fopen("student.dat","wb"))==NULL) { printf(" 不能建立文件!!\n"); exit(0); } for(i=0;i<lenth;i++) fwrite(&xs[i],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() { FILE *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 %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.ywen,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","rb"))==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<t;u++)/*以下每个指针数组用于指向各分数段的学生信息*/ { if(s[i].aver<60) { p1[j++]=&s[i++]; continue; }/*每个学生信息只能位于一个分数段*/ 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(" 学生成绩单 "); printf("\n 90以上的人有: 姓名 学号 平均分\n"); for(r=0;r<m;r++) { printf("\n %10s %6d %6.2f\n",p4[r]->name,p4[r]->num,p4[r]->aver); } printf("\n 80-89分的人有: 姓名 学号 平均分\n"); for(q=0;q<l;q++) { printf("\n %10s %6d %6.2f\n",p3[q]->name,p3[q]->num,p3[q]->aver); } printf("\n 60-79分的人有: 姓名 学号 平均分\n"); for(p=0;p<k;p++) { printf("\n %10s %6d %6.2f\n",p2[p]->name,p2[p]->num,p2[p]->aver); } printf("\n 不及格的人有: 姓名 学号 平均分\n"); for(n=0;n<j-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]; int 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[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<len;i++) { if(i==k) continue;/*从这个位置开始写入*/ fwrite(&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=getch();//选择菜单 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函数,判断功能选择项是否为“0”,如果为“0”,则中断整个主函数,否则继续主函数: if(ch=='0') break; 心得体验 C语言,个人认为是一门很有趣的科目,就像人和机器对话,这次做作业也得心应手,除了文件处理这个模块没有细学,感到吃紧之外,其余的都还可以。 这次的课程设计总体来说,比前段时期的C语言综合实验难度大了,而且综合性更强,少了综合实验是老师给我们提供的那些函数,所有的函数都要自己去想,自己去找,翻阅好多的书,上机自己动手体验,极大的促进了自己的动手能力及独立思考能力,总体上完成了老师要求的基本功能,没有完成其他的扩展功能,有待改进的地方就是未能设置很好的界面,以及没有细学的文件处理模块的知识。 不管怎样,这次作业让我对c语言的操作更加深刻了解,更加熟悉如何运用函数的调用和嵌套,还有对指针,for语句,switch语句的理解和使用。同时自己对程序的条理整洁,注释清楚,可读性等的要求更加高了。 程序清单: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define N 100 struct student { char name[10]; int num; char sex[10]; float math; float yingyu; float proj; float ywen; float aver; float sum; }stu; //菜单 void menu() { system("cls"); /*清屏*/ printf("======================================================================\n"); printf(" * 欢迎使用学生成绩管理系统 * \n"); printf(" * ======================= * \n"); printf(" * 请按键选择相应的功能: * \n"); printf(" * 1.成绩录入 * \n"); printf(" * 2.查询成绩 * \n"); printf(" * 3.修改成绩 * \n"); printf(" * 4.插入成绩 * \n"); printf(" * 5.报表输出 * \n"); printf(" * 6.统计输出 * \n"); printf(" * 7.删除操作 * \n"); printf(" * 0.退出系统 * \n" ); printf(" * ======================= * \n"); printf("======================================================================\n"); printf(" \n\n\n\n\n\n\n * * 电子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 成绩录入 "); printf("\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("%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=(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",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 %
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服