c程序实验报告学生成绩管理系统doc.docx
- 文档编号:30235996
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:37
- 大小:206.42KB
c程序实验报告学生成绩管理系统doc.docx
《c程序实验报告学生成绩管理系统doc.docx》由会员分享,可在线阅读,更多相关《c程序实验报告学生成绩管理系统doc.docx(37页珍藏版)》请在冰豆网上搜索。
c程序实验报告学生成绩管理系统doc
附件1:
学号:
0121014420214
C语言综合实验
题目
学生成绩管理系统
学院
理学院
专业
电子信息科学与技术
班级
电信科1002
姓名
李珍
2011
年
06
月
30
日
学生成绩管理系统
一:
需求分析
学生成绩管理系统是学生熟悉的教学系统之一,系统以学生成绩的输入、输出、插入、删除、排序、统计等基本功能模块为基础,将结构体、链表、文件等主要知识点结合在一起,运用菜单、排序等一些常用算法,解决学生成绩管理的实际问题。
设计一个学生成绩管理系统,对上学期的本班的学习成绩进行管理,可以用数组或链表来设计这个程序,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。
1):
每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成绩。
2):
创建功能:
可以一次完成若干条记录的输入。
3):
显示输出功能:
完成全部学生记录的显示。
4):
查找功能:
完成按姓名或学号查找学生记录,并显示。
5):
排序功能:
按学生平均成绩进行排序。
6):
修改功能:
修改一条学生记录。
7):
删除功能:
完成学生记录的删除。
8):
统计功能:
按学生各门课成绩统计出平均成绩
9):
将学生记录存在文件student.txt中。
10):
应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
二:
总体分析
1:
进入界面
start();
2:
选择界面
intx;
3:
创建函数(creat)
start();
fread(&stu[i],sizeof(structstudent),1,fp);
a=='y'||a=='Y'
fclose(fp);
i++
i i=0 printf("文件写入错误\n"); fclose(fp); printf("无法打开文件"); i++ i i=0 printf("\ninputinformationaboutthestudent: %\n",i+1); (fp=fopen("student.txt","w"))==NULL i++ i i=0 chara; 4: 追加函数(add) start(); printf("\n%s,%s,%s,%d,%d,%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu); a=='y'||a=='Y' fclose(fp); i++ i i=0 printf("文件写入错误\n"); fclose(fp); printf("无法打开文件"); i++ i i=0 printf("\ninputinformationaboutthestudent: %\n",i+1); (fp=fopen("student.txt","a"))==NULL i++ i i=0 chara; 5: 查询函数 x=i; continue; strcmp(name,stu[i].name)==0 system("pause"); i++ i<20 i=0 printf("无法打开文件! \n"); printf("要查询的学生姓名为: "); fp==NULL inti,x; 6: 修改函数 x=i; continue; system("pause"); i++ fwrite(&stu[i],sizeof(structstudent),1,fp)! =0 i=0 strcmp(name,stu[i].name)==0 fclose(fp); i++ i<20 i=0 printf("无法打开文件! \n"); printf("要修改的学生姓名为: "); fp==NULL inti,x; 7: 删除函数 printf("学号\t姓名\t性别\t语文\t数学\t英语\n"); strcpy(stu[j].number,stu[j+1].number); printf("************************************************\n"); i++ fread(&stu[i],sizeof(structstudent),1,fp)! =0 i=0 fclose(fp); printf("无法打开文件! \n"); flag=0; j++ j j=i i++ i i=0 fp==NULL printf("\n现在文件内容为: \n"); printf("没有找到! "); strcmp(name,stu[i].name)==0 ! flag i++ flag&&i flag=1,i=0 printf("学号\t姓名\t性别\t语文\t数学\t英语\n"); printf("************************************************\n"); i++ fread(&stu[i],sizeof(structstudent),1,fp)! =0 i=0 printf("无法打开文件! \n"); printf("\n原有数据: \n"); fp==NULL inti,j,n,flag; 8: 统计函数 fread(&stu[i],sizeof(structstudent),1,fp); printf("%s\t%s\t%s\t%d\t%d\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu); printf("文件写入错误\n"); printf("****************************************************************\n"); i++ i i=0 printf("************************************************\n"); i++ (fread(&stu[i],sizeof(structstudent),1,fp))! =0 i=0 fclose(fp); printf("原文件数据: \n"); i++ i i=0 printf("无法打开文件! "); fp=fopen("student.txt_all","w"); fp==NULL inti,n; 9: 排序函数 fwrite(&stu[i],sizeof(structstudent),1,fp); temp=stu[i]; printf("************************************************************\n"); i++ i i=0 stu[i].ave printf("现在文件数据为: \n"); i++ i i=0 printf("%s\t%s\t%s\t%d\t%d\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu); printf("************************************************\n"); i++ fread(&stu[i],sizeof(structstudent),1,fp)! =0 i=0 printf("无法打开文件! "); printf("原文件数据: \n"); fp==NULL FILE*fp; 10: 显示函数 system("pause"); printf("\n"); i++ fread(&stu[i],sizeof(structstudent),1,fp)! =0 i=0 fp==NULL inti; 。 三: 详细设计 1.进入界面 设置一个进入界面,显示程序作者的基本信息,包括学号,姓名,学院,班级,专业,界面一目了然,整齐可观。 2: 选择界面 选择界面上显示有十项功能,分别为建立,追加,查询,修改,删除,统计,排序,显示,帮助和退出。 在功能表下,有请选择的提示。 通过choose()函数,实现选择的功能,然后进入相应的功能界面,进入其他界面。 在进入其他每个界面之前,会有一个清屏系统命令。 从而保证了屏幕的干净与整洁。 3.创建学生的资料 创建学生资料是通过creat()函数实现的,在这个界面最前面,有输入提示,在创建资料时,首先输入要创建学生资料的个数,然后再一一输入学生的各项数据,包括学号,姓名,性别,语文成绩,数学成绩,英语成绩。 在数据输入完成后,也就是在数据写入文件后,再从文件中读出数据,简单的显示数据,以此来检验创建是否成功。 完成学生资料的创建后,再回到选择界面。 4.追加学生的资料 当你想要在增加一些其他学生的数据时,就可以通过add()函数来实现数据的追加,此功能的实现思路与创建资料功能大同小异,只不过将写入改为追加罢了。 在完成追加学生资料后,又回到主界面。 5.查询学生的资料 查询学生资料是通过search()函数来实现的,查询函数的思路是这样的,首先: 你输入你要查询的学生资料的姓名,之后通过“冒泡法”,将输入的学生姓名与文件中的学生资料的姓名一一比较,当有一个与输入的相等时,输出此学生的全部信息。 查询结束后,按任意键继续,返回到选择界面。 6,.修改学生资料 修改学生资料是通过alter()函数来实现的,实现此功能的思路前一部分与查询相似,也就是输入你要修改的学生姓名,然后将此学生数据一一重新输入,重新存储。 最后退回到选择界面。 7.删除学生资料 删除资料是通过del()函数来实现的,实现此功能的思路前一部分与查询相似,但是多了个将原有数据先输出来,为的就是与删除数据之后对比,以此来检验删除是否成功。 如果删除成功,则输出删除成功,再按任意键,返回到主菜单。 8.统计学生资料 统计学生资料的函数是statistic(),统计函数对学生的平均成绩和总成绩进行统计,然后在从文件中读出,显示出来,同时,原数据也显示出来,好让他们之间做一个对比,以此来验证统计结果是否正确。 看完统计结果后,按任意键放回到主菜单。 9对学生资料进行排序 . 排序函数定义为sort(),排序函数和查询,修改函数一样,都运用到了冒泡法对学生数据之间的比较,排序界面如同统计局界面一样,将原结果与处理之后的结果进行比较,对比突出运行的结果是否正确,以便能够及时发现错误,及时修改。 10.显示函数 显示函数是print()。 显示学生资料界面上只输出学生的学号,姓名,性别,语文,数学和英语等数据,而不输出平均成绩和总成绩。 看完学生资料后,按任意键退出当前界面,回到主菜单。 11.退出 选择功能10,通过exit(0)结束程序的运行,或者也可以关掉运行窗口来结束运行。 四: 调试与测试 4.1: 调试 调试当中语法错误较少,但是逻辑和函数运用有很多问题,调试时用的数据如下: 学号 姓名 性别 语文 数学 英语 1 李珍 男 99 98 96 2 何梁 男 98 68 87 3 尹晓辉 男 87 97 69 4.2测试结果 详见详细设计中的运行结果。 五: 结论与心得体会 在一开始听到老师要我们编写这个学生成绩管理系统是,我既是苦恼又是兴奋,苦恼的是我们我对指针,结构体和函数的知识还不太熟悉,毕竟他将讲这些知识还没及天;兴奋的是能够有一次锻炼的机会,我相信这次作业一定能够大大提升我对c程序的认识。 我是一个自信而且有耐心的人,所以,尽管这个程序很难编,但是我还是坚持了下来,直到弄出来! 在编程的一开始,我毫无头绪,思绪很混乱,所以,我不得不花费了几天时间将结构体和文件方面的知识认认真真的看了一遍,并且尝试了很多小程序的编写和运行,效果很明显。 之后,我开始这个大程序的编写工作,从慢慢吞吞到加快节奏,在编程的一周时间内,我几乎每天都很晚才睡,早上又不得不早些起来,真是累呀! 现在,程序终于弄出来了,我感到欣喜无比,同时,内心中有一种油然而生的成就感,我终于凭借自己的努力把程序弄了出来。 在这个程序中,一系列的函数中都普遍运用了fopen(),fclose(),fread(),fwrite(),system(“cls”),system(“pause”)等系统函数,同时,程序中用到的最多的知识是结构体数组和文件,当然,一些基础的知识都几乎用到了,他们是一个大程序中经常用到的,灵活的运用指针,熟练的掌握函数的调用对编程十分重要。 这次所编写的程序基本上达到了老师的要求,但是还有很多不足之处,等待我以后慢慢的修改和完善,争取使程序达到最好。 这一次的编写经历,让我对c程序有了更深刻的了解,同时对我以后的学习有莫大的指导意义,我对c语言更加有兴趣了,我相信我以后能更好! 六: 附录 6.1: 程序源代码 #include #include #include voidcreat(); voidcaidan(); voidchoose(int); voidadd(); voiddel(); voidsearch(); voidsort(); voidstatistics(); voidprint(); voidalter(); voidstart() voidmain()/*主函数*/ { start(); } structstudent/*定义学生信息结构体数组*/ { charnumber[10];/*学号*/ charname[8];/*姓名*/ charsex[4];/*性别*/ intyuwen;/*语文成绩*/ intshuxue;/*数学成绩*/ intyingyu;/*英语成绩*/ intsum;/*个人总成绩*/ floatave;/*平均成绩*/ }stu[20],temp; voidstart()/*开始界面*/ { system("cls"); printf("----------------------------欢迎进入学生成绩管理系统------------------------\n"); printf("******************************************************\n"); printf("\n&姓名: 李珍&\n"); printf("\n&学号: 0121014420214&\n"); printf("\n&学院: 理学院&\n"); printf("\n&班级: 电信科1002&\n"); printf("******************************************************\n"); flushall(); system("pause"); caidan(); } voidbangzhu()/*帮助菜单(以后可以在里面添加新功能)*/ { } voidalter()/*修改函数*/ { inti,x; charname[8]; FILE*fp; system("cls");/*清屏*/ printf("--------------------------修改学生资料------------------------\n"); fp=fopen("student.txt","r"); if(fp==NULL) { printf("无法打开文件! \n"); system("pause"); caidan(); } printf("要修改的学生姓名为: "); flushall();/*缓冲数据*/ scanf("%s",name); fread(stu,sizeof(structstudent),20,fp); for(i=0;i<20;i++) { if(strcmp(name,stu[i].name)==0) { x=i; printf("修改学生资料: \n"); printf("学号: "); scanf("%s",stu[x].number); flushall(); printf("姓名: "); scanf("%s",stu[x].name); flushall(); printf("性别: "); scanf("%s",stu[x].sex); flushall(); printf("语文成绩: "); scanf("%d",&stu[x].yuwen); printf("数学成绩: "); scanf("%d",&stu[x].shuxue); printf("英语成绩: "); scanf("%d",&stu[x].yingyu); } else continue; } fclose(fp); fp=fopen("student.txt","w"); for(i=0;fwrite(&stu[i],sizeof(structstudent),1,fp)! =0;i++) fclose(fp); system("pause"); caidan(); } voidstatistics()/*统计函数*/ { inti,n; intsum=0; FILE*fp; system("cls"); printf("----------------统计学生资料--------------\n"); fp=fopen("student.txt","r"); if(fp==NULL) { printf("无法打开文件! "); caidan(); } else { printf("原文件数据: \n"); printf("************************************************\n"); printf("学号\t姓名\t性别\t语文\t数学\t英语\n"); for(i=0;(fread(&stu[i],sizeof(structstudent),1,fp))! =0;i++) { printf("%s\t%s\t%s\t%d\t%d\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu); sum=stu[i].yuwen+stu[i].shuxue+stu[i].yingyu; stu[i].ave=(float)sum/3; stu[i].sum=(int)sum; } printf("************************************************\n"); n=i; printf("\n"); fclose(fp); } fp=fopen("student.txt_all","w"); for(i=0;i if(fwrite(&stu[i],sizeof(structstudent),1,fp)! =1) { printf("文件写入错误\n"); caidan(); } fclose(fp); fp=fopen("student.txt_all","r"); printf("统计之后的数据: \n"); printf("****************************************************************\n"); printf("学号\t姓名\t性别\t语文\t数学\t英语\t平均成绩\t总成绩\n"); for(i=0;i { fread(&stu[i],sizeof(structstudent),1,fp); printf("%s\t%s\t%s\t%d\t%d\t%d\t%.2f\t\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu,stu[i].ave,stu[i].sum); } printf("****************************************************************\n"); fclose(fp); system("pause"); caidan(); } voidsort()/*排序函数*/ { FILE*fp; inti,j,n; system("cls"); printf("--------------对学生资料进行排序------------\n"); fp=fopen("student.txt_all","r"); if(fp==NULL) { printf("无法打开文件! "); caidan(); } printf("原文件数据: \n"); printf("************************************************\n"); printf("学号\t姓名\t性别\t语文\t数学\t英语\n"); for(i=0;fread(&stu[i],sizeof(structstudent),1,fp)! =0;i++) { printf("%s\t%s\t%s\t%d\t%d\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu); } printf("************************************************\n"); n=i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 实验 报告 学生 成绩管理系统 doc