c语言课程设计成绩记录簿_第1页
c语言课程设计成绩记录簿_第2页
c语言课程设计成绩记录簿_第3页
c语言课程设计成绩记录簿_第4页
c语言课程设计成绩记录簿_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、2012 2013学年第二学期课程 面向过程综合设计课 程 设 计 名 称C 语言成绩簿学生姓名 学号 专业班级 指导教师2013 年 6 月第一章 需求分析1.1 任务要求:编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:( 1)创建信息链表并以磁盘文件保存;( 2)读取磁盘文件并显示输出所有学生的成绩;( 3)按学号或姓名查询成绩;( 4)添加成绩记录;( 5)修改指定姓名或学号的学生的成绩并可存盘;( 6)显示输出60 分以下、6079、 8089、 90分以上各分数段的学生信息(可选项 )。1.2 任务问题:如何运用我们已学的c 语言知识完成要求?如何制作

2、相应界面?switch 的应用该如何实现?如何完成相应的数组或链表的实现与应用?怎样进行相应的文件的读写?1.3 任务的解决步骤:步骤:1. 建立一个主界面。2. 用 switch 语句进行分类讨论。3. 分别进入录入,查询,修改,学生分数段统计等子函数。4. 将子函数与主函数相连即可。第二章 算法设计1 、设计思想2.1 程序结构(流程图)2.2 重要的数据结构2.3 主要算法思想(文字描述)本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是链表的相关操作,包括结构体链表的创建、输入、输出、查找、修改

3、等。我设计的这个通讯录系统也初步实现了人员信息的显示、修改、查找、等必要的功能,并通过子函数与主函数相连来完成相应的功能。2设计表示int Student_Insert( ); (添加学生成绩)void edit( ); (修改)void Student_Search( )(查找);void WriteFile( ); (写入文件)void ReadFile( ); (读取文件)void Student_Select( )(分数段选择) ;void PrintMark( ); (打印学生分数)void NameChange( );(按姓名修改)void NumberChange( );(按学号

4、修改)3实现注释除了没有用链表进行实验的缺点外,基本可以实现任务要求,界面简洁,程序简单,易操作。4算法设计中一些新的想法:本程序主要包含了结构体与动态变量的相关知识;其中也多次用到了循环和判断结构; 本程序还可以通过子函数实现删除,排序等操作。用链表,指针也可以实现相应的任务要 求。第三章 用户手册3.1 使用说明主程序提供一个界面,允许用户选择。使用switch 语句,用时直接输入数字即可。增加函数,功能是插入学生成绩。使用一个无穷循环,直到录入”n”时结束。修改函数,功能是修改,分为两步,先插入学生成绩后才能进行修改。修改用strcmp函数来做。如果找到记录i 值,反之记为-1 ;修改可

5、以从i 项开始将数组的后一项的新的数值赋值给前一项。前一项自动被替换。这样完成修改。查询函数与之类似,用strcmp 函数将修改变为输出即可;求各分数段的学生的相应成绩数据时,引用if-else 语句可进行有效筛选。退出函数什么都不写,即可。所有修改,添加程序都可以用姓名,学号两种方式实现,可以实际情况实现。输入的数据应按照固定的格式和顺序“姓名 - 学号 - 成绩” ,否则会出现错误,无法输出。注:输入项:char name10 long number int score定义学生名称为字符型定义学号为长整型定义学生成绩为整形输出项:int m1,m2,m3,score,xf;定义整型3.2

6、限制条件1开始写程序时未使用链表,程序冗杂。长度较大,不灵活。2我的程序无法在文件中修改,必须在开始时修改,文件存取不灵活。3一个学生的各项数据必须按顺序输入,否则会出现错误。4. 学号必须都是数字,且是十位,不能有0。5. 读取的数据必须存在,不能读取空数据。第四章、调试及测试1. 开始2. 添加3修改4查学生成绩5.写入文本文件6.读取学生成绩7.筛选各成绩段学生对设计和编码的回顾讨论和分析:短短的俩周已经过去了,在此我将交出我一周的成果,我真是百感交错。我有许多的原来不懂的问题在编写本程序得到解决,同时本次程序编写也暴露了我的许多的问题。如:1原先写程序直接编,条理性太差。如果先做一个流

7、程图就条理很多;2学会了将文件存入和读取,并学会在文件中加入信息和修改信息;3我在查找学生姓名时遇到困难,从课本上找到了一个函数strcmp,解决了问题困难;4 .我在定义学生的学号时首先用整型%d。 发现输出与录入不同。改用长整型%ld 仍然不行,但是字符型%s却可以做到;5 .我发现多次使用结构体,子函数可以有效的缩短程序长度,方便实用。第五章 小结与过去相比,我认为这短短的两周的编程时光给我的感悟更为强烈。在此,首先我要感谢老师,是老师把我带进了这一门,俗话说的好“万丈高楼平地起” ,所以说,基础很重要。而老师讲课认真,讲也很透彻,使我们能较好的理解这门课,可以跟紧课堂进度,是我们有机会

8、能打下结实良好的基础。而且老师在平时也鼓励我们多提问,在我们遇到问题时,富有耐心地为我们解答。在此再次感谢老师对我们不辞操劳的讲解!谢谢!一开始,当我第一眼看到这课程设计的时候,我感到十分的“痛苦”,老实说,在还未进行编程之前,我就感到这与我们之前的编程完全不一样,与这次相比,以前的上机实验就像是小孩子玩得,一点技术含量也没有。以前的那些实验只要看看书,花上一二个小时,基本就可以完成了,而且以前的小程序最多也不过二三十行,不像这次要百来行。从中可见它的难度,从而联想到那些专业编程员,我更深刻感到自己的不足。由于之前从未进行过如此大的编程,所以一开始根本没头绪,后来只好用死办法,像写作文一样,首

9、先先在纸上列出大致的提纲,然后再一个个慢慢延伸展开,最后再输入计算机, 用它来运行。可惜不运行还好,一运行只见一片的红色错误提示。有些错误很简单,很好改,是由于自己的粗枝大叶引起的,比如:有些字符未定义,漏了一个“; ”等。但也有些高深莫测的问题,例如:当我添加时是添加了三个同学的成绩,但当我查询全班成绩时,却只有两位同学的成绩。后来在百思不得其解之下,我只好向周围同学寻求帮助,最终在大家的帮助之下才解决的,诸如此类的问题还不少!有的已经解决,但有些还未,可惜时间不够,也只能如此。经过这两周的课程设计,我发现我懂得了很多,它使我在编程时更仔细了,也使我学会了向周围人求教,培养了我自我学习,独立

10、思考。并且,使我更体会到了和高中的不一样,一切靠自觉,没有人会跟在你后面一直催你,告诉你该怎样怎样。同时,我也更加了解到自己的不足,基础严重不扎实。虽然这门课快结束了,但我会努力在假期中把自己的基础补好,期待在下次的课程设计时能够得心应手!第六章 参考文献:1 黄明等编著C语言课程设计北京:电子工业出版社2 郭翠英编著C语言课程设计案例精编北京:中国水利水电出版社3 宁正元数据结构(c 语言) 南京:东南大学出版社。2000 年 6月第 1 版4 严蔚敏等数据结构(c 语言版) 北京:清华大学出版社,1997 年 4 月第 15 谭浩强编著C程序设计题解与上机指导(第 3版 ) 北京:清华大学

11、出版社6 谭浩强编著C程序设计(第 3版 ) 北京:清华大学出版社( 附录)原代码解析#include "stdio.h"#include <stdlib.h>#include <string.h>#define MAX 1000struct Studentchar Name100;char Number100;int LessonCount;int LessonMark;struct Student SMAX;int StudentCount = 0;void PrintInterface();int Student_Insert();void e

12、dit();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(&

13、quot;n| 1 、添加|n");printf("n| 2 、修改|n");printf("n| 3、查学生成绩|n");printf("n| 4、写入文本文件|n");printf("n| 5 、读取文本文件|n");|n");|n");printf("n| 6、筛选各分数段学生printf("n| 0 、退出");printf("n printf("n 选择操作:");scanf("%d",&

14、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;ReadFile();break;case 5:Student_Select();break;case 0:exit(1);break;default:printf(" 无此功能,请重新选择,按回车确定n&qu

15、ot;);int Student_Insert()int i,n;printf("n 请输入所添加的学生人数:");scanf("%d", &n);if (StudentCount + n >= MAX)for (i = StudentCount; i < StudentCount + n; i+)printf("nt 第 %d 个学生:n", i - StudentCount + 1);printf("nt 学生学号:");scanf("%s", &Si.Numbe

16、r);if(strlen(Si.Number)!=10)printf(" 输入错误,请重新输入");return 0;printf("nt 学生姓名:");scanf("%s", Si.Name);printf("nttc 课程成绩:");scanf("%d", &Si.LessonMark);if(Si.LessonMark<0 | Si.LessonMark>100)printf(" 输入错误,请重新输入!");return 0;StudentCoun

17、t += 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 y100

18、;char a100;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(Si.Name,a)Si.Number,n");printf("n 学 号 : %st 姓 名 : %sn",Si.Name);prin

19、tf("c 课程成绩 tn");printf("printf("%d",Si.LessonMark);printf("nn"); else printf("n 学号: ");getchar();gets(y);for (i = 0; i < StudentCount; i+)if (strcmp(Si.Number,y)=0)printf("n 学 号 : %st 姓 名 : %sn", Si.Number, Si.Name);printf("c 课程成绩 tn&quo

20、t;);printf("n");printf("%d",Si.LessonMark);printf("nn");break;printf(" 查找完毕.回车继续n");getchar();elseprintf(" 选择错误.回车继续n");getchar();return;void WriteFile()FILE *fp;int i;char a100;printf("n 请 输 入 写 入 的 文 件 地 址 : nn 地 址 输 入 格 式 : 例 如 d:Student.txt:

21、 ");scanf("%s",&a);printf("n 写入中 n");if (fp = fopen(a,"w")fprintf(fp,"%dn",StudentCount);for (i = 0; i < StudentCount; i+)fprintf(fp,"%st%st%dn",Si.Number,Si.Name,Si.LessonMark);printf("n 写入完成.回车继续n");fclose(fp);elseprintf("

22、;n 写入失败.回车继续n");getchar();void ReadFile()FILE *fp;int i;char a100;printf("n 请 输 入 读 取 的 文 件 地 址 : nn 地 址 输 入 格 式 : 例 如 d:student.txt: ");scanf("%s",&a);printf("n 读取中 n");if (fp = fopen(a,"r+")fscanf(fp,"%d",&StudentCount);for (i = 0; !fe

23、of(fp); i+)fscanf(fp,"%s%s%d",&Si.Number,&Si.Name,&Si.LessonMark);PrintMark();printf("n 读取成功.回车继续n");fclose(fp);elseprintf("n 读取失败.回车继续n");getchar();void Student_Select()int j;for(j=0;j<StudentCount;j+)if(Sj.LessonMark>=100)printf(" 错误信息 !");

24、if(Sj.LessonMark>=90)printf("90 分以上的学生成绩信息:");printf("%st%st%dn",Sj.Number, Sj.Name,Sj.LessonMark);else if(Sj.LessonMark<90)|(Sj.LessonMark>=80)printf("80 分 89分的学生成绩信息:");printf("%st%st%dn",Sj.Number,Sj.Name,Sj.LessonMark);else if(Sj.LessonMark<80)

25、|(Sj.LessonMark>=70)printf("70 分 79分的学生成绩信息:");printf("%st%st%dn",Sj.Number, Sj.Name,Sj.LessonMark);else if(Sj.LessonMark<70)|(Sj.LessonMark>=60)printf("60 分 69分的学生成绩信息:");printf("%st%st%dn",Sj.Number, Sj.Name,Sj.LessonMark);elseprintf("60 分以下的学生

26、成绩信息:");printf("%st%st%dn",Sj.Number, Sj.Name,Sj.LessonMark);void PrintMark()int i;for(i=0;i<StudentCount; i+)printf("%st%st%dn",Si.Number, Si.Name,Si.LessonMark);void NameChange()char name60;int i=0,j=0;printf(" 请输入要修改的学生姓名:");scanf("%s",&name);for(i=0;i<StudentCount;i+)if(strcmp(name,Si.Name)=0)j=i;

温馨提示

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

最新文档

评论

0/150

提交评论