上海应用技术学院课程设计报告课程名称C语言课程设计设计题目成绩记录簿姓名叶箭专业班级101041B2 学号1010411232 组别无同组者指导教师日期成绩一、目的及要求(1) 目的1. 巩固和加深学生对C语言课程的基本知识的理解和掌握;2. 掌握C语言编程和程序调试的基本技能;3. 利用C语言进行基本的软件设计;提高学生的编程能力4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力。
(2) 课程设计要求1. 分析课程设计题目的要求;2. 写出详细设计说明;用户提供的主操作界面应该为菜单形式3. 编写程序代码,调试程序使其能正确运行;4.设计完成后提交课程设计报告和源代码文件的电子文档最后提交的课程设计成果包括:a)课程设计报告电子稿;b)源程序文件;(.cpp 文件)二、课程设计内容说明1. 课程设计题目:成绩记录簿2. 设计理念:成绩记录簿中记录以下数据:学号、姓名,语文,数学,英语,学分,所有成绩都以百分制计分。
在程序中可以输入新的成绩记录,可以按学号或姓名查询一个学生的所有成绩,和已完成的学分。
也可以查出一个班的成绩表输入信息时要检查数据项学号的合法性,学号:8位数字;成绩:0 ~ 100 之间的整数。
程序的主界面如下:F.2.1程序描述:(1)目的:对成绩录入簿进行良好的添加,查询,删除。
(2)特点:方便,灵活,直观,易用。
意义:编写此程序,可以巩固和加深我们对C语言课程的基本知识的理解和掌握;也使我们能掌握C语言编程和程序调试的基本技能;使我们有能力利用C 语言进行基本的软件设计;更令我们掌握了书写程序设计说明文档的能力:且提高运用C语言解决实际问题的能力。
F.2.2功能:通过主菜单,我们可以迅速的选择我们所需的操作了,比如:添加或删除每个人的成绩,学分,学号等一系列的内容,又或者可以随时方便快捷的查询个人成绩或班级成绩,F.2.3性能:可以应付简单的添加,删除和查询;F.2.4输人项char name[10] 设置学生名称long int id 定义学号为长整型float avg 平均分为实数F. 2. 5输出项int m1,m2,m3,score,xf; 定义整型float avg; 以浮点型输出平均分F.2.6算法1.for 语句,不断循环接受新的信息2.if 语句,判断,然后选择输出3.switch语句,case语句负责到是以名字或是学号等一系列信息进行删除或查询这是总的流程图。
该流程分为五大模块:模块一:主菜单模块二:tj()函数接受添加的数据,模块三:del()是删除不需要的数据的内容,可以通过学号和姓名两种方式进行操作,其中有确认操作,防止误操作,删除结束返回主菜单。
模块四:checkstident()是通过按姓名与学号两种方法来查询学生个人成绩模块五:checkclass()是通过一个for语句不断循环已经接受的内容来显示班级成绩F.2.8 接口#include "stdio.h"#include<stdlib.h>#include<string.h>struct stu{long int id;char name[10];int m1,m2,m3,score,xf; //xf为学分float avg;}f[100];int x=0,a,choose,s=0,score1=0,score2=0,score3=0,c;long int id ;float avg1,avg2,avg3;char name[10];void tj(){}void del(){}void checkstudent(){}voidcheckclass(){}void main(){int a;while(1){printf("\n\n\n");printf(" 成绩记录簿\n");printf(" 1: 添加\n");printf(" 2: 删除\n");printf(" 3: 查询学生成绩\n");printf(" 4: 查询班成绩\n");printf(" 0: 退出\n");printf(" 请输入数字选择: ");scanf("%d",&a);switch(a){case 1:tj(); break;case 2: del();break;case 3:checkstudent();break;case 4:checkclass(); break;case 0: exit(0);default: ;}}}F.2.9限制条件:1.一个学生必须有语文,数学,英语三门成绩2.学号必须都是数字,且是八位,不能有0F.2.10测试计划主函数:进入就可以选择要操作的选项添加:进入主菜单,选择1,输入要添加的人数,输入学生学号,语文,数学,英语及学分,然后输出删除:进入主菜单,选择2,在选择删除方法时,我选择了1(按学号删除),然后输入学号,显示出要删除的内容,选0(确定删除),删除成功查询学生成绩:进入主菜单,选择3,在选择查询方法时,我选择了1(按学号查询),然后输入学号,显示出要查询的内容,查询班成绩:进入主菜单,选择4,显示出班成绩三、结论与体会结论:对完成情况的评价:可以进行一些简单操作,可以比较迅速地进行添加,删除与查询设计中存在的问题:目前程序虽然已经完成,但仍然有许多不足与漏洞。
例如:1.在我的程序中查询班成绩是直接显出来的,不需要选择查询方法,然而,事实上,我本可以用switch语句,case语句来编程,这样的话,在查询班成绩时,就可以通过选择查询方法来查询了!可惜没时间了,否则一定将此不足改正。
2.另一个不足之处是由于惯性,想当然的以为学号一定是数字,且通常是八位,所以在我的程序中,如果学号中有字母,程序将陷入死循环:如果学号超过八位,将提示输入有误!体会:短短的一周已经过去了,在此我将交出我一周的成果,我真是百感交错!事实上,与过去相比,我认为这短短的一周给我的感悟更为强烈。
在此,首先我要感谢老师,是老师把我带进了这一门,俗话说的好“万丈高楼平地起”,所以说,基础很重要。
而老师讲课认真,讲也很透彻,使我们能较好的理解这门课,可以跟紧课堂进度,是我们有机会能打下结实良好的基础。
而且老师在平时也鼓励我们多提问,在我们遇到问题时,富有耐心地为我们解答。
在此再次感谢老师对我们不辞操劳的讲解!谢谢!一开始,当我第一眼看到这课程设计的时候,我感到十分的“痛苦”,老实说,在还未进行编程之前,我就感到这与我们之前的编程完全不一样,与这次相比,以前的上机实验就像是小孩子玩得,一点技术含量也没有。
以前的那些实验只要看看书,花上一二个小时,基本就可以完成了,而且以前的小程序最多也不过二三十行,不像这次要百来行。
从中可见它的难度,从而联想到那些专业编程员,我更深刻感到自己的不足。
由于之前从未进行过如此大的编程,所以一开始根本没头绪,后来只好用死办法,像写作文一样,首先先在纸上列出大致的提纲,然后再一个个慢慢延伸展开,最后再输入计算机,用它来运行。
可惜不运行还好,一运行只见一片的红色错误提示。
有些错误很简单,很好改,是由于自己的粗枝大叶引起的,比如:有些字符未定义,漏了一个“;”等。
但也有些高深莫测的问题,例如:当我好不容易把程序运行出来后,却发现当我选择删除这一项时,会发现不论我选择是按学号删除还是按姓名删除都不会出现我所要删除的内容,而是直接询问确定删除请按1~~。
又或者是当我添加时是添加了三个同学的成绩,但当我查询全班成绩时,却只有两位同学的成绩。
后来在百思不得其解之下,我只好向周围同学寻求帮助,最终在大家的帮助之下才解决的,诸如此类的问题还不少!有的已经解决,但有些还未,可惜时间不够,也只能如此。
经过这一周的课程设计,我发现我懂得了很多,它使我在编程时更仔细了,也使我学会了向周围人求教,培养了我自我学习,独立思考。
并且,使我更体会到了和高中的不一样,一切靠自觉,没有人会跟在你后面一直催你,告诉你该怎样怎样。
同时,我也更加了解到自己的不足,基础严重不扎实。
虽然这门课快结束了,但我会努力在假期中把自己的基础补好,期待在下次的课程设计时能够得心应手!参考文献C语言程序设计实用教程周雅静主编清华大学出版社2009附录:程序清单附录——源程序#include "stdio.h"#include<stdlib.h>#include<string.h>struct stu{long int id;char name[10];int m1,m2,m3,score,xf; //xf为学分float avg;}f[100];int x=0,a,choose,s=0,score1=0,score2=0,score3=0,c;long int id ;float avg1,avg2,avg3;char name[10];void pt() //分割线{printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n");}void tj(){printf("你要添加几个学生成绩:");scanf("%d",&a) ;printf("请输入:学号姓名语文数学英语学分\n");a=a+s;for(;x<a;x++){scanf("%ld%s%d%d%d%d",&f[x].id,f[x].name,&f[x].m1,&f[x].m2,&f[x].m3,&f[x].xf);f[x].score=f[x].m1+f[x].m2+f[x].m3;f[x].avg=(f[x].score)/3;s++;if(f[x].m1<0||f[x].m1>100||f[x].m2<0||f[x].m2>100||f[x].m3<0||f[x].m3>100||f[x].id>99999999||f[x ].id<10000000){printf("\n输入有误\n");s--;x--;break;} //删除错误行并且退出程序}for(x=0;x<s;x++){printf("学号姓名语文数学英语平均分总分学分\n");printf("%-2ld %s %5d %5d %5d %5.1f %5d %5d\n",f[x].id,f[x].name,f[x].m1,f[x].m2,f[x].m3,f[x ].avg,f[x].score,f[x].xf);}}void del(){int y=0;pt();printf("按学号删除请按1\n按姓名删除请按2\n");scanf("%d",&choose);switch(choose){case 1:printf("\n请输入学号");scanf("%ld",&id);for(x=0;x<s;x++){if(f[x].id==id){printf("学号姓名语文数学英语平均分总分学分\n");printf("%-2ld %s %5d %5d %5d %5.1f %5d %5d\n",f[x].id,f[x].name,f[x].m1,f[x].m2,f[x].m3,f[x ].avg,f[x].score,f[x].xf);}y++;}printf("确定删除该学生成绩按0\n其他数字退出删除\n");scanf("%d",&c);if(c==0){ for(y;y<s;y++){f[y].name=f[y+1].name;f[y].id=f[y+1].id;f[y].m1=f[y+1].m1;f[y].m2=f[y+1].m2;f[y].m3=f[y+1].m3;f[y].avg=f[y+1].avg;f[y].score=f[y+1].score;}s--;printf("删除成功");break;}else printf("删除以取消"); break ;case 2:{printf("\n请输入姓名:");scanf("%s",&name);for(x=0;x<s;x++){if(strcmp(f[x].name,name)==0){printf("学号姓名语文数学英语平均分总分学分\n");printf("%-2ld %s %5d %5d %5d %5.1f %5d %5d\n",f[x].id,f[x].name,f[x].m1,f[x].m2,f[x].m3,f[x ].avg,f[x].score,f[x].xf);}y++;}printf("确定删除该学生成绩按1\n其他数字退出删除\n");scanf("%d",&c);if(c==1){ for(y;y<s;y++){f[y].name=f[y+1].name;f[y].id=f[y+1].id;f[y].m1=f[y+1].m1;f[y].m2=f[y+1].m2;f[y].m3=f[y+1].m3;f[y].avg=f[y+1].avg;f[y].score=f[y+1].score;}s--; break; }else printf("删除以取消"); break;pt();}}}void checkstudent(){pt();printf("按照学号查询请按1\n按照名字查询请按2\n");scanf("%d",&choose);switch(choose){case 1:{printf("\n请输入学号");scanf("%ld",&id);for(x=0;x<s;x++)if(f[x].id==id){printf("学号姓名语文数学英语平均分总分学分\n");printf("%-2ld %s %5d %5d %5d %5.1f %5d %5d\n",f[x].id,f[x].name,f[x].m1,f[x].m2,f[x].m3,f[x ].avg,f[x].score,f[x].xf);}break;}case 2:{printf("\n请输入姓名");scanf("%s",name);for(x=0;x<s;x++)if(strcmp(f[x].name,name)==0){printf("学号姓名语文数学英语平均分总分学分\n");printf("%-2ld %s %5d %5d %5d %5.1f %5d %5d\n",f[x].id,f[x].name,f[x].m1,f[x].m2,f[x].m3,f[x ].avg,f[x].score,f[x].xf);}break;}default: printf("输入有误");break;}pt();}void checkclass(){float avg1,avg2,avg3;pt();printf("全班的成绩是:\n");printf("学号姓名语文数学英语平均分总分学分\n");for(x=0;x<s;x++)printf("%-2ld%s\t%5d%5d%5d%5.1f%5d%5d\n",f[x].id,f[x].name,f[x].m1,f[x].m2,f[x].m3,f[x].a vg,f[x].score,f[x].xf);pt();}void main(){int a;{printf("\n\n\n");printf("\t\t**************成绩记录簿********************\n"); /*菜单选择*/ printf("\n\t\t| 1. 添加|\n");printf("\n\t\t| 2. 删除|\n");printf("\n\t\t| 3. 查学生成绩|\n");printf("\n\t\t| 4. 查班级成绩|\n");printf("\n\t\t| 5. 写入文件|\n");printf("\n\t\t| 6. 读取文件|\n");printf("\n\t\t| 0. 退出|\n");printf("\t\t*******************************************\n");printf("\t\t\tGive your Choice(0-6):");scanf("%d",&a);switch(a){case 1:tj(); break;case 2:del();break;case 3:checkstudent();break;case 4:checkclass(); break;case 0:exit(0);default: ;}}}。