c语言程序设计 学生成绩系统.doc
-作者xxxx-日期xxxxc语言程序设计 学生成绩管理系统【精品文档】实验题目:学生成绩管理系统一、 实验目的1. 熟悉c语言的编译连接和运行过程。2. 掌握c语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。3. 掌握if语句及switch语句的运用方法及嵌套应用方法。4. 掌握实现循环结构的三种语句while、 do-while.、for 的使用。5. 掌握函数的定义方法和调用方法。6. 能够采用模块化思想调试程序。二实验内容1. 编写程序并进行调试运行。2. 输入学生资料,并保存于文件。每个学生包含信息如:姓名、学号、性别、物理成绩、数学成绩、英语成绩、计算机成绩。3. 对已存入的学生信息进行更新操作,包括更新学生信息信息、删除某个学生信息和修改学生信息。4. 通过按学生姓名的方式查询学生信息。5.输入某学生各门成绩进行统计。6 对学生物理成绩排序。7.最后输出学生信息,供需要时打印。 二、 需求分析1. 该程序可用于对学生的基本信息的存储、更新、查询、输出、统计、排序等操作。2. 其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个学生 信息,也可对个别学生信息进行适当的删除或修改。以便随时更新学生信息。3. 程序中设计的查询功能可根据需要从若干数据中查询某信息,四、概要设计1、方案设计对系统进行分析,给出结构图 分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计 结构图如下:学生成绩管理系统插入数据查看数据更新数据物理成绩数学成绩英语成绩计算机成绩统计成绩成绩排序输入数据输出数据更新数据删除数据修改数据物理成绩排序物 理 总 分 和 平均 分数学总分和平均分英语总分和平均分计算机平均分显示数据保存数据五 功能模块的说明1 输入初始学生信息:其中包括学生姓名,学号,性别,物理 数学 英语 计算机成绩 等相关信息;可用函数cin(stu *p1)来实现此操作。2 查询模块:可用 stu *lookdata(stu *p1)来实现。找到就输出此学生全部信息包括学生物理 数学 英语 计算机的成绩 。3 插入模块:可用insert()来实现。其中通过学号的大小比较的,并且以此来排序。4 输出学生的信息及成绩:通过学生的姓名来查看学生的语文 数学 英语 计算机的有关成绩,同时也可以分别通过paverage() maverage() eaverage() comaverage()来输出物理 数学 英语 计算机等成绩的平均分 最高分 最低分。5 退出系统:可以用一个函数来实现,首先将信息保存在文件中,释放动态创建的内存空间,再退出次程序。流程图如下六 调试情况及运行结果1、 对自己设计进行评价,指出合理和不足之处,提出改进的方案。此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,于是就按课本上的例子编了超市管理系统,先把界面弄好然后再添加各模块,而且各模块也出现了不少问题,在同学们和老师的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可结果还不是太理想。由于时间很短,在选题报告中设想到的好多功能都没有实现。已有的那些功能虽已能基本上满足管理者和消费者的需要,但如果还有更多的功能程序就会更加完美。如:进入系统时没有设制密码,保护性不够强;在输入商品号时没有出错提示,如果商品号输入负值2、在设计过程中的感受。 本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。七参考文献C语言程序设计 王曙燕 曹锰 科学出版社 八。附录: #include <stdio.h>#include <stddef.h>#include <stddef.h>#include <string.h>#include <stdlib.h>#include <conio.h>#define MAX 10int sum=10;typedef struct student /*定义结构体*/ char nameMAX; /*姓名*/ int num; /*学号*/ char sexMAX; /*性别*/ float physic; /*语文*/ float mathematic; /*数学*/ float english; /*英语*/ float computer; /*计算机*/ struct student *next; /*结构体指针*/ stu; stu *head;/*读取信息*/int read_message() FILE *fp; stu *p; int i=0; if(fp=fopen("student_manage.txt","rb")=NULL) printf("nn*暂时还没有任何信息,输入密码进入主菜单选择基本信息录入!*n"); return 0; while(feof(fp)!=1) fread(head,sizeof(stu),1,fp); if(p->num=0) break; else i+; fclose(fp); return(i); /*显示或打印函数*/ void print() printf("ttt Score Manage Systemn"); /*成绩管理系统*/ printf("ttt 成绩管理系统n"); printf(" <1>Enter Record: 输入数据 n"); /*输入数据*/ printf(" <2>Display: 显示或打印 n"); /*显示*/ printf(" <3>find: 查找数据 n"); /*访问数据*/ printf(" <4>Renew_message: 更新模块 n"); /*更新模块*/ printf(" <5>Save: 保存数据 n"); printf(" <6>sort_physic: 成绩排名 n"); /*物理成绩排名*/ printf(" <7>Count: 数据统计 n"); /*数据统计*/ printf(" <8>Physic Average: 物理平均成绩 n"); /*物理平均成绩*/ printf(" <9>Math Average: 数学平均成绩 n"); /*数学平均成绩*/ printf(" <10>English Average:英语平均成绩 n"); /*英语平均成绩*/ printf(" <11>Computer Average:计算机平均成绩 n"); /*计算机平均成绩*/ printf(" <12>Quit: 退出 tn"); /*退出*/ /*输入相关数据函数*/ void cin(stu *p1) printf("n Enter name:n"); scanf("%s",&p1->name); printf("Enter num:n"); scanf("%d",&p1->num); printf("Enter sex:n"); scanf("%s",&p1->sex); printf("Enter scoren"); printf("Enter physic:n"); scanf("%f",&p1->physic); printf("Enter mathematic:n"); scanf("%f",&p1->mathematic); printf("Enter english:n"); scanf("%f",&p1->english); printf("Enter computer:n"); scanf("%f",&p1->computer); /*其他数据是否输入函数*/ stu *cindata() stu *p1,*p2; int i=1; char ch; p1=(stu*)malloc(sizeof(stu); head=p1; while(i) cin(p1); printf("Do you want to continue?Yes or no:n"); fflush(stdin); ch=getchar(); if(ch='n'|ch='N') i=0; p1->next=NULL; else p2=p1; p1=(stu*)malloc(sizeof(stu); p2->next=p1; return(p1->next); /*查看数据函数*/ stu *lookdata(stu *p1) while(p1!=NULL) printf("Name:%st",p1->name); printf("Num:%dt",p1->num); printf("Sex:%st",p1->sex); printf("n"); printf("Physic:%ft",p1->physic); printf("Math:%ft",p1->mathematic); printf("English:%ft",p1->english); printf("Computer:%ft",p1->computer); printf("n"); p1=p1->next; return p1; /*通过比较学号来插入数据的函数*/ void insert() stu *p1,*p3,*p2; p1=head; p3=(stu*)malloc(sizeof(stu); p3->next=NULL; if(head=NULL) head=p3;return; cin(p3); while(p1!=NULL&&(p1->num<p3->num) p2=p1;p1=p1->next; if(p2=head) p3->next=head; head=p3;return; p3->next=p1; p2->next=p3; /*通过姓名来查找的函数*/ void find(stu *p2) char name20; int b=0; printf("Enter the name of the sutdent you want to find:"); scanf("%s",name); while(p2!=NULL) if(strcmp(name,p2->name)=0) printf(" The data you want has be find "); printf("Name:%st",p2->name); printf("Num:%dt",p2->num); printf("Sex:%st",p2->sex); printf("n"); printf("Physic%ft",p2->physic); printf("Math%ft",p2->mathematic); printf("English%ft",p2->english); printf("Computer%ft",p2->computer); printf("n"); b=1; else if(b=0) printf("sorry not find data!"); p2=p2->next; if(b=1) print(); printf("Find onen"); else print(); printf("Not findn"); /*求各学生物理平均成绩*/void paverage() stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;p1=p1->next) sum+=p1->physic; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(max<p1->physic) max=p1->physic; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(min>p1->physic) min=p1->physic; printf("Physic Average:%f ",aver); printf("Physic Max:%f",max); printf("Physic Min:%f",max); /*求各学生数学平均分 最高和最低分成绩的函数*/void maverage() stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf("not data!"); else for (i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->mathematic; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(max<p1->mathematic) max=p1->mathematic; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(min>p1->mathematic) min=p1->mathematic; printf("Math Average:%f",aver); printf("Math Max:%f",max); printf("Math Min:%f",min); /*求各学生英语平均分 最高和最低分成绩的函数*/void eaverage() stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->english; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(max<p1->english) max=p1->english; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(min>p1->english) min=p1->english; printf("English Average:%f",aver);printf("English Max:%f",max);printf("English Min:%f",min); /*求各学生计算机平均成绩 最高和最低分*/ void comaverage() stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->computer; aver=sum/i; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(max<p1->computer) max=p1->computer; p1=head; for(i=0;p1!=NULL;i+,p1=p1->next) if(min>p1->computer) min=p1->computer; printf("Computer Average:%f",aver); printf("Computer Max:%f",max); printf("Computer Min:%f",min); /*统计物理平均和总分*/void aver_sum_physic() stu *p1; int i; float sum=0,aver; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->physic; aver=sum/i; printf("Physic Average:%f",aver); printf("Physic Sum:%f",sum);/*统计数学平均和总分*/void aver_sum_mathematic() stu *p1; int i; float sum=0,aver; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->mathematic; aver=sum/i; printf("Mathematic Average:%f",aver); printf("Mathematic Sum:%f",sum);/*统计英语平均和总分*/void aver_sum_english() stu *p1; int i; float sum=0,aver; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->english; aver=sum/i; printf("English Average:%f",aver); printf("English Sum:%f",sum);/*统计计算机平均和总分*/void aver_sum_computer() stu *p1; int i; float sum=0,aver; p1=head; if(p1=NULL) printf("not data!"); else for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->computer; aver=sum/i; printf("Computer Average:%f",aver); printf("Computer Sum:%f",sum);/*统计模块*/void count() int choice;doprintf(" *统计学生平均分和总分*n");printf(" <1>:物理平均和总分n");printf(" <2>:数学平均和总分n");printf(" <3>:英语平均和总分n");printf(" <4>:计算机平均和总分n");printf(" <0>返回主菜单:n");printf(" 请选择(04):n");scanf("%d",&choice);switch(choice) case 1:aver_sum_physic();break; case 2:aver_sum_mathematic();break; case 3:aver_sum_english();break; case 4:aver_sum_computer();break; case 0:break;while(choice!=0);/*物理成绩排序*/*库存排行*/sort_physic() int i=1,j=1; float min; stu *newh,*newp,*tp1,*tp2,*p; newp=newh=NULL; tp1=tp2=NULL; p=head; do i+; p=p->next; while(p->next); while(head!=NULL) p=head; tp1=tp2=p; min=p->physic; while(p->next!=NULL) if(p->next->physic<min) min=p->next->physic; tp1=p; tp2=p->next; p=p->next; if(newh=NULL) newp=newh=tp2; else newp->next=tp2; newp=tp2; if(tp2=head) head=tp2->next; else tp1->next=tp2->next; tp2->next=NULL; head=newh; p=head; for(j=1;j<=i;j+) if(p!=NULL) printf("n 物理成绩排行n");printf("-");printf("n 排名 姓名 性别 学号 物理成绩n"); printf("n%18d %6s %8s %11d %10fn",j,p->name,p->sex,p->num,p->physic); p=p->next; else break; printf("n 按任意键返回n"); getch(); /*删除相关数据*/ shanchu() int num; stu *p,*p0; p=head; cin(p); printf("请输入要删除的学号:"); scanf("%d",&num); head=p->next; free(p); return 1; p0=p->next; while(p0!=NULL) if(p0->num=num) p->next=p; free(p0); return 1; p=p0; p0=p0->next; return 0;/*修改模块*/void revise_message(stu *h)int choice,revise_num,flag;stu *p;p=head; doprintf("n 输入要修改的学生的学号:");scanf("%d",&revise_num);while(p->num!=revise_num) p=p->next; /*查找*/if(p->num=revise_num)printf("n -学生信息-n");printf("-n"); printf("学号-姓名-性别-物理成绩-数学成绩-英语成绩-计算机成绩n"); printf("%8s%4d%8s%8f%8f%8f%8f n",p->name,p->num,p->sex,p->physic,p->mathematic,p->english,p->computer); printf("n 您要修改哪一项?n");printf("n 1、姓名n");printf("n 2、学号n"); printf("n 3、性别n");printf("n