您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 学籍管理系统C语言实训报告
1北京联合大学实训报告课程名称:C语言程序设计课设项目名称:学籍管理系统学院:信息学院专业:通信工程姓名:王晴张孟欣高源李芳洁郭亚勇学号:20090803043052009080304134200908030431920090803041252009080304115指导教师:李红豫成绩:2011年2月18日2目录第一部分实训题目与要求...........................................31问题提出......................................................32功能要求......................................................33任务分工......................................................3第二部分设计实训题目功能.........................................51总体设计......................................................52算法设计......................................................63数据结构.....................................................154程序代码设计.................................................155测试与调试...................................................16第三部分实训总结................................................171个人总结.....................................................172结束语.......................................................20附录A程序清单...................................................20附录B用户使用说明书.............................................40参考文献.........................................................403第一部分实训题目与要求1问题提出学籍管理系统可广泛应用于全日制大、中小学及其他各类学校,对学生的成绩、升级、学籍变动进行综合管理和快速查询。可以节省在学籍管理花费的人力和物力,避免纸质文档易损坏,不易查找等缺点。同时可以随时随地的掌握学生信息,更简捷直白的对学生信息进行统计与管理。有助于提高学校的整体教育管理水平。2功能要求1)能够输入学生学籍信息2)能够游览学生学籍信息3)能够将学生的学习成绩按照学号排序4)能够计算学生平均分并排序5)能够统计学生成绩的分数段6)能够生成并打印需要补考的学生名单及退学名单7)删除退学学生的学籍并生成新名册8)对学生的学籍可以随时输入、输出、查找、修改3任务分工郭亚勇:编写主程序、“求平均分并排序”模块的代码编写及主流程图绘制王晴:编写主模块图,“分数段排序”、“显示数据”、“删除退学学生学籍并生成新名册”模块的代码编写及相关流程图绘制。高源:“成绩录入”模块与“按照学号排序”模块的代码编写及相关流程图绘制4李芳洁:“生成并打印补考通知单”模块的代码编写及相关流程图的绘制、实训报告的编写张孟欣:“生成并打印退学通知单”模块的代码编写及相关流程图的绘制、实训报告的编写5第二部分设计实训题目功能1总体设计模块设计:定义各函数的主要功能:[1]mycreat()录入数据[2]myprint1()显示主菜单[3]myprint2()统计成绩[4]myprint3()处理学籍[5]mydisplay()创新功能[6]mynumsort()按学号排序[7]mysort()计算平均分并排序[8]myfenduan()统计分数段[9]myretake()生成并打印补考通知单[10]myselect()生成并打印退学通知单[11]mynewcreat()生成并打印新名册主模块录入成绩统计成绩处理学籍显示数据退出系统按学号排序计算平均分并排序统计分数段生成并打印补考通知单生成并打印退学通知单生成并打印新名册62算法设计1分析主模块算法:输出主菜单后键盘输入1-4并回车,进入相应应用;若输入非法选项则会提示“非法选项”并提示是否继续。开始结束调用myprint3函数输入choose的值Choose=?调用myprint2函数Choose=?调用mydiplay函数非法选项Yes_no=n或N或y或Y调用myprint1函数Choose=?调用mycreat函数输入choose的值调用myfenduan函数输入yes_no调用mysort函数输入choose的值调用mynumsort函数返回调用myretake函数调用myselect函数调用mynewcreat函数调用myprint1函数假真其他Yes_no=y或Y72分析录入成绩模块算法:创建一个文件yuan.dat,并把从键盘输入的数据(学号、姓名、成绩)存放在该文件中;每写入一组记录,文件记录数增1。建立录入成绩模块的流程图如下图所示。入口出口输入学号学号空输入姓名学号成绩合法数据复制数据数组下标增1输入学号学号空输入姓名成绩真假假真假83分析按学号排序模块的算法:入口读取文件数据i=0inK=iJ=k+1Jnstrcmp(temp[k].num,temp[j].num)0K=j交换k,i信息出口J=j+1i=i+1假真假假真真94分析计算平均分并排序的算法入口读取文件yuan.dat打开文件成功?成绩求和i=0,j=0i=0写入文件sort.dat交换前后两项前一项平均值?后一项i=0,j=0退出假真打开文件成功?退出假真打印写入文件成功真不改变不顺序假写入文件出口i++in成绩求平均值i++inj++j5105分析统计分数段的算法打开文件yuan.dat是否打开?提示:打开文件失败读取文件信息假真出口入口分数=90?分数=80?分数=70?分数=60?B[j]=B[j]+1C[j]=C[j]+1D[j]=D[j]+1E[j]=E[j]+1F[j]=F[j]+1j=0i=0j=j+1i=i+1真假真真真假假in?出口真116分析生成并打印补考通知单的算法入口从d:\\yuan.dat文件中读取fp==NULL?打开文件失败并返回读取文件中的每个学生的数据i=01=s[i]=3?计算该学生不及格的科目数量存储在数组s[i]=s[i]+1输出需要补考的同学的姓名及学号高数成绩60?temp[i].grade[0]60英语成绩60?temp[i].grade[1]60物理成绩60?temp[i].grade[2]60编程成绩60?temp[i].grade[3]60马哲成绩60?temp[i].grade[4]60输出该学生需要补考的科目名称、成绩及补考时间与地点真假真真真真真i++in?真出口假真127分析生成并打印退学通知单的算法马哲成绩60?temp[i].grade[4]60入口从d:\\yuan.dat文件中读取fp==NULL?读取文件中的每个学生的数据i=0s[i]3?计算该学生不及格的科目数量存储在数组s[i]=s[i]+1输出需要退学的同学的姓名及学号高数成绩60?temp[i].grade[0]60英语成绩60?temp[i].grade[1]60物理成绩60?temp[i].grade[2]60编程成绩60?temp[i].grade[3]60输出该学生不及格的科目名称及成绩出口真假真真真真真打开文件失败并返回in?i++假真真138生成并打印新名册打开文件yuan.dat是否打开?提示:打开文件失败读取文件信息假真出口入口i=0k=0v=0c=0S[i]3?temp[c]=temp[c+1]s[i]=0i++temp[i].grade[k]60?s[i]=s[i]+1i=n?打印并保存整理后的名册位置d:\next.dat真假真假149分析创新功能中的显示数据的算法打开文件yuan.dat是否打开?提示:打开文件失败读取文件信息判断是否有信息提示:文件中无记录假真假真出口入口输出学号、姓名、分数关闭文件153数据结构structstudent{charname[10];/*学生姓名*/intgrade[5];/*学生分数*/doubleave;/*学生平均分*/charnum[10];/*学生学号*/};4程序代码设计简介函数:Mydisplay()intn=0,j=0,k=0,m=0,ww;首先定义整型变量njkmww。structstudenttemp[N]={0};定义结构体temp[N]FILE*fp=NULL;定义指针变量fpfp=fopen(d:\\yuan.dat,r);此处为打开yuan.dat文件并读取其中数据包括学号、姓名、以及其五门功课的成绩。if(fp==NULL){printf(打开文件失败!\n);return;}system(cls);while(feof(fp)==0){ww=fscanf(fp,%23s%15s,temp[n].num,temp[n].name);if(ww==-1)break;for(j=0;j5;j++){fscanf(fp,%d,&temp[n].grade[j]);}n++;16}此处的n记录了一共有多少位同学。for(k=0;kn;k++)进行循环操作,分别显示出每一位同学的信息{printf(%23s%15s,temp[k].num,temp[k].name);for(m=0;m5;m++){printf(%d,temp[k].grade[m]);}printf(\n);}if(n==0)printf(\n文件中无记录!\n);判断n是否为0,显示文件记录elseprintf(\n文件中共有%d个记录!,n);fclose(fp);关闭文件注:完整程序请参见附录A。5测试与调试测试数据类型测试数据预期结果实测结果合法数据在主菜单中输入1进入录入同学学籍菜单进入录入同学学籍菜单在创建同学学籍输入信息在yuan.dat文件存入同学信息yuan.dat文件有同学信息非法数据在主菜单中输入“a”输出“a为非法选项”输出“a为非法选项”在每次完成一项是弹出“是否继续(Y/N)?”输入1没有反应没有反应测试数据类型测试数据预期结果实测结果合法数据在主菜单下输入1进入mycreate()进入创建学籍界面在mycreate输入信息放入文件中文件中有此记录非法数据在主菜单输入a输出“a为非法选项”非法字符在编辑菜单输入b输出“b为非法选项”非法字符17第三部分实训总结1个人总结王晴个人总结一周的实训结束了,对于这次C语言实训,我对此非常重视,因为通过实训不仅仅是对所学知识的验证,也是对团队合作,处理好同学关系的锻炼,为毕业后更好的融入社会做准备。通过实训前的商量,我们小组决定选择:学籍管理系统。老师说这个系统比较难,不过,我们并没有抱怨什么,既然选择了就应该迎头而上,只有去面对才能有解决的办法。在工作开始初期,我们首先在一起商量,分配了工作,每个人都明确了自己的工作目标,我觉得这一点是非常重要的,因为一个大的程序,光靠一个人的精力很难完成,而一个团队恰恰解决了这个问题。不过团队之间的分工必须要明确,用什么样的函数名,定义什么样的函数,这些都是需要统一的,要不然到了最后整合的时候还是一团散沙。编辑程序时,本以为自己掌握的知识已经足以
本文标题:学籍管理系统C语言实训报告
链接地址:https://www.777doc.com/doc-3583359 .html