




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告课程设计名称: 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设计题目及要求一菜单内容:程序运行后,给出5个菜单项的内容和输入提示:1 FindNum2 FindRoot3 Bear4 Diamond5 Goodbye二、设计要求使用数字1-5来选择菜单项,其它输入则不起作用:三、增加菜单项的处理功能l FindNum功能:一只老鼠咬坏了账本,公式中符号()代表是被老鼠咬掉的地方。要想恢复下面的等式,应在()中填上哪个相同的数字l FindRoot这里要求编制一个求方程ax2+bx+c=0的根程序l Bear本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一天吃了一半,又拿走了一个回去喂狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂狗熊。以后每天都吃前一天的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米l Diamondl Goodbye!1. 2设计思路菜单是应用程序的界面,本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。设计分为两步:首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。具体方法:首先编写一个菜单程序,输入1-6以进入相应选择项,从程序测试结构可知,当选择相应选择项时候,其输出信息为:FindNum、FindRoot、Bear、Diamond、Goodbye!(1)使用switch语句实现功能选择(2)应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值,以便提供给switch语句使用1. 3流程图开始输入15的数字处理输入给switch语句调用相应函数GoodbyeDiamondBearFindRootFindNum结束1. 4具体实现程序的源代码如下:#include #include #include #include void FindNum ();void FindRoot();void Bear();void Diamond();int main ()int a;printf(菜单内容:n);printf(1.FindNum n);printf(2.FindRoot n);printf(3.Bear n);printf(4.Diamond n);printf(5.Goodbye 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(一只老鼠咬坏了账本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); else printf(方程无根nn);void Bear() / Bear 函数int day, x1; printf(狗熊到玉米地吃了玉米); printf(第一天吃了一半又拿走一个回去喂小狗熊。n); printf(第二天又去吃了剩下的一半,走是任然带一个回去。n); printf(以后每天都吃前一天剩下的一半,拿走一个。n); printf(到了第十天时,地里只剩下一个玉米。求地里一共有多少玉米?n); day=10; x1=1; while (day0) x1=(x1+1)*2; day-; printf(玉米总数=%dnn,x1); void Diamond() / Diamond函数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;j=(m-1)-2*i+1;j+)printf(*);printf(n);1. 5程序运行截图第二章 使用数组合指针统计成绩2. 1设计题目及要求 设计题目:假设给定班级各科考试平均成绩的原始资料如下:数学: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的内容存入到分配的内存中,使用指针实现对内存内容的存取和计算。为字符分配内存,并将字符数组的内容也存入所分配的内存中,使用这些指针实现设计要求。实现本设计功能的方法很多,对存放原始数据的要求如下:l 使用整形数组a存放数学、物理、外语、政治、体育、人数、平均成绩、最低分科目的成绩l 使用字符串数组name存放数学、物理、外语、政治、体育、最低分数的科目l 使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目。l 使用字符指针指向字符数组(这个题目的要求超出一般的教材,但对理解指针很有用途。)2. 3流程图结束开始统计班级平均成绩最低科目成绩输入班级人数和各科平均成绩最低科目2. 4具体实现程序源代码如下:int subject(int *c,int n);int lowest(int *b);int average( int *b);#include void main ()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(统计结果如下: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=bi;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程序运行截图第三章 学生成绩管理系统3. 1设计题目及要求1.设计要求实现的功能较多,所以将它们分为几个部分叙述。建立文件l 可以使用默认文件名或指定文件名将记录存储到文件;l 文件保存成功返回0,失败返回-1;l 设置保存标志savedTag作为是否对记录进行存储操作的信息;l 写同名文件将覆盖原来文件的内容;增加学生记录l 可在已有记录后面追加新的记录l 可以随时用它增加新的记录,它们仅保存在结构数组中;l 可以将一个文件读入,追加在已有记录之后;l 如果已经采取文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;l 如果没有记录存在,给出提示信息。显示记录l 如果没有记录可供显示,给出提示信息;l 可以随时显示内存中的记录文件存储l 可以按默认名字或指定名字存储记录文件;l 存储成功返回0.,否则返回-1;l 更新存储标志;读取文件l 可以按照默认名字或指定名字将记录文件读入内存;l 读取成功返回0,否则返回-1;l 可以将指定或默认文件追加到现有记录并更新记录的尾部;l 可以将文件连续追加到现有记录并更新记录的名词;l 更新存储标志;删除记录l 可以按“学好”、“姓名”、“名词”方式删除记录;l 给出将删除记录的信息,经确认后在删除;l 如果已经是空表,删除时给出提示信息并返回菜单;l 如果没有要删除的信息,输出没有找到的信息;l 应该更新其他记录的名词;l 删除操作权限于内存,只有执行存记录时,才能覆盖原记录;修改记录l 可以按“学号”、“姓名”、“名次”方式修改记录内容;l 给出将修改记录的信息,经确认后进行修改;l 如果已经是空表,应给出提示信息并返回主菜单;l 如果没有找到需要要改的信息,输出提示信息;l 应该同时更新其他记录的名词;l 修改操作权限于内存,只有进行存储操作时,才能覆盖原记录;l 更新存储标志;查询记录l 可以按“学号”、“姓名”、“名次”方式修改记录内容;l 能给出查询记录的信息;l 如果查询的信息不存在,输出提示信息;对记录进行排序l 可以按学好进行升序或降序排序;l 可以按名称进行升序和降序排序;l 可以按名词进行升序或降序排序;l 如果属于选择错误,可以立即退出排序;l 更新存储标志;头文件l 使用条件编译定义头文件;l 函数原型声明;l 数据结构及包含文件;测试程序l 应列出测试大纲对程序进行测试;l 应保证测试用例测试到程序的各种边缘情况;2. 总体设计最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。本课程设计对模块设计的要求如下:l 要求使用对文件方式实现设计;l 要求在各个文件内实现结构化设计;l 每个模块作为一个单独的C文件,每个文件内的函数如表121所示,表中给出了各个函数的功能说明;宏和数据结构等放在头文件中,并使用条件编译3. 2设计思路(1) 主函数: 主函数 main,功能: 通过调用 creat, search, del, add, print, ststistics, save, taxis 等函数,实现学生成绩查询(2) 菜单界面函数:int menu(int k)/*函数 menu,功能:菜单选择(3)用switch语句可以实现这些选择。可以用简洁的伪码对它们进行描述(4)程序包含文件的存、取过程。它的功能就是按输入顺序建立记录。如果原来没有记录文件,可以重新建立一个文件;如果已经有记录,可以先把文件内容读入,然后把新记录追加到原来记录的尾部;也可以单独建立新文件,以后再使用读取文件的方法拼装。3. 3流程图开始结束录入学生成绩通过switch对数据进行处理保存学生成绩3. 4具体实现#include#include#include#include#define N 30#define M 3typedef struct studentchar number10;char name20;float scoreM;float aver;STU;STU stuN;int n;void inputscore(void);void savescore(void);void avergescore(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);void main()short int flag=0;menu();doflag=1;switch(getch()case 1 : inputscore();break; /*输入成绩*/case 2 : lookscore();break;/*查看成绩*/case 3 : searchscore();break;/*查找成绩*/case 4 : statistic();break;/*成绩统计*/case 5 : modify();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);printf( 菜单 n);printf(输入成绩-1n);printf(查看成绩及成绩排序-2n);printf(查询学生成绩-3n);printf(成绩统计-4n);printf(修改成绩-5n);printf(添加成绩-6n);printf(删除成绩-7n);printf(保存成绩-8n);printf(退出系统-9n);printf(*n);printf(请输入您的选择n);/*输入各个同学的学生信息*/void inputscore(void)int i,j;system(cls);printf(请输入学生总数:n);scanf(%d,&n);printf(提示:*输入学号时请输入位数为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(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学号tt姓名t数学t英语t计算机t平均分n);for(i=0;in;i+)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);/*通过输入学号查找学生成绩*/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学号tt姓名t数学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);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.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(%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学号tt姓名t数学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);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;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(strcmp(a,stui.number)=0)printf(名次t学号tt姓名t数学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;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省佛山市南海区大沥镇石门实验中学2025-2026学年八年级上学期开学考试英语试卷(含答案)
- 眼科病例题库及答案
- 2025学年广东省高三语文上学期8月摸底检测试卷附答案解析
- 2025年抗心绞痛药项目合作计划书
- 扩张血管输液课件
- 2025年大板桥焊工考试题及答案
- 2025年市场调研考试试卷及答案
- 情绪正能量课件
- 锅炉培训考试试题合集及答案
- 托福考试口语题库及答案
- GB/T 2423.22-2012环境试验第2部分:试验方法试验N:温度变化
- 最新低压电工安全培训课件
- 水土保持工程质量评定表
- 整机部整机出货检验重点标准
- 人像摄影:户外人像摄影课件
- 美丽中国中英文字幕
- 《中国传统服饰简介》PPT课件(完整版)
- 《教育技术学导论》课程教学大纲
- 污染土壤异位修复现场施工方案
- CCP点确认记录参考模板
- 《日汉翻译2》教学大纲
评论
0/150
提交评论