C语言学生成绩管理系统实训报告_第1页
C语言学生成绩管理系统实训报告_第2页
C语言学生成绩管理系统实训报告_第3页
C语言学生成绩管理系统实训报告_第4页
C语言学生成绩管理系统实训报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

郑州大学实训报告实训名称:“学生成绩管理系统”设计姓名:院(系):软件学院专业班级:学号:指导教师:成绩:时间:年2月日至年月31日目录实训任务书………I实训进度日历……………………IV实训报告…………1软件需求分析………………1软件规格说明………………1系统框架和思路……………1流程图………2实训感想………….3附录……………….4PAGE12郑州大学软件学院学生实训任务书一、题目“学生成绩管理系统”设计二、学生信息专业学号姓名三、用户需求及约束条件1、用C语言实现基于Dos操作系统的“学生成绩管理系统”。2、设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。3、“学生成绩管理系统”具有以下功能:1)系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能)。2)录入学生成绩(信息有:班级、姓名、学号、五门课程成绩);3)计算学生五门功课的平均成绩并存档。下面的功能必须是第3)项功能完成以后才能进行。4)输出学生的信息和对应的原始成绩以及平均成绩;5)按平均成绩进行排序,输出排序后的学生信息以及对应的课程成绩和平均成绩。6)对成绩修改,分别有两种模式,一种是按学号查找后进行修改;另一种是按姓名查找后进行修改;修改后重新排序学生的顺序,并输出学生信息和对应课程成绩和平均成绩。7)增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序学生顺序,并输出学生信息和对应课程成绩和平均成绩。8)附加功能:把学生信息和对应的课程成绩和平均成绩存入到文件中。9)附加功能:输出文件中的内容。10)附加功能:试着从文件中导入数据到成绩管理系统中,然后进行管理。四、设计要求、技术参数及设计规格1、设计的系统能够运行,基本功能实现;2、撰写实训报告,实训报告中的内容包括:1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案;4)“学生成绩管理系统”设计的思路和整体框架;5)各功能或者模块实现的思路(或者用带注释的程序代替)并交待模块之间的接口关系;6)“学生成绩管理系统”设计的结果(可以用一些屏幕拷贝的图来补充说明)。3、程序设计环境为TurboC++3.0或VisualC++6.0。4、实训结束前提交纸质实训报告及其word文档、系统的源程序文件和可执行文件,将这三个文件压缩后以“学号后两位姓名”的形式命名,上传到FTP上自己所在班级对应的文件夹里。FTP地址:实训报告要求按以下顺序装订:封面简单目录任务书实训进度日历实训报告正文实训感想[附件]6、所有的设计工作需要同学自己真实地、独立地完成。五、工作量天/日期任务描述通过标准2010年12月27日上午熟悉系统功能,完成三项任务(用文档记录):1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。下午构思“学生成绩管理系统”的思路和整体框架。设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)文档通过方案通过数据结构通过设计的函数框架通过2010年12月28日设计被系统调用的main函数;设计界面函数;设计各功能子函数的框架;要求数据传递接口正常,main函数能运行。2010年12月29日实现成绩录入功能;实现计算平均成绩功能;实现输出功能;实现排序功能;各子函数调试通过,能被main函数成功调用,其子功能能实现。2010年12月30日实现修改功能;实现增补功能;各子函数调试通过,能被main函数成功调用,其子功能能实现。2010年12月31日上午完善“成绩管理系统的各项功能”。撰写实训报告。实践能力强的同学实现附加功能:输出系统中的成绩到文件中保存;打印输出文件中的内容;从文件中导入数据到成绩管理系统中;下午:继续写实训报告并且验收设计的项目。系统能正确运行,界面友好);各功能能够实现,性能良好操作方便。备注:做得慢的同学可以少实现一部分功能。六、考核形式、考核时间、考核指标及成绩评定实训成绩由下面构成:实训纪律、实训态度和平时表现占20%;实训结果占30%;实训报告占30%;实践操作能力占20%。考核形式:1)老师每日对学生的考察、评估和考核;2)最后对实训项目完成的质量进行考核和验收。完成期限:年12月31日指导教师签章:专业负责人签章:教学院长签章年12月10日

实训进度日历题目学生成绩管理系统指导教师学生班级软件学院级所有专业班级学年学期学年第1学期天上午/下午实训任务详细描述教师实训任务的指导(解决方案、实现步骤、技术路线、难点提示)通过标准年12月27日上午完成:1)软件需求分析;2)软件规格说明和设计要求;3)对数据的管理方案。对软件功能进行分类。用户界面操作简单、功能完备,系统启动后先录入数据,再求平均成绩;平均成绩求出后,其他的功能才能实现。数据结构可以采用数组也可以采用链表。文档通过验收下午构思“学生成绩管理系统”的思路和整体框架。设计数据结构(命名),设计函数框架(命名,考虑参数的类型和个数,即考虑数据之间的传递关系)设计被系统调用的main函数;设计界面函数;如果采用数组管理数据结构,则数组必须按地址传递,这样数据才能在各个函数间共享。难点1:系统的退出,exit()函数需要包含stdlib.h难点2:清屏函数clrscr();难点3:数据的传递设计的函数框架通过调试,要求数据传递接口正常,main函数能运行。年12月28日上午设计数据录入函数,从键盘读数据到数组中,或者创建链表难点1:数据输入完后,怎样控制结束?用一个什么标志。难点2:结构体数组中的子域又是一个数组时,数据不能直接从键盘读入,需用一个临时变量中转一下。难点3:从键盘录入数据时,要给完全的提示信息,便于操作指导。各子函数调试通过,能被main函数成功调用下午计算平均成绩的函数实现难点4:想一想:在录入数据时数据保存到一数组,那么在算平均值时,怎样能接触到此数组中的数据。各子函数调试通过,能被main函数成功调用。年12月29日上午输出原始成绩;输出按照一定的格式,好看。各子函数调试通过,能被main函数成功调用。下午排序功能实现并输出排序后的成绩。按平均成绩排序。排序的算法可以是泡泡法或者选择法等思考1:你还可以分别在每个班中按平均成绩排序吗?思考2:能输出有不及格课程的同学信息和成绩吗?各子函数调试通过,能被main函数成功调用。年12月30日上午能对某一学生信息和成绩进行修改;可做附加功能1。按姓名查找以后,再修改;按学号查找以后,再修改;如果要用对半查找法,需要数据是有序的。难点:怎样从键盘中把成绩存入文件。各子函数调试通过,能被main函数成功调用。下午能增加学生的信息;可做附加功能2。增加后重新排序,重新输出。难点:怎样从文件中读出数据各子函数调试通过,能被main函数成功调用。年12月31日上午完成实训报告难点:清晰、明确、简单、评价合理、有自己的见解、创新。实训报告要求装订整齐。下午验收程序讨论实训报告软件需求分析(1)、成绩录入功能(信息有:班级、姓名、学号、五门课程成绩)(2)、求解学生个人平均成绩并存档(3)、输出学生的信息和对应的原始成绩以及平均成绩(4)、按平均成绩对学生信息进行排序,排序后重新输出(5)、对成绩修改,分别有两种模式,一种是按学号查找和修改;另一种是按姓名查找和修改;修改后重新排序,并输出学生信息和成绩。(6)、增补信息(个人信息和课程成绩)功能,并重新排序和输出。(7)、附加功能,用文件对信息进行管理。(8)、每次输入口令,系统接收时都要接收到“enter”,为保证程序正常运行每次输入后都要对键盘进行清空。2.软件规格说明(1)、系统用户界面尽量居中、美观,所有的命令简单有效。(2)、具有人机交互功能;(3)、通过菜单选择功能;(4)、只能由菜单退出系统;(5)、操作信息提示(界面友好);(6)、拦截一些误操作错误;(7)、按原始成绩格式输出。 3、系统框架和思路(1)、功能分类,把一个问题分解为多个子问题。(2)、考虑数据结构:结构体数组;结构体链表;文件;数据库文件。(3)、功能逐步细化,自顶向下设计,最小的模块用函数实现。(4)、先搭框架,用空函数实现。(5)、计算平均成绩及最大最小,用到排序法,冒泡排序法适用于数组排序法。(6)、运用switch语句,这样可以为用户提供具有选择性的多功能循环操作。(7)、使用if()else语句实现一些选择操作(8)、使用结构体表变量:将不同类型的数据结合成一个有机整体4、流程图选择菜单选择菜单输入函数add()查询函数select查找函数cz()删除函数del()修改函数xg()冒泡排序px()输出函数bjg()退出程序exit()是否建立文件是Y系统否

实训感想总结:通过这次实际操作,从开始的迷茫无知到现在的清晰思路,真正明白了它的用途,虽然还有很多不足之处,但是却感受到了不一样的思想方式,增加了我学习软件技术的兴趣,认识到了自己必须“路漫漫其修远兮,吾将上下而求索”。这次实训是老师给了范例程序,经过自己的改写,基本实现了要求,感谢老师您对我们的指导及对您的无比的负责任表示深深的敬佩,谢谢您,老师!在实际操作过程中对犯的一些错误还会有意外的收获,也渐渐的明白了C语言的真正用途。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,特别是对数组和循环有了深刻的理解,有一种收获良多的喜悦,而这一切都是老师您对我们的谆谆教诲,再次感谢您,老师!

附录#include<stdio.h>#include<stdlib.h>#include<string.h>structstudent{charname[100];charnum[3];floatchinese; floatc_program; floatenglish; floatmath; floatsum; floataverage;};structstudents[300];intNumber=0;intdq(structstudents[]){ FILE*fp=NULL; inti=0; fp=fopen("C:student.dat","rb"); while(fread(&s[i],sizeof(structstudent),1,fp)) i++; fclose(fp); returni;}voidmenu(){ printf("\t*****************************************************************\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*\t\t\t欢迎使用学生成绩管理系统\t\t\t*\n"); printf("\t*\t\t\t\t\t\t\t\t*\n"); printf("\t*********************************\n"); printf("\t*[1]增加学生信息\t\t[2]查看学生信息\t\t*\n"); printf("\t*********************************\n"); printf("\t*[3]查找学生成绩\t\t[4]删除学生信息\t\t*\n"); printf("\t*********************************\n");printf("\t*[5]修改学生成绩\t\t[6]成绩排序\t\t*\n"); printf("\t*********************************\n"); printf("\t*[7]输出挂科人数及成绩\t[0]退出系统\t\t*\n"); printf("\t*********************************\n"); printf("\t*\t\t\t*\n"); printf("\t*********************************\n"); printf("\t*\t\t\t*\n"); printf("\t*****************************************************************\n");}voidbc(structstudent*s){ FILE*fp=NULL; fp=fopen("C:student.dat","ab+"); fwrite(s,sizeof(structstudent),1,fp); fclose(fp);}voidadd(){ intn=0; inti=0,j=0,k=0; structstudentS; printf("\t请输入要增加学生成绩个数:"); scanf("%d",&n); for(i=0;i<n;i++) { k=0; printf("\t输入第%d个同学信息\n",i+1); printf("\t请输入学生的姓名:"); scanf("%s",&S.name);printf("\t学号:");scanf("%s",&S.num); for(j=0;j<Number;j++) { if(strcmp(S.num,s[i].num)==0) { k=1; } } if(k!=0) { printf("\t添加失败,学号重复!\n"); } else { printf("\t[语文]成绩:");scanf("%f",&S.chinese); printf("\t[数学]成绩:");scanf("%f",&S.math);printf("\t[英语]成绩:");scanf("%f",&S.english);printf("\t[C语言设计]成绩:");scanf("%f",&S.c_program); S.sum=S.chinese+S.math+S.english+S.c_program;S.average=S.sum/4; } } if(k==0) { s[Number++]=S; bc(&S); printf("\t\t\t\t==>添加成功<==\n\n"); }}voidselect(){inti=0,j=0;for(i=0;i<Number;i++){ j++;}printf("\t以下是全部%d名学生的成绩:\n",j);printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");for(i=0;i<Number;i++){ printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average);}}voidxhxg(){ FILE*fp=NULL; charid[3]; inti=0,j=0,k=0; intXH=-1; printf("\t请输入要修改的学生学号:"); scanf("%s",id); for(i=0;i<Number;i++) { if(strcmp(id,s[i].num)==0) { XH=i; } } if(XH==-1) { printf("\t不存在该学生信息!\n"); } else { printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n",s[XH].name,s[XH].num,s[XH].chinese,s[XH].math,s[XH].english,s[XH].c_program,s[XH].sum,s[XH].average); printf("\t请重新输入该学生信息:\n"); printf("\t姓名:"); scanf("%s",s[XH].name); printf("\t学号:"); scanf("%s",s[XH].num); for(j=0;j<Number;j++) { if(strcmp(s[XH].num,s[j].num)==0&&XH!=j) { k=1; } } if(k!=0) { printf("\t修改失败,学号重复!\n"); } else { printf("\t[语文]成绩:"); scanf("%f",&s[XH].chinese); printf("\t[数学]成绩:"); scanf("%f",&s[XH].math); printf("\t[英语]成绩:"); scanf("%f",&s[XH].english); printf("\t[C语言设计]成绩:"); scanf("%f",&s[XH].c_program); s[XH].sum=s[XH].chinese+s[XH].math+s[XH].english+s[XH].c_program; s[XH].average=s[XH].sum/4; for(i=0;i<Number;i++) { fwrite(&s[i],sizeof(structstudent),1,fp); } fclose(fp); printf("\t\t\t\t==>修改成功<==\n"); } }}voidxmxg(){ FILE*fp=NULL;charname[60];inti=0,j=0,k=0;intXM=-1;printf("\t请输入要修改的学生姓名:");scanf("%s",name); for(i=0;i<Number;i++) { if(strcmp(name,s[i].name)==0) { XM=i; } } if(XM==-1) { printf("\t不存在该学生信息!\n"); } else { printf("\t姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n");printf("\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\n\n",s[XM].name,s[XM].num,s[XM].chinese,s[XM].math,s[XM].english,s[XM].c_program,s[XM].sum,s[XM].average);printf("\t请重新输入该学生信息:\n");printf("\t姓名:");scanf("%s",s[XM].name);printf("\t学号:");scanf("%s",s[XM].num); for(j=0;j<Number;j++) { if(strcmp(s[XM].num,s[j].num)==0&&XM!=j) { k=1; } } if(k!=0) { printf("\t修改失败,学号重复!\n"); } else { printf("\t[语文]成绩:"); scanf("%f",&s[XM].chinese); printf("\t[数学]成绩:"); scanf("%f",&s[XM].math); printf("\t[英语]成绩:"); scanf("%f",&s[XM].english); printf("\t[C语言设计]成绩:"); scanf("%f",&s[XM].c_program); fp=fopen("C:student.dat","wb"); s[XM].sum=s[XM].chinese+s[XM].math+s[XM].english+s[XM].c_program; s[XM].average=s[XM].sum/4; for(i=0;i<Number;i++) { fwrite(&s[i],sizeof(structstudent),1,fp); } fclose(fp); printf("\t\t\t\t==>修改成功<==\n"); } }} voidfh(){ printf("\t\t\t==>按Enter键返回主菜单<==");}voidxmcz(){ charname[7]; inti=0,j=0; printf("\t请输入要查找的学生姓名:"); scanf("%s",name); system("cls"); printf("\t查找结果:\n"); for(i=0;i<Number;i++) { if(strcmp(name,s[i].name)==0) { j=1; printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average); } } if(j==0) { printf("\t不存在该学生信息!\n"); }}voidxhcz(){ charid[7]; inti=0,j=0; printf("\t请输入要查找的学生学号:"); scanf("%s",id); system("cls"); printf("\t查找结果:\n"); for(i=0;i<Number;i++) { if(strcmp(id,s[i].num)==0) { j=1; printf("姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average); } } if(j==0) { printf("\t不存在该学生信息!\n"); }}voidxmsc(){ FILE*fp=NULL; charname[60]; inti=0,j=0,k=0; printf("\t请输入要删除的学生姓名:"); scanf("%s",name); for(i=0;i<Number;i++) { if(strcmp(name,s[i].name)==0) { printf("\t删除的学生信息:\n姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average); for(j=i;j<Number-1;j++) { s[j]=s[j+1]; } Number--; k=1; } } fp=fopen("C:student.dat","wb"); for(i=0;i<Number;i++) { fwrite(&s[i],sizeof(structstudent),1,fp); } fclose(fp); if(k==1) printf("\t\t\t\t==>删除成功<==\n"); else printf("\t\t\t\t==>信息不存在<==\n");}voidcz(){ intn=0; printf("\t请选择查找方式:\n"); printf("\t1按姓名查找\n"); printf("\t2按学号查找\n"); scanf("%d",&n); switch(n) { case1:xmcz();break; case2:xhcz();break; default:printf("\t输入有误,结束!\n");break; }}voidxhsc(){ FILE*fp=NULL; charid[60]; inti=0,j=0,k=0; printf("\t请输入要删除的学生学号:"); scanf("%s",id); for(i=0;i<Number;i++) { if(strcmp(id,s[i].num)==0) { printf("\t删除的学生信息:\n姓名\t学号\t语文\t数学\t英语\tC语言设计\t总成绩\t平均分\n"); printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",s[i].name,s[i].num,s[i].chinese,s[i].math,s[i].english,s[i].c_program,s[i].sum,s[i].average); for(j=i;j<Number-1;j++) { s[j]=s[j+1]; } Number--; k=1; } } fp=fopen("C:student.dat","wb"); for(i=0;i<Number;i++) { fwrite(&s[i],sizeof(structstudent),1,fp); } fclose(fp); if(k==1) printf("\t\t\t\t==>删除成功<==\n"); else printf("\t\t\t\t==>信息不存在<==\n");}voidsh(){ intn=0; printf("\t请选择删除方式:\n"); printf("\t1按姓名删除\n"); printf("\t2按学号删除\n\t"); scanf("%d",&n); switch(n) { case1:xmsc();break; case2:xhsc();break; }}voidpx(){ structstudentP; intX=0; inti=0,j=0,k=0; for(i=0;i<Number-1;i++) { for(j=0;j<Number-1-i;j++) { if(s[j].average>s[j+1].average) { P=s[j]; s[j]=s[j+1]; s[j+1]=P; } } } printf("\t你想输出前几名的成绩:"); scanf("%d",&X); if(X>Number) { X=Number; } i=1; printf("\t\t\t名次\t姓名\t学号\t平均成绩\n"); for(k=Number-1;k>(Number-X-1);k--) { printf("\t\t\t%d\t%s\t%s\t%.2f\n",i,s[k].name,s[k].num,s[k].average); if(s[k].average!=s[k-1].average) {i++;} }}voidbjg(){ inti=0,j=0; for(i=0;i<Number;i++) { if(s[i].chinese<60||s[i].math<60||s[i].english<60||s

温馨提示

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

评论

0/150

提交评论