下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习 - 好资料C 语言课程设计报告需求分析a. 设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融合贯穿的程度。通过课程设计,学生在下述各方面的能力应该得锻炼:1)对于给定的设计题目,如何进行分析,理清思路。2)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。3)熟练掌握 C 语言的基本语法,灵活运用各种数据类型。4)进一步掌握在集成环境下如何调试程序和修改程序。b. 设计题目:大学生成绩管理系统主要功能 :1)信息录入录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等)。
2、2)信息查询输入学号或姓名,查询学生各门课程的成绩及所有课程的平均成绩;查询所有学生各门课程的成绩,并按可选的自定义规则进行排序。3)信息删除与修改更多精品文档学习 - 好资料输入学号,删除该学生的成绩信息;输入学号,查询并显示该学生的成绩信息,并在此基础上进行修改。4)信息保存将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件中。一 系统设计1数据录入:数据录入的功能是将需要的数据进行录入,用于后面的各项操作。实现:用输入函数对数据进行录入,先确定学生的个数,再用一个循环进行输入,选修课程数量亦然。2. 数据插入 : 数据插入的主要功能是在数据录入之后,为防止数据输入的遗漏,实现
3、:分为两个部分,第一个是插入第一个位置,第二是插入第一个位置之后,把当前的位置赋给后面的加以实现。3 数据查询:数据查询的主要功能是在数据输入之后进行分类再现,实现:分为输出所有数据,按学号查询,按姓名查询,当输入的数据满足条件时即输出所要求的。4. 数据删除:数据删除的主要功能是在数据录入、数据插入和数据修改完成之后对无用数据进行删除,实现:输入学号,满足条件时即把后一个数值赋给前一个数值,达到删除的目的。更多精品文档学习 - 好资料5 平均值计算:平均值计算的主要功能是求平均值,再对其进行排序,实现:用公式进行计算求平均值,之后便是排序问题,求最大值,然后依次输出各最大值,即实现了排序功能
4、。附流程图如下:更多精品文档学习 - 好资料开始输出界面选择操作学号选择 1输入数据姓名、性别四门成绩按学生学号按学生总分选择2排序按单科高分及均分选择 3查询按学号选择 4插入数据选择 5显示数据选择 6删除数据选择 0退出系统结束二 调试分析过程描述更多精品文档学习 - 好资料1.系统界面2.录入数据3.显示成绩更多精品文档学习 - 好资料4.成绩排序5.查询学生成绩更多精品文档学习 - 好资料6.插入学生成绩7.插入后的成绩表更多精品文档学习 - 好资料编程中易出现的错误:1、书写标识符时,忽略了大小写字母的区别。如p 易写为 P2、忽略了变量的类型,进行了不合法的运算。3、忘记加分号和
5、大括号。4、忘记定义。如下图三 总结及体会通过这次的作业,自己真的学会了很多东西。首先,很多知识,单看课本是学不会的,只有真正动手去试一下更多精品文档学习 - 好资料才会明白。其次,编程的确是一门很复杂的课程,必须花大量的时间去琢磨。而且编程是一门十分考验人的耐心的课程,犯了一点错误,你就必须认认真真地检查,不能有一点马虎,也不能有一点火燥。最重要的一点是,要想完成作业,必须查阅大量资料和询问师兄,这就考验了人的探讨能力和与他人的合作能力。老实说,由于个人的c 语言知识浅薄,我的这次作业还存在很多问题, 可能也满足不了全部的设计要求。但是,自己已经尽力而为了,也亲自动手试过了,自己就不觉得遗憾
6、了。以后,我还要必须努力学习,不断完善自己,虚心接受老师的教导,做出更好的系统。四 附录:源程序代码#include #include #include #include #define LEN sizeof(student)#define NULL 0typedef struct studentint num; /* 学号 */char name20; /* 姓名 */char sex2; /* 性别 */int score4; /* 成绩 */int sum; /* 总成绩 */struct student *next;Student;int n; /* 声明一个全局变量*/Student
7、 *cin(void);Student *sort_1(Student *head,int); /* 声明按学号排序函数*/更多精品文档学习 - 好资料void sort_2(Student *head); /* 声明按总分排序函数*/void print(Student *head); /*声明显示函数 */Student *sort_all(Student *head); /* 声明排序函数*/void find(Student *head); /* 声明查询函数*/Student *add_new(Student *head);Student *cin()int flag;Student
8、 *head,*p1,*p2;n=0;head=(Student *)malloc(LEN);p2=head;printf(n 请输入第 %d 名学生的学号,学号为 0 表示结束输入 :,n+1); scanf(%d,&flag);while(getchar()!=n);for(;flag;) /* 输入每个学生的信息*/n+;p1=(Student *)malloc(LEN);p1-num=flag;printf( 请输入第 %d 名学生的姓名 :,n); /* 输入姓名 */scanf(%s,p1-name);printf( 请输入第 %d 学生的性别 :,n); /* 输入性别 */sc
9、anf(%s,p1-sex);printf( 请输入第 %d 名学生的语文成绩 :,n); /* 输入语文成绩 */ scanf(%d,&p1-score0);printf( 请输入第 %d 名学生的数学成绩 :,n); /* 输入数学成绩 */ scanf(%d,&p1-score1);printf( 请输入第 %d 名学生的英语成绩 :,n); /* 输入英语成绩 */ scanf(%d,&p1-score2);printf( 请输入第 %d 名学生的 c 语言成绩 :,n); /* 输入 c 语言成绩 */ scanf(%d,&p1-score3);p1-sum=p1-score0+p1
10、-score1+p1-score2+p1-score3;p2-next=p1;p2=p1;printf(n请输入第 %d 名学生的学号,没有此学生则输入0 表示结束 :,n+1);scanf(%d,&flag);p2-next=NULL;printf(nn);return head;更多精品文档学习 - 好资料Student *sort_all(Student *head) /* 定义排序函数*/int choose;for(;)printf(ntt# # # #大学生成绩统计排序# # # #n);printf(tt#t1. 按学生学号排序t #n);printf(tt#t2. 按学生总分排
11、序t #n);printf(tt#t7. 单科高分及均分t #n);printf(tt#t8. 显示当前学生成绩t #n);printf(tt#t0. 返回上一级菜单t #n);printf( 请输入你要执行的操作:);scanf(%d,&choose);while(getchar()!=n);switch(choose)case 1:case 2:case 3:case 4:case 5:case 6:head=sort_1(head,choose);break;case 7:print(head);sort_2(head);break;case 8:print(head);break;ca
12、se 0:return head;default: printf(nn您的输入有误! 请重新输入:nn);break;Student *sort_1(Student *head,int choose) /* 定义按学号排序函数 */ Student *p1,*p2=head-next,*pm,*px;Student mid;if (!p2) return head;for(p1=p2;p1-next!=NULL;p1=p1-next)pm=p1;for(p2=p1-next;p2!=NULL;p2=p2-next)switch(choose)case 1:if (pm-nump2-num) p
13、m=p2;break;case 2:if (pm-sumsum) pm=p2;break;更多精品文档学习 - 好资料case 3:if (pm-score0score0) pm=p2;break;case 4:if (pm-score1score1) pm=p2;break;case 5:if (pm-score2score2) pm=p2;break;case 6:if (pm-score3score3) pm=p2;break;if (pm!=p1)mid=*pm;*pm=*p1;*p1=mid;px=pm-next;pm-next=p1-next;p1-next=px;printf(n
14、 排序后的成绩表为:n);print(head);return head;void sort_2(Student *head) /* 定义按总分排序函数*/Student *p=head-next;int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;int max_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0,sum_4=0;float aver_1,aver_2,aver_3,aver_4,aver_sum;if (!p) return;max_1=min_1=p-score0;max_2=min_2=p-
15、score1;max_3=min_3=p-score2;max_4=min_4=p-score3;max_sum=min_sum=p-sum;for(;p;p=p-next)if (max_1score0) max_1=p-score0;else if (min_1p-score0) min_1=p-score0;if (max_2score1) max_2=p-score1;else if (min_2p-score1) min_2=p-score1;if (max_3score2) max_3=p-score2;else if (min_3p-score2) min_3=p-score2;
16、if (max_4score3) max_4=p-score3;else if (min_4p-score3) min_4=p-score3;if (max_sumsum) max_sum=p-sum;else if (min_sump-sum) min_sum=p-sum;sum_1+=p-score0;sum_2+=p-score1;sum_3+=p-score2;sum_4+=p-score3;更多精品文档学习 - 好资料aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n; aver_su
17、m=aver_1+aver_2+aver_3+aver_4; printf( 总共 %d 名学生,具体数据为: n,n);printf( 总分最高分为%d,最低分位 %d,平均分为 %.2fn,max_sum,min_sum,aver_sum);void find(Student *head) /* 定义查询函数*/Student *p;int choose,fnum;char tem20;你好,当前系统没有任何学生数据!n );return;for(;)printf(n请输入您要查询学生的方式:nn);printf(1 、按学号查询;2、按姓名查询;0、我不查询了。nn);printf( 请
18、选择: );scanf(%d,&choose);while(getchar()!=n);if (choose=1)printf(n 请输入你要查询的学生的学号,输入0 退出学号查询:);scanf(%d,&fnum);for(;fnum;)for(p=head-next;p!=NULL&p-num!=fnum;p=p-next);if (!p)printf(nn 找不到你要查询的学号,请重新输入,输入0 表示结束 :);scanf(%d,&fnum);else if (p-num=fnum)printf(n学号为 %d 学生的数据为:n,p-num);printf( 学号 t 姓名 t 性别
19、t语文成绩数学成绩英语成绩c 语言成绩总分 n);/* 输出所有的学生信息*/printf(%dt%st%st%d%d%d%d%dn,p-num,p-name,p-sex ,p-score0,p-score1,p-score2,p-score3,p-sum);printf(nn 请输入你还要查询的学生的学号,输入 0 表示不按学号查询了: );更多精品文档学习 - 好资料scanf(%d,&fnum);else if (choose=2)printf(n请输入你要查询的学生的姓名,输入0 退出姓名查询:);scanf(%s,tem);for(;strcmp(tem,0);)for(p=head
20、-next;p!=NULL&strcmp(p-name,tem);p=p-next); if (!p)printf(nn找不到你要查询的姓名,请重新输入,输入0 表示结束:);scanf(%s,tem);else if (!strcmp(p-name,tem)printf(n姓名为 %s 学生的数据为:n,p-name);printf( 学号 t 姓名 t 性别 t语文成绩数学成绩英语成绩c 语言成绩总分 n);printf(%dt%st%st%d%d%d%d%dn,p-num,p-name,p-sex ,p-score0,p-score1,p-score2,p-score3,p-sum);p
21、rintf(nn请输入你还要查询的学生的姓名,输入0 表示不按姓名查询了:);scanf(%s,tem);else if (choose=0) printf(n你选择了不查询!n);break;else printf(n你以其他方式选择了不查询!n);break;Student *add_new(Student *head) /* 定义插入函数*/Student *p;int flag;printf(nn 请输入你要新加入学生的学号,学号为 0 表示结束输入 :); scanf(%d,&flag);while(getchar()!=n);更多精品文档学习 - 好资料for(;flag;)p=(
22、Student *)malloc(LEN);p-num=flag;printf( 请输入新加入学生的姓名:,n); /* 输入姓名 */scanf(%s,p-name);printf( 请输入新加入学生的性别:); /* 输入性别 */scanf(%s,p-sex);printf( 请输入新加入学生的语文成绩:,n); /* 输入语文成绩*/scanf(%d,&p-score0);printf( 请输入新加入学生的数学成绩:,n); /* 输入数学成绩*/scanf(%d,&p-score1);printf( 请输入新加入学生的英语成绩:,n); /* 输入英语成绩*/scanf(%d,&p-
23、score2);printf( 请输入新加入学生的 c 语言成绩 :,n); /* 输入 c 语言成绩 */ scanf(%d,&p-score3);p-sum=p-score0+p-score1+p-score2+p-score3;p-next=head-next;head-next=p;n+;printf(n 请输入还要加入学生的学号,没有此学生则输入 0 表示结束 :); scanf(%d,&flag);head=sort_1(head,1);printf( 加入后的成绩表为:n);print(head);return head;void print(Student *head)Stud
24、ent *p=head-next;if (!p) printf(nn此系统目前没有任何学生数据!nnn);return;printf( 此系统目前共计学生%d 名: n,n);printf(*学生成绩统计一览*n);printf( 学号 t 姓名 t 性别 t语文成绩数学成绩英语成绩c 语言成绩总分 n);for(;p;p=p-next)printf(%dt%st%st%d%d%d%d%dn,p-num,p-name,p-sex ,p-score0,p-score1,p-score2,p-score3,p-sum=p-score0+p-score1+p-score2+p-score3);更多精
25、品文档学习 - 好资料struct student *del(struct student *head,long num) /* 定义删除学生信息函数 */ struct student *p1,*p2;if(head=NULL) printf(nlist null! n);return head;p1=head;while(num!=p1-num & p1-next!=NULL)p2=p1;p1=p1-next;if(num=p1-num)if(p1=head)head=p1-next;else p2-next=p1-next;printf(delete:%ldn,num);n=n-1;el
26、se printf(%ld not deen found! n,num);return(head);int main()/* 主函数即用户的操作界面*/Student *head;int choose,i,num; /* 声明局部变量*/head=(Student *)malloc(LEN);head-next=NULL;for(;)printf(nttn);printf(ntt* * * *大学生成绩管理系统* * * *n); /* 学生成绩管理系统 */printf(tt*t1.学生数据键盘录入t *n); /*. 学生数据键盘录入 */printf(tt*t2.学生数据统计排序t *n); /* 学生数据统计排序 */printf(tt*t3.查询学生数据 tt *n); /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论