您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 成绩管理系统程序设计实验报告
北京航空航天大学北海学院实验报告学院:软件与信息工程学院专业班级:软件工程3班课程:学生成绩管理系统程序设计实践指导老师:曹宁学号及姓名:N3090120301刘朝卿N3090120303刘惠N3090120304张姝N3090120305陈锋一.实验目的:通过课程设计,提高自己动手的能力,让实践和理论相结合,进一步巩固《C语言程序设计》的课程内容,掌握工程软件的基本设计方法。学会将知识应用于实践,提高分析和解决问题的能力,加强综合能力。为以后计算机的学习打下坚实的基础,有利于毕业时做毕业设计。二.实验内容:运用结构体和共用体,以及单链表和循环的知识点编辑一个简单的学生基本信息管理系统,使之能够完成学生基本信息的录入、修改、插入、查询、排序、打印、退出操作。执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到编译成功为止。执行运行操作,直到全部程序能够运行成功为止。做完后请老师检查,并能回答老师所提的相关问题。三.需求分析:1.该学生信息管理系统能够完成基本的信息处理,如录入,保存,读取,输出,修改,删除,添加,统计,排序等项目操作。实现统计用户的总分和平均分。能够查看单个用户的各科成绩2.每个模块的功能如下:a)录入模块:可先后输入学号,姓名,高数成绩,计算机成绩,英语成绩;b)保存模块:用于数据存盘处理,如果用户没有专门进行此操作且对数据有修改,在退出时系统会提示用户存盘。c)查询模块:用于按编号或姓名来查询用户记录d)输出模块:可输出读取的学生信息与平均成绩;e)修改模块:用于修改用户记录。先按输入的编号查询到该记录,然后提示用户修改编号之外的值,但是编号不能修改;f)删除模块:可删除所读取的学生信息;g)插入模块:用于插入记录。即按编号查询到要插入的结点的位置,然后在该编号之后插入一个新结点;h)排序模块:利用插入排序实现单链表的按总分字段的降序排序,格式是从高到低;i)统计模块:用于分别统计该班的总分第一名和单科第一及各科不及格的人数;j)退出模块:可直接退出学生信息管理系统;⒉该学生信息管理系统是在VC++的环境下运行的。该信息系统要测试的数据如下:录入模块:学号姓名高数英语计算机1XXX9980992XXX9989893XX6770584XXX786778保存模块:输入文件名即可保存于该文件;查询模块:输入相应的文件名可调出相应的学生信息;输出模块:可输出录入,修改,删除,添加后的学生信息;修改模块:修改信息(3XX677058)删除模块:删除信息(2XX998989)添加模块:添加信息(5XXX788789)排序模块:按平均成绩由小到大排列并输出,如下:学号姓名高数英语计算机平均成绩3XX67705865.0000004xxx78677874.0000005XXX78878984.0000001xxx99809992.000000统计模块:统计该班的总分第一名和单科第一及各科不及格的人数,如下:退出模块:输入0即可退出系统;四.概要设计:主函数结构图:模块功能详细说明;A.录入模块:录入基本信息;B.保存模块:输入文件名即可保存于该文件;C.读取模块:输入相应的文件名可调出相应的学生信息;D.输出模块:可输出录入,修改,删除,添加后的学生信息;E.修改模块:修改学生信息;F.删除模块:只要输入要删除的学生学号,就可删除该录入插入输出修改删除保存排序退出删除统计学生的有关信息,以后输出时就不再显示该学生的信息;G.添加模块:添加学生信息;H.统计(排序)模块:按平均成绩由小到大排列并输出;I.退出模块:推出系统;五、详细设计及运行结果流程图,函数之间相互调用的图示,程序设计及编码,运行结果。⑴各模块的程序控制图:录入模块是否继续录入录入基本信息结束YN保存模块保存基本信息并输入保存的文件名结束YN读取模块是否读取输入保存的文件名,即可结束YN查询模块输出所录入的学生成绩信息结束修改模块是否修改输入要修改的学号结束YN英语数学平均成绩C语言删除模块输入删除学号结束YN添加模块是否继续添加输入添加信息结束YN统计模块按学生成绩由低到高排列结束⑵函数之间相互调用的图示:、主函数调用录入函数调用保存函数调用查询函数调用修改函数调用删除函数调用输出函数结束结束结束结束结束调用排序函数结束调用读取模块调用保存函数调用保存函数调用添加函数调用保存函数调用查找函数结束是否继续添加调用输出函数结束(3)各模块流程图开始head-next=NULL;p2=head;继续输入(Y/N)?p2-next=p1;p2=p1;NY录入模块输入学生成绩信息returnhead否Y结束开始输入新增学生信息申请结点p=headhead==NULL假假q-next!=NULLq=q-next真p-next=head-next;head-next=p;returnhead返回查询学生信息:开始p1=head输入学生学号xx!=p1-num&&p1-next!=NULLp1=p1-next返回主菜单输出无信息输出学生信息x==p1-num真真Switch(number)Number=1Number=2Number=0真假开始按学号查询按姓名查询退出2无学生信息Head==NULLFlag!=0真学生信息的删除:开始输入要删除学生的学号numberhead==NULLNp1=headNumber!=p1-num&&p1-next!=NULLYP2=p1;p1=p1-nextNnumber==p1-numYp1==headhead=p1-next;free(p1)p2-next=p1-next;free(p1)Nsum--无此学生信息输出学生总人数N⑷测试与行结果A.录入模块:B.删除模块:C.查询模块:D.修改模块:E.插入模块:F.统计模块:G.排序模块:H.保存模块:源代码:/*对用户的有效信息进行输入、排序等操作实现统计用户的总分和平均分能够查看单个用户的各科成绩*/#includestdio.h/*标准输入输出函数库*/#includestdlib.h/*标准函数库*/#includestring.h/*字符串函数库*/#includeconio.h/*屏幕操作函数库*/#defineHEADER1( ̄ε(# ̄)--------------------STUDENT-------------------(°ο°)~@\n#defineHEADER4WELCOMEBABY!\n#defineHEADER2|number|name|Eng|Math|Comp|sum|ave|mici|\n#defineHEADER3|---------------|---------------|----|----|----|--------|-------|-----|#defineFORMAT|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|%4d|\n#defineDATAp-data.num,p-data.name,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#defineEND---------------------------------------------------------------------\nintsaveflag=0;/*是否需要存盘的标志变量*//*定义与学生有关的数据结构*/typedefstructstudent/*标记为student*/{charnum[10];/*学号*/charname[15];/*姓名*/intcgrade;/*C语言成绩*/intmgrade;/*数学成绩*/integrade;/*英语成绩*/inttotal;/*总分*/floatave;/*平均分*/intmingci;/*名次*/};/*定义每条记录或结点的数据结构,标记为:node*/typedefstructnode{structstudentdata;/*数据域*/structnode*next;/*指针域*/}Node,*Link;/*Node为node类型的结构变量,*Link为node类型的指针变量*/voidmenu()/*主菜单*/{system(cls);/*调用DOS命令,清屏.与clrscr()功能相同*//*在文本模式中选择新的字符颜色*//*在文本窗口中设置光标*/printf(TheStudents'GradeManagementSystem\n\n);printf(*_^为您服务是俺的荣幸!^_*\n\n);printf(▂▃▄▅▆▇██■▓@_@菜单@_@▓■█▇▆▅▄▃▂▁\n\n\n);printf(*1input(_)2delete(*^.^*)*\n\n);printf(*3search(⊙0⊙)4modify~w_w~*\n\n);printf(*5insert(O)6count(+_+)*\n\n);printf(*7sort(^▽^)8save╰_╯*\n\n);printf(*9display(#‵′)0quit(__)*\n\n);printf(◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣\n\n\n);/*cprintf()送格式化输出至文本窗口屏幕中*/}voidprintheader()/*格式化输出表头*/{printf(HEADER1);printf(HEADER4);printf(HEADER2);printf(HEADER3);}voidprintdata(Node*pp)/*格式化输出表中数据*/{Node*p;p=pp;printf(FORMAT,DATA);}voidWrong()/*输出按键错误信息*/{printf(\n\n\n\n\n***********Error:inputhaswrong!pressanykeytocontinue**********\n);getchar();}voidNofind()/*输出未查找此学生的信息*/{printf(\n=====Notfindthisstudent!\n);}voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/{Node*p;p=l-next;/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p)/*p==NULL,NUll在stdlib中定义为*/{printf(\n=====Notstudentrecord!\n);getchar();return;}printf(\n\n);printheader();/*输出表格头部*/while(p)/*逐条输出链表中存储的学生信息*/{printdata(p);p=p-next;/*移动至下一个结点*/printf(HEADER3);}getchar();}Node*Locate(Linkl,charfindmess[],charnameornum[]){Node*r;if(strcmp(nameornum,num)==0)/*按学号查询*/{r=l-next;while(r){if(strcmp(r-data.num,findmess)==0)/*若找到findmess值的学号*/returnr;r=r-next;}}elseif(strcmp(nameornum,name)==0)/*按姓名查询*/{r=l-next;while(r){if(strcmp(r-data.name,findmess)==0)/*若找到findmess值的学生姓名*/returnr;r=r-next;}}return0;/*若未找到,返回一个空指针*/}/*输入字符串,并进行长度验证(长度l
本文标题:成绩管理系统程序设计实验报告
链接地址:https://www.777doc.com/doc-4391329 .html