版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程设计名称:C程序设计系另学生姓名:班级:学号:成绩:指导教师: 开课时 间:2011-2012学年二学期第一章菜单设计 1.1 设计题目及要求 11.2 设计思路 31. 3流程图 41. 4具体实现 41.5程序运行截图 7第二章使用数组合指针统计成绩 82.1 设计题目及要求 82.2 设计思路 82.3 流程图 92.4 具体实现 92.5 程序运行截图 11第三章学生成绩管理系统 123.1 设计题目及要求 123.2 设计思路 133.3 流程图 143.4 具体实现 143.5 程序运行截图 20小结 .23参考文献 24第一章 菜单设计1. 1 设计题目及要求一菜
2、单容:程序运行后,给出 5 个菜单项的容和输入提示:1 FindNum2 FindRoot3 Bear4 Diamond5 Goodbye二、设计要求使用数字 1-5 来选择菜单项,其它输入则不起作用:三、增加菜单项的处理功能FindNum 功能:一只老鼠咬坏了账本,公式中符号()代表是被老鼠咬掉的地方。 要想恢复下面的等式,应在()中填上哪个相同的数字FindRoot这里要求编制一个求方程ax2+bx+c=0的根程序Bear 本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一 天吃了一半, 又拿走了一个回去喂狗熊。 第二天又去吃了剩下的一半, 走时仍然带 一个回去喂狗熊。以后
3、每天都吃前一天的一半,拿走一个。到第十天时,地里只剩 下一个玉米。求地里一共有多少玉米DiamondGoodbye!1. 2 设计思路菜单是应用程序的界面, 本题的任务是设计一个比较实用的菜单, 通过菜单选择不同的 功能。 设计分为两步: 首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。具体方法:首先编写一个菜单程序, 输入 1-6 以进入相应选择项, 从程序测试结构可知, 当选择相 应选择项时候,其输出信息为:FindNum、FindRoot、Bear、Diamond、Goodbye!(1) 使用 switch 语句实现功能选择(2) 应该设计一个函数用来输出提示
4、信息和处理输入,这个函数应该返回一个数值, 以便提供给 switch 语句使用1. 3流程图1. 4具体实现程序的源代码如下:#i nclude #i nclude #in elude #in elude void Fin dNum (); void Fin dRoot(); void Bear();void Diam on d(); int mai n ()int a; printf(” 菜单容:n”); printf(1.FindNum n); prin tf(2.Fi ndRoot n);printf(3.Bear n); printf(4.Diamond n); printf(5.Go
5、odbye n);printf(n);printf(*n );/ 打印的界面printf( 请输入相应选择项: n);while(1)scanf(%d,&a);switch(a)case 1:FindNum();break;case 2:FindRoot();break;case 3:Bear();break;case 4:Diamond();break;case 5:printf(Goodbyen);exit(0);default:printf( 您输入有误,请重新输入 n); break; return 0;void FindNum ()/ FindNum 函数int i,j;printf
6、( 一只老鼠咬坏了账本 n);printf( 公式中符号()代表是被老鼠咬掉的地方 n);printf( 即表示为 3()*6237=()3*3564n); for(i=0;i10;i+)for(j=0;j0)x1=(-b+sqrt(delta)/(2*a); x2=(-b-sqrt(delta)/(2*a);printf( 方程的根为 x1=%4f,x2=%4fnn,x1,x2);else if(delta=0) x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a);printf( 方程的根为 x1=x2=%4fnn,x1,x2); elsepr
7、intf( 方程无根 nn);void Bear() / Bear 函数int day, x1;printf( 狗熊到玉米地吃了玉米 );printf( 第一天吃了一半又拿走一个回去喂小狗熊。 n);printf( 第二天又去吃了剩下的一半,走是任然带一个回去。 n); printf( 以后每天都吃前一天剩下的一半,拿走一个。 n);n);printf( 到了第十天时,地里只剩下一个玉米。求地里一共有多少玉米? day=10;x1=1;while (day0) x1=(x1+1)*2; day-;printf( 玉米总数 =%dnn,x1);void Diamond() / Diamond 函
8、数int m,i,j,t,n;printf( 请输入您要打印的钻石列数 (奇数 )n); scanf(%d,&m);n=(m+1)/2;for (i=1;i=n;i+) for(j=1;j=n-i;j+) printf( );for (t=1;t=2*i-1;t+)printf(*);printf(n); for(i=1;i=(m-1)/2;i+)for(t=1;t=i;t+) printf( );t=1;for(j=1;j1JT肃 乘只 is合乘 i 二亠 Id * 0 吃吋即 都天=3 天枫 W-怎 后条 决判-第二章 使用数组合指针统计成绩2. 1 设计题目及要求设计题目:假设给定班级各
9、科考试平均成绩的原始资料如下:数学: 75物理: 80外语: 83政治: 85体育 :86人数: 30要求统计出全班学期总平均成绩以及得分最低的科目和该科目的成绩。要求的输出结果如 下:原始信息如下:数学: 75物理: 80外语: 83政治: 85体育 :86人数: 30平均成绩: 0最低分数科目的成绩: 0最低分数的科目: 全班各科平均成绩如下:数学: 75物理: 80外语: 83政治: 85体育 :86人数: 30统计结果如下:人数: 30平均成绩: 81最低分数科目的成绩: 75最低分数的科目:数学2. 2 设计思路将数组 a 的容存入到分配的存中,使用指针实现对存容的存取和计算。为字符
10、分配存,并将字符数组的容也存入所分配的存中,使用这些指针实现设计要求。实现本设计功能的方法很多,对存放原始数据的要求如下:使用整形数组a存放数学、物理、外语、政治、体育、人数、平均成绩、最低分科 目的成绩使用字符串数组name存放数学、物理、外语、政治、体育、最低分数的科目使用字符串数组 MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数 的科目。使用字符指针指向字符数组(这个题目的要求超出一般的教材,但对理解指针很有用途。)2. 3流程图2. 4具体实现程序源代码如下:int subject(i nt *c,i nt n); int lowest(int *b);int aver
11、age( int *b);#in clude void mai n ()int i,b;int a9=75,80,83,85,86,30 ;char *name5= 数学,物理,外语,政治 ,体育;char *meanlow4= 人数,平均成绩 ,最低分数科目成绩 , 最低分科目 ; printf( 原始信息如下: n);for(i=0;i5;i+) printf(%s:%dn,namei,ai);printf(%s:%dn,meanlowi,ai+5);printf( 全班各科平均成绩如下: n);for(i=0;i5;i+) printf(%s:%dn,namei,ai);printf(
12、统计结果如下: n); printf(%s:%dn,meanlow0,a5);printf(%s:%dn,meanlow1,average(a); printf(%s:%dn,meanlow2,lowest(a);b=subject(a,5); printf(%s:%sn,meanlow3,nameb);int average( int *b)/ 求平均成绩int sum=0 ,i,aver; for(i=0;i5;i+)sum=sum+bi;aver=sum/5;return aver;int lowest(int *b)/ 求最低成绩int t=b0,i; for(i=0;ibi) t=b
13、i; return t;int subject(int *c,int n)/ 求最低成绩的科目int i, t=c0,m=0; for(i=1;ici) t=ci;m+;return m;2. 5程序运行截图C:V Z o(JiDeliiig:.o- exe:Bm目 1 I : 1 I ! I I 诃绩数科 亠一一口 7 8 Do- 8 B 7 8 B CO CO 士U 3 州仝爭用洋引圉H%堅怜洼M:亲软短 bni女44-勿_Ad 花更 m 走G 0 3 5 6 科 5 0 3 s 6 7 8 8 8 8 5- 7 8 8 8 8 - I* fc_L :75 - -n第三章 学生成绩管理系统
14、3. 1 设计题目及要求1. 设计要现的功能较多,所以将它们分为几个部分叙述。建立文件可以使用默认文件名或指定文件名将记录存储到文件; 文件保存成功返回 0,失败返回 -1; 设置保存标志 savedTag 作为是否对记录进行存储操作的信息; 写同名文件将覆盖原来文件的容;增加学生记录可在已有记录后面追加新的记录 可以随时用它增加新的记录,它们仅保存在结构数组中; 可以将一个文件读入,追加在已有记录之后; 如果已经采取文件追加的方式, 在没有保存到文件之前, 将继续保持文件追加 状态,以便实现连续文件追加操作方式; 如果没有记录存在,给出提示信息。显示记录如果没有记录可供显示,给出提示信息;
15、可以随时显示存中的记录文件存储可以按默认名字或指定名字存储记录文件; 存储成功返回 0.,否则返回 -1; 更新存储标志;读取文件可以按照默认名字或指定名字将记录文件读入存; 读取成功返回 0,否则返回 -1; 可以将指定或默认文件追加到现有记录并更新记录的尾部; 可以将文件连续追加到现有记录并更新记录的名词; 更新存储标志;删除记录可以按“学好” 、“”、“名词”方式删除记录; 给出将删除记录的信息,经确认后在删除; 如果已经是空表,删除时给出提示信息并返回菜单; 如果没有要删除的信息,输出没有找到的信息; 应该更新其他记录的名词; 删除操作权限于存,只有执行存记录时,才能覆盖原记录;修改记
16、录可以按“学号” 、“”、“名次”方式修改记录容; 给出将修改记录的信息,经确认后进行修改; 如果已经是空表,应给出提示信息并返回主菜单; 如果没有找到需要要改的信息,输出提示信息; 应该同时更新其他记录的名词; 修改操作权限于存,只有进行存储操作时,才能覆盖原记录; 更新存储标志;查询记录可以按“学号” 、“”、“名次”方式修改记录容; 能给出查询记录的信息; 如果查询的信息不存在,输出提示信息;对记录进行排序可以按学好进行升序或降序排序; 可以按名称进行升序和降序排序; 可以按名词进行升序或降序排序; 如果属于选择错误,可以立即退出排序; 更新存储标志;头文件使用条件编译定义头文件; 函数
17、原型声明; 数据结构及包含文件; 测试程序应列出测试大纲对程序进行测试; 应保证测试用例测试到程序的各种边缘情况;2. 总体设计 最初的整体规划只是说明它们的可行性, 不要求制定函数的具体实现, 甚至不需要考虑 函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。本课程设计对模块设计的要求如下:要求使用对文件方式实现设计; 要求在各个文件实现结构化设计; 每个模块作为一个单独的 C 文件,每个文件的函数如表12 1 所示,表中给出了各个函数的功能说明;宏和数据结构等放在头文件中,并使用条件编译3. 2 设计思路(1) 主函数:主函数 main,功能: 通过调用 creat, se
18、arch, del, add, print, ststistics, save, taxis等函数,实现学生成绩查询(2) 菜单界面函数:int menu(int k)/*函数 menu,功能:菜单选择( 3)用 switch 语句可以实现这些选择。可以用简洁的伪码对它们进行描述( 4)程序包含文件的存、取过程。它的功能就是按输入顺序建立记录。如果原来没有记录文件,可以重新建立一个文件; 如果已经有记录, 可以先把文件容读入,然后把新记录追加 到原来记录的尾部;也可以单独建立新文件,以后再使用读取文件的方法拼装。3. 3流程图3. 4具体实现#in clude#in clude #i nclu
19、de #in clude #defi ne N 30#defi ne M 3 typedef struct stude nt char nu mber10;char n ame20; float scoreM; float aver;STU;STU stuN;int n; void in putscore(void); void savescore(void); void avergescore(void); void modifyscore(void); void lookscore(void); void searchscore(void);void statistic(void); vo
20、id add(void);void modify(void); void delscore(void);void menu(void);void main() short int flag=0; menu();do flag=1;switch(getch() case 1 : inputscore();break;/* 输入成绩 */case 2 : lookscore();break; /* 查看成绩 */ case 3 : searchscore();break; /* 查找成绩 */ case 4 : statistic();break;/* 成绩统计 */case 5 : modify
21、();break;/* 修改成绩 */case 6 : add();break;/* 添加成绩 */case 7 : delscore();break; /* 删除成绩 */ case 8 : savescore();break; /* 保存成绩 */ case 9 :exit(0);/* 退出程序 */default : printf( 输入有误 n);printf( 按任意键继续 n);getch(); menu();while (flag=1); void menu(void) system(cls); printf(n); printf(* 欢迎进入学生成绩管理系统 *n); prin
22、tf( 菜单 n); printf( 输入成绩 1n);printf( 查看成绩及成绩排序 2n);printf( 查询学生成绩 3n);printf( 成绩统计 4n);printf( 修改成绩 5n);printf( 添加成绩 6n);printf( 删除成绩 7n);printf( 保存成绩 8n);printf( 退出系统 9n);printf( *printf( 请输入您的选择 n);*输入各个同学的学生信息*void inputscore(void) int i,j;system(cls);printf( 请输入学生总数: n); scanf(%d,&n);printf( 提示:
23、*输入学号时请输入位数为 8位的数字 *n); /*因二维表上下需对 正故有此要求 */for(i=0;in;i+) printf( 请输入学生 %d 的学号 :n,i+1); scanf(%s%s,stui.number,); printf( 请输入学生成绩 :n); printf( 数学 t 英语 t 计算机 n); for(j=0;jM;j+)scanf(%f,&stui.scorej);printf( 成功输入 n); void avergescore(void)*计算各个同学的平均分* int i,j; for(i=0;in;i+) stui.aver=0;for(
24、j=0;jM;j+) stui.aver+=stui.scorej; stui.aver=stui.aver/M; /* 查看学生成绩及根据平均分对学生进行排序 */ void lookscore(void) int i,j,k;STU t;avergescore(); system(cls);for(i=0;in-1;i+) for(k=i,j=i+1;jstuk.aver) k=j;if(k!=j) t=stuk; stuk=stui; stui=t;printf(名次t学号ttt数学t英语t计算机t平均分n); for(i=0;in;i+) printf(%dt%st%st,i+1,st
25、ui.number,); for(j=0;jM;j+)printf(%4.2ft,stui.scorej); printf(%4.2f,stui.aver); printf(n);void searchscore(void) char a10;int i,j;system(cls);printf( 请输入需查询的学生学号 n);scanf(%s,a);for(i=0;in;i+) if(strcmp(a,stui.number)=0) printf( 名次 t 学号 ttt 数学 t 英语 t 计算机 t 平均分 n); printf(%dt%st%st,i+1,stui.n
26、umber,); for(j=0;jM;j+) printf(%4.2ft,stui.scorej); printf(%4.2f,stui.aver);printf(n);break;elseprintf( 未找到该学生信息 n);void statistic(void) STU *p=stu;int i,j;float count=0.0,sum=0.0;system(cls);for(i=0;iaver;printf( 该班级平均分为 %4.2fn,sum/n);/* 平均分计算 */for(i=0;iaver=60)count+; printf( 该班级及格率为 %4.
27、2f%n,count/n*100); /* 及格率计算 */ count=0.0;for(i=0;iaver=90)count+; printf( 该班级优秀率为 %4.2f%n,count/n*100); /* 优秀率计算 */ for(i=0;in;i+) for(j=0;jscorej-(p+i)-aver)*(p+i)-scorej-(p+i)-aver); sum=sum/n;printf( 学生 %s 的成绩方差为 %4.2fn,(p+i)-name,sum); printf( 平均分低于 60 的学生 n);for(i=0;in;i+) if(stui.aver60)printf
28、(%sn,);*修改学生成绩 */void modify(void) char a10;int i,j;system(cls);printf( 请输入需要修改成绩的学生学号 n);scanf(%s,a);for(i=0;in;i+) if(strcmp(a,stui.number)=0) printf( 名次 t 学号 ttt 数学 t 英语 t 计算机 t 平均分 n); printf(%dt%st%st,i+1,stui.number,); for(j=0;jM;j+) printf(%4.2ft,stui.scorej); printf(%4.2f,s
29、tui.aver);printf(n);printf( 请重新输入该学生的学号 :n); scanf(%s%s,stui.number,); printf( 请重新输入学生成绩 :n);printf( 数学 t 英语 t 计算机 n);for(j=0;jM;j+) scanf(%f,&stui.scorej);printf( 修改成功 n);break;elseprintf( 未找到该学生信息 n);*添加学生成绩 *void add(void) int a,i,j;system(cls);printf( 请输入新增加的学生人数: n);scanf(%d,&a);n=n+a;
30、for(i=n-a;in;i+) printf( 请输入学生 %d 的学号 :n,i+1);scanf(%s%s,stui.number,); printf( 请输入学生成绩 :n); printf( 数学 t 英语 t 计算机 n); for(j=0;jM;j+)scanf(%f,&stui.scorej);printf( 添加成功 n); /*删除学生成绩 */void delscore(void) int i,j,c;char m,a10;system(cls);printf( 请输入学生学号 n);scanf(%s,a);for(i=0;in;i+) if(strcm
31、p(a,stui.number)=0) printf( 名次 t 学号 ttt 数学 t 英语 t 计算机 t 平均分 n);printf(%dt%st%st,i+1,stui.number,); for(j=0;jM;j+)printf(%4.2ft,stui.scorej); printf(%4.2f,stui.aver); printf(n);c=i;break;elseprintf( 未找到该学生信息 n);printf( 是否删除该学生成绩 (y/n)n); scanf(%s,&m);if(m=y) for(i=c;in-1;i+)stui=stui+1;n=n-1
32、;printf( 删除成绩成功 n);elseprintf( 删除成绩失败 n);/*保存学生成绩 */void savescore(void) FILE *fp;int i,flag=1;char m;system(cls);puts( 是否保存学生成绩 (y/n);scanf(%s,&m);if(m=y) if(fp=fopen(score.dat,wb)=NULL) printf( 文件打开失败 n); return; for(i=0;in;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf( 保存失败 n);flag=
33、0;if(flag=1)printf( 保存成功 !n);fclose(fp);elsereturn;3. 5程序运行截图14h青输入您的选择生单U 一二 一排二二 一绩二一一 I- 冠成_二 iSW统咸成 As Fit位妙唯的.exeFEAm-V r-,D*sbugll0110301_ un遠龜入学去成绩:憑學 英语 计算机9 8S 79请输入学生2的学号姓各_11B302F黔计算机8 79 *72请输入学主M的学号姓名二8116303翦入学翳计算机?0 78 62E:mmllDebugli.exe-学号姓名数学L20110301sun89.00220110303zha.098.88J20110302li88.00按任意键继续V9B计算机平均分B8.0079.0085.3378.0082.0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘肃省张掖市临泽二中学、三中学、四中学初三下学期第二次月考数学试题理试题含解析
- 山西临汾霍州第一期第二次月考2026届初三第九次适应性考试数学试题含解析
- 2026年武汉市中考预测卷(全国Ⅲ卷)数学试题试卷含解析
- 农业转基因生物安全管理培训
- 2026年大学大一(计算机科学与技术)计算机组成原理阶段测试试题及答案
- 职业规划内测邀请函
- 护理文书的系统性思考
- 2025年前台防疫专项卷
- 护理说课课件制作技巧分享
- 护理学导正:法律法规与政策
- 药品供应链与药品追溯系统
- 2025至2030模具加工行业运营态势与投资前景调查研究报告
- 国门生物安全小学课件
- 钢楼梯施工流程方案
- (2025版)中国癫痫性猝死预防指南课件
- 新生儿安全管理制度
- 中国航空油料校招面试题及答案
- 办公厕所改造施工方案
- 打桩工三级安全教育试题及答案
- DB37∕T 5123-2018 预拌混凝土及砂浆企业试验室管理规范
- 水闸门操作知识培训课件
评论
0/150
提交评论