c语言 课程设计报告学生成绩管理系统.doc

上传人:精*** 文档编号:852148 上传时间:2023-09-16 格式:DOC 页数:24 大小:438.77KB
下载 相关 举报
c语言 课程设计报告学生成绩管理系统.doc_第1页
第1页 / 共24页
c语言 课程设计报告学生成绩管理系统.doc_第2页
第2页 / 共24页
c语言 课程设计报告学生成绩管理系统.doc_第3页
第3页 / 共24页
c语言 课程设计报告学生成绩管理系统.doc_第4页
第4页 / 共24页
c语言 课程设计报告学生成绩管理系统.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、目 录第一章 菜单设计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二

2、、设计要求使用数字1-5来选择菜单项,其它输入则不起作用。三、设计实例:首先编写一个菜单程序,输入1-6以进入相应选择项,从程序测试结构可知,当选择相应选择项时候,其输出信息为:FindNum、FindRoot、Bear、Diamond、Goodbye!l 使用switch语句实现功能选择l 应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值,以便提供给switch语句使用四、增加菜单项的处理功能l FindNum功能:一只老鼠咬坏了账本,公式中符号()代表是被老鼠咬掉的地方。要想恢复下面的等式,应在()中填上哪个相同的数字l FindRoot这里要求编制一个求方程ax2+b

3、x+c=0的根程序l Bear本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一天吃了一半,又拿走了一个回去喂狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂狗熊。以后每天都吃前一天的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米l Diamondl Goodbye!1,2 设计思路由题目可以知道,可以设置一下几个模块:首先选择菜单程序模块, FindNum题目模块 , FindRoot题目模块, , Bear题目模块 , Diamond题目模块 .使用调用函数来完成第二个模块设计,例如:void FindNum(),void FindRoot()等函

4、数调用来对题目编写完成。该次设计的程序使用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)

5、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();

6、/求根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), -

7、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);

8、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 设计题目:假设给定班级各科

9、考试平均成绩的原始资料如下:数学: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种难易成度不同的要求,以便加深对数组和指针知识的

10、理解。对存放原始数据的要求如下:l 使用整形数组a存放数学、物理、外语、政治、体育、人数、平均成绩、最低分科目的成绩l 使用字符串数组name存放数学、物理、外语、政治、体育、最低分数的科目l 使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目。l 使用字符指针指向字符数组(这个题目的要求超出一般的教材,但对理解指针很有用途。) 2.3 设计思路将数组a的内容存入到分配的内存中,使用指针实现对内存内容的存取和计算。为字符分配内存,并将字符数组的内容也存入所分配的内存中,使用这些指针实现设计要求。2.4 流程图2.5 具体实现#includeint main()i

11、nt 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;

12、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 写同名文件将覆盖原

13、来文件的内容;增加学生记录l 可在已有记录后面追加新的记录l 可以随时用它增加新的记录,它们仅保存在结构数组中;l 可以将一个文件读入,追加在已有记录之后;l 如果已经采取文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;l 如果没有记录存在,给出提示信息。显示记录l 如果没有记录可供显示,给出提示信息;l 可以随时显示内存中的记录文件存储l 可以按默认名字或指定名字存储记录文件;l 存储成功返回0.,否则返回-1;l 更新存储标志;读取文件l 可以按照默认名字或指定名字将记录文件读入内存;l 读取成功返回0,否则返回-1;l 可以将指定或默认文件追加

14、到现有记录并更新记录的尾部;l 可以将文件连续追加到现有记录并更新记录的名词;l 更新存储标志;删除记录l 可以按“学好”、“姓名”、“名词”方式删除记录;l 给出将删除记录的信息,经确认后在删除;l 如果已经是空表,删除时给出提示信息并返回菜单;l 如果没有要删除的信息,输出没有找到的信息;l 应该更新其他记录的名词;l 删除操作权限于内存,只有执行存记录时,才能覆盖原记录;修改记录l 可以按“学号”、“姓名”、“名次”方式修改记录内容;l 给出将修改记录的信息,经确认后进行修改;l 如果已经是空表,应给出提示信息并返回主菜单;l 如果没有找到需要要改的信息,输出提示信息;l 应该同时更新其

15、他记录的名词;l 修改操作权限于内存,只有进行存储操作时,才能覆盖原记录;l 更新存储标志;查询记录l 可以按“学号”、“姓名”、“名次”方式修改记录内容;l 能给出查询记录的信息;l 如果查询的信息不存在,输出提示信息;对记录进行排序l 可以按学好进行升序或降序排序;l 可以按名称进行升序和降序排序;l 可以按名词进行升序或降序排序;l 如果属于选择错误,可以立即退出排序;l 更新存储标志;头文件l 使用条件编译定义头文件;l 函数原型声明;l 数据结构及包含文件;测试程序l 应列出测试大纲对程序进行测试;l 应保证测试用例测试到程序的各种边缘情况;l 以上是基本要求,希望通过对本章设计的理

16、解,重新考虑如何进行设计。2. 总体设计最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。本课程设计对模块设计的要求如下:l 要求使用对文件方式实现设计;l 要求在各个文件内实现结构化设计;l 每个模块作为一个单独的C文件,每个文件内的函数如表121所示,表中给出了各个函数的功能说明;l 宏和数据结构等放在头文件中,并使用条件编译。3.2 设计思路(1) 主函数: 主函数 main,功能: 通过调用 creat, search, del, add, print, ststistics, save, ta

17、xis 等函数,实现学生成绩查询(2 ) 菜单界面函数:int menu(int k)/*函数 menu,功能:菜单选择(3) 输入学生信息:因为学号不可能为 0,所以设计当输入 学生信息时输入学号为零则自动返回菜单函数,这样就可以无 限次输入直到输入学号为零了。(4) 删除学生信息:该学号提供给用户按学号删除;首先判 断文件中是否有学生信息,如果文件内容是空,就输出“没有 该学生记录!。(5) 查找学生信息函数:该程序用 switch(a)函数设计了两 种查询方式-1.按学号查找;2.按姓名查找。(6) 显示所有学生信息函数:该函数主要使用输出函数 printf 来 实现,首先看有没有学生信

18、息,再用指针指向存在的文本,用 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

19、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 : searchsco

20、re();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

21、(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(请输入学

22、生总数:n);scanf(%d,&n);printf(提示:*输入学号时请输入位数为8位的数字*n);/*因二维表上下需对正故有此要求*/for(i=0;in;i+)printf(请输入学生%d的学号 姓名:n,i+1);scanf(%s%s,stui.number,stui.name);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

23、=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.num

24、ber,stui.name);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,stu

25、i.name);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);/*及格

26、率计算*/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,stui.name);/*修改学生成绩*/void modify(void)

27、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,stui.name);for(j=0;jM;j+)printf(%4.2ft,stui.scorej);printf(%4.2f,stui.aver);printf(n);printf(请重新输入该学生的学号 姓名:n);scanf(%s%s,stui.n

28、umber,stui.name);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,stui.name);

29、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,stui.name);for

30、(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;printf(删除成绩成功n);elseprintf(删除成绩失败n);/*保存学生成绩*/void savescore(void)FILE *fp;int i,flag=1;char m;system(cls);puts(是否保存学生

31、成绩(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=0;if(flag=1)printf(保存成功!n);fclose(fp);elsereturn;3.5 程序运行截图主菜单 输入成绩查看成绩查询成绩统计成绩修改成绩添加成绩删除成绩保存成绩小 结 这次为期两周的C语言课程设计,让我在巩固已学理论知识的同时又学习到了编程能力

32、,学会了利用网上资源和图书馆资源查找资料,在他人的经验和成功中汲取营养,吸收成为自己的知识。 在这两周时间里,我首先利用查找的资料编写源程序,接着就对其进行编译。由于所学知识还不够丰富,自身的编程能力也比较匮乏,我在编译过程中出现了许多错误,比如在结构体、数组和指针的应用上有很多问题。在查阅资料和老师、同学们的帮助下,我一次次的编译、一次次的修改,终于完成了本次课程设计! 就是在这一次次的尝试过程中,让我明白了在实践中学习、在实践中进步,理论和实践才是提高学习能力的最佳途径。同时,也学会了做课程设计所需的步骤及如何对其进行规划整理,为以后的毕业设计打下了基础,参考文献1 谭浩强,C程序设计,清华大学出版社 2001.22 刘振安,C语言课程设计,机械工业出版社 2004年9月1日.忽略此处.23

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 课程设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922