C语言课程设计说明书--学生成绩管理系统.doc
内蒙古科技大学课程设计说明书内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生成绩管理系统学生姓名:胡立国学 号:1567159115专 业:软件工程班 级:软件一班指导教师:康懿日 期:2016年 1 月 6 日27内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生成绩管理系统指导教师康懿时间2016.1.52016.1.9一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。某班学生成绩管理,包括以下功能:v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社 目 录内蒙古科技大学课程设计任务书I第一章 需求分析41.1引言41.2任务概述41.3数据描述41.4功能需求41.5性能需求5第二章概要设计62.1总体设计62.2数据类型设计(或数据结构设计)62.3接口设计 /函数声明72.4运行界面设计8第三章详细设计93.1输入模块设计93.2输出模块设计103.3查找模块设计113.4排序模块设计11第四章测试分析134.1测试程序执行情况13第五章用户手册(可选)155.1使用说明15第六章课程设计总结16附录:程序代码16参考文献27致谢28第一章 需求分析1.1 引言 近年来,随着学校规模的不断扩大,学生数量也相应增加,有关学生考试的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致学生成绩管理上的混乱,人力物力过度浪费,学生成绩管理费用的增加,从而使学校的负担过重,影响整个学校的运作和控制管理,因此,必须制定一套合理、有效、规范和实用的学生成绩管理系统,对学生进行集中统一的管理。系统开发的总的设计目标是学生学生成绩管理系统的系统化、规范化和自动化,实现对学生成绩的集中统一的管理。1.2 任务概述假设某班级有n名学生,每名学生有5门课程,分数确定。试设计一个学生成绩管理系统,有如下功能。1:增加学生记录2:修改学生记录3:删除学生记录4:查找学生记录5:排序1.3 数据描述学号 姓名 数学 英语 C语言 体育 计算机 平均分101 小明 99 99 99 99 99 99102 小华 88 88 88 88 88 881.4 功能需求根据要求用户需要设计一个关于学生成绩管理系统程序,使学校可以通过老师简单地输入个人成绩信息,便可方便的显示出来,并且完成平均分的计算。该程序还要实现以下功能:1:增加学生记录2:修改学生记录3:删除学生记录4:查找学生记录 A:按学号查找 B:按姓名查找5:排序1.5 运行需求系统的运行对于环境的要求是:1.硬件环境目前,我们所开发的系统主要是应用在中小规模的学校内部,因此,一般配置的计算机硬件就可以满足系统需求。考虑到学校规模的扩大和硬件价格的降低,为本系统配置在较优秀的服务器硬件,可以充分发挥本系统性能。处理器:Intel Pentium 4 3.06 GX或更高内存:256M(推荐)硬盘空间:40GB显卡:SVGA显示适配器2.软件环境操作系统:Windows 2000/XP开发软件:Microsoft Visual Studio.NET 2005数据库:Microsoft SQL Server 2005第二章 概要设计 欢迎界面2.1 总体设计 学生成绩管理系统查找学生信息按平均成绩排序退出增加学生信息修改学生信息删除学生记录2.2 数据类型设计(或数据结构设计)struct Student /*定义学生结构体*/ char ID20; char Name20; float Mark1; float Mark2; float Mark3;float Mark4;float Mark5;float Average; 2.3 接口设计 函数名函数格式 函数功能Student_SearchByIndex(char id); int通过学号返回数组下标Student_SearchByName(char name) int通过姓名返回数组下标Student_Insert() void 输入学生信息Student_Modify() void 修改学生信息Student_Delete() void 删除学生信息Student_Select() void 按姓名查询Student_Search() void 按学号查询Student_SortByAverage() void按平均成绩排序Student_Display() void 显示学生信息IO_ReadInfo() void将学生信息从文件读出IO_WriteInfo() void将学生信息保存到文件2.4 运行界面设计第三章 详细设计3.1 输入模块设计void Student_Insert() /*插入学生信息*/ while(1) system("cls");printf("请输入学号:"); scanf("%s",&studentsnum.ID); getchar(); printf("请输入姓名:"); scanf("%s",&studentsnum.Name); getchar(); printf("请输入数学成绩:"); scanf("%f",&studentsnum.Mark1); getchar(); printf("请输入英语成绩:"); scanf("%f",&studentsnum.Mark2); getchar(); printf("请输入C语言成绩:"); scanf("%f",&studentsnum.Mark3); getchar();printf("请输入体育成绩:"); scanf("%f",&studentsnum.Mark4);getchar();printf("请输入计算机成绩:"); scanf("%f",&studentsnum.Mark5);getchar(); studentsnum.Average=Avg(studentsnum); num+;printf("增加学生信息成功!n"); printf("是否继续增加?(y/n)"); if (getchar()='n') break; 3.2 查找模块设计void Student_Select() /*按姓名查询*/ while(1) system("cls");system("COLOR 2f");char name20; int index; printf("请输入要查询的学生的姓名:"); scanf("%s",&name); getchar(); index=Student_SearchByName(name); if (index=-1) printf("学生不存在!n"); else printf("查找成功!n");printf("你要查询的学生信息为:n"); Student_DisplaySingle(index); printf("是否继续?(y/n)"); if (getchar()='n') break; void Student_Search()/按学号查询 while(1) system("cls");system("COLOR 2f");char id20; int index; printf("请输入要查询的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id);if (index=-1) printf("学生不存在!n"); else printf("查找成功!n");printf("你要查询的学生信息为:n"); Student_DisplaySingle(index); printf("是否继续?(y/n)"); if (getchar()='n') break; 3.3 排序模块设计void Student_SortByAverage() /*按平均值排序*/ int i,j; struct Student tmp; for (i=0;i<num;i+) for (j=i+1;j<num;j+) if (studentsi.Average<studentsj.Average) tmp=studentsi; studentsi=studentsj; studentsj=tmp; 3.4 保存及读取模块设计void IO_ReadInfo() /*将学生信息从文件读出*/ FILE *fp; int i; if (fp=fopen("Database.txt","rb")=NULL) printf("不能打开文件!n"); return; if (fread(&num,sizeof(int),1,fp)!=1) num=-1; else for(i=0;i<num;i+) fread(&studentsi,sizeof(struct Student),1,fp); fclose(fp); void IO_WriteInfo() /*将学生信息写入文件*/ FILE *fp; int i; if (fp=fopen("Database.txt","wb")=NULL) printf("不能打开文件!n"); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf("写入文件错误!n"); for (i=0;i<num;i+) if (fwrite(&studentsi,sizeof(struct Student),1,fp)!=1) printf("写入文件错误!n"); fclose(fp); 第四章 测试分析4.1 测试程序执行情况主程序菜单运行良好修改程序运行良好 删除程序运行良好 查找程序运行良好排序程序运行良好第五章 用户手册(可选)5.1 使用说明在主界面选择所需功能(1-7),先需增加学生记录,然后对有错误的进行修改、删除。还可进行查找。第六章 课程设计总结 经过一个星期的上机实践学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。附录:程序代码#include <stdio.h> #include<string.h>#include<stdlib.h>float Avg(struct Student stu); int Student_SearchByIndex(char id);int Student_SearchByName(char name);void Student_DisplaySingle(int index);void Student_Insert();void Student_Modify();void Student_Delete();/*删除学生信息*/void Student_Select();void Student_Search();void Student_SortByAverage();void Student_Display();void IO_ReadInfo();void IO_WriteInfo();struct Student /*定义学生结构体*/ char ID20; char Name20; float Mark1; float Mark2; float Mark3;float Mark4;float Mark5;float Average; struct Student students1000; /*声明学生数组及学生数量*/ int num; float Avg(struct Student stu) /*求平均值*/ return (stu.Mark1+stu.Mark2+stu.Mark3+stu.Mark4+stu.Mark5)/5; int Student_SearchByIndex(char id) /*通过学号返回数组下标*/ int i; for (i=0;i<num;i+) if (strcmp(studentsi.ID,id)=0) return i; return -1; int Student_SearchByName(char name) /*通过学号返回数组下标*/ int i; for (i=0;i<num;i+) if (strcmp(studentsi.Name,name)=0) return i; return -1; void Student_DisplaySingle(int index) /*显示单条学生记录*/ system("cls");system("COLOR 4f");printf("-n");printf("%10s%10s%8s%8s%8s%8s%8s%10sn","学号","姓名","数学成绩","英语成绩","C语言成绩","体育成绩","计算机成绩","平均成绩"); printf("-n"); printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%8.2f%10.2fn",studentsindex.ID,studentsindex.Name,studentsindex.Mark1,studentsindex.Mark2,studentsindex.Mark3,studentsindex.Mark4,studentsindex.Mark5,studentsindex.Average);printf("-n"); void Student_Insert() /*插入学生信息*/ while(1) system("cls");printf("请输入学号:"); scanf("%s",&studentsnum.ID); getchar(); printf("请输入姓名:"); scanf("%s",&studentsnum.Name); getchar(); printf("请输入数学成绩:"); scanf("%f",&studentsnum.Mark1); getchar(); printf("请输入英语成绩:"); scanf("%f",&studentsnum.Mark2); getchar(); printf("请输入C语言成绩:"); scanf("%f",&studentsnum.Mark3); getchar();printf("请输入体育成绩:"); scanf("%f",&studentsnum.Mark4);getchar();printf("请输入计算机成绩:"); scanf("%f",&studentsnum.Mark5);getchar(); studentsnum.Average=Avg(studentsnum); num+;printf("增加学生信息成功!n"); printf("是否继续增加?(y/n)"); if (getchar()='n') break; void Student_Modify() /*修改学生信息*/ /*float mark1,mark2,mark3;*/ while(1) system("cls");system("COLOR 1f");char id20; int index; printf("请输入要修改的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id); if (index=-1) printf("学生不存在!n"); else printf("你要修改的学生信息为:n"); Student_DisplaySingle(index); printf("- 请输入新值-n"); printf("请输入学号:"); scanf("%s",&studentsindex.ID); getchar(); printf("请输入姓名:"); scanf("%s",&studentsindex.Name); getchar(); printf("请输入数学成绩:"); scanf("%f",&studentsindex.Mark1); getchar(); printf("请输入英语成绩:"); scanf("%f",&studentsindex.Mark2); getchar(); printf("请输入C语言成绩:"); scanf("%f",&studentsindex.Mark3); getchar(); printf("请输入体育成绩:"); scanf("%f",&studentsindex.Mark4); getchar();printf("请输入计算机成绩:"); scanf("%f",&studentsindex.Mark5); getchar();studentsindex.Average=Avg(studentsindex);printf("修改信息成功!n"); printf("是否继续?(y/n)");if (getchar()='n') break; void Student_Delete() /*删除学生信息*/ int i; while(3) system("cls");system("COLOR 3f");char id20; int index; printf("请输入要删除的学生的学号:"); scanf("%s",&id); index=Student_SearchByIndex(id); if (index=-1) printf("学生不存在!n"); else printf("你要删除的学生信息为:n"); Student_DisplaySingle(index); printf("是否真的要删除?(y/n)");getchar();if (getchar()='y') printf("删除成功!n");for (i=index;i<num;i+) studentsi=studentsi+1;/把后边的对象都向前移动num-; getchar(); printf("是否继续?(y/n)");getchar();if (getchar()='n') break; void Student_Select() /*按姓名查询*/ while(1) system("cls");system("COLOR 7f");char name20; int index; printf("请输入要查询的学生的姓名:"); scanf("%s",&name); getchar(); index=Student_SearchByName(name); if (index=-1) printf("学生不存在!n"); else printf("查找成功!n");printf("你要查询的学生信息为:n"); Student_DisplaySingle(index); printf("是否继续?(y/n)"); if (getchar()='n') break; void Student_Search()/按学号查询 while(1) system("cls");system("COLOR 6f");char id20; int index; printf("请输入要查询的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id);if (index=-1) printf("学生不存在!n"); else printf("查找成功!n");printf("你要查询的学生信息为:n"); Student_DisplaySingle(index); printf("是否继续?(y/n)"); if (getchar()='n') break; void Student_SortByAverage() /*按平均值排序*/ int i,j; struct Student tmp; for (i=0;i<num;i+) for (j=1;j<num-i;j+) if (studentsj-1.Average<studentsj.Average) tmp=studentsj-1; studentsj-1=studentsj; studentsj=tmp; void Student_Display() /*显示学生信息*/ int i;system("COLOR 2f");printf("-n");printf("%8s%8s%10s%10s%10s%11s%10s%10sn","学号","姓名","数学成绩","英语成绩","C语言成绩","体育成绩","计算机成绩","平均成绩"); printf("-n");for (i=0;i<num;i+) printf("%7s%10s%10.2f%10.2f%10.2f%11.2f%10.2f%10.2fn",studentsi.ID,studentsi.Name,studentsi.Mark1,studentsi.Mark2,studentsi.Mark3,studentsi.Mark4,studentsi.Mark5,studentsi.Average);printf("-n");if(getchar()='n')break; void IO_ReadInfo() /*将学生信息从文件读出*/ FILE *fp; int i; if (fp=fopen("Database.txt","rb")=NULL) printf("不能打开文件!n"); return; if (fread(&num,sizeof(int),1,fp)!=1) num=-1; else for(i=0;i<num;i+) fread(&studentsi,sizeof(struct Student),1,fp); fclose(fp); void IO_WriteInfo() /*将学生信息写入文件*/ FILE *fp; int i; if (fp=fopen("Database.txt","wb")=NULL) printf("不能打开文件!n"); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf("写入文件错误!n"); for (i=0;i<num;i+) if (fwrite(&studentsi,sizeof(struct Student),1,fp)!=1) printf("写入文件错误!n"); fclose(fp); void main() /*主程序*/ printf("nnnnnnnnn 欢迎使用学生成绩管理系统n");printf(" 设计者 胡立国n");printf(" 祝您使用愉快.n"); printf(" 请按任意键开始使用.n");getchar(); system("cls"); int choice; while(1) system("cls");system("COLOR 5f");printf("*-