




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学 院班 级学 号姓 名目录1 摘要31.1 设计题目31.2 设计内容31.3 开发工具31.4 应用平台32 详细设计32.1 程序结构32.2 主要功能32.3 函数实现32.4 开发日志43 程序调试及运行43.1 程序运行结果43.2 程序使用说明43.3 程序开发总结44 附件(源程序)4/*在后面的文档编写中,请你不要修改各个标题的内容,从而确保报告内容和风格一致。完成全部内容后,你只需要在上面的目录上右键“更新域”,选择“只更新页码”就可以更新正确的目录页码。注意:目录的左边距为6.5厘米。*/1 摘要1.1 设计题目学成绩管理程序1.2 设计内容为了便于对学生星系进行管理,这
2、里设计了学生信息管理程序。该程序主要通过对链表的相关操作运用菜单的形式实现对学生基本信息的管理。首先用户要输入三个学生的基本信息,程序即据此建立了一个有三个学生的链表,每个结点包括学号、姓名、3门课的成绩(英语、数学、计算机,其中成绩精确到小数点后两位)。菜单为: 1显示。(即显示所建立的链表及当前链表内容) 2排序。(即将用户所输入的学生信息按学号大小对原有链表内容进行排序,并将经排序所产生的新链表展示给用户) 3插入。(用户根据需要可增加原链表中学生的数量,输入一个学生的基本信息,即将其插入原链表中,且新链表按学号有序排列并展现给用户) 4查找。(输入一个学号,输出各种成绩) 5删除。(输
3、入一个学号,从链表中删除该学生,并展示新链表) 6统计。(若按1,则输入该学生的学号统计该学生的总分及平均分;若按2,则输入课程(1.英语 2.数学 3.计算机)求该门课程的总分及平均分) 7存盘。(将建立起来的链表以文件的形式存储) 8读入。(将原来已将存盘的文件读入内存,进行管理)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)进行菜单选
5、择。若输入8,该循环结束;否则继续。然后执行菜单选择函数,用户通过菜单上执行不同的操作调用不同的函数。执行完菜单函数后,按回车键本次循环结束,并进入下一次循环。循环结束后,又一次执行清屏程序,最后输出“谢谢使用,愿你开心度过每一天”字样,至此整个程序结束。自定义函数:一、显示菜单函数:void printfmenu()。用输出管理菜单:. 显示. 排序. 插入. 查找. 删除. 统计. 存盘. 读入. 结束二、链表输出函数:void printfform()。用来将已经创建链表或当前所建链表进行输出显示。三、链表创建函数:void create()。该函数用来创建一个动态链表,期间需要用户输入
6、学生基本信息。四、排序函数:void arrange()。该函数用来对所创建的链表或当前存在的链表中的结构体按学号递增排序。排序结束调用“链表输出函数”,将新产生的链表进行输出。五、插入函数:void insert()调用该函数时,由用户输入一个学生的信息,将产生一个新的结构体,并将其按学号插入当前链表中。调用链表输出函数,将新链表输出。六、查找函数:void find()。输入一个学号,将链表中该学生的信息输出。若链表中无该学号,则输出“未找到”。七、删除函数:void delet()。输入一个学号,将链表中该学号学生信息删除,并调用链表输出函数将删除后的链表输出。若输入学号不存在,输出“未
7、找到”。八、按学生统计函数:void studentcount()。输入一个学号,计算该学号学生的总分和平均分并输出。若学号不存在,输出“未找到”。九、按科目统计函数:void subjectcount()。输入一个科目序号(.英语.数学.计算机),计算该科目的总分和平均并输出。十、统计函数:void count()。当输入,调用“按学生统计函数”;当输入,调用“按科目统计函数”。分别进行统计操作。十一、存盘函数:void save()。将链表中的内容以文件的形式存放在磁盘中。十二、读入函数:void read()。将已经存盘的文件读入内存,进行管理。十三、选择菜单函数:void menu(c
8、har 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循环执行查找操作。 6、while循环找到删除对象,
10、链表的删除操作。 7、while循环找到操作对象,在执行相应操作。 8、文件的存储。 9、文件的读取。2.3 函数实现函数主要运用了while、do。while、for循环结构,还有选择排序法。函数大多为无参类型,自函数之间有少量调用。如排序、插入、删除、统计等函数都是较为简单的函数,只需根据医学知识稍加修改即可。数据结构方面,主要事项是函数调用,主函数调用菜单函数,菜单函数又调用其它类型函数,其他自定义函数之间也有调用。2.4 开发日志关于该程序的设计,首先根据题目的要求考虑实现该函数所需的函数。考虑把自定义函数放在整个程序的前面,这样在主函数调用时就不必再对其进行申明。比如必须的一些基本函
11、数链表输出函数、链表创建函数、链表排序函数、查询函数、链表删除函数、统计函数等,先把这些基本函数建立起来之后,程序的整体结构。考虑到程序的整体结构通过函数调用来实现较为方便,由此增加设计了一些函数,如链表输出函数、显示菜单函数、存盘函数、读入函数等。函数的的创建过程实在是一个繁琐的工作,编译时常要去翻看课本去查找已经遗忘的C语言的相关语法知识,特别是一些细节上的设计,更不敢轻易放过。如转义字符“t”的使用回事程序界面更加美观整洁好看,期间也对结构体链表的知识作了较好的复习掌握。在做到排序函数时突然忘了选择排序法的算法,于是通过查资料对其进行了重新的掌握,其中插入函数的算法较为复杂,通过分析发现
12、,须先查找然后再插入,查找的算法编号之后,后面的统计、删除函数也就迎刃而解了。调试的过程是最令人纠结的,觉得完好的程序却总是调不出来,经过复杂的心理脑力斗争最终发现却总是一些不该有的失误,而不是算法上问题。调试的过程是用时最长的,同时也磨练了我的耐性,让我对频频出现的错误更加理智、更加淡定、更加耐心。而且在调试的过程中也积累了一些常见的错误经验,对部分调试的错误能大体上感知其错误的原因及位置。影响最深的是对排序函数的调试,指针数组的地址代码写错导致程序运行时不能读入,还有创建链表函数出现的问题,输入函数多打了几个“%lf”导致链表创建时出现乱码。程序的整体结构设计参考了“C语言课程设计”一书,
13、再次申明。总之,程序的运行过程看是简单,作用也非常单一,但对于像我这样的智商不是很高的初学者而言,编程、调试过程是相当的艰辛与繁琐,其间个中滋味,汗水、辛酸只能把它埋在心底。3 程序调试及运行3.1 程序运行结果程序开始运行界面程序运行过程界面如下:程序结束界面:3.2 程序使用说明该程序较为简单,根据程序运行时的提示即可完成操作。在第一次进行显示操作时,需按两次0才能显示所建链表。在完成一次菜单操作后,应按回车键返回主菜单。3.3 程序开发总结大作业的编写,是一个对所学知识综合应用的过程,也是对所学知识掌握情况的检验过程,更是对所学知识系统复习的过程。其间涉及除程序设计外多方面技能应用,能够
14、很好训练一个人的整体思维能力,体现其综合素质。同时在完成作业的过程中,也让我体验了当一个程序员的神奇感受。当然我编的程序很简单,用途也很有限,其实就当前的程序来看根本没什么实际用途。但是设计工作的过程还是让我体会到了其艰辛其难度,编完之后油然而生的小小成就感是相当美妙的。在编程设计过程中遇到过很多问题和困难,也让我深刻认识到自己知识的欠缺,感受到自己离一个真正的程序设计人员的差距还是相当之远,自己还有很多只是要学习和掌握。更重要的是过程激发了我对计算机编程的兴趣,虽然这门课程即将结束,当我想我对其的学习与热爱绝不会停止。限于本人智商和时间的原因,该程序存在一定的缺陷和一些需要完善提高的地方,现
15、在此处指出如下:1、在链表的创建上,包含的信息量较少,仅有三个学生,其实据此方法可适当增加学生数量,以增强程序的实用性。2、再删除操作上,仅有对单个学生的删除功能,缺乏相应的全部删除功能,限于时间的原因未能增加。3、在对学生信息处理上,功能较少,缺乏最高分最低分的统计以及对于程序的排序。4、在统计功能的程序设计上,在选择完成一种统计操作后,程序即回到主菜单而不能回到统计界面继续进行统计操作,此不足之处未能改善。 当然通过对大作业的撰写,打字水平也有了较大的提高。总之,完成大作业,无论是思想上、能力上还是知识上都有了较大的飞跃,各方面都受益匪浅。4 附件(源程序)#include <std
16、io.h>#include <windows.h>#include <stdlib.h>struct studentlong num;char name80; double score3;struct student *next;struct student *head; /定义全局变量head,各个函数中均可用#define LEN sizeof(struct student)struct student *stu;void printfmenu() /将菜单列出函数printf("tttt0.显示n");printf("tttt1
17、.排序n");printf("tttt2.插入n");printf("tttt3.查找n");printf("tttt4.删除n");printf("tttt5.统计n");printf("tttt6.存盘n");printf("tttt7.读入n");printf("tttt8.结束n");void printfform() /用于每次将链表列出struct student *p;printf("t学号t姓名t数学成绩t英语成绩t计算
18、机成绩n");p=head;if(head!=NULL)doprintf("t%ldt%s t%.2f t%.2f t%.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 name1380;long num13;double score133;head=p1=p2=(struc
19、t student *)malloc(LEN);printf("请输入3个所要处理的学生信息,包括学号、姓名,英语、数学、计算机的成绩n"); /赋予三个学生的信息for(k=0;k<3;k+)scanf("%ld%s",&num1k,name1k);for(j=0;j<3;j+)scanf("%lf",&score1kj); while(i<3) /建立三个学生的链表if(i=0)head=p1;elsep2->next=p1;p1->num=num1i;strcpy(p1->na
20、me,name1i);for(j=0;j<3;j+)p1->scorej=score1ij;p2=p1;if(i=2)p1->next=NULL; /链表结束else p1=(struct student *)malloc(LEN); /开辟一个新的单元i+;void arrange() /排序函数void printfform();struct student *p1,*p2,*p3;long s3;p2=p1=head;int i,j,t,k;for(i=0;i<3;i+)si=p1->num;p1=p1->next;for(i=0;i<3;i+)
21、k=i;for(j=i+1;j<3;j+)if(sk>sj)k=j;if(k!=i)t=sk;sk=si;si=t;for(i=0;i<3;i+)while(p2->num!=si&&p2!=NULL)p2=p2->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("温馨提示:需要进行排序后才可进
22、行插入,输入9返回主菜单,按回车键继续n");t=getchar();if(t='9') return;printf("请输入要插入的学号,姓名,数学成绩,英语成绩,计算机成绩n");stu=(struct student *)malloc(LEN); scanf("%ld%s%lf%lf%lf",&stu->num,stu->name,&stu->score0,&stu->score1,&stu->score2); p0=stu; /p0指向要插入的节点p1=hea
23、d; /p1指向首节点while(p0->num>p1->num)&&(p1->next!=NULL) /找插入位置p2=p1;p1=p1->next;if(p0->num<=p1->num)if(head=p1) /插入到第一个节点前head=p0;elsep2->next=p0;p0->next=p1;else /插入到最后一个节点后p1->next=p0;p0->next=NULL;printfform(); /显示链表void find() /查找函数struct student *p1;long
24、num1;p1=head;printf("请输入要查找的学号");scanf("%ld",&num1);while(p1!=NULL)if(p1->num=num1)printf("t学号t姓名t数学成绩t英语成绩t计算机成绩n");printf("t%ldt%s t%.2f t%.2f t%.2fn",p1->num,p1->name,p1->score0,p1->score1,p1->score2);break;p1=p1->next;if(p1=NULL)pr
25、intf("未找到");void delet() /删除指定学号的函数long num;struct student *p1,*p2;p1=head;printf("请输入要删的学生的学号"); scanf("%d",&num);while(num!=p1->num&&p1->next!=NULL) /p1指向的不是所要的节点,并且后面还有节点p2=p1;p1=p1->next;if(num=p1->num) /找到了if(p1=head) /对首节点特殊处理head=p1->ne
26、xt;else p2->next=p1->next;printfform();elseprintf("学号为%ld的同学未找到n",num);void studentcount() /按学生统计函数double 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->
27、;score2;aver=zong/3;printf("学号为%ld的总分=%.2f,平均分=%.2f",p1->num,zong,aver);break;p1=p1->next;if(p1=NULL)printf("未找到");void subjectcount() /按科目统计函数double aver,zong=0;struct student *p1;int i,n=0;printf("t请选择科目(13)");printf("t1.数学");printf("t2.英语");
28、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&quo
29、t;,&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;fclose(fp);printf("已存到c:/score.dat");void read() /读入函数FILE *fp;struct student *p1,*p2;char filename80; p1=p2=(struct student *)malloc(LEN);printf("请输入要进行管理的文件名字:");scanf("%s",filename);if(fp=fopen("score.dat",&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆2025年重庆市奉节县事业单位面向应届生考核招聘41人笔试历年参考题库附带答案详解
- 山西电力职业技术学院《创新创业基础城市地下空间工程》2023-2024学年第二学期期末试卷
- 黑龙江交通职业技术学院《小学美术教学设计》2023-2024学年第二学期期末试卷
- 衢州职业技术学院《大气科学概论》2023-2024学年第二学期期末试卷
- 防城港职业技术学院《测控仪表及装置》2023-2024学年第二学期期末试卷
- 南昌职业大学《模特经纪管理》2023-2024学年第二学期期末试卷
- 安徽国际商务职业学院《精算学导论》2023-2024学年第二学期期末试卷
- 江西外语外贸职业学院《现代岩土工程专题》2023-2024学年第二学期期末试卷
- 无锡职业技术学院《国际货物运输与保险B》2023-2024学年第二学期期末试卷
- 南京大学《兽医传染病学实验》2023-2024学年第二学期期末试卷
- 中国特色社会主义+综合练习(三)-2025届中职高考政治一轮复习高教版(2023版)
- 情境+任务驱动作文(兼审“情境”与“任务”)-2024年中考语文重难点复习专练(江苏)学生版
- (二模)临沂市2025年高三高考模拟考试地理试题卷(含答案)
- 2024年新疆巴楚县事业单位公开招聘村务工作者笔试题带答案
- 2025年广东省广州市南沙区中考数学一模试卷
- 医务科依法执业自查表
- 电梯产品数据表
- 工厂经营管理考核方案.doc
- A4横线稿纸模板(可直接打印)-a4线条纸
- 列车牵规正文
- 格氏试剂的应用PPT课件
评论
0/150
提交评论