《成绩记录材料簿C语言知识版.doc》由会员分享,可在线阅读,更多相关《成绩记录材料簿C语言知识版.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、+*上海应用技术学院课程设计20132014学年第二学期设计题目 成绩记录簿 院 (系) 工程创新学院 专 业 电气工程及其自动化 班 级 131032Y1 学 号 1310300235 学生姓名 聂 震 设计时间 2014.06.30 -2014.07.04 指导教师 朱 迅 提交日期 2014.07.04 一. 课程设计目的本课程设计是提高学生程序设计能力的重要实践性环节之一,是在学生学习完程序设计基础(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握;2. 掌握C语言编程和程序调试的基本技能;3. 利用C语言进行基本的软件
2、设计;4. 初步掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力。二. 课程设计要求1. 分析课程设计题目的要求;2. 写出详细设计说明;3. 编写程序代码,调试程序使其能正确运行;4. 设计完成的软件要便于操作和使用,有整齐、美观的使用界面;5. 设计完成后提交课程设计报告(按学校要求装订)和源代码文件的电子文档。三 . 题目三 成绩记录簿1. 设计要求:成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分。在程序中可以输入新的成绩记录,可以按学号或姓名查询一个学生的所有成绩,和已完成的总学分。也可以按课程编号查出一个班的成绩表,班
3、成绩表后面要统计平均分,和及格率。程序的主界面如下: 成绩记录簿1. 添加2. 删除3. 查学生成绩4. 查班成绩表0. 退出2. 提高水平在程序中增加将数据写入文本文件和从文件中读入数据的功能,文件名由用户输入。3. 提示在没有使用文件时,数据可以保存在一个大的数组中,要注意的数据项的类型。四. 设计说明F.1程序系统的结构用一系列图表列出本程序系统内的每个程序(包括每个模块和子程序)的名称、标识符。主函数删除成绩添加成绩查询学生查询班级查询按学号删除按姓名删除按学号查找按姓名查找课程编号输入姓名,学号等信息删除成功平均分,及格率,学生信息学生相关信息输出学生信息输出所查询信息输出剩余的学生
4、信息退出F.2程序1(标识符)设计说明 F.2.1程序描述 记录一些学生的学习情况,并保存下来。能保存,删除,查询学生的成绩,可以按班级查询一门学科的学习状况等。 F.2.2功能 1. 添加:本程序可以一次输入多个学生的成绩。开始时,输入计划添加学生的个数,然后依次输入各个学生的基本信息,程序自动记录,输出。2. 删除:删除分为按姓名和学号查找删除两种方法删除,开始时,选择删除方法,根据提示输入信息,系统自动查找,删除,用后一个来覆盖前一个原理自动操作,输出剩余信息,并保存。3 . 查询:查询学生成绩可以用3种方法来进行。1.学号2.姓名3.课程代号。学生可按学号和姓名查询,按提示输入相关信息
5、查询。班级查询,可输入课程代号,可得班平均分以及班级及格率。 F.2.3性能所有成绩都以百分制计分,学分精度是小数点后一位,学号和课程序号自己定义。操作灵活,没有太大的时间要求 F.2.4输人项 输入时,学号,成绩,课程编号是整数型,学分是小数(浮点型),姓名和课程名称是字符型,数据没有范围限制,比较自由,没有数量限制。用键盘输入,写入文件my.txt F. 2. 5输出项 输出时,学号,成绩,课程编号是整数型,学分是小数(浮点型,保留一位小数),姓名和课程名称是字符型,数据没有范围限制,比较自由,没有数量限制。显示器输出,从文件my.txt读取 F.2.6算法 计算平均值时,先将所有数据循环
6、相加,再除以总人数。计算及格率时, 先计算有多少超过60分的人,累加,再除以总人数。 F.2.7流程逻辑 见F.1程序系统的结构流程图 F.2.8接口开始提示输入放入结构体数组中写入文件结束1 添加开始提示学号调出学生信息删除结束姓名输入学号输入姓名 2 删除开始提示学号调出学生信息删除结束姓名输入学号输入姓名3.学生查找开始输入查询的课程序号输出该班级所有成绩,学分 结束4.班级查找F.2.9存储分配 本程序中结构体最大容量是10000人,结构体中,姓名分配了10个数组空间,课程名称分配了10 个数组空间。 F.2.10注释设计 说明准备在本程序中安排的注释,如: a. 加在模块首部的注释;
7、 b加在各分枝点处的注释; 对各变量的功能、范围、缺省条件等所加的注释; d对使用的逻辑所加的注释等等。 F.2.11限制条件 基本没有限制条件 F.2.12测试计划 初始界面添加学生输入添加选项1我添加了三个学生,学号分别是1,2,3,其他信息 上图,添加完成。按学号删除输入删除选项2 ,按提示选按1.学号查找,输入学号1,查找成功,自动删除,显示剩余信息按姓名删除输入删除选项2 ,按提示选按2.按姓名查找.,输入姓名fg,查找成功,自动删除,显示剩余信息按学号查找输入查找选项3,按提示选1.按学号查找,输入学号3,自动查找并显示按姓名查找输入查找选项3,按提示选2.按姓名查找,输入姓名hj
8、,自动查找并显示按课程序号班级查找输入查找选项4,根据提示输入课程序号,输入124,自动查找并显示,同时计算平均分和及格率并显示。退出按退出选项0 退出程序。最后写入的文本文件从文件中读取的数据输入查找选项3,输入学号3,自动从文件中读取数据并显示。五源代码#include #include #includestruct stu int id; char name10; 定义结构体 int subnum; char subname10;int score; float credit;f10000;int x=0,n,choose,s=0,score=0,c; long int id,subnu
9、m; 定义变量char name10,subname10;void add() 定义“添加”函数printf(你要添加几个学生的成绩); scanf(%d,&n); 对添加的几个学生n赋值 printf(学号 姓名 课程编号 课程名称 成绩 学分n); n=n+s; 计算共有几个学生 for (x=0;xn;x+) 在0n之间循环 scanf (%ld%s%ld%s%d%f,&fx.id,&fx.name,&fx.subnum,&fx.subname,&fx.score,&fx.credit); 对结构体中学生信息赋值 s+; 循环一次学生人数增加一 for (x=0;xs;x+) 在0s之间
10、循环 printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit); 输出学生信息 FILE *fp;fp=fopen(my.txt,wb);写入文件my.txtfor(x=0;xs;x+)fwrite(&fx,sizeof(fx),1,fp);fclose(fp); void cut() 定义“删除”函数int y=0;printf(1.按学号查找;2.按姓名查找n);scanf (%d,&choose); 为选择函数
11、赋值switch(choose) case 1:printf(输入学号:n);scanf (%ld,&id); 输入要查找的学号for (x=0;xs;x+)if (fx.id=id) 判断数据里的学号与要查询的是否一致 printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit); printf(nn);y+;for (y=0;ys;y+)strcpy(fy.name,fy+1.name);fy.id=fy+1.id;
12、把后一项的数据赋给前一项fy.subnum=fy+1.subnum;strcpy(fy.subname,fy+1.subname);fy.score=fy+1.score;fy.credit=fy+1.credit;s-;for (x=0;xs;x+)printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit); 输出删除后的数据printf(删除成功n);break;case 2:printf (输入姓名:);scan
13、f (%s,&name); 输入要查询的姓名for (x=0;xs;x+) if (strcmp(fx.name,name)=0) 判断数据里的姓名与要查询的是否一致 printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit); printf(nn); y+;for (y=0;ys;y+)strcpy(fy.name,fy+1.name);fy.id=fy+1.id;把后一项的数据赋给前一项fy.subnum=fy+1
14、.subnum;strcpy(fy.subname,fy+1.subname);fy.score=fy+1.score;fy.credit=fy+1.credit;s-;for (x=0;xs;x+)printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit);printf(删除成功n);break;FILE *fp;写入文件my.txtfp=fopen(my.txt,wb);for(x=0;xs;x+)fwrite(&
15、fx,sizeof(fx),1,fp);fclose(fp);void student()printf (1.按学号查找。2.按姓名查找。);scanf (%d,&choose); 给查找条件赋值switch(choose)case 1:printf(输入学号:n);scanf (%ld,&id); 输入学号for (x=0;xs;x+) if (fx.id=id) 判断数据里的学号与要查询的是否一致printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname
16、,fx.score,fx.credit); 输出查询结果 break; case 2:printf (输入姓名:);scanf (%s,&name); 输入姓名for (x=0;xs;x+) if (strcmp(fx.name,name)=0) 判断数据里的学号与要查询的是否一致 printf(学号t姓名t课程编号t课程名称t成绩t学分n);printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit); 输出查询结果 break;void classes()int sum=0,b=
17、0;float ave,c;printf (输入课程序号:n);scanf (%ld,&subnum); 输入课程序号for (x=0;xs;x+)if(fx.subnum=subnum) 判断数据里课程序号和与查询序号是否一致printf(学号t姓名t课程编号t课程名称t成绩t学分n); printf(%ldt%st%ldtt%stt%dt%.0fn,fx.id,fx.name,fx.subnum,fx.subname,fx.score,fx.credit); 输出查询结果sum+=fx.score; 计算总成绩ave=(float)sum/s; 计算平均成绩printf (平均分:%.3f
18、n,ave); for (x=0;x=60) 判断成绩是否超过60b+; 成绩超过60,人数加一c=(float)b/s; 计算及格率printf(及格率:%.3f,c);int main() 主函数unsigned a;FILE *fp;fp=fopen(my.txt,rb);fread(&fs,sizeof(fs),1,fp);读取文本my.txt中的数据 while(!feof(fp)s+;fread(&fs,sizeof(fs),1,fp);fclose(fp);while(1) printf(nnn);printf( 成绩记录簿n);printf( 1: 添 加n);输出目录prin
19、tf( 2: 删 除n);printf( 3: 查学生成绩n);printf( 4: 查班成绩表n);printf( 0: 退 出n);printf( 请输入数字选择: );scanf(%d,&a); switch(a) case 1: add(); break; case 2: cut();break; 目录对应的结构 case 3:student();break; case 4:classes(); break; case 0:exit(0); default: ; 六. 使用说明使用时,目录会自动显示成绩记录簿1. 添加2. 删除3. 查学生成绩4. 查班成绩表0. 退出选择1 时,添加
20、学生,进入后会提示用户输入要添加学生的数目,输入后,依次输入学生信息。选择2 时,删除学生,进入后会提示用户输入选择条件(1. 按学号查找 2. 按姓名查找),选1 时,提示输入学号,系统自动查找并删除,自动输出其余学生信息;选2 时,提示输入姓名,系统自动查找并删除,自动输出其余学生信息。选择3 时,查询学生成绩,进入后提示用户输入选择条件(1. 按学号查找 2. 按姓名查找),选1 时 ,提示输入学号,系统自动查找并输出学生信息;选2 时,提示输入姓名,系统自动查找并输出学生信息。选择4 时,查班成绩表,进入后提示用户输入课程序号,输入后系统自动查找并输出全班先关课程学生信息,然后计算平均
21、值及及格率并输出。选择0 时,退出程序。七. 课程设计心得与体会;短短的一周已经过去了,在此我将交出我一周的成果,我真是百感交错:1 原先写程序直接编,条理性太差。如果先做一个流程图就条理很多。2 学会了将文件存入和读取,并学会在文件中加入信息和删除信息。3 我在查找学生姓名时遇到困难,从课本上找到了一个函数strcmp,解决了问题在编写程序的过程中,虽然遇到了这样那样的困难,但在老师,同学的帮助下,总算克服了各种苦难完成了这项任务。这次编写程序我也学到了很多,自主学习,查阅资料,对自己的学习生活很有帮助。八. 参考文献 1谭浩强C程序设计(第三版)北京:清华大学出版社,2005 2谭浩强C程序设计题解与上机指导(第三版)北京:清华大学出版社,20053 Herbert SchildtC语言大全(第四版)北京:电子工业出版社, 20044Samuel P.Harbison ,Guy L.SteeleC语言参考手册(第5版)北京:机械工业出版社,20035P.J.Deitel H.M.Deitel. C大学教程. 北京: 电子工业出版社, 20086程序设计语言课程设计指导书
限制150内