C语言课程设计报告--班级成绩管理系统(共41页)_第1页
C语言课程设计报告--班级成绩管理系统(共41页)_第2页
C语言课程设计报告--班级成绩管理系统(共41页)_第3页
C语言课程设计报告--班级成绩管理系统(共41页)_第4页
C语言课程设计报告--班级成绩管理系统(共41页)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上课 程 设 计 报 告课程名称 C语言程序设计 课题名称 班级成绩管理系统 专 业 电子技术 班 级 1102班 学 号 姓 名 指导教师 肖伟平 王颖 黄哲 2012年6月19日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计 课 题 班级成绩管理系统 专业班级 电子技术1102班 学生姓名 学 号 指导老师 肖伟平 王颖 黄哲 审 批 任务书下达日期 2012 年 6 月 19 日任务完成日期 2012 年 7 月 4 日一、设计内容与设计要求1 设计内容:班级成绩管理系统设计涉及的知识点:掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控

2、制语句;掌握数组的基本概念。熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。2 设计要求:1) 用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,

3、调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单。2) 建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;3) 班级成绩管理系统应能提供以下功能:(1)主菜单界面设计。通过提示用户输入一个数字选项,调用相应的功能函数。(2)学生成绩显示:完成班级全部学生成绩的显示,显示时按表格的形式,且应有表头;(3)学生成绩追加:完成新增一个(或多个)学生的成绩记录,要求在追加过程中有相应的提示信息,完成追加后能重新计算学生平均成绩并显示; (4)学生成绩修改:要求能按学号和按姓名两种定位方式,且可以按用户要求

4、修改记录中除学号和姓名以外的指定内容,并重新计算学生的平均成绩;(5)学生成绩信息的查询;要求系统能按学号和按姓名两种查询方式定位,显示符合条件的记录,若查询不到应给出相应的提示信息。(6)学生成绩信息的删除;要求可按指定的学号和指定的姓名两种定位方式删除学生的成绩记录。(7)要求在删除模块、修改模块和查询模块中若找不到所需的记录时,系统设计中应有一定的提示信息。 (8)成绩排序:按学生平均成绩进行排序;(9)成绩统计: 统计并以表格的形式显示所有课程的平均分; 统计并显示选定的某门课程的平均分以及超过该平均分的人数,同时能将超过该平均分的学生记录以表格的形式显示出来。4) 说明:(1) 要求

5、将修改后的数据写入到一个新的数据文件nwejck.txt中。(2) 对系统有兴趣的同学可以在实现基本要求的基础上,完善系统的其它功能。5) 班级成绩管理系统采用一个结构体数组,学生成绩数据库结构如下:int xh /*学号*/char name10 /*姓名*/double yy /*英语*/double mat /*数学*/double jsj /*计算机*/double wl /*物理*/double zf /*总分*/ 注意:学号不能重复且不少于4位数字,各项字符串的长度要求在410之间,数据库应有10条或多于10条以上的记录。6) 要求:1 要求每个学生必须独立思考,认真并按时完成本课

6、程设计所包含的所有内容;2 要求学生必须按照课程设计报告的完整格式说明设计内容,设计任务分析过程和算法,给出程序流程图和全部源程序;3 设计报告的完整格式应包括以下部分的内容: 系统设计总体思路; 系统的主要功能; 系统功能模块的划分(要求画出总体模块框图); 主要功能的实现和各个程序模块说明(每个功能模块的框图、系统主模块的流程图,各个功能模块至少要有一个主要的流程图); 程序调试过程及各模块调试中相应的部分截图; 课程设计总结与体会(不少于500字)。 课程设计参考文献; 程序清单;4 课程设计周内,凡规定的集中上机时间必须到机房调试程序;5 设计完成后必须参加答辩,并按要求演示程序,提交

7、课程设计报告和有关电子文档。7)分组及安排所选题目根据学生班号和学号确定,(班号+学号)% 6+1。如你的班号为01班、学号为01,则所选题目号为:(1+1)%6+13,即课题号为3。8)成绩评定系统设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量高低;答辩时回答问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。二、进度安排第 19 周 星期一 8:0012:00 讲课、布置任务星期二 8:0012:00 机房上机调试程序星期三 14:0018:00 机房上机调试程序星期四 14:0018:00 机房上机调试程序、答辩 附:课程设计报告排版、打印和装订要求1. 课

8、程设计报告装订顺序:封面、任务书、目录、正文、附件、评分表。按A4大小的纸张排版和打印。 2. 设计报告的页码从目录之后开始使用;3. 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22磅。正文中程序清单(英文)用英文字体Times New Roman,单倍行间距。 4. 正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试(各模块至少有一个程序调试的截图);五、总结(不少于500字);六、参考文献;t、附件(包含所有程序的原代码,且程序中应有必要的注释)。八.正文总字数要

9、求在5000字以上(不含程序原代码)。5设计报告中任务书和评分表不需重新排版。目 录专心-专注-专业一、系统总体设计思路:.总体功能设计: 学生宿舍管理系统存放了每个学生的学号、姓名、性别、班级、电话号码及所住的宿舍栋号、房间号、校区、宿舍类别的数据库。每个人的信息定义在一个结构体变量中。其结构如下:系统通过显示程序、追加程序、查询程序、删除程序、修改程序、统计程序、排序程序来实现学生信息管理系统的显示功能、追加功能、查询功能、删除功能、修改功能、统计功能、排序功能。各个功能的调用通过主函数中的switch语句来实现。switch(sele) case 1:Disp();break;(显示模块

10、) case 2:Appe();break;(追加模块) case 3:Modi();break;(修改模块) case 4:Dele();break;(删除模块) case 5:Query();break;(查询模块) case 6:Sort(); break;(排序模块) case 7:Total(); break;(统计模块) case 8:Quit(); sele=0;break;(退出模块).各模块功能设计:.显示模块:通过设计一个模块,来实现学生信息的显示。以便于浏览学生的信息。.追加模块:通过设计一个模块,当要加入新的学生的信息的时候,来实现新学生信息的加入。iii.查询模块:通

11、过设计一个模块,这个模块可以按学生的学号、姓名来查询学生所有的信息,并显示学生的所有信息,以便查询者阅读。 iv.删除模块: 通过设计一个模块,当输入一个学生的学号或者姓名的时候,可以通过这个模块,将输入学号或者姓名的学生的所有信息从数据库中删除出去。以后,这个学生的信息将不再会出现再数据库中。v.修改模块:通过设计一个模块,当某个人的信息发生变化的时候,可以通过修改模块来进行修改。修改模块时一具有多级子菜单的摸块。使用十分的方便、灵活。vi统计模块:通过设计一个模块,能按指定的校区、宿舍栋号统计入住该栋的学生人数,或统计制指定的班级入住某栋的人数,并能将统计的结果以及统计的人员的信息用表格显

12、示出来,是浏览者一目了然。 vii.排序模块:通过设计一个模块,来实现数据库的信息按宿舍类别的升序排列。并显示所有信息,使浏览者一目了然。二.系统总体模块框图: 主函数显示模块追加模块查询模块删除模块排序模块退出模块统计模块退出修改模块三、系统总流程图及各模块流程图.总流程图:进入系统输入Sele=?追加程序删除程序查询程序统计程序显示程序退出程序输出Sele=8Sele=4Sele=2Sele=5Sele=7Sele=1排序程序Sele=6修改程序Sele=3开始结束.各模块流程图:i.显示模块:进入输入选项xuanxM=?输出所有信息退出M=1M=2ii.追加模块:进入输入选项num=?输

13、入信息输出所有信息退出num=2num=1是否继续追加否是iii.修改模块:进入输入选项t=?修改学号修改英语修改计算机修改物理退出程序输入信息t=8t=3t=1t=7修改总分t=6修改姓名t=2修改数学num=??num=3按学号查找并修改按姓名查找并修改num=1num=2输出所有信息t=4t=5选择是否继续修改?是否iv.删除模块:进入输入选项要查找的信息查找要删除的学生信息删除学生信息输出删除后的学生信息是否继续删除退出查无此人flag=?否是flag=0flag=1v.查询模块:进入输入选项按学号查找号按姓名查找号查找学生num=1num=3num=2flag=?是否继续查询查无此人

14、!flag=1输出学生信息flag=0退出是否vi.统计模块:进入输入选项按学号统计按姓名统计输入统计的人数和这些学生的信息是否继续统计退出否是t=1t=2t=3vii.排序模块:进入输入选项按总分输出排序后的学生信息退出num=2num=1四、系统各模块主要功能的实现I.显示模块程序通过一个printf函数把输出信息的表头打印出来,再通过一个for循环把每一个学生的信息输出,在输出的时候,通过调用Print函数(一个专门用来输出的函数,且是用指向结构体数组的指针输出学生信息)输出所有学生信息。II.追加模块结构体中间的成员之间用空格来隔开输入,通过回车键来实现追加。且追加一个学生信息后可选择

15、继续追加或退出。III修改模块程序定义一个变量num1,来确定到底输入的是学号还是姓名。通过一个for循环来确定数据库到底是否含有此人的信息。如果含有此人的信息,则把此人的序号赋值给变量k,把标识变量flag赋值为1;如果不含有此人信息,则标识变量flag值仍为0。再通过if语句,如果标识变量flag为0,则打印“查无此人!”。如果flag的值为1怎进入下一级菜单,通过switch语句来选择是修改这个人的姓名.学号.英语.计算机.物理.总分。修改完成后通过调用Print函数输出修改后的新的所有学生信息。每次修改成功之后可通过选择“是”或者“否”来选择是否继续修改学生信息。IV删除模块程序通过定

16、义一个变量num,来确定输入到底是学号还是姓名,或者退出删除模块。通过一个for循环来确定数据库到底是否含有此人的信息。如果含有此人的信息,则通过一个for循环,把这个以后的信息依次前推来覆盖这个人的信息,而实现此人信息的删除。如果不含此人的信息,则打印“查无此人!”。每次删除结束之后通过选择“是”或者“否”来选择是否继续删除学生信息。V.查询模块程序通过输入一个变量num来实现是按学号还是按姓名来查找,或者退出查询。当输入完学号或者姓名的时候,再通过一个for循环来实现此人信息的查找。当含有这个人的信息的时候,把标识变量flag赋值为1,并立即输出此人信息。如果不含这个人的信息的时候,标识变

17、量flag仍为0。再通过一个if 语句,如果标识变量flag为0,则打印“查无此人!”。用while循环保证程序在模块中查询。每次查询结束之后通过选择“是”或者“否”来选择是否继续查询学生信息。VI统计模块:程序通过输入一个变量t来选择按哪项内容统计或者退出统计模块。再通过一个for循环来实现目标信息的查找。定义标识变量flag,在for循环查找信息前赋值为零。当每找到一个目标信息的时,把标识变量flag赋值为1,用变量num累加人数并并把此人信息赋给另一个结构体成员。如果不含这个人的信息的时,标识变量flag仍为0。最后输出统计的人数并通过for语句输出这些学生的信息,再通过一个if 语句,

18、如果标识变量flag为0,则打印出“查无此信息!”。每次统计结束之后可通过选择“是”或者“否”来选择是否继续统计其他学的信息信息。VII排序模块:程序运用起泡排序方法(从第一个数开始依次对相邻两数进行比较,如次序对则不进行任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍后就可以完成排序。)对所有学生按总分进行升序排列,并通过调用Print函数输出排序后的数据。五程序调试如果运行程序,将出现如下的界面,即程序主菜单:I.显示模块:输入1并按回车,将显示出所有学生的所有信息,其输出界面如下如果按任意键将

19、退出,退回主菜单:II追加程序:在主菜单下输入2并回车,将进入追加程序菜单,其界面如下:输入要追加的条数并回车,将开始进行追加学生信息:输入学生信息后,按回车将自动显示出追加的及原来的所有学生信息,并显示出是否继续追加学生信息,其界面如下:按任意键将退出追加程序返回主菜单。III.修改程序:在主菜单下输入3并回车进入修改程序下菜单:输入1并回车,即按学号查找并修改,程序将会提示输入学号: 输入修改信息并回车,将显示出经修改后所有学生的新信息,其界面如下:IV删除模块:在主菜单下输入4并回车,将进入删除程序的菜单下,其界面如下:输入1并回车,即选择按学号查找并删除,并输入一个学号回车,如输入,将

20、自动显示出删除后新的学生信息,即不在存在学号为的学生信息:V.查询模块:在主菜单下输入5并回车,进入查询程序的选择菜单下,其界面如下VI排序模块:在主菜单下输入6并回车进入排序,并按总分进行排序:VII统计模块:在主菜单下输入7并回车,将进入统计模块:VIII退出模块:在主菜单下输入8并回车将显示出退出程序的界面:继续按任意键将退出整个程序,即退出班级成绩管理系统。六、体会:(1)该程序实现了对学生成绩的初步管理;(2)可应用文件结构体对此程序进行改进处理;(3)通过这次课程设计深入了解了结构体和文件及函数的使用;(4)此程序可在修改学生方面进行拓展,另外可以应用页面形式使程序使用更加美观;(

21、5)深入研究可加入预处理程序#endif,#error。C程序的研究和开发均需要耗费很大的精力来查资料和编译及运行,应丰富自身的知识才能更好的发展七、参考文献:1郝玉洁,袁平,常征,易涛编著.C语言程序设计.北京:机械工业出版社,20002刘振安,孙忱,刘燕君编著.C程序设计课程设计.北京:机械工业出版社,20043谭浩强编著.C程序设计.北京:清华大学出版社,20054谭浩强编著.C程序设计题解与上机指导.北京:清华大学出版社,20055张基温,唐永炎,谭浩强著.C语言程序设计教程.北京高等教育出版社,1998八附件#include "stdio.h"#include &

22、quot;string.h"#include "conio.h"int N=0;struct stu int xh; /*学号*/ char name10; /*姓名*/ double yy; /*英语*/ double mat; /*数学*/ double jsj; /*计算机*/ double wl; /*物理*/ double zf; /*总分*/ s20;void Re_file() FILE *fp; fp=fopen("bjcjk.txt","r"); while( fscanf(fp,"%dn%sn%

23、lfn%lfn%lfn%lfn%lfn",&sN.xh,sN.name,&sN.yy,&sN.mat,&sN.jsj,&sN.wl,&sN.zf)!=EOF) N+; fclose(fp); void Wr_file()int i; FILE *fp; fp=fopen("nwejck.txt","w"); for(i=0;i<N;i+) fprintf(fp,"%dn%sn%lfn%lfn%lfn%lfn%lfn",si.xh,,si.yy,si.mat,

24、si.jsj,si.wl,si.zf); fclose(fp);void Js() /*计算总分*/int i; for(i=0;i<N;i+) si.zf=si.yy+si.mat+si.jsj+si.wl; void Sort() /*排序模块*/int j,k; double ave20,t; struct stu m; Js(); for(k=0;k<N;k+) avek=sk.zf/4; /*计算平均分*/ for(k=0;k<N-1;k+) for(j=k+1;j<N;j+) if(avek<avej) t=avek;avek=avej;avej=t;

25、 /*对平均分排序*/ m=sk;sk=sj;sj=m; /*按平均分整体排序*/ void Disp() /*显示模块*/int i;printf("*n"); printf("学号 姓名 英语 数学 计算机 物理 总分");printf("*n");Js(); for(i=0;i<N;i+) printf("%-13d %-10s %-3lf %-4lf% -11lf% -11lf %-13lf",si.xh,,si.yy,si.mat,si.jsj,si.wl,si.zf); getcha

26、r();void Total() /*统计模块*/double yyzf=0,yypj,wlzf=0,wlpj,matzf=0,matpj,jsjzf=0,jsjpj ;int i,j=0,n,o;printf("=n");printf(" 请问你想看哪一门课的成绩? n");printf("=n");printf("t1.英语t2.数学t3.计算机t4.物理n:");printf("ttttt");scanf("%d",&n);switch(n)case 1:pri

27、ntf("=n");printf("学号 姓名 英语 数学 计算机 物理 总分n");printf("=n");for(i=0;i<N;i+)yyzf+=si.yy ;yypj=yyzf/i;for(i=0;i<N;i+)if(si.yy >=yypj)j+;printf("%d %s %f %f %f %f %fn",si.xh , ,si.yy ,si.mat ,si.jsj ,si.wl, si.zf);printf("英语平均分=%ftt超过平均的人数为%d个n&q

28、uot;,yypj,j);getchar();break;case 2:printf("=n");printf("学号 姓名 英语 数学 计算机 物理 总分n");printf("=n");for(i=0;i<N;i+)matzf+=si.mat ;matpj=matzf/i;for(i=0;i<N;i+)if(si.mat >=matpj)j+;printf("%d %s %f %f %f %f %fn",si.xh , ,si.yy ,si.mat ,si.jsj ,si.wl,

29、 si.zf);printf("=n");printf(" 数学平均分=%ft超过平均的人数为%d个n",matpj,j);printf("=n");getchar();break;case 3:printf("=n");printf("学号 姓名 英语 数学 计算机 物理 总分n");printf("=n");for(i=0;i<N;i+)jsjzf+=si.yy ;jsjpj=jsjzf/i;for(i=0;i<N;i+)if(si.jsj >=jsjp

30、j)j+;printf("%d %s %f %f %f %f %fn",si.xh , ,si.yy ,si.mat ,si.jsj ,si.wl, si.zf);printf("计算机平均分=%ft超过平均分的人数为%d个n",jsjpj,j);getchar();break;case 4:printf("=n");printf("学号 姓名 英语 数学 计算机 物理 总分n");printf("=n");for(i=0;i<N;i+)wlzf+=si.wl ;wlpj=w

31、lzf/i;for(i=0;i<N;i+)if(si.wl >=wlpj)j+;printf("%d %s %f %f %f %f %fn",si.xh , ,si.yy ,si.mat ,si.jsj ,si.wl, si.zf);printf("物理平均分=%ft超过平均分的人数为%d个n",wlpj,j);getchar();break;printf("要显示每一科的平均分吗?t1、是t2、否n");scanf("%d",&o);if(o=1)yyzf=0;yypj=0;wl

32、zf=0;wlpj=0;matzf=0;matpj=0;jsjzf=0;jsjpj=0;for(i=0;i<N;i+)wlzf+=si.wl ;wlpj=wlzf/(N-1);for(i=0;i<N;i+)jsjzf+=si.yy ;jsjpj=jsjzf/(N-1);for(i=0;i<N;i+)matzf+=si.mat ;matpj=matzf/(N-1);for(i=0;i<N;i+)yyzf+=si.yy ;yypj=yyzf/(N-1);printf("课程tt平均分n");printf("英语tt%fn",yypj)

33、;printf("数学tt%fn",matpj);printf("计算机tt%fn",jsjpj);printf("物理tt%fn",wlpj);void Appe() /*追加模块*/ int n,i; printf(" *n"); printf(" 请输入要追加的条数 n= ? n"); printf(" *n"); scanf("%d",&n);printf(" *n");printf(" 请输入所追加的学生信息

34、 n");printf(" *n"); printf("*n"); printf(" 学号 名字 英语 数学 计算机 物理 总分n"); printf("*n"); for(i=0;i<n;i+) scanf("%d%s%lf%lf%lf%lf%lf",&sN.xh,sN.name,&sN.yy,&sN.mat,&sN.jsj,&sN.wl,&sN.zf); N+; void Modi() /*修改模块*/ int x,m,n,k=

35、0,i,j;char st20; printf("=n"); printf("= 1.学号 =n"); printf("= 2.名字 =n"); printf("=n"); scanf("%d",&m); if(m=1) printf("=n"); printf(" 请输入 学号 n"); printf("="); scanf("%d",&n); for(i=0;i<N;i+) if(n=si.

36、xh) k=1;j=i; else if(m=2) printf("=n"); printf(" 请输入 名字 n"); printf("=n"); scanf("%s",st); for(i=0;i<N;i+) if(!strcmp(,st) k=1;j=i; if(k=1) printf("*n"); printf(" 请问要修改哪项? 1:英语 2:数学 3:计算机 4:物理 n"); printf("*n"); scanf(&q

37、uot;%d",&x); switch(x) case 1:scanf("%lf",&sj.yy); break; case 2:scanf("%lf",&sj.mat); break; case 3:scanf("%lf",&sj.jsj); break; case 4:scanf("%lf",&sj.wl); break; else printf("=n"); printf(" 出现错误 *n"); printf(&quo

38、t;=n"); void Dele() /*删除模块*/ int m,n,k=0,j,i; char str20; printf(" =n"); printf(" = 1.按学号删 =n"); printf(" = 2.按姓名删 =n"); printf(" =n"); scanf("%d",&m); if(m=1) printf(" =n"); printf(" = 请输入学号! =n"); printf(" =n"

39、); scanf("%d",&n); for(i=0;i<N;i+) if(n=si.xh) k=1;j=i; else if(m=2) printf(" =n"); printf(" = 请输入名字! =n"); printf(" =n"); scanf("%s",str); for(i=0;i<N;i+) if(!strcmp(,str) k=1;j=i; if(k=1) for(i=j;i<N-1;i+) si=si+1; N-; else prin

40、tf("=n"); printf(" 没有要删除的此人 *n"); printf("=n"); void Query() /*查询模块*/ int n,num,i,k,j;char xm10;printf("1、按学号查询 2、按姓名查询t");printf("n请输入你的选择:t");scanf("%d",&n);if(n=1)printf("n请输入学号:");scanf("%d",&num);for(i=0;i&l

41、t;N;i+)if(num=si.xh)k=1;j=i;else if(n=2)printf("请输入姓名:");scanf("%s",xm);for(i=0;i<N;i+)if(strcmp(,xm)=0)k=1;j=i;if (k=1)printf("学号 姓名 英语 数学 计算机 物理 总分n");printf("=n");printf("%d %s %f %f %f %f %fn",sj.xh , ,sj.yy ,sj.mat ,sj.jsj ,sj.wl, sj.zf); printf("=n");else printf("没有所查询的人");getchar();void Quit()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论