您好,欢迎访问三七文档
C语言实习环境学院地信0912周文君-1-C语言实习报告(用链表实现学生学籍管理)姓名:周文君班级:地信0912班学号:0920209227指导老师:史守正实习内容:编写程序实习地点:C1-学生机房实习时间:2010/7/22至2010/7/26C语言实习环境学院地信0912周文君-2-绪言C语言使国内外广泛使用的一种计算机语言。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好。既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合编写系统软件。在经过一整个学期的C语言理论学习,我们已经能够掌握其基本语法,但是缺乏一定的实际运用的能力。为了让我们更好的理解和运用其解决实际问题,并且对结构化程序有更进一步的认识,学校组织了这一次C语言实习。实习中,我们将按要求完成一个较为复杂的程序编写——学生学籍管理程序。实习基本内容和要求:1、总体功能要求(1)链表的建立:每个节点包括:学号、姓名、性别、语文、数学、英语、总分;(2)节点的插入:按学号的顺序插入;(3)删除链表中的节点:按学号或者姓名;(4)链表的输出:按学号排序、按总分排序。2、性能的要求:(1)各个功能分别用函数实现;(2)节点信息让用户通过键盘输入C语言实习环境学院地信0912周文君-3-(3)总分通过计算获得;(4)有简单的操作界面;尽可能考虑程序的容错性、可操作性。教材和主要参考书目:(1)教材:《C程序设计》,谭浩强编著,清华大学出版社(2)主要参考书目:①《C程序设计教程》,谭浩强编著,清华大学出版社;②《C语言程序设计——习题与实验指导》,谭浩强编著,清华大学出版社。实习过程:我们将有5天的时间完成一个程序和一份实习报告。1、我们要根据题目的要求进行需求分析和资料整理;(1天)2、我们利用资料、教材和寻求他人帮助完成详细设计;(注:关键部分解释说明)(3天)3、完成一份对自己程序详细描述与解释的报告。(1天)目录C语言实习环境学院地信0912周文君-4-实习目标------------------------2系统概况------------------------2需求分析------------------------4总体功能要求---------------------4功能模块图、流程图---------------4性能的要求-----------------------8详细设计-----------------------8程序代码-------------------------8关键部分的注视和说明-------------17设计心得总结-------------------19实习目标实习目的(1)巩固C语言所学基本课程;(2)提高C语言编程的综合应用能力;C语言实习环境学院地信0912周文君-5-(3)学会C语言程序的编译、调试方法。(4)在编程的过程中提高自己各方面的能力,例如:自主思考,大胆实践,团队合作等(5)要学会用正确心态且耐心的面对长篇的程序课程目标(1)掌握C语言中的基本数据输入、输出;(2)熟练掌握C语言中的三种基本结构的使用;(3)熟练使用C语言中的数组;(4)熟练使用C语言中的函数;(5)熟练使用C语言中的指针;(6)熟练使用C语言中的结构体,尤其是链表。系统概况本系统就是运用C程序设计中的结构体、指针、函数(系统库函数、自定义函数)、用指针处理链表、文件操作等知识编写的一个简单的方便查询和管理学籍的应用系统。整个系统考虑到了系统的容错性和可操作性,严格遵守功能要求进行创建,操作简单、查询方便,是一个简单而实用的方便管理和查阅学籍的应用系统。系统名称:用链表实现简单的学籍管理系统软件要求:Turboc2.0硬件要求:PC机程序的功能:对N个学生,通过该系统完成对这些学生的学籍信息进行录C语言实习环境学院地信0912周文君-6-入、显示、插入、修改、删除、保存等操作,且是要按照一定顺序的,从而达到对其进行方便管理的目的。整个系统运用模块来组建该学生学籍管理,可分为信息输入,输出模块,信息查询模块,排序模块,求总分模块。主界面:菜单的设计比较简洁,每一个执行命令都有相对应的编码,使用者根据需要来选择,系统会自动执行相应操作,并且输出相关信息以供使用者参考。主菜单如下所示:1:创建学生信息记录2:删除学生信息记录3:插入学生信息记录4:按学号将记录排序5:按总份将记录排序6:计算平均成绩7:退出系统8:输出须生信息记录需求分析总体功能要求1)链表的建立。每个节点包括:学号、姓名、性别、语文、数学、英语、C语言实习环境学院地信0912周文君-7-总分。2)节点的插入。按学号的顺序插入。3)删除链表中的节点。按学号或者姓名;4)链表的输出。按学号排序、按总分排序功能模块图、流程图功能模块图流程图1)创建动态链表开辟一个新的结点,并使p1,p2指向它读入一个学生数据给p1所指的结点head=NULL,n=0当读入的p1-num不是零n=n+1n等于1?真假学生学籍管理系统创建学生记录插入学生记录删除学生记录排序(按总分)输出记录退出系统计算平均分排序(按学号)C语言实习环境学院地信0912周文君-8-head=p1(把p1所指向的结点作为第一个节点)p2-next=p1(把p1所指向的结点连接到表尾)p2=p1(p2移到表尾)再开辟一个新的结点,使p1指向它再读入一个学生数据给p1所指结点表尾结点的指针变量置2)插入学生信息p=head,information=stud是否将p所指的结点作为唯一的结点当information-nop-no以及p1所指的不是表尾结点Information指向p1位置,p1向后移一个结点Trueq-numm=p-numFalse是否p-next=informationinformation-next=NULL(插到表尾之后)head=pp-next=informationInformation-next=qinformation-next=pn=n+13)学生信息删除模块原来的链表是空表P指向头节点C语言实习环境学院地信0912周文君-9-4)学生信息排序p=head,information=stud;STUDENT*p,*q,*t,*h1;(定义临时指针)链表是一个空表真假输出空表p1=headp2=p1(p2后移一个位置)p1=p1-next(p1后移一个位置)当num不等于p1-num以及p1所指的结点不是表尾结点p1是要删除的结点是否p1所指是头结点是否输出“找不到”的信息head=p1-next(删除头结点)p2-next=p1-next(删除一个结点)C语言实习环境学院地信0912周文君-10-是原来的表是否空表否输出“空表”当strcmp(t-no(ortotal),p-no(ortotal))0(进行学号比较)以及p!=NULLq=pp=p-next待排序点值大,往后插,所以新表指针后移if(p==q)TrueFalset-next=p待排序点的后继为Ph=t新头结点为待排序点t-next=p(t=p+1)q-next=t(q=t+1)printf(Finishsorting\n);(排序成功)return(h)返回头指针5)求算各科平均值模块:p=head,是p指向第一个结点P指向的是尾结点TrueFalsep指向下一个结点s+=p-sum求总分a=(float)s/i得到平均分i是记录数当p指的是表尾结束输出a平均分6)学生信息输出p=head,使p指向第一结点p指向的不是尾结点真假输出p所指向的结点P指向下一结点当p指的不是表尾C语言实习环境学院地信0912周文君-11-性能的要求1)各个功能分别用函数实现;2)节点信息让用户通过键盘输入;3)总分通过计算获得;4)有简单的操作界面;5)尽可能考虑程序的容错性、可操作性。详细设计程序代码#includestdio.h#includectype.h#includestring.h#includeMalloc.h/*头文件*/#defineNULL0/*令NULL为0,表示空地址*/#defineLENsizeof(structstudent)/*令LEN代表structstudent类型数据的长度,sizeof是“求字节数运算符”*//*定义结构体类型*/structstudent{longid;/*定义学生学号*/charname[20];/*定义学生姓名*/charsex[10];/*定义学生性别*/intchinese;/*定义学生语文成绩,假设为整数*/intmaths;/*定义学生数学成绩,假设为整数*/intenglish;/*定义学生英语成绩,假设为整数*/inttotal;/*定义总分,假设为整数*/structstudent*next;};intn;/*n为全局变量,定义为结点个数*/C语言实习环境学院地信0912周文君-12-/*创建链表函数,带回一个指向链表头的指针*/structstudent*create(void){structstudent*head;/*指向表头的指针*/structstudent*p1,*p2;n=0;/*条件运用*/p1=p2=(structstudent*)malloc(LEN);/*开辟一个新单元*/printf(\ninputstudent'sid:);/*输入学生学号*/scanf(%ld,&p1-id);printf(inputstudent'sname:);/*输入学生姓名*/scanf(%s,p1-name);printf(inputstudent'ssex(form):);/*输入学生性别*/scanf(%s,p1-sex);printf(inputchinesescore:);/*输入学生语文成绩*/scanf(%d,&p1-chinese);while(p1-chinese100||p1-chinese0)/*判断成绩是否超出范围*/{printf(error,inputagain\n);printf(inputchinesescore:);scanf(%d,&p1-chinese);}printf(inputmathsscore:);/*输入学生数学成绩*/scanf(%d,&p1-maths);while(p1-maths100||p1-maths0)/*检验成绩是否超出范围*/{printf(error,inputagain\n);printf(inputmathsscore:);scanf(%d,&p1-maths);}printf(inputenglishscore:);/*输入学生英语成绩*/scanf(%d,&p1-english);while(p1-english100||p1-english0)/*检验成绩是否超出范围*/{printf(error,inputagain\n);printf(inputenglishscore:);scanf(%d,&p1-english);}head=NULL;while(1){n=n+1;if(n==1)head=p1;/*指针的运用*/elsep2-next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf(\ninputstudent'sid:);scanf(%ld,&p1-id);if(p1-id==0)break;printf(inputstudent'sname:);scanf(%s,p1-name);C语言实习环境学院地信0912周文君-13-printf(inputstudent'ssex(form):);scanf(%s,p1-sex);printf(inputchinesescore:);scanf(%d,&p1-chinese);while(p1-chinese10
本文标题:C语言实习报告
链接地址:https://www.777doc.com/doc-3675807 .html