《c程序设计》课程设计学生成绩管理本科论文.doc
C程序设计课程实践报告学生成绩管理1 设计目标学生信息包括:学号,姓名,班级、学期、成绩等。解决问题:提高学生成绩的管理水平和管理效率,为全校职工和学生提供方便、快捷、准确的学生成绩服务。主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改。(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序。(3)能查询学生成绩,不及格科目及学生名单。(4)能按班级输出学生各个学期的成绩单。要求:系统以菜单方式工作。学期int term班级int classes姓名char name 学号int num成绩int core42 总体设计主流程修改单个学生信息修改monify信息录入void input 成绩统计void sort查询voidsearch学号stui.num、班级stui.classes,姓名stui.name、四门课成绩stui.score能按学号查询单个学生成绩 按班级统计学生的成绩,求学生的总分及平均分,排序成绩输出void print能按班级,学期输出学生成绩单和不及格科目及学生名单结构数组struct student3详细设计整个系统除了主函数外,另外还有5个函数,实现六大功能:输入功能、输出功能、修改功能,查找并显示功能、排序并显示功能。各个函数分别如下::(1) . 定义结构体及宏定义 #include <stdlib.h>#include <stdio.h>#include <string.h>#define NUM 100struct student int term; int num; int classes; char name10; int score4; int sum; float average; stuNUM;(2). 主菜单函数 :void zcd() 利用无限次循环for(;)和swithch()进行菜单选择来实现各函数的调用,系统根据输入的数字选项来调用相应的函数。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!(3)输入信息函数 :void input() 利用循环for(;)输入学生的信息和求各学生的平均分。(4)排序并显示函数 :void sort() 用循环for(;)求各学生的平均分,用冒泡法基于平均分对学生进行排序并输出。(5)查找并显示一个记录 :void search() 利用循环for(;)依次与输入的学号对比,若找到相符的,则输出该生的相关信息;否则提示无此学生。(6)按学期、按班级输出成绩函数 :void print() 利用 swithch()进行菜单选择来实现print1()和print2()的各自调用,print1()实现按学期输出成绩,print2()实现按班级输出成绩;利用循环for(;)依次输出不及格学生的名单及成绩。(7)修改成绩函数 :void modify()利用循环for(;)依次与输入的学号对比,若找到相符的,则提示要修改的相关信息;否则,提示无此学生。4. 调试与测试初次遇到这个程序,以为所学知识肯定不够用但是整体框架给出我们后就觉得还是可行的。即通过主函数中的switch选择结构,在通过用户的可视化界面做出选择,通过对switch各个分支的副函数进行编写调试。最终完成程序,并优化。最后通过多次的使用,对细节进行了优化。增加一些判断语句,让用户了解程序运行状况;增加提示。学c需要的是一颗好奇、细心、勤奋的心。多多练习,多多思考。多了解硬件知识,熟悉并记忆一些小的程序片段。必能有所收获。5分析及结论实现功能:1、输入功能:可以一次完成无数条信息的输入。2、 输出功能:能按班级输出学生的成绩单。3、修改功能:完成对单个学生成绩的修改。4、查找功能:完成对单个学生信息查找,并显示。5、排序功能:按学生成绩进行排序,并显示。总结经验:1、要对系统的功能和要求做出详细的分析,并合理分解任务。2、把分解出来的子任务,做给一个相对独立的模块。3、在设计一个模块之前,要简单构想一下总界面的显视情况。4、针对构想出来的界面进行程序的编写。6运行结果运行开始:输入成绩记录:排序并显示:7. 结束语通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统,要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。8.参考文献1 C语言程序设计,谭浩强,清华大学出版社。2 C程序设计学习辅导,谭浩强,清华大学出版社。 9源代码:#include <stdlib.h>#include <stdio.h>#include <string.h>#define NUM 100struct student int term; int num; int classes; char name10; int score4; int sum; float average; stuNUM;void input() system("cls"); int i;char a;for(i=0;i<NUM;i+) printf(" n请输入学生的学期:"); scanf("%d",&stui.term); printf(" n请输入学生的学号:"); fflush(stdin); scanf("%d",&stui.num); printf(" n请输入学生的班级:"); scanf("%d",&stui.classes); printf("n请输入学生的姓名:"); scanf("%s", stui.name) ; printf("n请输入学生的语文成绩:"); scanf("%d",&stui.score0); printf("n请输入学生的数学成绩:"); scanf("%d", &stui.score1); printf("n请输入学生的英语成绩:"); scanf("%d", &stui.score2); printf("n请输入学生的计算机成绩:"); scanf("%d", &stui.score3); stui.sum=stui.score0+stui.score1+stui.score2+stui.score3;/算总分和平均 stui.average=(float)stui.sum/4.0; printf("是否要继续添加(按N&n退出)"); fflush(stdin); a=getchar(); if(a='n'|a='N') break;void sort() void print();int i,j=0;float temp; for(i=0;i<NUM;i+) stui.sum=stui.score0+stui.score1+stui.score2+stui.score3; stui.average=(float)stui.sum/4.0; for(i=0;i<NUM-1;i+)for(j=i+1;j<NUM;j+)if(stui.sum<stuj.sum)temp=stui.sum; stui.sum=stuj.sum; stuj.sum=temp; printf("学号t姓名t班级 语文 数学 英语 计算机 总分 平均分n"); for(i=0;i<NUM;i+) printf("%dt%st%d%5d%5d%5d%6d%7d%8.2fn",stui.num,stui.name,stui.classes, stui.score0,stui.score1,stui.score2,stui.score3,stui.sum,stui.average); /*输出学生信息*/system("pause");system("cls");print(); void search() system("cls");/*清屏*/ int number=0,i; printf("ttt 请输入要查找学生的学号:"); scanf("%d",&number); printf("学号t姓名t班级 语文 数学 英语 计算机 总分 平均分n"); for(i=0;i<NUM;i+) if(number=stui.num) break;/*查找判断*/ if(i<NUM)printf("%dt%st%d%5d%5d%5d%6d%7d%8.2fn",stui.num,stui.name,stui.classes,stui.score0,stui.score1,stui.score2, stui.score3,stui.sum,stui.average); /*输出学生信息*/ elseprintf("没找到该学生的信息n");system("pause"); void print() void zcd();void print1();void print2();void print();system("cls");char a; printf("1、按学期输出n");printf("2、按班级输出n");printf("3、返回n");fflush(stdin);a=getchar();switch(a)case '1':print1();break;case '2':print2();break;case '3':zcd();break;default:print(); void print1()/按学期int i,m;printf("请输入学期:n");scanf("%d",&m);printf("学号t姓名t班级 语文 数学 英语 计算机 总分 平均分n");for(i=0;i<NUM;i+) if(m=stui.term) printf("%dt%st%d%5d%5d%5d%6d%7d%8.2fn",stui.num,stui.name,stui.classes, stui.score0,stui.score1,stui.score2, stui.score3,stui.sum,stui.average); /*输出学生信息*/system("pause");system("cls");print();void print2()/按班级int i,j,k;printf("请输入班级:n");scanf("%d",&k); printf("学号t姓名t班级 语文 数学 英语 计算机 总分 平均分n");for(i=0;i<NUM;i+) if(k=stui.classes) stui.sum=stui.score0+stui.score1+stui.score2+stui.score3; stui.average=stui.sum/4.0; printf("%dt%st%d%5d%5d%5d%6d%7d%8.2fn",stui.num,stui.name,stui.classes, stui.score0,stui.score1,stui.score2, stui.score3,stui.sum,stui.average); /*输出学生信息*/ printf("输出不及格学生名单及成绩:n");printf("学号t姓名t班级 语文 数学 英语 计算机 n");for(i=0;i<NUM;i+) for(j=0;j<4;j+) if(stui.scorej<60&&k=stui.classes) /*输出不及格学生名单及成绩*/ printf("%dt%st%d%5d%5d%5d%6dn",stui.num,stui.name,stui.classes, stui.score0,stui.score1,stui.score2, stui.score3); break; system("pause");system("cls");print();void modify() void zcd(); system("cls"); int number,i; printf("ttt请输入要修改信息的学生学号:"); scanf("ttt%d",&number); for(i=0;i<NUM;i+) if(number=stui.num) break;/*查找判断*/ if(i<NUM)/*查找判断*/ printf("请输入修改后的学生的信息:"); printf(" n请输入学生的学期:"); scanf("%d",&stui.term); printf(" n请输入学生的学号:"); fflush(stdin); scanf("%d",&stui.num); printf(" n请输入学生的班级:"); scanf("%d",&stui.classes); printf("n请输入学生的姓名:"); scanf("%s", stui.name) ; printf("n请输入学生的语文成绩:"); scanf("%d",&stui.score0); printf("n请输入学生的数学成绩:"); scanf("%d", &stui.score1); printf("n请输入学生的英语成绩:"); scanf("%d", &stui.score2); printf("n请输入学生的计算机成绩:"); scanf("%d", &stui.score3); elseprintf("没找到该学生的信息n");system("paues");system("cls");zcd(); void zcd() void zcd();int n=0;char m;system("cls");/*清屏*/ printf("ntt- 欢迎使用苏州科技学院学生管理系统-nntnnnn"); printf("ttt1. 输入学生成绩记录 n"); /*输入学生成绩记录*/ printf("ttt2. 排序并显示 n"); /*排序*/ printf("ttt3. 按班级显示成绩单 n"); /*显示*/ printf("ttt4. 查找个人成绩 n"); /*查找*/ printf("ttt5. 修改n"); /*修改*/ printf("ttt6. 退出 n"); /*退出*/ printf("nttt输入你的选择Enter your choice(16):"); fflush(stdin); m=getchar(); doswitch(m) case '1':input();zcd();break; case '2':sort();system("pause");zcd();break; case '3':print();system("pause");break; case '4':search();zcd();break; case '5':modify();system("pause");zcd();break; case '6':exit(0); /*如菜单返回值为7则程序结束*/ default:printf("错误命令"); getchar();zcd(); while(1);void main() void zcd(); void input(); void sort(); void search(); void print(); void print1(); void print2(); void modify(); zcd();/*主函数界面*/ 11