还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言程序设计报告课题学生成绩管理时间2010/7/15
一、需求分析任务要求自学C语言中有关链表及外部文件的内容,设计出学生成绩管理具体要求如下
1.主要功能
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(3)能查询学生成绩,不及格科目及学生__
(4)能按班级输出学生的成绩单系统功能需求分析
1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点;
2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化
二、概要设计系统总体设计框架对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据系统功能模块图
三、详细设计主要功能模块的算法设计思路如下
1、输入信息函数
(1)定义指向结构体变量的指针;
(2)__指针,找到插入结点;
(3)在要插入的结点输入信息;
(4)返回头指针
2、修改信息
(1)定义指向结构体变量的指针;
(2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入;
(3)根据要修改的编号查找对应结点;
(4)修改信息;
(5)修改成功
3、排序函数
(1)定义所要排序的班级和链表的头指针为形参;
(2)调用排序函数,把班级和链表的头指针赋给形参;
(3)在子函数中进行排序;
(4)输出排序结果
4、显示学生成绩信息(voidDispLinkl)
(1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);
(2)用指针检验是否有记录;
(3)若无记录,输出提示信息,返回主函数;若有记录,__指针,依次输出记录;
5、查询班级成绩信息(voidFindLinkl)
(1)选择所要查询的班级;
(2)输入班级
(3)在链表中寻找相应结点;
(4)输出结点信息以上各个函数的流程图如下主函数定义程序所需变量调用CREAT函数创建一个信息链表并返回指针继续进行操作
1、修改信息
2、统计成绩并排序
3、查找信息
4、输出成绩输入所需修改学生的姓名输入班级查询分数查询科目查询班级输入班级序号调用add并赋值给P-sum查找班内成员调用__erage函数输入姓名并查找学生输出不及格学生的姓名及成绩输入班级序号并输出班级成员的名字逐个输出他们的各科成绩并赋值给P-__e输出排序前的学生成绩调用sort进行排序输出排序后的学生成绩是否继续操作子函数排序f!=p-classp=p-nextf==r-classf==s-next-classs-next交换结构体内各成员的值求和:intsumi==p-classyesnosum==p-scor_1+p-scor_2+p-scor_3returnsum求平均数float__eintsumsum==addIP__e==sum/
3.0return(__e)
四、主要源程序代码#includestdio.h#include__lloc.h#includestring.h#defineNULL0#defineLENsizeofstructstudent#definePRINTprintf======================__inmenu=======================\n#definePRINprintfPleasechosethenumber:\n#definePRIprintfSorrythenumberyouchoseiserrorpleasechoseagain\nstructstudent\*定义一个结构体*\{intterm;\*学期*\intclass;\*班级*\charname
[20];\*姓名*\intscore_1;\*科目一*\intscore_2;\*___*\intscore_3;\*___*\float__e;\*平均分*\intsum;\*总分*\structstudent*next;};intn;structstudent*creatvoid\*创建信息链表*\{structstudent*head;structstudent*p1*p2;n=0;p1=p2=structstudent*__llocLEN;printfPleaseinputthestudentinfor__tion:\n;printfTermClassNameScore_1Score_2Score_3\n;scanf%d%d%s%d%d%dp1-termp1-classp1-namep1-score_1p1-score_2p1-score_3;head=NULL;whilep1-term!=0{n=n+1;ifn==1head=p1;elsep2-next=p1;p2=p1;p1=structstudent*__llocLEN;scanf%d%d%s%d%d%dp1-termp1-classp1-namep1-score_1p1-score_2p1-score_3;}p2-next=NULL;returnhead;}voidsortstructstudent*pintf\*排序(形参为链表的头指针和想要排序的班级)*\{intabce;floatd;charz
[20];structstudent*r*s;whilef!=p-class\*判断是否是想要排序的班级*\p=p-next;forr=p;f==p-classr;r=r-nextfors=p;s-nextf==s-next-class;s=s-nextifs-__es-next-__e{\*交换结构体各个成员*\d=s-__e;s-__e=s-next-__e;s-next-__e=d;a=s-score_1;s-score_1=s-next-score_1;s-next-score_1=a;b=s-score_2;s-score_2=s-next-score_2;s-next-score_2=b;c=s-score_3;s-score_3=s-next-score_3;s-next-score_3=c;e=s-sum;s-sum=s-next-sum;s-next-sum=e;strcpyzs-name;strcpys-names-next-name;strcpys-next-namez;}}intaddintistructstudent*p\*求和(形参为想要求和的班级和链表的头指针)*\{intsum;ifi==p-classsum=p-score_1+p-score_2+p-score_3;returnsum;}float__erageintistructstudent*p\*求平均分(形参为想要求和的班级和链表的头指针)*\{float__e;intsum;sum=addip;\*调用add函数求和*\__e=sum/
3.0;return__e;}void__in\*主函数*\{intim;structstudent*p*q;printf================Nowbegintosetup===================\n;p=creat;\*调用creat函数,并创建一个信息链表*\q=p;do{PRINT;printf1:correctthestudentinfor__tion\n;\*修改学生信息*\printf2:calculatethestudentsscoreandthensort\n;\*统计学生成绩并排序*\printf3:searchthestudentsinfor__tion\n;\*查找学生信息*\printf4:outputthescoreofstudent\n;\*输出学生成绩*\PRIN;do{scanf%di;ifi!=1i!=2i!=3i!=4PRI;\*报错功能*\}whilei!=1i!=2i!=3i!=4;ifi==1{charx
[20];printfPleaseinputthenameofstudentyouwanttocorrect:;do{scanf%sx;\*输入你要修改学生成绩的姓名*\forp=q;p!=NULL;p=p-next{ifstrcmpxp-name==0\*查找学生*\{printfNowpleaseinputthenewscoreofthestudent:\n;\*输入新的成绩*\printfScore_1Score_2Score_3\n;scanf%d%d%dp-score_1p-score_2p-score_3;printfInfor__tioncorrectsuc__ed\n;printfNow%ssscoreis%-6d%-6d%-6d\nxp-score_1p-score_2p-score_3;break;}}ifp==NULLprintfCantfindthestudentpleaseinputagain:;\*报错功能*\}whilep==NULL;p=q;}ifi==2{intj;printfPleaseinputwhichclassyouwanttocount:;scanf%dj;\*输入你想要统计的班级*\printfThescoreinfor__tionof%dclassis:\nj;printfNameScore_1Score_2Score_3__erageSum\n;forp=q;p!=NULL;p=p-next{p-sum=addjp;\*调用函数add并赋值给结构体*\p-__e=__eragejp;\*调用函数__erage并赋值给结构体*\}p=q;printfBeforesortedthestudentscoreis:\n;forp=q;p!=NULL;p=p-nextifj==p-classprintf%-9s%-9d%-9d%-9d%-
9.2f%-9d\np-namep-score_1p-score_2p-score_3p-__ep-sum;\*输出排序前的学生成绩*\p=q;sortpj;\*调用函数sort*\printfAftersortedthestudentscoreis:\n;forp=q;p!=NULL;p=p-nextifj==p-classprintf%-9s%-9d%-9d%-9d%-
9.2f%-9d\np-namep-score_1p-score_2p-score_3p-__ep-sum;\*输出排序后的成绩*\p=q;}ifi==3{inta;chary
[20];PRINT;printf1:searchthescoreofstudent\n;\*查询学生的各科分数*\printf2:searchthescoreoffaillesson\n;\*查询不及格科目*\printf3:searchthenameofstudent\n;\*查询每个班级的成员*\printfWhatsdoyouwanttodo;PRIN;scanf%da;\*输入你想要执行的操作的序号*\ifa==1{printfPleaseinputthestudentname:;do{scanf%sy;\*输入你想要查询的学生的姓名*\forp=q;p!=NULL;p=p-next{ifstrcmpyp-name==0\*查找学生*\{printf%ssscoreis%d%d%d\np-namep-score_1p-score_2p-score_3;break;\*输出学生的成绩*\}}ifp==NULLprintfCantfindthestudentpleaseinputagain:;\*报错功能*\}whilep==NULL;p=q;}elseifa==2{forp=q;p!=NULL;p=p-next{ifp-score_160printf%sslesson1isfailedandthescoreis%d\np-namep-score_1;ifp-score_260printf%sslesson2isfailedandthescoreis%d\np-namep-score_2;ifp-score_360printf%sslesson3isfailedandthescoreis%d\np-namep-score_3;}p=q;}elseifa==3{intc;printfPleaseinputthenumberofclass:\n;scanf%dc;\*输入你想要输出成绩的班级*\printfThe%dclassh__ethesestudent:\nc;forp=q;p!=NULL;p=p-nextifc==p-classprintf%-10sp-name;printf\n;p=q;}}ifi==4{intb;printfPleaseinputwhichclass:\n;\*输入你想要输出成绩的班级*\scanf%db;printfNowthescoreofthestudentof%dclassis:\nb;printfNameScore_1Score_2Score_3\n;forp=q;p!=NULL;p=p-nextifb==p-classprintf%-12s%-12d%-12d%-12d\np-namep-score_1p-score_2p-score_3;}输出成绩PRINT;printfDoyouwanttogoingon\n;\*是否想要继续操作*\printf1:YES2:NO\n;scanf%dm;}whilem!=2;}
五、调试分析过程描述运行情况如下输入学生的基本信息修改指定学生的成绩统计并排序一班成绩统计并排序二班的成绩查询指定学生的成绩查询学生不及格的成绩查询班级成员输出一班的成绩输出二班的成绩调试过程中的主要问题及解决方法
1、执行排序函数时出错,指针指向不确定
2、编译时无出错警告,连接时出现错误
3、表格输出时,格式不能对齐未运用格式控制字符
六、课程设计小结通过这次课程设计,我对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序在调试过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行当然我也认识到了自己的薄弱之处,如对链表相关知识的欠缺,文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面输入学生信息成绩管理成绩查询添加信息修改记录求总分平均分排序输出结果成绩查询不及格科目学生__。