1、最后,就可以按照主菜单进行一系列的操作。其实,这些程序的设计都是根据以前学过的只是进行的简单的程序的叠加。没有什么可以害怕或是担心的。3、系统完成功能及框图退出程序查看所有同学信息输入学生记录修改学生记录按班级查询成绩查询不及格同学成绩统计4、界面设计主菜单运行1后界面运行4后界面运行5后界面5、核心算法及说明#include io.hstdlib.hstring.h#define MAX 300struct student char cla10; /班级 char term10; /学期 char name10; / 姓名 char no10; / 学号 float ch; /语文 floa
2、t ma; /数学 float en; /英语 float com; /计算机;struct data int count; / 当前学生数组中学生的个数 struct student stuMAX; / 学生数组 dd; / 显示主菜单void menu() system(cls); printf(nttt*nttt* *nttt* 学生成绩管理系统 *nttt* 0 退出 *nttt* 1 查看所有学生信息 *nttt* 2 输入学生记录 *nttt* 3 修改学生记录 *nttt* 4 查询(班级) *nttt* 5 查询(不及格记录) *nttt* 6 成绩统计 *n / 等待用户按回
3、车后回到主菜单void to_menu() char c1,c2;nnn按回车键返回主菜单. scanf(%c%c,&c1,&c2); menu(); / 查看所有学生信息void view_data() int i;班级t学期t姓名t学号t语文t数学t英语t计算机n-n for(i=0;idd.count;i+) printf(%st%st%st%st%.1ft%.1ft%.1ft%.1fn,dd.stui.cla,dd.stui.term,dd.stui.name,dd.stui.no,dd.stui.ch,dd.stui.ma,dd.stui.en,); / 将数据从结构体数组保存到文件
4、中void save_data() FILE *fp; int i,k; k=dd.count; fp=fopen(c:/dada.txt,w fwrite(&k,sizeof(int),1,fp);k; fwrite(&dd.stui,sizeof(struct student),1,fp); fclose(fp); / 输入学生记录(按班级和学期)void add_data() struct student st; int b; int i,k,j; char term10,cla10;请输入所要录入的学生的班级:%s,cla);请输入所要录入的学期:,term); while(1) j=
5、0;n请输入学生信息:n姓名t学号t语文t数学t英语t计算机n-n scanf(%s%s%f%f%f%f,st.name,st.no,&st.ch,&st.ma,&st.en,& for(i=0; if(strcmp(dd.stui.no,st.no)=0&strcmp(dd.stui.term,term)=0) if(strcmp(dd.stui.no,st.no)=0) printf(n信息已存在,请重新输入! j=1; break; if(j=1) continue; if(j=0) k = dd.count; strcpy(dd.stuk.cla,cla);strcpy(dd.stuk
6、.term,term); strcpy(dd.stuk.name,st.name); strcpy(dd.stuk.no,st.no); dd.stuk.ch=st.ch; dd.stuk.ma=st.ma; dd.stuk.en=st.en; =; dd.count+; nn继续添加学生信息1-yes 0-no:%db); if(b=0) break; save_data();/ 将数据从文件读到结构体数组中void read_data()FILE *fp;int i,k;struct student st;k=0;if(access(,0)=-1)/ 如果文件不存在fp=fopen(fwr
7、ite(&fclose(fp);fp=fopen(rfread(&dd.count=k;for(i=0;fread(&st,sizeof(struct student),1,fp); strcpy(dd.stui.cla,st.cla); strcpy(dd.stui.term,st.term);strcpy(dd.stui.name,st.name);strcpy(dd.stui.no,st.no);dd.stui.ch=st.ch; dd.stui.ma=st.ma; dd.stui.en=st.en; =;fclose(fp);/ 修改学生成绩记录(按班级和学期)void edit_da
8、ta()char cla10,term10; int i;float ch,ma,en,com;请输入所要修改记录的班级:请输入所要修改记录的学期:if(strcmp(dd.stui.cla,cla)=0& printf(n姓名:%s,学号:,dd.stui.name,dd.stui.no);printf(n请修改学生数据:n语文成绩: scanf(%fch); dd.stui.ch=ch;n数学成绩:ma); dd.stui.ma=ma;n英语成绩:en); dd.stui.en=en;n计算机成绩:com); =com;nn编辑学生记录成功! save_data();/ 按班级输出成绩单v
9、oid query_data_cla()int i;char cla10;printf(n请输入要查询成绩的班级:scanf(if(strcmp(dd.stui.cla,cla)=0) printf( printf( /查询不及格科目的学生名单void query_data_pass() int i,s=0; char cla10,term10;请输入所要查询的班级:请输入所要查询的学期: for(i=0; if(strcmp(dd.stui.term,term)=0&strcmp(dd.stui.cla,cla)=0) printf(%s,学号:%s 的不及格科目有: if(dd.stui.
10、ch60)printf(语文ts+; s=0; if(dd.stui.ma数学t if(dd.stui.en英语ts=0; if(计算机t if(s=0)printf(0科 /成绩统计(按班级和学期)求总分和平均分void count_data() int i,k=0;float sum4=0.0,average4;请输入所要统计记录的班级:请输入所要统计记录的学期: if(strcmp(dd.stui.cla,cla)=0& k+; sum0+=dd.stui.ch; sum1+=dd.stui.ma; sum2+=dd.stui.en; sum3+=; average0=sum0/k; a
11、verage1=sum1/k; average2=sum2/k; average3=sum3/k; printf(n所查询%s班级%s学期的各科总分为:,cla,term);语文t数学t英语t计算机%.1ft%.1ft%.1ft%.1ft,sum0,sum1,sum2,sum3);n所查询%s班级%s学期的各科平均分为:,average0,average1,average2,average3);/ 主函数void main()int fun;read_data();menu();while(1)请输入功能号0-8:fun);scanf(switch(fun)case 0:/ 退出break;c
12、ase 1:/ 查看所有学生信息view_data();case 2:/按班级和学期输入学生记录add_data();case 3:/ 按班级和学期修改学生记录edit_data();case 4:/ 查询(按班级)query_data_cla(); case 5: /查询不及格学生及科目(按照班级和学期) query_data_pass(); break; case 6:/ 成绩统计(按班级和学期求平均分和总分)count_data();if(fun=0) break;to_menu();相关程序分析1、查看所有学生信息 先定义相关变量,然后设计输入输出程序。输出所要查询的东西,并设计好输出的形式,这是很重要的一点。这样就可以查看到所有已存的学生信息了2、按班级查询 同样先定义变量,然后按照要求设计所要输出的文字。主要应用for循环对已存的所有的学生信息进行输出。3、查询不及格的记录 同样还是先定义变量,设