C语言课程设计-学生成绩管理系统.doc_第1页
C语言课程设计-学生成绩管理系统.doc_第2页
C语言课程设计-学生成绩管理系统.doc_第3页
C语言课程设计-学生成绩管理系统.doc_第4页
C语言课程设计-学生成绩管理系统.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

内蒙古科技大学课程设计说明书内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生信息管理系统学生姓名:学 号:专 业:软件工程班 级:2015-软件一班指导教师:日 期: 2016 年 1 月 1日29内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生成绩管理系统指导教师时间2015.1.52015.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目 录III第一章 需求分析41.1 引言41.2 任务概述41.3 数据描述41.4 功能需求41.5 运行需求41.6 任务计划4第二章 概要设计52.1 总体设计52.2 接口设计52.3 运行界面设计6第三章 详细设计83.1 查找模块设计83.2 排序模块设计8第四章 测试分析94.1 测试程序执行情况94.2 出现的问题和解决的方法11第五章 用户手册(可选)125.1 使用说明12第六章 课程设计总结13附录:程序代码13参考文献29致谢29第一章 需求分析1.1 引言本系统可方便管理学生成绩,具有多项功能,欢迎大家使用并推广!1.2 任务概述1.编写一个学生成绩管理系统;2.运用所学知识写出代码具有输入丶查找丶统计丶修改丶删除等功能;3.能正确运行出结果并展示给指导老师;4.提高运用C语言解决实际问题的能力。1.3 数据描述本系统通过建立结构体对学生成绩的信息进行存储丶删除以及访问修改等.1.4 功能需求v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能1.5 运行需求1.运行结果清楚;2.无错误信息出现;3.程序不崩溃,能正常运行等。1.6 任务计划第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)第二章 概要设计2.1 总体设计Main( )主函数中显示主菜单Menu( ),运用 case( )语句显示多项功能,在进入菜单前先输入管理员登录密码,然后可进行多项功能操作.2.2 接口设计 函数名函数格式 /即函数首部函数功能Menuint Menu(void);显示菜单并获得用户键盘输入的选项ReadScorevoid ReadScore(STU stu,int n,int m);输入n个学生的m门课程成绩 Deleteint Delete(STU stu,int n,int m);删除AverSumofEveryStudentvoid AverSumofEveryStudent(STU stu,int n,int m);计算每个学生各门课程的总分和平均分SortbyScorevoid SortbyScore(STU stu,int n,int m,int (*compare)(float a,float b);按选择法将总分的元素值排序Ascendingint Ascending(float a,float b);使数据按升序排序Descendingint Descending(float a,float b);使数据按降序排序SwapFloatvoid SwapFloat(float *x,float *y);交换两个单精度浮点型数据SwapLongvoid SwapLong(long *x,long *y);交换两个长整型数据SwapCharvoid SwapChar(char x,char y);交换两个字符串AsSortbyNumvoid AsSortbyNum(STU stu,int n,int m);按学号升序排序EditInformationvoid EditInformation(STU stu,int n,int m);修改SearchbyNumvoid SearchbyNum(STU stu,int n,int m);按学号查找学生成绩SearchbyNamevoid SearchbyName (STU stu,int n,int m);按姓名查找学生成绩StatisticAnalysisvoid StatisticAnalysis(STU stu,int n,int m);统计各分数段的学生人数及所占的百分比PrintScorevoid PrintScore(STU stu,int n,int m);学生信息记录WritetoFileVoid WritetoFile(STU record,int n,int m);写入到文件student.txt中ReadfromFileint ReadfromFile(STU record,int m);从文件中读取学生信息并返回学生数2.3 运行界面设计1.登录页面:2. 进入选项页面:第三章 详细设计3.1 查找模块设计开始按学号按姓名3.2 排序模块设计开始按总分降序按学号升序按总分升序第四章 测试分析4.1 测试程序执行情况1. 输入n个学生的m门课程成绩:2. 打印学生信息:3. 按学生总分升序排序:4. 按学生总分降序排序:5. 按学号升序排序:6. 修改学生信息:7. 删除学生信息:8. 按学号查找学生:9. 按姓名查找学生:10. 统计分析:11. 写入文件:12. 读取文件:4.2 出现的问题和解决的方法1. 开始不会文件怎么写入和读取,然后通过老师的讲解和对同学的询问,最后成功解决了问题;2. 在写好程序后发现漏了删除和修改功能,自己加进去后发现程序有错误,通过网上查询和舍友帮助,最终解决了难题!第五章 用户手册(可选)5.1 使用说明1. 管理员登录密码 其他操作按提示操作即可.第六章 课程设计总结附录:程序代码#include#include #include#include#define MAX_LEN 10/字符串最大长度#define STU_NUM 30/最多的学生人数#define COURSE_NUM 6/最多的考试科目数typedef struct student long num;/学号 char nameMAX_LEN;/姓名 float scoreCOURSE_NUM;/6门功课的成绩 float sum;/每个学生的总成绩 float aver;/每个学生的平均成绩STU;int Menu(void);/显示菜单并获得用户键盘输入的选项void ReadScore(STU stu,int n,int m);/输入n个学生的m门课程成绩int Delete(STU stu,int n,int m);/删除void AverSumofEveryStudent(STU stu,int n,int m);/计算每个学生各门课程的总分和平均分void SortbyScore(STU stu,int n,int m,int (*compare)(float a,float b);/按选择法将总分的元素值排序int Ascending(float a,float b);/使数据按升序排序int Descending(float a,float b);/使数据按降序排序void SwapFloat(float *x,float *y);/交换两个单精度浮点型数据void SwapLong(long *x,long *y);/交换两个长整型数据void SwapChar(char x,char y);/交换两个字符串void AsSortbyNum(STU stu,int n,int m);/按选择法将数组sum的元素值升序排序void EditInformation(STU stu,int n,int m);/修改void SearchbyNum(STU stu,int n,int m);/按学号查找学生成绩并显示查找结果void SearchbyName (STU stu,int n,int m);/按姓名的字典顺序排出成绩表void StatisticAnalysis(STU stu,int n,int m);/统计各分数段的学生人数及所占的百分比void PrintScore(STU stu,int n,int m);/学生信息记录void WritetoFile(STU record,int n,int m);/写入到文件student.txt中int ReadfromFile(STU record,int m);/从文件中读取学生信息并返回学生数int main() char ch; int n = 0,m = 0; long x; STU stuSTU_NUM; printf(_n); printf(| 欢 迎 使 用 学 生 成 绩 管 理 系 统 |n); printf(|-|n); do printf(nnnn请输入管理员密码:); scanf(%ld,&x); while(x!=1567159135); while(1) ch = Menu();/显示菜单,并读取用户输入 switch (ch) case 1:printf(请输入学生人数(n%d):,STU_NUM); scanf(%d,&n); printf(请输入每个学生的课程数目(m=%d):,COURSE_NUM); scanf(%d,&m); ReadScore(stu,n,m); break; case 2:PrintScore(stu,n,m); break; case 3:SortbyScore(stu,n,m,Descending); printf(n按学生总分升序排序 :n); PrintScore(stu,n,m); break; case 4:SortbyScore(stu,n,m,Ascending); printf(n按学生总分降序排序:n); PrintScore(stu,n,m); break; case 5:AsSortbyNum(stu,n,m); printf(n按学生学号升序排序:n); getch(); PrintScore(stu,n,m); getch(); break; case 6:EditInformation(stu,n,m); break; case 7:n=Delete(stu,n,m); break; case 8:SearchbyNum(stu,n,m); break; case 9:SearchbyName(stu,n,m); break; case 10:StatisticAnalysis(stu,n,m); break; case 11:WritetoFile(stu,n,m); break; case 12:n = ReadfromFile(stu,m); break; case 0:printf(End of programe!n); exit(0); default:printf(Input error!n); return 0;int Menu(void)/显示菜单并获得用户键盘输入的选项 int itemSelected;system(cls); system(color b0); printf(_n); printf(| 欢 迎 使 用 学 生 成 绩 管 理 系 统 |n); printf(|-|n); printf(| |n); printf(| 1.输入n个学生的m门课程成绩 |n); printf(| 2.学生成绩信息记录 |n); printf(| 3.按学生总分升序排序 |n); printf(| 4.按学生总分降序排序 |n); printf(| 5.按学生学号升序排序 |n); printf(| 6.修改学生信息 |n); printf(| 7.删除学生信息 |n); printf(| 8.按学号查找学生信息 |n); printf(| 9.按姓名查找学生信息 |n); printf(| 10.统计分析 |n); printf(| 11.将学生信息写入文件中 |n); printf(| 12.通过文件读取学生信息 |n); printf(| 0.退出 |n); printf(|_|n); printf( 请输入您要操作的选项: ); scanf(%d,&itemSelected); system(cls); return itemSelected;void ReadScore(STU stu,int n,int m)/1.输入n个学生的m门课程成绩 int i,j; printf(请输入学生学号,姓名和分数:n); for(i=0;in;i+) scanf(%ld%s,&stui.num,); for(j=0;jm;j+) scanf(%f,&stui.scorej); getch();void PrintScore(STU stu,int n,int m)/2.学生成绩信息记录 int i,j; AverSumofEveryStudent(stu,n,m); for(i=0;in;i+) printf(%ldt%st,stui.num,); for(j=0;jm;j+) printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); getch();void AverSumofEveryStudent(STU stu,int n,int m)/计算每个学生各门课程的总分和平均分 int i,j; for(i=0;in;i+) stui.sum=0; for(j=0;j0?stui.sum/m:-1; void SortbyScore(STU stu,int n,int m,int (*compare)(float a,float b)/排序 int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(*compare)(stuj.sum,stuk.sum) k=j; if(k!=i) for(t=0;tm;t+) SwapFloat(&stuk.scoret,&stui.scoret); SwapFloat(&stuk.sum,&stui.sum); SwapFloat(&stuk.aver,&stui.aver); SwapLong(&stuk.num,&stui.num); SwapChar(,); getch();int Ascending(float a,float b)/使数据按升序排序 return ab;void SwapFloat(float *x,float *y)/交换两个单精度浮点型数据 float temp; temp = *x; *x = *y; *y = temp;void SwapLong(long *x,long *y)/交换两个长整型数据 long temp; temp = *x; *x = *y; *y = temp;void SwapChar(char x,char y)/交换两个字符串 char tempMAX_LEN; strcpy(temp,x); strcpy(x,y); strcpy(y,temp);void AsSortbyNum(STU stu,int n,int m)/按选择法将数组num的元素值升序排序 int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(stuj.numstuk.num) k=j; if(k!=i) for(t=0;tm;t+)/交换m门课程的成绩 SwapFloat(&stuk.scoret,&stui.scoret); SwapFloat(&stuk.sum,&stui.sum);/交换总分 SwapFloat(&stuk.aver,&stui.aver);/交换平均分 SwapLong(&stuk.num,&stui.num);/交换学号 SwapChar(,);/交换姓名 getch();void SortbyName(STU stu,int n,int m)/交换法实现字符串按字典顺序排序 int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(strcmp(,)0); for(t=0;tm;t+) SwapFloat(&stui.scoret,&stuj.scoret); SwapFloat(&stui.sum,&stuj.sum);/交换总分 SwapFloat(&stui.aver,&stuj.aver);/交换平均分 SwapLong(&stui.num,&stuj.num);/交换学号 SwapChar(,);/交换姓名 getch();void EditInformation(STU stu,int n,int m)/6。修改学生信息 system(cls); int number,i,j; printf(请输入您要修改的学号:); scanf(%d,&number); for(i=0;in;i+) if(stui.num=number) printf(请输入该学生的新学号,姓名和分数:n); scanf(%ld%s,&stui.num,); for(j=0;jm;j+) scanf(%f,&stui.scorej); printf(修改成功!n); AverSumofEveryStudent(stu,n,m); printf(%ldt%st,stui.num,); for(j=0;jm;j+) printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); break; if(i=n) printf(无此信息!n); getch();int Delete(STU stu,int n,int m)/7.删除学生信息 system(cls); int number,i,j,k,Max; Max=n; printf(请输入您要删除的学号:); scanf(%d,&number); for(i=0;in;i+) if(stui.num=number) for(j=i;jn-1;j+) stuj.num=stuj+1.num; strcpy(,stuj+1.name); for(k=0;km;k+) stuj.scorek=stuj+1.scorek; stuj.aver=stuj+1.aver; stuj.sum=stuj+1.sum; n=n-1; printf(删除成功!n); printf(现在有%d人n,n); break; if(i=Max) printf(无此信息!n); getch(); return n;void SearchbyNum(STU stu,int n,int m)/8.按学号查找并显示结果 long number; int i,j; printf(Input the number you want to search:); scanf(%ld,&number); for(i=0;in;i+) if(stui.num=number) printf(%ldt%st,stui.num,); for(j=0;jm;j+) printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); getch(); return; printf(nNot foud! n); getch();void SearchbyName (STU stu,int n,int m)/9.按姓名查找学生信息 char xMAX_LEN; int i,j; printf(Input the name you want to search:); scanf(%s,x); for(i=0;in;i+) if(strcmp(,x) = 0) printf(%ldt%st,stui.num,); for(j=0;jm;j+) printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); getch(); return; printf(nNot found!n); getch();void StatisticAnalysis(STU stu,int n,int m)/10.统计各分数段人数及所占百分比 int i,j,total,t6; for(j=0;jm;j+) printf(For course %d:n,j+1); memset(t,0,sizeof(t); for(i=0;i=0 & stui.scorej60) t0+; else if(stui.scorej70) t1+; else if(stu

温馨提示

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

评论

0/150

提交评论