何文培-241311030-综合设计实训报告终极版 - 副本 (2)_第1页
何文培-241311030-综合设计实训报告终极版 - 副本 (2)_第2页
何文培-241311030-综合设计实训报告终极版 - 副本 (2)_第3页
何文培-241311030-综合设计实训报告终极版 - 副本 (2)_第4页
何文培-241311030-综合设计实训报告终极版 - 副本 (2)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 18 综合设计实训报告实训项目:学生成绩管理系统学 院:信息工程学院专 业:计算机科学与技术班 级:2011级计科本(1)班学 号:24131101030学生姓名:何文培 同组成员:张德利 石明虎 何文培指导老师:张仕学 2014 年 6月 20 日 摘要:随着信息技术的快速发展,信息的自动化管理变得越来越重要。本题目所设计的学生成绩管理系统,实现了学生信息和成绩的录入,查询,删除,显示,保存,读写文件,复制文件,排序,追加记录,索引,分类合计等功能。使得学生成绩的管理更加方便和快捷。一 实训目的了解软件工程中的一些系统分析,模块分析,代码设计的概念,利用WIN-TC实现学生成绩管理系统的录

2、入、查询、删除、统计等基本擦作,使用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数(系统函数、自定义函数)、文件操作等知识。通过对系统的分析和设计,进一步巩固C语言的学习,以提高对开发环境的进一步认识和综合编程的能力。(1) 综合应用所学知识的能力(2) 模块haunted程序设计能力(3) 项目组协作开发能力(4) 项目文档开发能力(5) 项目管理能力(6) 项目测试、测试能力二 需求分析1.系统功能:本实训的题目是学生成绩管理系统,实现的是对学生成绩的系统管理。包括学生信息的创建、删除、插入或添加、保存、格式化输出;学生信息,成绩的修改或更新、成绩的

3、统计、汇总、排序。检索及输出。2.对系统通过单链表实现对学生成绩的管理。具有如下功能: (1)输入记录 (2)从表中删除记录 (3)按照姓名查找所有记录 (4)将单链表中的记录保存到文件 (5)从文件中读入记录(6)计算所有学生的总分和平均分(7)插入记录到表中(8)复制文件(9)排序(10)添加记录到文件中(11)索引(12)分类合计四,系统环境1. 运行环境硬件环境:CPU 80386 内存32MB、硬盘200MB以上微机软件环境:MS-DOS 5.0以上操作系统/WINDOWS 9X以上系统 Turbo c2.0集成环境,UCDOS汉字系统 visual C+以上图:上图是学生信息管理系

4、统的流程图。(1)数据结构 链表是线性表中的一种,线性表中分为顺序存储结构和链式结构。线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上相邻,因此可以随机查找表中的没一个元素,。Typedef struct z Char no 11 Char name 15 Int score n Float sum Float average ; Int order; Struct z1*next;Student;(2) main()主函数主函数是程序的入口,采用模块化的设计。首先在主程序种打印欢迎界面,声明一些必要的变量,作为一无限循环程序,循环体作为一开关语句,该语句设置一个断点,其中条件值

5、通过调用过主菜单函数得到的返回值。根据该值,调用相应的功能函数。同时设置一个断点,当返回值为一定条件是结束程序。(3)memnu_select()函数 为了美化界面,制作单边框窗口,窗口中显示主菜单。通过putch()输出图形符号的ASCII码值(十六进制),到达显示的目。 Putch(0xda) Putch(0xc4)对菜单的选项的选择是利用移动光标按回车键进行选择。 4 init()初始化 单链表需要一个头指针来指向表的第一个结点面对单链表的访问是从头指针开始的。初始化单链表为空,用null表示,该值在文件stdlib.h中定义为常数0.5 creat()创建链表 当用户选择输入增加记录后

6、,进入该函数,输入学生信息,并把信息输入链表。在输入过程中,有相关的提示。当输入的时候,会出现弹出到主菜单,在生成单链时,每次新输入的结点都放在表头,这样最先输入的结点存放在表头,这样最先输入的结点存放在最后。(7).append()追加记录到文件尾当想要在文件尾增加一条记录时使用该函数,首先输入新结点信息,然后输入要追加的文件名,按追加方式打开文件,将新信息写入文件。(8).insert() 插入结点在指定结点前面插入新结点,申请空间得到指针info,输入新结点信息,存放info中,设链表头指针为h,p为指定结点的指针,q为P的前驱指针。从头结点开始循环移动指针p查找指定结点,查找和插入时分

7、两种情况处理:1).指针p 为空,如果p等于h,说明链表为空,则新结点即为头结点,修改指针h=info。否则,说明表中没有指定结点,则新结点插入在表尾部,此是q把指的结点是最后一个结点,所以修改指针q-next=info。2).指针p不为空,如果p等于h,说明新结点插入在当前第一个结点之前,为新的头结点,修改指针info-next=p,h=info。否则,说明新结点的位置应在q和p两个结点之间,修改指针info-next=p,q-next=info。(9).print()显示所有记录采用顺序访问的方法显示和查找记录,定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所记录的数据后,将

8、指针后移一个记录,直到p指针值为空,则所有记录输出完毕。(10).search()查找结点按照姓名来查找记录。从头结点开始顺序查找,若没有记录显示没有,遇到一个匹配的记录则显示此记录,后到尾结点结束。(11).save()保存记录到文件将学生信息保存到指定的文件中。按照文件读写要求,先定义一个只想文件的指针,输入要保存的磁盘文件名,如果输入的是绝对路径,则文件保存到指定的位置;如果只要文件名,则文件保存在TC默认的路径。如果文件打不开,则退出程序,否则选择一种写文件方式,打开文件。如果文件打不开,则退出程序,否则选择一种写入文件方式,从链表的头指针。开始,顺序将记录写入文件,直到所有记录写完,

9、标志就是移动指针空。(12).load()从文件中加载记录按照文件读写要求,先定义一个指向文件的指针,输入要读入数据的磁盘文件名,然后确定文件的打开方式。如果文件打不开,则退出函数,否则选择一种读文件方式,从文件头开始,将记录写入内存,直到文件尾。文件打开方式和读入方式的确定要依据输出文件是二进制文件,块写操作,读入也应设置为二进制打开方式,块读取方式。每读入一条记录,都要做好指链接关系,本函数将新结点链接到当前链表的尾部,链表的顺序和文件保存的顺序一致。(13).copy()备份文件将文件读写功能结合到一起,先输入源文件名,再输入目标文件名,然后利用文件读写函数将源文件中的信息写到目标文件中

10、,以达到备份文件的目的。(14).computer()计算所有学生的课程的总成绩成绩和总平均成绩(15).sort()排序本函数实现按总分排序的功能。在算法上,选择直接插入算法,即:每步将一个待排序的按其排序码值的大小插到前面已经排好序的表中,直到全部插入为止。先将链表的头结点看作是已经排好序的结点,然后取下一个结点作为待排序的结点,插入到已排好序的表中。具体做法为:(1. 先将原表头结点作为新排好序表的头结点h,原表下一个节点作为原表头结点h1。(2. 原表头结点为待排序结点,将其总分与新表结点的总分进行比较,如果待排序结点总分大,则插在表头,否则插在其后,原表头结点移一位。(3. 重复第二

11、步,即将原表头结点的总分与新表结点的总分进行比较,如果待排序结点总分小,则移动新表指针,直到找到合适的位置将其插入。当原表为空时,所有结点排序完毕。排好序后,系统自动将名次数据写入结点数据域的order中。(16).index()索引定义临时工指针后,将原表的头指针的下一个结点作为指针,再使第一个结点定义为新表的头结点。当原表不为空时,进行排序。(17).total()分类合计追加班别信息,对各班的总成绩和总平均成绩进行平均成绩统计并显示。(18).exit() 退出程序4.系统的界面设计(1) 主菜单(2) 创建链表(3) 删除记录(4) 显示全部记录(5) 查找记录(6) 保存文件(7)

12、读文件(8) 计算总分和平均分(9) 插入记录(10) 复制文件(11) 排序(12) 追加记录(13) 索引(14) 分类合计5 系统实现1. 使用的语言 C语言2. 模块代码实现(以下举3例为参考)模块1模块名称:创建链表输入:学号,姓名,成绩输出:输出一个二维表模块代码:STUDENT *create() int i;float s; STUDENT *h=NULL,*info;for(;)info=(STUDENT *)malloc(sizeof(STUDENT);if(!info)printf(nout of memory);return NULL;inputs(enter no:,

13、info-no,11);if(info-no0=) break;inputs(enter name:, info-name,15); printf(please input %d scoren,N);s=0;for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei;info-sum=s; info-average=(float)s/N;info-order=0;info-right=h; h=info; return(h); 模块2模块名称:从表中删除一个记录输入:输入需要删除的学生学号输出:输出要删除

14、学生信息二维表模块代码: STUDENT *delete(STUDENT *h) STUDENT *p,*q; char s11; clrscr(); printf(please delete non); scanf(%s,s); q=p=h; while(strcmp(p-no,s)&p!=NULL) q=p; p=p-right; if(p=NULL) printf(nlist no %s studentn,s); else printf(*have found*n); printf(|no | name |sc1 |sc2 |sc3 | sum| ave |order|n); print

15、f(|-|-|-|-|-|-|-|-|n); printf(|%-11s|%-15s|%4d|%4d|%4d|%-6.2f|%-6.2f|%5d|n,p-no, p-name,p-score0,p-score1,p-score2,p-sum, p-average,p-order); printf(*end*n); getch(); if(p=h) h=p-right; else q-right=p-right; free(p); printf(n have delete no %s studentn,s); printf(do not forget saven); return(h); 模块3

16、模块名称:按姓名查找学生记录输入:输入学生姓名输出:以二维表的形式输出查询到的信息模块代码: void search(STUDENT*h) STUDENT *p; char s15; clrscr(); printf(please enter name for searchn); scanf(%s,s); p=h; while(strcmp(p-name,s)&p!=NULL) p=p-right; if(p=NULL)printf(nlist no %s studentn,s);else printf(nn*have found*n); printf(|no | name |sc1 |sc2

17、 |sc3 | sum| ave |order|n);printf(|-|-|-|-|-|-|-|-|n);printf(|%-11s|%-15s|%4d|%4d|%4d|%-6.2f|%-6.2f|%5d|n,p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-average,p-order);printf(*end*n);3. 集成测试各个模块间的相互关联和借口测试1. 创建链表、显示链表、从链表中删除信息、按名查找、插入之间的集成测试当创建完成一个链表是,按显示链表,则以二维表的形式显示创建链表的信息;当要从链表删除一个学生的信息时,输入要删除学

18、生的学号,显示删除成功,再按显示链表,则显示删除后的信息;当要查找信息时,输入查找学生的姓名,则显示要查找的学生信息;插入学生信息时,输入在某个学生学号之前插入,再输入插入学生的信息,插入完成后,按显示,则显示插入完成后的链表。以上测试表面:创建链表、显示链表、从链表中删除信息、按名查找、插入之间的接口和联系是正确的。说明该集成测试成功。2. 创建链表、显示、保存、载入、排序、分类合计、追加之间的集成测试当完成了一个链表的创建后,按显示,在窗口中显示该链表的信息;排序后,按显示,此时会显示排序后的信息,在排序栏会有学生成绩名次;分类合计后,按显示,此时会显示各个班级的总分和均分;按保存时,会提

19、醒你输入保存路径,若路径无误,回车后保存成功;按加载,提醒输入加载路径,若输入路径无误,则加载成功,且按显示后悔显示载入的学生信息;排序分类显示均正常;追加,会提醒输入添加的学生信息,输入完成后,提醒输入追加文件,若文件路径无误,则追加成功,按显示,则显示更新后的信息。以上测试说明创建链表、显示、保存、载入、分类合计、追加之间的联系正常,接口无误。说明测试成功! 六、总结这次实训,我主要是负责前期工作的准备,了解相关的链表形式,数据结构,函数类型等的研究。下面我来总结一下这几个发那个面的感想。数据结构:链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。 这二者的共同点就是可以对表的添加,删除,查找,排序等操作比较方便,所以我们采用的是链表的形式来存储学生的相关信息。线性顺序存储结构的特点是逻辑关系上的相邻的两个元素物理位置上也相邻,所他可以随机存取表中的任一元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。我说一下在创建链表的时候的相关注意的事项,我们一般是用creat()函数来创建链表的,当用户选择输入添加的记录后,进入该函数,输入了学生的序号,学号,姓名,还有相关的信息后。并在这个过程中把信息加入了链表。注意的是,在输入的过程中,有相关的提示,入学号我们先定的是10位,字符型。同时对某些信息做了限定,就拿分数来说吧,如果输入的分数不在01

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论