当前位置:文档之家› c语言课程设计成绩记录簿

c语言课程设计成绩记录簿

合肥学院计算机科学与技术系课程设计报告2012~2013学年第二学期课程面向过程综合设计课程设计名称C语言成绩簿学生姓名学号专业班级指导教师2013年6月第一章需求分析1.1 任务要求:编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。

具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;(3)按学号或姓名查询成绩;(4)添加成绩记录;(5)修改指定姓名或学号的学生的成绩并可存盘;(6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息(可选项)。

1.2任务问题:如何运用我们已学的c语言知识完成要求?如何制作相应界面?switch的应用该如何实现?如何完成相应的数组或链表的实现与应用?怎样进行相应的文件的读写?1.3任务的解决步骤:步骤:1.建立一个主界面。

2.用switch语句进行分类讨论。

3.分别进入录入,查询,修改,学生分数段统计等子函数。

4.将子函数与主函数相连即可。

第二章算法设计1、设计思想2.1 程序结构(流程图)2.2 重要的数据结构2.3主要算法思想(文字描述)本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。

本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是链表的相关操作,包括结构体链表的创建、输入、输出、查找、修改等。

我设计的这个通讯录系统也初步实现了人员信息的显示、修改、查找、等必要的功能,并通过子函数与主函数相连来完成相应的功能。

2.设计表示int Student_Insert( ); (添加学生成绩)void edit( ); (修改)void Student_Search( );(查找)void WriteFile( ); (写入文件)void ReadFile( ); (读取文件)void Student_Select( );(分数段选择)void PrintMark( );(打印学生分数)void NameChange( );(按姓名修改)void NumberChange( );(按学号修改)3.实现注释除了没有用链表进行实验的缺点外,基本可以实现任务要求,界面简洁,程序简单,易操作。

4.算法设计中一些新的想法:本程序主要包含了结构体与动态变量的相关知识;其中也多次用到了循环和判断结构;本程序还可以通过子函数实现删除,排序等操作。

用链表,指针也可以实现相应的任务要求。

第三章用户手册3.1使用说明主程序提供一个界面,允许用户选择。

使用switch语句,用时直接输入数字即可。

增加函数,功能是插入学生成绩。

使用一个无穷循环,直到录入”n”时结束。

修改函数,功能是修改,分为两步,先插入学生成绩后才能进行修改。

修改用strcmp 函数来做。

如果找到记录i值,反之记为-1;修改可以从i项开始将数组的后一项的新的数值赋值给前一项。

前一项自动被替换。

这样完成修改。

查询函数与之类似,用strcmp函数将修改变为输出即可;求各分数段的学生的相应成绩数据时,引用if-else语句可进行有效筛选。

退出函数什么都不写,即可。

所有修改,添加程序都可以用姓名,学号两种方式实现,可以实际情况实现。

输入的数据应按照固定的格式和顺序“姓名-学号-成绩”,否则会出现错误,无法输出。

注:输入项:char name[10] 定义学生名称为字符型long number 定义学号为长整型int score 定义学生成绩为整形输出项:int m1,m2,m3,score,xf; 定义整型3.2限制条件1.开始写程序时未使用链表,程序冗杂。

长度较大,不灵活。

2.我的程序无法在文件中修改,必须在开始时修改,文件存取不灵活。

3.一个学生的各项数据必须按顺序输入,否则会出现错误。

4.学号必须都是数字,且是十位,不能有0。

5.读取的数据必须存在,不能读取空数据。

第四章、调试及测试1.开始2.添加3.修改4.查学生成绩5.写入文本文件6.读取学生成绩7.筛选各成绩段学生对设计和编码的回顾讨论和分析:短短的俩周已经过去了,在此我将交出我一周的成果,我真是百感交错。

我有许多的原来不懂的问题在编写本程序得到解决,同时本次程序编写也暴露了我的许多的问题。

如:1.原先写程序直接编,条理性太差。

如果先做一个流程图就条理很多;2.学会了将文件存入和读取,并学会在文件中加入信息和修改信息;3.我在查找学生姓名时遇到困难,从课本上找到了一个函数strcmp,解决了问题困难;4.我在定义学生的学号时首先用整型%d。

发现输出与录入不同。

改用长整型%ld仍然不行,但是字符型%s却可以做到;5.我发现多次使用结构体,子函数可以有效的缩短程序长度,方便实用。

!第五章小结与过去相比,我认为这短短的两周的编程时光给我的感悟更为强烈。

在此,首先我要感谢老师,是老师把我带进了这一门,俗话说的好“万丈高楼平地起”,所以说,基础很重要。

而老师讲课认真,讲也很透彻,使我们能较好的理解这门课,可以跟紧课堂进度,是我们有机会能打下结实良好的基础。

而且老师在平时也鼓励我们多提问,在我们遇到问题时,富有耐心地为我们解答。

在此再次感谢老师对我们不辞操劳的讲解!谢谢!一开始,当我第一眼看到这课程设计的时候,我感到十分的“痛苦”,老实说,在还未进行编程之前,我就感到这与我们之前的编程完全不一样,与这次相比,以前的上机实验就像是小孩子玩得,一点技术含量也没有。

以前的那些实验只要看看书,花上一二个小时,基本就可以完成了,而且以前的小程序最多也不过二三十行,不像这次要百来行。

从中可见它的难度,从而联想到那些专业编程员,我更深刻感到自己的不足。

由于之前从未进行过如此大的编程,所以一开始根本没头绪,后来只好用死办法,像写作文一样,首先先在纸上列出大致的提纲,然后再一个个慢慢延伸展开,最后再输入计算机,用它来运行。

可惜不运行还好,一运行只见一片的红色错误提示。

有些错误很简单,很好改,是由于自己的粗枝大叶引起的,比如:有些字符未定义,漏了一个“;”等。

但也有些高深莫测的问题,例如:当我添加时是添加了三个同学的成绩,但当我查询全班成绩时,却只有两位同学的成绩。

后来在百思不得其解之下,我只好向周围同学寻求帮助,最终在大家的帮助之下才解决的,诸如此类的问题还不少!有的已经解决,但有些还未,可惜时间不够,也只能如此。

经过这两周的课程设计,我发现我懂得了很多,它使我在编程时更仔细了,也使我学会了向周围人求教,培养了我自我学习,独立思考。

并且,使我更体会到了和高中的不一样,一切靠自觉,没有人会跟在你后面一直催你,告诉你该怎样怎样。

同时,我也更加了解到自己的不足,基础严重不扎实。

虽然这门课快结束了,但我会努力在假期中把自己的基础补好,期待在下次的课程设计时能够得心应手!第六章参考文献:[1]黄明等编著《C语言课程设计》北京:电子工业出版社[2]郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社[3] 宁正元《数据结构(c语言)》南京:东南大学出版社。

2000年6月第1版[4] 严蔚敏等《数据结构(c语言版)》北京:清华大学出版社,1997年4月第1版[5] 谭浩强编著《C程序设计题解与上机指导(第3版) 》北京:清华大学出版社[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社(附录)原代码解析:#include "stdio.h"#include <stdlib.h>#include <string.h>#define MAX 1000struct Student{char Name[100];char Number[100];int LessonCount;int LessonMark;};struct Student S[MAX];int StudentCount = 0;void PrintInterface();int Student_Insert();void edit();void Student_Search();void WriteFile();void ReadFile();void Student_Select();void PrintMark();void NameChange();void NumberChange();int main(){int n;printf("欢迎进入学生成绩簿!");{PrintInterface();scanf("%d", &n);}}void PrintInterface(){int n;while (1){printf("\n -------------------------- ");printf("\n| 1、添加|\n");printf("\n| 2、修改|\n");printf("\n| 3、查学生成绩|\n");printf("\n| 4、写入文本文件|\n");printf("\n| 5、读取文本文件|\n");printf("\n| 6、筛选各分数段学生|\n");printf("\n| 0、退出|\n");printf("\n -------------------------- ");printf("\n选择操作:");scanf("%d",&n);switch(n){case 1:if (Student_Insert())printf("\n添加成功...回车继续\n");elseprintf("\n添加失败...回车继续\n");break;case 2:edit();break;case 3:Student_Search();break;case 4:WriteFile();break;case 5:ReadFile();break;case 6:Student_Select();break;case 0:exit(1);break;default:printf("无此功能,请重新选择,按回车确定\n");}}}int Student_Insert(){int i,n;printf("\n请输入所添加的学生人数:");scanf("%d", &n);if (StudentCount + n >= MAX)return 0;for (i = StudentCount; i < StudentCount + n; i++){printf("\n\t第%d个学生:\n", i - StudentCount + 1);printf("\n\t学生学号:");scanf("%s", &S[i].Number);if(strlen(S[i].Number)!=10){printf("输入错误,请重新输入");return 0;}printf("\n\t学生姓名:");scanf("%s", S[i].Name);printf("\n\t\tc课程成绩:");scanf("%d", &S[i].LessonMark);if(S[i].LessonMark<0 || S[i].LessonMark>100){printf("输入错误,请重新输入!");return 0;}}StudentCount += n ;return 1;}void edit(){int way=0;printf("请选择修改的方式:/n"); printf("1.按姓名修改"/n);printf("2.按学号修改"/n);scanf("%d",&way);switch(way){case 1:NameChange();break;case 2:NumberChange();break;default:printf("");break;}}void Student_Search(){int x;char y[100];char a[100];int i;printf("\n输入所查学生信息(1.姓名 2.学号)选择:");scanf("%d", &x);if ((x == 1 )||( x == 2) ){if (x == 1){printf("\n姓名:");getchar();gets(a);for (i = 0; i < StudentCount; i++){if (0==strcmp(S[i].Name,a)){printf("\n学号:%s\t姓名:%s\n", S[i].Number, S[i].Name);printf("c课程成绩\t\n");printf("-----------------------------------------------------\n");printf("%d",S[i].LessonMark);printf("\n\n");}}else{printf("\n学号:");getchar();gets(y);for (i = 0; i < StudentCount; i++){if (strcmp(S[i].Number,y)==0){printf("\n学号:%s\t姓名:%s\n", S[i].Number, S[i].Name);printf("c课程成绩\t\n");printf("-----------------------------------------------------\n");printf("%d",S[i].LessonMark);printf("\n\n");break;}}}printf("查找完毕...回车继续\n");getchar();}{printf("选择错误...回车继续\n");getchar();return;}}void WriteFile(){FILE *fp;int i;char a[100];printf("\n请输入写入的文件地址:\n\n地址输入格式:例如d:\\\\Student.txt:");scanf("%s",&a);printf("\n写入中......\n");if (fp = fopen(a,"w")){fprintf(fp,"%d\n",StudentCount);for (i = 0; i < StudentCount; i++){fprintf(fp,"%s\t%s\t%d\n",S[i].Number,S[i].Name,S[i].LessonMark);printf("\n写入完成...回车继续\n");fclose(fp);}else{printf("\n写入失败...回车继续\n");}getchar();}void ReadFile(){FILE *fp;int i;char a[100];printf("\n请输入读取的文件地址:\n\n地址输入格式:例如d:\\\\student.txt:");scanf("%s",&a);printf("\n读取中......\n");if (fp = fopen(a,"r+")){fscanf(fp,"%d",&StudentCount);for (i = 0; !feof(fp); i++)fscanf(fp,"%s%s%d",&S[i].Number, &S[i].Name,&S[i].LessonMark);}PrintMark();printf("\n读取成功...回车继续\n");fclose(fp);}else{printf("\n读取失败...回车继续\n");}getchar();}void Student_Select(){int j;for(j=0;j<StudentCount;j++){if(S[j].LessonMark>=100)printf("错误信息");if(S[j].LessonMark>=90){printf("90分以上的学生成绩信息:");printf("%s\t%s\t%d\n",S[j].Number, S[j].Name,S[j].LessonMark);}else if((S[j].LessonMark<90)||(S[j].LessonMark>=80)){printf("80分~89分的学生成绩信息:");printf("%s\t%s\t%d\n",S[j].Number,S[j].Name,S[j].LessonMark);}else if((S[j].LessonMark<80)||(S[j].LessonMark>=70)){printf("70分~79分的学生成绩信息:");printf("%s\t%s\t%d\n",S[j].Number, S[j].Name,S[j].LessonMark);}else if((S[j].LessonMark<70)||(S[j].LessonMark>=60)){printf("60分~69分的学生成绩信息:");printf("%s\t%s\t%d\n",S[j].Number, S[j].Name,S[j].LessonMark);}else{printf("60分以下的学生成绩信息:");printf("%s\t%s\t%d\n",S[j].Number, S[j].Name,S[j].LessonMark);}}}void PrintMark(){int i;for(i=0;i<StudentCount; i++){printf("%s\t%s\t%d\n",S[i].Number, S[i].Name,S[i].LessonMark);}}void NameChange(){char name[60];int i=0,j=0;printf("请输入要修改的学生姓名:");scanf("%s",&name);for(i=0;i<StudentCount;i++){if(strcmp(name,S[i].Name)==0){j=i;break;}printf("\t姓名\t学号\t成绩\n");printf("%s\t%s\t%d\n",S[i].Name,S[i].Number,S[i].LessonMark);printf("请重新输入该学生信息");printf("姓名:");scanf("%s",&S[j].Name);printf("学号:");scanf("%s",&S[j].Number);printf("成绩:");scanf("%d",&S[j].LessonMark);printf("修改完毕");}void NumberChange(){char id[60];int i=0,j=0;printf("请输入要修改的学生学号");scanf("%s",&id);for(i=0;i<StudentCount;i++){if(strcmp(id,S[i].Number)==0)j=i;}break;}printf("姓名\t学号\tc语言分数\t\n");printf("%s\t%s\t%d\n", S[i].Name,S[i].Number,S[i].LessonMark);printf("请重新输入该学生信息");printf("姓名:");scanf("%s",&S[j].Name);printf("学号:");scanf("%s",&S[j].Number);printf("成绩:");scanf("%d",&S[j].LessonMark);printf("修改完毕");}。

相关主题