




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学院 班级 学号 姓名目录1摘要31.1设计题目31.2设计内容31.3开发工具31.4应用平台32详细设计42.1程序结构42.2主要功能52.3函数实现52.4开发日志63程序调试及运行 73.1程序运行结果73.2程序使用说明173.3程序开发总结174附件(源程序)18/*在后面的文档编写中, 请你不要修改各个标题的内容, 从而确保 报告内容和风格一致。完成全部内容后,你只需要在上面的目录 上右键“更新域”,选择“只更新页码”就可以更新正确的目录页 码。注意:目录的左边距为6.5厘米。*/1摘要1.1设计题目学成绩管理程序1.2设计内容为了便于对学生星系进行管理,这里设计了学生信息管理
2、程序。该程序主要通过对链表的相关操作运 用菜单的形式实现对学生基本信息的管理。首先用户要输入三个学生的基本信息,程序即据此建立了一个 有三个学生的链表,每个结点包括学号、姓名、3门课的成绩(英语、数学、计算机,其中成绩精确到小数点后两位)。菜单为:1 显示。(即显示所建立的链表及当前链表内容)2排序。(即将用户所输入的学生信息按学号大小对原有链表内容进行排序,并将 经排序所产生的新链表展示给用户)3 插入。(用户根据需要可增加原链表中学生的数量,输入一个学生的基本信息, 即将其插入原链表中,且新链表按学号有序排列并展现给用户)4查找。(输入一个学号,输出各种成绩)5删除。(输入一个学号,从链表
3、中删除该学生,并展示新链表)6统计。(若按1,则输入该学生的学号统计该学生的总分及平均分;若按 2,则输 入课程(1英语2数学3计算机)求该门课程的总分及平均分)7存盘。(将建立起来的链表以文件的形式存储)&读入。(将原来已将存盘的文件读入内存,进行管理)1.3开发工具Visual C+ 6.0 和 Win32。1.4应用平台Windows XP/Vista 32 位2详细设计2.1程序结构程序的流程:该程序首先定义了一个记录学生基本信息的结构体,和全局变量链表的头指针“*head”,自定义了 13个函数,然后是主函数通过调用以上自定义函数来实现程序的功能。这样做的好处是,在调用自定义函数 时
4、不必再对其申明。主函数第一行首先在程序运行界面中央输出“欢迎进入学生管理”,接着是输出“按回车键进入”(在界面中央),以提醒用户进一步操作程序。按回车键后程序执行创建链表函数(create。),这时出现界面需要用户输入三个学生的基本信息,按回车键后创建成功,同时进入while循环体。该循环提以“ system(cls) ”开始,作用是在每次循环结束进入下一次循环时对上一次循环的运行结果进行清除, 以保证本次循环的结果能清晰展示。该循环第二行执行函数“printfmenu ()”,输出当前链表内容。接着进入菜单选择界面,此时需输入数字(08)进行菜单选择。若输入8 该循环结束;否则继续。然后执行
5、菜单选择函数,用户通过菜单上执行不同的操作调用不同的函数。执行完菜单函数后,按回车键本次 循环结束,并进入下一次循环。循环结束后,又一次执行清屏程序,最后输出“谢谢使用,愿你开心度过 每一天”字样,至此整个程序结束。自定义函数:一、 显示菜单函数:void printfmenu()。用输出管理菜单:0 .显示1 .排序2 .插入3 .查找4 .删除5 .统计6 .存盘7 .读入8 .结束二、 链表输出函数:void printfform()。用来将已经创建链表或当前所建链表进行输出显示。三、 链表创建函数:void create()。该函数用来创建一个动态链表,期间需要用户输入学生基本信息。四
6、、 排序函数:void arrange()。该函数用来对所创建的链表或当前存在的链表中的结构体按学号递增 排序。排序结束调用“链表输出函数”,将新产生的链表进行输出。五、 插入函数:void insert() 调用该函数时,由用户输入一个学生的信息,将产生一个新的结构体,并将其按学号插入当前链表中。调用链表输出函数,将新链表输出。六、 查找函数:void find()。输入一个学号,将链表中该学生的信息输出。若链表中无该学号,则输出“未找到”。七、 删除函数:void delet()。输入一个学号,将链表中该学号学生信息删除,并调用链表输出函数将 删除后的链表输出。若输入学号不存在,输出“未找
7、到”。八、按学生统计函数:void studentcount()。输入一个学号,计算该学号学生的总分和平均分并输出。若学号不存在,输出“未找到”。九、按科目统计函数:void subjectcount()。输入一个科目序号(1英语 2 .数学 3 计算机),计算该科目的总分和平均并输出。十、统计函数:void count()。当输入1,调用“按学生统计函数”;当输入2,调用“按科目统计函数”。分别进行统计操作。十、存盘函数:void save()。将链表中的内容以文件的形式存放在磁盘中。 十二、读入函数: void read() 。将已经存盘的文件读入内存,进行管理。十三、选择菜单函数:voi
8、d menu(char t)。主函数输入实参变量t 该函数通过选择判断调用以上函 数来实现该程序的管理功能。参数传递: 该程序包括主函数总共有 14 个函数,只有选择菜单函数是有参函数,其他均是无参函数。选择 菜单函数运用 switch 选择结构,形参的传递用来选择执行调用相应的菜单功能函数。如从主函数 输入 1,主函数调用该函数,并把 1传递给该函数,该函数则调用“排序函数”执行菜单 中的排序操作。2.2 主要功能程序功能: 1、该程序主要用来对数量较少的学生基本信息进行管理(初始学生数为三)。2、显示输入的学生基本信息。3、对学生按学号进行排序、 ,并将信息以链表的形式进行保存。4、可通过
9、插入操作增加所要处理的学生信息数量。5、显示所要查找的学生的基本信息。6、删除不必要的信息。7、统计学生成绩的相关数据,总分和平均分。8、将经过处理的信息存盘管理。9、以文件的形式将以存盘信息读入内存进行管理。 原理和方法: 1、该程序的要通过对链表进行操作来实现管理。2、 用循环结构和指针对已存在链表输出显示,调用输出函数“printf ”。3、排序时先把链表中的学好数据存放在一位数组中,再用选择排序法对数组中的元素排序,最后用 while 循环结构把数组中的元素与结构体逐一配对,从而实现对链表的排序。4、先用 while 找到插入位置,然后是链表的插入操作。5、while 循环执行查找操作
10、。6、while 循环找到删除对象,链表的删除操作。7、while 循环找到操作对象,在执行相应操作。8、文件的存储。9、文件的读取。2.3 函数实现函数主要运用了 while、 do。 while、 for 循环结构,还有选择排序法。函数大多为无参类型,自函数之间 有少量调用。如排序、插入、删除、统计等函数都是较为简单的函数,只需根据医学知识稍加修改即可。 数据结构方面,主要事项是函数调用,主函数调用菜单函数,菜单函数又调用其它类型函数,其他自定义函数之间也有调用。2.4 开发日志关于该程序的设计,首先根据题目的要求考虑实现该函数所需的函数。考虑把自定义函数放在整个程 序的前面,这样在主函数
11、调用时就不必再对其进行申明。比如必须的一些基本函数链表输出函数、链表创 建函数、链表排序函数、查询函数、链表删除函数、统计函数等,先把这些基本函数建立起来之后,程序 的整体结构。考虑到程序的整体结构通过函数调用来实现较为方便,由此增加设计了一些函数,如链表输 出函数、显示菜单函数、存盘函数、读入函数等。函数的的创建过程实在是一个繁琐的工作, 编译时常要去翻看课本去查找已经遗忘的 C 语言的相关语 法知识,特别是一些细节上的设计,更不敢轻易放过。如转义字符“ t ”的使用回事程序界面更加美观整 洁好看, 期间也对结构体链表的知识作了较好的复习掌握。 在做到排序函数时突然忘了选择排序法的算法, 于
12、是通过查资料对其进行了重新的掌握,其中插入函数的算法较为复杂,通过分析发现,须先查找然后再 插入,查找的算法编号之后,后面的统计、删除函数也就迎刃而解了。调试的过程是最令人纠结的,觉得完好的程序却总是调不出来,经过复杂的心理脑力斗争最终发现却 总是一些不该有的失误,而不是算法上问题。调试的过程是用时最长的,同时也磨练了我的耐性,让我对 频频出现的错误更加理智、更加淡定、更加耐心。而且在调试的过程中也积累了一些常见的错误经验,对 部分调试的错误能大体上感知其错误的原因及位置。影响最深的是对排序函数的调试,指针数组的地址代 码写错导致程序运行时不能读入,还有创建链表函数出现的问题,输入函数多打了几
13、个“%lf ”导致链表创建时出现乱码。程序的整体结构设计参考了“ C 语言课程设计”一书,再次申明。 总之,程序的运行过程看是简单,作用也非常单一,但对于像我这样的智商不是很高的初学者而言, 编程、调试过程是相当的艰辛与繁琐,其间个中滋味,汗水、辛酸只能把它埋在心底。3程序调试及运行3.1程序运行结果程序开始运行界面程序运行过程界面如下:c .9 0-r 3 4 5 9 o10101010,数学成绩,英语成绩,计算机成绩 数学成绩英语成绩56.003.0034.0047.000003计算机成绩4.0095.005.008.00。、F:计算机实验XC语言程序设计大作业侏合作业程序学生咸绩管理De
14、bugkxues.香入找常盘入東 甩逵港-潍 012345678请选择按旷8愉馨提示嚅要逬行排序后才可逬行插入,输入7返回主菜单,按回车犍继续请输入要插入的学号姓名数学成绩英语成绩,计算机成绩C F:计算机实验XC语言程序设计大作业炼合作业程序学生成绩管aDebUgkxueS. XLnun香入找常盘入東012345678选择(按0聲提示,需妾逬行排序后才可逬行插入,输入夕返回主菜单,技回车犍继续请输入豊華入的学号姓名数学成绩.104孔德智98 9? 95学号姓名数学成绩103hs56.00104孔德智98.0010S2h34.00109 47.00英语成绩,计算机成绩英语成绩3.000000计
15、算机成绩4.0095.005.008.00C F:计算机实验XC语言程序设计大作业炼合作业程序学生成绩管aDebUgkxueS.请选择(按0FWA|的学廳5105zh搜狗拼音香入找常盘入東012345678数学成绩英语成绩计算机成绩34.004.005.00C F:计算机实验XC语言程序设计大作业炼合作业程序学生成绩管理Debugxues.j X一岸入找畀盘入亠012345G7.AI冃输入旻测的学生的学号1厉 翠号姓名数学成绩103 hs56.00104 孔德智98.00105 zh34.00英语成绩3.00 97.00 4.00计算机成绩4.0095.005.00O y亠 U 壬口 请选择按
16、旷8搜狗拼音cC E:计算机实验XC语言程序设计大作业侏合作业程序学生咸绩管理Debugxues.请选择按旷香入找常盘入東0123456781.2.鲁雾禅号104孕彎为104的总分=290.00,平均分=96 67搜狗拼音请选择按旷8香入找常盘入東012345678均分均分诵选择科目 1 数学2 英语3 计尊机3 该科目的恿分=404 00坪均分=34 671.2.请输入2*rcF:计算机实验XC语言程序设计大作业炼合作业程序学生成绩管理Debugxues.-入找盘入東 显薔查删结 012345678谄选择按旷86己存利c :ZZscore.dat-E:l计算机实验蚯语言程序设计犬惟业侏合作业
17、程序1学生成绩管理0砒豳(U解请选择按香入找畀盘入束 显齧查删结 A1234567B聽嶽鷹器篦霹晋呎程序结束界面:3.2程序使用说明该程序较为简单,根据程序运行时的提示即可完成操作。在第一次进行显示操作时,需按两次0才能显示所建链表。在完成一次菜单操作后,应按回车键返回主菜单。3.3程序开发总结大作业的编写,是一个对所学知识综合应用的过程,也是对所学知识掌握情况的检验过程,更是对所 学知识系统复习的过程。其间涉及除程序设计外多方面技能应用,能够很好训练一个人的整体思维能力, 体现其综合素质。同时在完成作业的过程中,也让我体验了当一个程序员的神奇感受。当然我编的程序很简单,用途也 很有限,其实就
18、当前的程序来看根本没什么实际用途。但是设计工作的过程还是让我体会到了其艰辛其难 度,编完之后油然而生的小小成就感是相当美妙的。在编程设计过程中遇到过很多问题和困难,也让我深 刻认识到自己知识的欠缺,感受到自己离一个真正的程序设计人员的差距还是相当之远,自己还有很多只 是要学习和掌握。更重要的是过程激发了我对计算机编程的兴趣,虽然这门课程即将结束,当我想我对其 的学习与热爱绝不会停止。限于本人智商和时间的原因,该程序存在一定的缺陷和一些需要完善提高的地方,现在此处指出如下:1、在链表的创建上,包含的信息量较少,仅有三个学生,其实据此方法可适当增加学生数量,以增强程序的实用性。2、再删除操作上,仅
19、有对单个学生的删除功能,缺乏相应的全部删除功能,限于时间的原因未能增加。3、在对学生信息处理上,功能较少,缺乏最高分最低分的统计以及对于程序的排序。4、在统计功能的程序设计上,在选择完成一种统计操作后,程序即回到主菜单而不能回到统计界面继续 进行统计操作,此不足之处未能改善。当然通过对大作业的撰写,打字水平也有了较大的提高。总之,完成大作业,无论是思想上、能力上 还是知识上都有了较大的飞跃,各方面都受益匪浅。4附件(源程序)#i nclude #in elude #i nclude struct stude ntlong num;char n ame80;double score3;struc
20、t stude nt *n ext;/定义全局变量head各个函数中均可用将菜单列出函数struct stude nt *head;#defi ne LEN sizeof(struct stude nt) struct stude nt *stu;void prin tfme nu()printf(ttttO.显示 n);printf(tttt1.排序 n);printf(tttt2.插入 n);printf(tttt3.查找 n);printf(tttt4.删除 n);printf(tttt5.统计 n);printf(tttt6.存盘 n);printf(tttt7.读入 n);print
21、f(tttt8.结束 n);void prin tfform()/用于每次将链表列出struct stude nt *p;printf(t学号t姓名t数学成绩t英语成绩t计算机成绩n); p=head;if(head!=NULL)dot%.2f printf(t%ldt%s t%.2ft%.2fn,p-num,p-name,p-score0,p-score1,p-score2); p=p-next;while(p!=NULL);else return;void create() / 创建三人构成的初始表 int i=0,j,k;struct student *p1,*p2;char name1
22、380;long num13;double score133; head=p1=p2=(struct student *)malloc(LEN);i+;printf( 请输入 3 个所要处理的学生信息 个学生的信息for(k=0;k3;k+)scanf(%ld%s,&num1k,name1k);for(j=0;j3;j+) scanf(%lf,&score1kj);while(inext=p1;p1-num=num1i; strcpy(p1-name,name1i); for(j=0;jscorej=score1ij;p2=p1;if(i=2) p1-next=NULL;elsep1=(str
23、uct student *)malloc(LEN);包括学号、 姓名 ,英语、数学、计算机的成绩 n);/建立三个学生的链表/链表结束/开辟一个新的单元/赋予三/排序函数void arrange()void printfform(); struct student *p1,*p2,*p3;long s3; p2=p1=head;int i,j,t,k; for(i=0;inum; p1=p1-next; for(i=0;i3;i+)k=i;for(j=i+1;jsj)k=j; if(k!=i) t=sk; sk=si; si=t; for(i=0;inum!=si&p2!=NULL) p2=p
24、2-next;pi=p2; p2=head; head=p0;p0-next=p1;p1-next=p2;p2-next=NULL; printfform();void insert()/插入函数struct student *p0,*p1,*p2; char t;printf( 温馨提示 :需要进行排序后才可进行插入 ,输入 9 返回主菜单 ,按回车键继续 n); t=getchar();if(t=9) return;printf( 请输入要插入的学号 ,姓名 , 数学成绩 ,英语成绩 ,计算机成绩 n); stu=(struct student *)malloc(LEN);scanf(%l
25、d%s%lf%lf%lf,&stu-num,stu-name,&stu-score0,&stu-score1,&stu-score2); p0=stu;/p0 指向要插入的节点p1=head;/p1 指向首节点while(p0-nump1-num)&(p1-next!=NULL)/找插入位置p2=p1; p1=p1-next; if(p0-numnum)if(head=p1)/插入到第一个节点前head=p0;else p2-next=p0;p0-next=p1;else/ 插入到最后一个节点后p1-next=p0; p0-next=NULL; printfform();/ 显示链表void
26、find()/ 查找函数struct student *p1; long num1;p1=head;printf( 请输入要查找的学号 ); scanf(%ld,&num1);while(p1!=NULL) if(p1-num=num1)t%.2f printf(t 学号 t 姓名 t 数学成绩 t 英语成绩 t 计算机成绩 n); printf(t%ldt%s t%.2ft%.2fn,p1-num,p1-name,p1-score0,p1-score1,p1-score2);break;p1=p1-next;if(p1=NULL)printf( 未找到 );void delet()long
27、num;struct student *p1,*p2;p1=head;printf( 请输入要删的学生的学号 );scanf(%d,&num); while(num!=p1-num&p1-next!=NULL) p2=p1;p1=p1-next;if(num=p1-num)if(p1=head) head=p1-next;elsep2-next=p1-next;printfform();else/删除指定学号的函数/p1 指向的不是所要的节点/找到了/对首节点特殊处理,并且后面还有节点printf( 学号为 %ld 的同学未找到 n,num);void studentcount()double
28、 aver,zong; struct student *p1; long num;printf( 请输入学号 ); scanf(%ld,&num); p1=head;while(p1!=NULL)/按学生统计函数if(p1-num=num) zong=p1-score0+p1-score1+p1-score2; aver=zong/3;printf( 学号为 %ld 的总分 =%.2f, 平均分 =%.2f,p1-num,zong,aver); break;p1=p1-next; if(p1=NULL) printf( 未找到 );void subjectcount() / 按科目统计函数do
29、uble aver,zong=0;struct student *p1;int i,n=0;printf(t 请选择科目 (13);printf(t1. 数学 );printf(t2. 英语 );printf(t3. 计算机 ); scanf(%d,&i);p1=head; while(p1!=NULL)zong=zong+p1-scorei-1;n+;p1=p1-next; aver=zong/n;printf( 该科目的总分 =%.2f, 平均分 =%.2f,zong,aver);void count()/ 统计函数int t;printf(tt1. 求学生总分平均分 ntt2. 求科目总分平均分 n); printf( 请输入 );scanf(%d,&t);switch(t)case 1:studentcount();break;case 2:subjectcount();break;void save()FILE *fp;struct student *p1;p1=head; if(fp=fopen(score.dat,wb)=NULL) printf(Cannot open file); exit(1); while(p1!=NULL)fwrite(p1,LEN,1,fp); p1=p1-next;f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省2024年中考数学面对面几何图形的证明与计算题库
- 2025版高考数学二轮复习第2部分专题1三角函数和解三角形第1讲三角函数的图象与性质教案理
- 增加销售额的新策略
- 川教版信息技术三年级上册《第一单元 奇妙的信息世界 2 智慧科技新生活》教学设计
- 2024年黑龙江省绥化市中考化学真题(解析版)
- 2024年新人教版九年级上册化学课件 第3单元 课题1 分子和原子 第2课时 分子可分为原子
- 消防安全生产教育培训
- 安全教育高中班会
- 血栓形成预防
- 巴厘岛旅游心得
- 果蔬自发气调包装原理与应用演示文稿
- DB43T 2428-2022 水利工程管理与保护范围划定技术规范
- SB/T 11016-2013足部保健按摩服务规范
- GB/T 4062-2013三氧化二锑
- 神经系统的结构与神经调节的基本方式 【知识精讲+高效备课】 高考生物一轮复习 (新教材)
- GB/T 15328-2019普通V带疲劳试验方法无扭矩法
- 马克思主义基本原理(完整版)
- 涉密人员脱密期管理制度
- 《GNSS原理及应用》课件
- 企业风险管理-战略与绩效整合(中文版)
- 三阶段DEA模型理论与操作步骤详解
评论
0/150
提交评论