




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告课程设计名称: C程序设计 系 : 学 生 姓 名 : 班 级: 学 号: 成 绩: 指 导 教 师: 目 录第一章 菜单设计11.1 设计题目及要求11,2 设计思路21.3流程图21.4具体实现21.5 程序运行截图5第二章 使用数组和指针统计成绩62.1 设计题目及要求62.2 设计要求62.3 设计思路72.4 流程图72.5 具体实现72.6 程序运行截图8第三章 学生成绩管理系统93.1 设计题目及要求93.2 设计思路113.3流程图123.4 具体实现123.5 程序运行截图20小 结23参考文献24第一章 菜单设计1.1 设计题目及要求一菜单内容:程序运行后,给出5个菜单项的内容和输入提示:1 FindNum2 FindRoot3 Bear4 Diamond5 Goodbye二、设计要求使用数字1-5来选择菜单项,其它输入则不起作用。三、设计实例:首先编写一个菜单程序,输入1-6以进入相应选择项,从程序测试结构可知,当选择相应选择项时候,其输出信息为:FindNum、FindRoot、Bear、Diamond、Goodbye!l 使用switch语句实现功能选择l 应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值,以便提供给switch语句使用四、增加菜单项的处理功能l FindNum功能:一只老鼠咬坏了账本,公式中符号()代表是被老鼠咬掉的地方。要想恢复下面的等式,应在()中填上哪个相同的数字l FindRoot这里要求编制一个求方程ax2+bx+c=0的根程序l Bear本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一天吃了一半,又拿走了一个回去喂狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂狗熊。以后每天都吃前一天的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米l Diamondl Goodbye!1,2 设计思路由题目可以知道,可以设置一下几个模块:首先选择菜单程序模块, FindNum题目模块 , FindRoot题目模块, , Bear题目模块 , Diamond题目模块 .使用调用函数来完成第二个模块设计,例如:void FindNum(),void FindRoot()等函数调用来对题目编写完成。该次设计的程序使用switch语句,printf语句输出菜单,主要是通过调用函数来完成相应菜单程序的编写查看。 1.3流程图 1.4具体实现#include#includevoid FindNum();void FindRoot();void Bear();void Diamond();void Goodbye();void ShowMenu()int n;printf(Input a number from 1-3:n1 FindNnm;n2 FindRoot ;n3 Bear;n4Diamond;n5 Goodbyen);scanf(%d,&n);switch(n)case 1:FindNum(); break;case 2: FindRoot (); break;case 3: Bear (); break;case 4: Diamond(); break;case 5: Goodbye(); break;default: printf(Error! Input again!);ShowMenu();/老鼠啃账本void FindNum()int i;printf(3623733564n);for(i=1;i10;i+)if(30+i)*6237=(10*i+3)*3564)printf(3%d6237%d33564n,i,i);ShowMenu();/求根void FindRoot() float a,b,c;float delta; printf(求一个二元方程ax2+bx+c=0的根的问题); printf(input a, b, c:); scanf(%f%f%f, &a, &b, &c); delta = (b*b - 4*a*c); /*b2 - 4ac*/ if (delta 0) printf(no fact root.n); else if (delta 0 , have 2 root.*/ printf(root1 = %0.2f, root2 = %0.2fn, -1*b + sqrt(delta)/ (2*a), -1*b - sqrt(delta)/(2*a); ShowMenu();/狗熊吃玉米void Bear() int day, x1, x2; printf(狗熊到玉米地吃了包谷); printf(第一天吃了一半又拿走一个回去喂小狗熊。n); printf(第二天又去吃了剩下的一半,走是任然带一个回去。/n); printf(以后每天都吃前一天剩下的一半,拿走一个。/n); printf(到了第十天时,地里只剩下一个包谷。求地里一共有多少包谷。/n); day=10; x2=1;while (day0) x1=(x2+1)*2; x2=x1; day-; printf(包谷总数=%dn,x1);ShowMenu(); /钻石void Diamond()int i,j,k;for(i=0;i7;i+)if(i4)for(j=0;j15-i;j+)printf( );for(k=0;k2*i+1;k+)printf(*);elsefor(j=0;ji+9;j+)printf( );for(k=0;k13-2*i;k+)printf(*);printf(n); ShowMenu();void Goodbye()printf(Goodbye!n);void main()ShowMenu();1.5 程序运行截图第二章 使用数组和指针统计成绩2.1 设计题目及要求l 设计题目:假设给定班级各科考试平均成绩的原始资料如下:数学:75 物理:80 外语:83 政治:85 体育:86 人数:30l 要求统计出全班学期总平均成绩以及得分最低的科目和该科目的成绩。要求的输出结果如下:原始信息如下:数学:75 物理:80 外语:83 政治:85 体育:86 人数:30平均成绩:0 最低分数科目的成绩:0 最低分数的科目:全班各科平均成绩如下:数学:75 物理:80 外语:83 政治:85 体育:86 人数:30统计结果如下:人数:30平均成绩:81最低分数科目的成绩:75最低分数的科目:数学2.2 设计要求l 实现本设计功能的方法很多,这里给出4种难易成度不同的要求,以便加深对数组和指针知识的理解。对存放原始数据的要求如下:l 使用整形数组a存放数学、物理、外语、政治、体育、人数、平均成绩、最低分科目的成绩l 使用字符串数组name存放数学、物理、外语、政治、体育、最低分数的科目l 使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目。l 使用字符指针指向字符数组(这个题目的要求超出一般的教材,但对理解指针很有用途。) 2.3 设计思路将数组a的内容存入到分配的内存中,使用指针实现对内存内容的存取和计算。为字符分配内存,并将字符数组的内容也存入所分配的内存中,使用这些指针实现设计要求。2.4 流程图2.5 具体实现#includeint main()int average,i,sum,min;int a6=75,80,83,85,86,30;char p6=数学,物理,外语,政治,体育,人数;char m3= 总平均成绩” ,最低分数科目的成绩”, 最低分数科目”;printf(原始数据n);for(i=0;i8;i+)printf(%c,%fn,pi,ai);printf(m0:n);printf(m1:n);printf(m2:nn);printf(全班各科平均成绩如下:n);for(i=0;i8;i+)printf(%c,%fn,pi,ai);printf(统计结果如下:n);printf(p5:%dn,a5);for(i=0;i5;i+)sum+=ai;average=sum/5;printf(m0:%dn,average);for(i=1;i5;i+)if(a0ai)min=a0;elsemin=ai;printf(m1:%dn,min);printf(m2:%sn,数学);return 0; 2.6 程序运行截图第三章 学生成绩管理系统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 应保证测试用例测试到程序的各种边缘情况;l 以上是基本要求,希望通过对本章设计的理解,重新考虑如何进行设计。2. 总体设计最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。本课程设计对模块设计的要求如下:l 要求使用对文件方式实现设计;l 要求在各个文件内实现结构化设计;l 每个模块作为一个单独的C文件,每个文件内的函数如表121所示,表中给出了各个函数的功能说明;l 宏和数据结构等放在头文件中,并使用条件编译。3.2 设计思路(1) 主函数: 主函数 main,功能: 通过调用 creat, search, del, add, print, ststistics, save, taxis 等函数,实现学生成绩查询(2 ) 菜单界面函数:int menu(int k)/*函数 menu,功能:菜单选择(3) 输入学生信息:因为学号不可能为 0,所以设计当输入 学生信息时输入学号为零则自动返回菜单函数,这样就可以无 限次输入直到输入学号为零了。(4) 删除学生信息:该学号提供给用户按学号删除;首先判 断文件中是否有学生信息,如果文件内容是空,就输出“没有 该学生记录!。(5) 查找学生信息函数:该程序用 switch(a)函数设计了两 种查询方式-1.按学号查找;2.按姓名查找。(6) 显示所有学生信息函数:该函数主要使用输出函数 printf 来 实现,首先看有没有学生信息,再用指针指向存在的文本,用 do while()语句来实现所有信息的输出。 (7) 统计学生信息(8) 保存学生信息:(9)退出程序3.3流程图 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,st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业运动品牌专卖店商业地产租赁及赛事合作合同
- 公司车队财务管理制度
- 创业致富贷款管理制度
- 制定完善项目管理制度
- 2026高考地理《地理原理》复习课件
- 南京体育学院《建筑力学(一)》2023-2024学年第二学期期末试卷
- 广东交通职业技术学院《休闲体育项目策划与管理》2023-2024学年第二学期期末试卷
- 乌兰察布职业学院《舞蹈科研方法概论》2023-2024学年第二学期期末试卷
- 淮北理工学院《临床微生物学检验技术》2023-2024学年第二学期期末试卷
- 湖南工业大学《导向标识系统设计》2023-2024学年第二学期期末试卷
- 重庆市大渡口区2023-2024学年四年级下学期数学期末测试卷(含答案)
- DZ/T 0220-2006泥石流灾害防治工程勘查规范
- 2024年三亚市公立医院招聘专业技术人员笔试真题
- 呆滞库存考核管理制度
- 2025英语ab级考试试题及答案
- 2025-2030年中国热风枪行业市场现状供需分析及投资评估规划分析研究报告
- 广东省广州市越秀区2020-2021学年七年级下学期期末英语试题(含答案)
- 3D打印技术在建材中的应用-洞察阐释
- 陕西西安高新一中2025届高考冲刺押题(最后一卷)英语试卷含答案
- 2025-2030中国气象服务行业市场前景趋势及竞争格局与投资研究报告
- 商业银行客户ESG评价体系构建与实践探索
评论
0/150
提交评论