1、C语言程序设计报告学生成绩记录簿docx上海应用技术学院课 程 设 计2011 2012 学年第 2 学期设计题目 成绩记录簿院(系)计算机科学与信息工程专业网络工程班级学号 15学生姓名xx设计时间指导教师xxx提交日期1.概述题目程序简述程序性能2课题分析程序系统的结构结构流程图功能性能输入输出项信息3功能模块说明流程逻辑算法4程序测试,运行结果及说明5课程设计总结6附录(参考文献,原代码解析,限制条件,程序测试)61 参考文献62 原代码解析限制条件1.概述题目成绩记录簿程序描述本程序是非数值计算型算法设计, 我设计出了通讯录管理系统的基本功能, 并设计了简单的界面。 本程序主要考察对自
2、定义函数的熟悉程度, 本程序主要使用的是链表的相关操作,包括结构体链表的创建、输入、输出、查找、删除等。我设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。1.建立一个主界面2.用 switch 语句进行分类讨论3.分别进入录入,查询,删除,求平均值等子函数。4.将子函数与主函数相连即可。程序性能该程序可以建立学生的成绩记录。 可以方便老师和同学方便的查阅成绩;这个程序有录入和删除的功能;还可以求出平均成绩,并排序课题分析程序系统的结构主函数添加成绩 求平均值 删除成绩 查询 按平均值排序退出程序流程图课程编号添加成绩 查询成绩添添添添查查加加加加询询学学课学
3、学班生生程生生级学姓编成成成号名号绩绩绩查询学生成绩 查询班级成绩课程功能学姓编号名号查查询询成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分;输入信息时要检查数据项学号、课程编号、成绩、学分的合法性,学号:8位数字;课程编号:5 位数字;成绩: 0 100 之间的整数,学分:1 5 之间的实型数。添加成绩: 需要输入学生的学号或姓名、课程编号及成绩, 如已有该门课程成绩给出提示;查询(班级或个人)成绩:查询个人成绩: 以学号或姓名作为关键字, 可查询一个学生的所有成绩, 和已完成的总学分。查询班级成绩: 以课程编号为关键字,成绩表后面要统计平均分、
4、及格率及全班同学不同课程在不同分数段分布的人数及百分比。拓展功能:a)程序启动时先从文件读入数据,如果文件中没有数据则给出提示;b)每次修改的数据写入文件性能方便 ,灵活,直观,易用输入输出项信息输入项:char name10设置学生名称long int id定义学号为长整型float avg平均分为实数输出项int m1,m2,m3,score,xf; 定义整型float avg; 以浮点型输出平均分3功能模块说明流程逻辑主程序提供一个界面,允许用户选择。使用 switch 语句,用时直接输入数字即可。增加函数,功能是插入学生成绩。使用一个无穷循环,直到录入” n”时结束。删除函数,功能是删
5、除,分为两步,先找后删。找,用 strcmp 函数 来做如果找到记录 i 值,反之记为 -1;删除可以从 i 项开始将数组的后一项赋值给前一项。前一项自动被删掉。这样完成删除。查询函数与之类似,将删除改为输出即可;求平均值函数与查询类似只是输出时只输出平均值而已。按平均值排序只要加一个排序函数即可。退出函数什么都不写,即可。开始输入口令主菜单选择的序号是否符合需求Yes添添删查查写加加除询询入学班成学班文生级绩生级件成成成成绩绩绩绩No读 退取 出文 系件 统32 算法本程序参考了冒泡法其代码结构为:For(i=0;ik;i+)For(j=i;jb)其中也多次用到了循环和判断结构运行结果及说明
6、1开始时2添加3删除4查询学生成绩( 1)按名字查询( 2)按学号查询4查询班级成绩5写入文本文件strcmp,解决了问题6读取文本文件课程设计总结短短的俩周已经过去了,在此我将交出我一周的成果,我真是百感交错原先写程序直接编,条理性太差。如果先做一个流程图就条理很多。学会了将文件存入和读取,并学会在文件中加入信息和删除信息。我在查找学生姓名时遇到困难,从课本上找到了一个函数困难:我在定义学生的学号时首先用整型 %d。发现输出与录入不同。改用长整型 %ld 仍然不行。但是字符型 %s却可以做到。!事实上,与过去相比,我认为这短短的一周给我的感悟更为强烈。在此,首先我要感谢 老师,是 老师把我带
7、进了这一门,俗话说的好“万丈高楼平地起”,所以说,基础很重要。而 老师讲课认真,讲也很透彻,使我们能较好的理解这门课, 可以跟紧课堂进度, 是我们有机会能打下结实良好的基础。而且 老师在平时也鼓励我们多提问, 在我们遇到问题时 ,富有耐心地为我们解答。在此再次感谢老师对我们不辞操劳的讲解!谢谢!一开始,当我第一眼看到这课程设计的时候,我感到十分的“痛苦” ,老实说,在还未进行编程之前,我就感到这与我们之前的编程完全不一样,与这次相比,以前的上机实验就像是小孩子玩得, 一点技术含量也没有。 以前的那些实验只要看看书,花上一二个小时, 基本就可以完成了, 而且以前的小程序最多也不过二三十行,不像这
8、次要百来行。从中可见它的难度,从而联想到那些专业编程员,我更深刻感到自己的不足。由于之前从未进行过如此大的编程, 所以一开始根本没头绪, 后来只好用死办法,像写作文一样, 首先先在纸上列出大致的提纲, 然后再一个个慢慢延伸展开, 最后再输入计算机, 用它来运行。 可惜不运行还好, 一运行只见一片的红色错误提示。有些错误很简单,很好改,是由于自己的粗枝大叶引起的,比如:有些字符未定义,漏了一个“;”等。但也有些高深莫测的问题,例如:当我好不容易把程序运行出来后, 却发现当我选择删除这一项时, 会发现不论我选择是按学号删除还是按姓名删除都不会出现我所要删除的内容,而是直接询问确定删除请按1。又或者
9、是当我添加时是添加了三个同学的成绩,但当我查询全班成绩时,却只有两位同学的成绩。 后来在百思不得其解之下, 我只好向周围同学寻求帮助,最终在大家的帮助之下才解决的, 诸如此类的问题还不少! 有的已经解决, 但有些还未,可惜时间不够,也只能如此。经过这一周的课程设计, 我发现我懂得了很多, 它使我在编程时更仔细了, 也使我学会了向周围人求教,培养了我自我学习,独立思考。并且 ,使我更体会到了和高中的不一样, 一切靠自觉, 没有人会跟在你后面一直催你, 告诉你该怎样怎样。同时,我也更加了解到自己的不足,基础严重不扎实。虽然这门课快结束了,但我会努力在假期中把自己的基础补好, 期待在下次的课程设计时
10、能够得心应手!6附录(参考文献,原代码解析,限制条件,程序测试)参考文献:1谭浩强 . C 程序设计 (第三版 ) . 北京:清华大学出版社,20052谭浩强 . C 程序设计题解与上机指导 (第三版 ) . 北京:清华大学出版社,20053 Herbert Schildt. C 语言大全(第四版)4Samuel ,Guy . C 语言参考手册 (第 5. 北京:电子工业出版社 , 2004版 ). 北京:机械工业出版社 ,20035张建勋 . C 语言程序设计教程 . 北京:清华大学出版社,6 崔武子 . C 程序设计教程 (第 2 版 ). 北京:清华大学出版社, (第 2 版 )7 语言
11、程序设计:现代方法(第 2 版)北京:人民邮电出版社, 2010原代码解析:#include #include #include #define MAX 1000struct Lessonchar LessonName100;char LessonNumber100;int LessonMark;float LessonCredit;struct Studentchar Name100;char Number100;int LessonCount;struct Lesson L100;struct Student SMAX;int StudentCount = 0;void PrintInte
12、rface();int Student_Insert();int Student_Delete();void Student_Select();void Class_Select();void WriteFile();void ReadFile();int main()int n;PrintInterface();scanf(%d, &n);void PrintInterface()int n;while (1)printf(n - );printf(n| 1 、添加printf(n| 2 、删除printf(n| 3 、查学生成绩printf(n| 4 、查班成绩表printf(n| 5 、
13、写入文本文件printf(n| 6 、读取文本文件printf(n| 0 、退出printf(n - );printf(n 选择操作 :);scanf(%d,&n);switch(n)case 1:if (Student_Insert()printf(n 添加成功elseprintf(n 添加失败break;|n);|n);|n);|n);|n);|n);|n);.回车继续 n);.回车继续 n);case 2:Student_Delete();break;case 3:Student_Select();break;case 4:Class_Select();break;case 5:Writ
14、eFile();break;case 6:ReadFile();break;case 0:exit(1);break;default:printf( 无此功能 ,请重新选择 ,按回车确定 n);return 0;int Student_Insert()int i,j,n;printf(n 请输入所添加的学生人数 :);scanf(%d, &n);if (StudentCount + n = MAX)return 0;for (i = StudentCount; i StudentCount + n; +i)printf(nt 第 %d 个学生: n, i - StudentCount + 1)
15、;printf(nt 学生学号: );scanf(%s, &Si.Number);if(strlen(Si.Number)!=8)printf( 输入错误 ,请重新输入 );return 0;printf(nt 学生姓名: );scanf(%s, Si.Name);printf(nt 该学生所修课程数: );scanf(%d, &Si.LessonCount);for (j = 0; j Si.LessonCount; +j)printf(nt 第 %d 门课: n, j + 1);printf(ntt 课程编号: );scanf(%s, Si.Lj.LessonNumber);if(strl
16、en(Si.Lj.LessonNumber)!=5)printf( 输入错误 ,请重新输入 !);return 0;printf(ntt 课程名称: );scanf(%s,Si.Lj.LessonName);printf(ntt 课程成绩: );scanf(%d, &Si.Lj.LessonMark);if(Si.Lj.LessonMark100)printf( 输入错误 ,请重新输入 !);return 0;printf(ntt 课程学分: );scanf(%f, &Si.Lj.LessonCredit);if(Si.Lj.LessonCredit5)printf( 输入错误 ,请重新输入
17、!);return 0;if (Si.Lj.LessonMark 60)Si.Lj.LessonCredit = 0;StudentCount += n ;return 1;int Student_Delete()char a100;char b100;int i, j;printf(n 删除学生: n);printf(n 学生姓名: );scanf(%s,a);printf(n 学生学号: );scanf(%s,b);if(strlen(b)!=8)printf( 输入错误请重新输入 );return 0;for (i = 0; i StudentCount; i+)if (0=strcmp
18、(Si.Name, a) & 0=strcmp(Si.Number, b)printf(n 找到,删除 n);for (j = i + 1; j StudentCount)printf(n 未找到该学生 nn);return 0;elseStudentCount-;return 1;void Student_Select()int x;char y100;char a100;int i, j;printf(n 输入所查学生信息( 1.姓名 2.学号)选择: ); scanf(%d, &x);if (x = 1 | x = 2)if (x = 1)printf(n 姓名: );fflush(st
19、din);gets(a);for (i = 0; i StudentCount; i+)if (0=strcmp(Si.Name,a)printf(n 学号: %st 姓名: %sn, Si.Number, Si.Name);printf(n 课程编号 t 课程名称 t 课程成绩 t 课程学分 n);printf(-n);for (j = 0; j Si.LessonCount; j+)printf(%stt%stt%dtt%fn, Si.Lj.LessonNumber,Si.Lj.LessonName, Si.Lj.LessonMark,Si.Lj.LessonCredit);printf(
20、-n);printf(nn);elseprintf(n 学号: );fflush(stdin);gets(y);for (i = 0; i StudentCount; i+)if (strcmp(Si.Number,y)=0)printf(n 学号: %st 姓名: %sn, Si.Number, Si.Name);printf(n 课程编号 t 课程名称 t 课程成绩 t 课程学分 n);printf(-n);for (j = 0; j Si.LessonCount; j+)printf(%stt%stt%dtt%fn,Si.Lj.LessonNumber,Si.Lj.LessonName,
21、Si.Lj.LessonMark,Si.Lj.LessonCredit);printf(-n);printf(nn);break;printf( 查找完毕 .回车继续 n);getchar();elseprintf( 选择错误 .回车继续 n);getchar();return;void Class_Select()char a100;double x=0,y=0,z=0;int i, j;printf(n 请输入课程编号: );fflush(stdin);scanf(%s,a);printf( 学号 t 姓名 t 课程名称 t 课程成绩 tprintf(-n);for (i = 0; i S
22、tudentCount; i+)课程学分n);for (j = 0; j = 60)y+;break;printf(n 平均分: %ft 及格率: %f%nn, z/x, y/x*100);printf(n 查找完毕 .回车继续 n);getchar();void WriteFile()FILE *fp;int i, j;char a100;printf(n请输入写入的文件地址:nn地址输入格式:例如: );scanf(%s,&a);printf(n 写入中 .n);if (fp = fopen(a,w)fprintf(fp,%dn,StudentCount);for (i = 0; i St
23、udentCount; i+)fprintf(fp,%st%st%dn,Si.Number, Si.Name,Si.LessonCount); for (j = 0; j Si.LessonCount; j+)fprintf(fp,%st%st%dt%fn, Si.Lj.LessonNumber,Si.Lj.LessonName, Si.Lj.LessonMark,Si.Lj.LessonCredit);printf(n 写入完成 .回车继续 n);fclose(fp);elseprintf(n写入失败.回车继续n);getchar();void ReadFile()FILE *fp;int i, j;char a100;printf(n 请输入读取的文件地址:nn地址输入格式:例如
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1