学生成绩管理系统(线性表版)

合集下载

数据结构毕业设计论文题目整理

数据结构毕业设计论文题目整理

数据结构课程设计题目1.飞机订票系统(限1 人完成)(顺序或链式存储)任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息,客户信息的存储结构,设计程序完成功能;2.宿舍管理查询软件(限1 人完成)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:采用交互工作方式建立数据文件,包括学生信息、宿舍信息、住宿信息,学生信息按关键字(姓名、学号)进行排序(排序方法自选,不能相同);查询: (用二分查找实现以下操作)按姓名查询按学号查询(用顺序查找实现以下操作)按房号查询3.校园导航问题(限1 人完成)设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

要求:能增加场所4.图书借阅管理系统(限1 人完成)(顺序或链式存储)主要分为两大功能:1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书);2)会员管理(增加会员、查询会员、删除会员、借书信息);5.学生成绩管理(限1 人完成)(顺序或链式存储)包括:课程信息,学生信息等;能增加课程或学生。

实现功能:输入、输出、插入、删除、查找、显示、保存、排序、退出。

6.活期储蓄帐目管理(限1 人完成)活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:1)能比较迅速地找到储户的帐户,以实现存款、取款记账;2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。

学生成绩管理系统(线性表版)

学生成绩管理系统(线性表版)

学年论文(数据结构 2015—2016 第一学期)题目: 数据结构课程设计作者:陈炳宏所在学院:信息科学与工程学院专业年级:信息安全14-1指导教师:刘淑娴职称:副教授2016年 1 月 4 日一.学生成绩管理系统 (1)1。

1需求分析 (1)1。

1.1程序分析: (1)1。

1.2执行方式: (1)1。

1.3 程序执行的命令包括: (1)1.1.4测试数据: (2)1.2概要设计 (2)1.2.1 线性表的抽象数据类型定义为: (3)1.2。

2 结点的抽象数据类型定义为: (3)1。

2。

3指针的抽象数据类型定义为: (3)1。

2.4本程序包含8个模块: (4)1。

3详细设计 (5)1.3.1 元素类型、结点类型和指针类型 (5)1.3.2 函数说明 (5)1。

3.3 功能函数 (5)1。

4 调试分析 (15)1.5 用户手册 (15)1。

6测试结果 (18)一.学生成绩管理系统1.1需求分析1.1。

1程序分析:本程序是一个基于线性表结构编写的学生成绩管理系统,学生可以进行包括学生信息建立、在不同位置插入学生信息、查询指定学生信息、删除指定学生信息和输出显示所有学生信息这五项功能,功能操作简单,效率高,可延展性强. 为保证信息的真实性,学生信息中学号长度num<=11,姓名长度name〈=8,性别gender<=3,成绩仍意输入,并且学号和成绩只能为数字,否则程序出错。

1。

1。

2执行方式:本程序以用户和计算机的对话方式执行,即在计算机终端上显示7个共能选择的“提示信息"之后,由用户在键盘上输入本程序中规定的功能指令;相应的输人数据(并能滤去输入中的非法字符)和显示信息来处理结果。

1.1.3 程序执行的命令包括:(1)学生信息链表的建立;建立后仍意建继续输入,n和N退出;(2)插入学生信息;输入插入的位置;(3) 查询学生信息;选择两种方式之一查找并查询;(4)删除学生信息;选择两种方式之一查找并删除;(5)修改学生信息;选择两种方式之一查找并修改;(6) 输出所有学生信息;(7)退出管理系统.1.1.4测试数据:(1)建立三个学生信息:学号(11)姓名(8)性别成绩20141305210,cc,n,8920141302399,sxz,w,9920151432596,sad,n,88(2) 插入一个学生信息:学号(11)姓名(8)性别成绩2016,scs,n,79输入插入位置:2(3) 查询学生信息:按1选择学号查询,输入学号:20141305210按2选择姓名查询,输入姓名:scz(4) 删除学生信息:按2选择姓名删除,输入姓名:cc(5)修改学生信息:按1选择学号修改,输入学号:20141302399输入修改后的数据:学号(11)姓名(8) 性别成绩20141312399,scz,w,691。

数据结构课程设计可选题目

数据结构课程设计可选题目

数据结构课程设计可选题目一、课程设计的目的学习数据结构与算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。

课程设计要求同学独立完成一个较为完整的应用需求分析,在完成设计和编程大型作业的过程中,深化对数据结构与算法课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使同学的程序设计与调试水平有一个明显的提高。

二、数据结构课程设计可选题目1. 运动会分数统计(限1 人完成)任务:参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,n<=20)功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;5) 数据存入文件并能随时查询;6) 规定:①输入数据形式和范围:可以输入学校的名称,运动项目的名称;②输出形式:有中文提示,各学校分数为整形;③界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

④存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(数据文件的数据读写方法等相关内容在c语言程序设计的书上)请在最后的上交资料中指明你用到的存储结构;⑤测试数据:要求使用a.全部合法数据;b.整体非法数据;c.局部非法数据进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明。

2. 飞机订票系统任务:通过此系统可以实现如下功能:⑴录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)⑵查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);⑶可以输入起飞抵达城市,查询飞机航班情况;⑷订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;⑸退票:可退票,退票后修改相关数据文件;⑹客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

高校学生成绩管理系统数据结构设计

高校学生成绩管理系统数据结构设计
Ab t a t S u e t c i v me t n g me t y tm e c i e n t e w y o aa s u t r l e r sr c : td n h e e n a ma a e n se i d s r d i h a fad t t cu e,i a s s b r n tb e ,a r y ,a d b n r otte r s t e d t t cu e, t cu e r g a d sg s u e y a ls ra s n ia y s r r e a e a h aa s u t r s u tr d p o r m e in i s d b r r
S se Da a,tu t r sg fCo lg y t m t S r cu eDe i n o l e e
S u n ro m a c a g m e t t de tPe f r n e M na e n
YANG —i g Ke ln
( o p t n n r t nIstt o eh o g f hn q o a ol eH n nS agl 70 0P C C m u r dI omao tue f cnl yo agi N r l l g , e a hn qu 6 0 R ) ea f i ni T o S u m C e 4
d s e i l n t e su e tr g s ain s c in, t d n c iv me t mo i e e i d man y i t d n e i r t e t n g h t o o s e ta h e e n d f d,a d ta s f  ̄ u i n nc p r i
系统包 括 的内容较 多 , 系统主 要完 成 以下功能 : 本

《算法设计综合实训》题目讲解

《算法设计综合实训》题目讲解

算法设计综合实训题目0.逆序数字(借助栈)编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。

例如,给定数7631,函数返回1367.输入:第一行一个正整数T(T<=10),表示有T组测试数据; 以下T行,每行一个非负的整数N。

输出:共T行,对于每组输入数据输出一行,即数字逆序后的结果值。

样本输入:3763110185158样本输出:1367810185151.人见人爱A+B这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。

输入:输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。

题目保证所有的数据合法。

输出:对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0-59),每个输出占一行,并且所有的部分都可以用32位整数表示。

样本输入:21 2 3 4 5 634 45 56 12 23 34样本输出:5 7 947 9 302.敲七【问题描述】输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)【要求】【数据输入】一个整数N。

(N不大于30000)【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。

【样例输入】20【样例输出】714173.统计同成绩学生人数问题【问题描述】读入N名学生的成绩,将获得某一给定分数的学生人数输出。

【要求】【数据输入】测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。

第3行:给定分数当读到N=0时输入结束。

其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。

数据结构线性表应用

数据结构线性表应用

数据结构线性表应用在计算机科学领域中,数据结构是一门至关重要的学科,它为我们提供了高效组织和管理数据的方法。

其中,线性表作为一种基本的数据结构,具有广泛的应用场景。

线性表是由零个或多个数据元素组成的有限序列。

这些数据元素在逻辑上是线性排列的,也就是说,它们之间存在着一种顺序关系。

常见的线性表实现方式有顺序表和链表。

顺序表是一种采用连续存储空间来存储数据元素的线性表。

它的优点是可以随机访问元素,时间复杂度为 O(1)。

这意味着,如果我们知道元素在顺序表中的位置,就能够快速地获取到该元素。

想象一下,我们有一个学生成绩的顺序表,要查找第 10 个学生的成绩,直接根据索引就能迅速找到。

顺序表在需要频繁进行随机访问的场景中表现出色,比如在数据库中存储数据时。

然而,顺序表也有它的局限性。

当需要插入或删除元素时,如果插入或删除的位置不是在表尾,就需要移动大量的元素,时间复杂度为O(n)。

这在数据量较大时,可能会导致性能下降。

相比之下,链表则在插入和删除操作上具有优势。

链表中的每个节点包含数据元素和指向下一个节点的指针。

当进行插入或删除操作时,只需要修改相关节点的指针即可,时间复杂度为 O(1)。

比如,在一个购物车的链表中,添加或删除商品时,不需要移动其他商品的位置,操作效率很高。

线性表在日常生活中的应用比比皆是。

以我们常见的排队为例,排队的人群可以看作是一个线性表。

每个人按照先后顺序排列,新加入的人排在队尾,离开的人从队首离开。

这种先入先出的特性,与线性表中的队列结构相似。

在计算机程序中,线性表也有广泛的应用。

比如,在文本编辑软件中,我们输入的字符序列可以看作是一个线性表。

当我们进行插入、删除字符的操作时,就是对这个线性表进行修改。

再比如,在操作系统的进程管理中,进程可以按照它们的创建顺序或者优先级排列成一个线性表。

操作系统在调度进程时,需要根据线性表中的信息来决定哪个进程先执行,哪个进程后执行。

在软件开发中,线性表也常用于实现栈这种数据结构。

算法与数据结构课程设计任务书

算法与数据结构课程设计任务书

算法与数据结构课程设计任务书1、实训意义和目的使学生巩固和加强《C语言程序设计》和《数据结构与算法》课程的理论知识。

使学生掌握C语言的基本概念、语法、语义和数据类型的使用特点。

使学生掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。

进一步理解和运用结构化程设计的思想和方法;学会利用流程图或N-S图表示算法。

使学生掌握调试程序的基本方法及上机操作方法。

掌握书写程设计开发文档的能力,使学生学会撰写课程设计总结报告。

课学生做毕业设计打好基础。

初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。

通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。

培养学生的创新能力和创新思维。

学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。

培养学生良好的程序设计风格。

在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。

学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。

2、实训目标及要求参加本课程设计的学生,应当认真完成本课程设计的全部过程。

并以最终课程设计成果来证明其独立完成各种实际任务的能力。

从而,反映出理解和运用本课程知识的水平和能力。

A、分析问题。

各种简单的与计算机有关的案例中所需要的输出结果,把大问题分解成小问题,使用自顶向下或类似设计方法给出模块化或计划。

B、提出算法执行特定任务。

模块表示为算法,使用自顶向下或伪代码等设计手段将模块细化成更详细的成分,清楚地表明顺序、选择和重复等到控制结构。

C、把一个算法变为用C语言编写的结构化程序。

D、用合适的测试方法检查程序是否符合最初的要求,为不合适数据设计错误陷阱,并提供错误信息来帮助用户。

E、写出清晰的用户文档,确保用户或者通过遵循程序中的指示或者使用程序设计者编写的文档能成功地运行程序。

线性表基本操作的编程实现

线性表基本操作的编程实现

实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构要求是链表存储结构(顺序存储结构建议作为课外实验完成),可以依次完成主要功能来体现功能的正确性,用菜单进行管理完成大部分功能,要求可以重复运行。

还鼓励学生利用基本操作进行一些更实际的应用型程序设计。

【实验性质】验证性实验(学时数:2H)【实验内容】1.线性表的链表存储,实现数据插入、删除运算。

为了体现功能的正常性,同时要编制数据输入函数和遍历函数,数据输入最好同时提供计算机自动产生数据。

2.其他建议改进的功能或细节:存储结构修改为循环链表、双向链表、循环双向链表等。

原始数据从文本文件读入。

结果存入文本文件【注意事项】1.开发语言:使用C++,不能使用C。

至于是否使用对象,初期可以不用,但是建议尽量尽快使用对象。

2.可以自己增加其他功能。

3.如果是自己开发的,请在程序界面上注明 ***原创。

如果是参考他人或改编他人的,则注明:*** 参考他人版。

希望大家诚实对待自己的努力。

如果有小组,版权页上写上全组人员。

4.在实验报告中也应该如实写出哪些程序功能是自己编的,哪些是参考别人的。

5.初始成绩全部学生都是不及格,然后逐步通过提交更好的版本来刷新成绩。

实验当日仅仅是不及格变为及格。

之后通过班长全班学生提交源代码,为了方便,建议把程序做成一个cpp。

之后在实验后的三天时间内提交实验报告。

过时不候。

结合实验当时的检测,实验后源代码的检测,实验报告的书写给出当次的成绩。

分为五级制。

程序提交在实验之后的三天里可以刷新。

但是一般不应该超过二次。

提交的程序必须要语法正确的。

目前由于老师的审查平台是c++6.0,所以为了统一起见,不接受其他平台的开发系统。

程序名一律类似为:T423-2-17-翁靖凯-链表实验程序.cpp所有信息之间为中横线。

线性表

线性表

n 1
n1 2 2
顺序表中插入操作的平均时间复杂度为O(n)
5. 删除
算法过程
序号 内容
0
1
a1
2
a2
3
a3


i-1
ai1
i
ai
i+1 ai1


n
an
n+1
maxsize -1
序号 内容
0
1
a1
2
a2
3
a3


i-1
ai1
i
ai1
i+1
ai 2


n-1
an
n
maxsize -1
删除前
删除后
把线性表(a1, a2, a3,......, an )顺序存放在内存中
地址 内存
b
a1
b+L
a2
b+2L
a3




b+(i-1)×L ai
… … b+(n -1)×L an
序号 0 1 2 3 … …
i
… … n
maxsize-1 顺序存储结构示意图
第二章 线性表
假设线性表的每个元素需占用L个存储单元,并以所占的 第一个单元的存储地址作为数据元素的存储位置(上图中 为b)。则线性表中第i+1个数据元素的存储位置LOC(ai+1) 和第i个数据元素的存储位置LOC(ai)之间满足下列关系:
第二章 线性表
例2-3、学生健康情况登记表如下:
姓 名 学 号 性 别 年龄 健康情况
王小林 790631 男 18 健康

学生成绩信息管理系统

学生成绩信息管理系统

题目:学生成绩信息管理系统用c语言实现学生管理系统,每个学生的信息包括:学号、姓名、性别、平时成绩、期末成绩。

系统能够完成学生信息的查询、更新、插入、删除、排序功能。

1、系统以菜单方式工作;2、学生信息录入功能(学生信息用文件保存)--输入;3、学生信息按条件查询功能—算法;●按学号查询●按姓名查询●按性别查询●按平时成绩查询●按期末成绩查询4、学生信息的删除与修改。

流程图:图1 函数功能模块图输入输出的要求(1)等候用户输入时,给出足够的提示信息,如:选择1,输入学生信息、选择2,查询学生信息。

(2)对输入值的类型,大小范围,字符串长度等,进行检查,对不合法的输入值给出出错信息。

(3)对删除数据给出方式,让用户进行确认删除。

1.概要设计1.抽象数据类型定义struct Student//创建结构体{………………………………};2.系统功能模块划分与设计(系统功能模块图)录入学生信息模块:输入1,判断学生信息是否存在,不存在输入1,继续上次输入,判断学生信息是否存在,运行结束。

输入2,判断学生信息是否存在,不存在输入2,清除数据重新输入,运行结束。

查询学生信息模块:查询学生信息,请输入选择查询方式。

输入1,按姓名查找学生信息输入2,按学号查找学生信息输入3,按性别查找学生信息输入4,按平时成绩查找学生信息输入5,按期末成绩查找学生信息运行结束删除学生信息模块:首先使用查询功能查询出需要修改/删除的记录,然后进行修改/删除操作无学生信息!请选项删除方式。

输入1,按照姓名删除输入2,按照学号删除运行结束修改,输出,排序学生信息输入4,修改学生信息,请输入需要修改的学生信息输入5,按姓名,成绩,平时成绩,期末成绩输出学生成绩。

输入6,将学生信息进行排序。

运行结束2.详细设计1、数据类型的定义struct Student//创建结构体{char num[20]; //学号char name[20]; //姓名char sex[5]; //性别int score; //平时成绩int QiMoscore; //期末成绩struct Student *next; //动态链表连接下一个结构体};2、主要模块的算法描述菜单模块通过while语句给出信息提示;清屏;绘制菜单(包含输入,查询,删除,修改,输出,排序);提示菜单选择并读入到变量;根据读入变量的值调用不同的模块函数;信息录入模块打开文件While(){ 清屏;按照提示输入各种信息;While显示各种信息;通过选择1.确认并继续 2.填写 3.修改 4.确认并返回选择四种功能;}}信息查询While(){ 通过菜单式的选择是学号查询还是姓名printf("\n----------请选择查询方式----------");printf("\n 1.按姓名查询");printf("\n 2.按学号查询");printf("\n 3.按性别查询");printf("\n 4.按平时成绩查询");printf("\n 2.按期末成绩查询");printf("\n 3.返回主菜单");printf("\n****************************\n");}如果选择学号进入学号模块通过输入学号If(学号存在继续){输出学生信息}Else 输出无此学生如果选择姓名进入姓名模块If(根据比较姓名判断学生是否存在){输出学生信息}Else 输出无此学生删除模块while( 继续删除 ){提示并读入待删除的学生的学生号;显示要删除的信息}删除成功信息修改模块输入要修改学生信息的学号:If (判断是否有此学生){ 菜单形式显示要修改的项目printf("\n1.姓名 2.学号 3.性别 4.平时成绩 5. 期末成绩 \n");printf("\n输入0可返回主页面 \n");}打开文件模块struct Student *read(){struct Student *p0, *p1, *head; FILE *fp;if ( ){return NULL;}if ( ){return 0;}do{if ( ){return NULL;}if ( ){return 0;}} while ( );}排序模块int paixu(struct Student *head)while(){while(){if(){}}}}}3.使用说明及编程体会使用说明该程序可以实现学生管理系统的信息排序、查询、更新、插入和删除。

数据结构课程设计报告课案

数据结构课程设计报告课案

广西科技大学鹿山学院课程设计2015-2016 学年第2 学期课程名称:数据结构课程设计设计名称:数据结构课程设计系别:电气与计算机工程系专业班级:计软141班姓名:邓康言学号:20141409指导教师:俸学文评阅成绩:评阅人:二〇一六年三月三十日电气与计算机工程系实践教学管理中心目录一、任务书 (2)2.1.存储结构与基本运算的算法 (2)2.3.学生管理系统 (2)2.6.数据库管理系统 (3)3.2括号的匹配 (8)3.5马踏棋盘 (9)4.2 看病排队候诊问题 (10)4.4 停车场管理 (11)5.2 KMP算法 (13)5.4 大型整数计算 (13)7.2 线索二叉树的创建及遍历 (14)7.4电文的编码的译码 (15)7.5家族关系查询系统 (16)二、课程设计总结 (18)三、参考文献 (18)一、任务书2.1.存储结构与基本运算的算法任务:用C语言描述顺序表和线性表2.3.学生管理系统任务:要求以学生成绩管理业务为背景,设计一个“学生管理系统”。

主要对学生资料的录入、浏览、插入、和删除等基本功能的实现算法思路:管理学生的成绩适合用单链表,方便插入和删除学生记录实现动态管理。

(1)定义单链表的结构体模块(2)单链表的建立模块(3)单链表的结点插入模块(4)单链表的结点删除模块(5)单链表的结点数据输出模块(6)主函数模块运行结果:算法心得:本程序为每一个处理功能都写了相应的函数模块。

从而使得学生管理系统具有实用性。

2.6.数据库管理系统任务:设计一个数据库管理系统,用户可以自行定义和创建数据库,能够对数据库实现插入、浏览、浏览定位、条件定位、按条件修改、按条件排序、删除和全部删除等功能实现。

并能保存数据库信息到指定文件以及打开并使用已存在的数据库文件,但数据库结构定义后不允许修改。

算法思路:由于数据库是通用的,因此先定义一个通用数据库。

用户这个库结构上可以应用所需的多个字段类型,创建自己的数据库。

学生成绩管理系统说明书

学生成绩管理系统说明书

唐山学院数据结构课程设计题目学生成绩管理系统设计与实现系(部) 计算机科学与技术系班级11计本1班姓名尹云学号4112006102指导教师张小松2013 年1 月 4 日至 1 月11 日共 2 周2013 年1 月11 日数据结构课程设计任务书课程设计成绩评定表1引言学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。

为了提高学校管理员和学生管理和查询学生成绩的效率,需要建立一个学生成绩管理系统,使我们可以在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。

学生成绩管理系统,使学生成绩信息管理工作规范化、系统化、程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息。

学生成绩管理系统有效地管理学生成绩相关信息,包括学生成绩的查询、录入、排序、统计等功能。

该系统为用户提供了一个简单的人机界面,用户可以根据提示信息进行各种操作。

本次设计使用的编程语言是C语言。

2问题分析根据设计题目要求分析如下:(1)本题目主要涉及顺序表的基本操作。

(2)在学生成绩管理系统中,录入学生信息时通常按录入顺序的先后,因此选用线性表。

在查找学生信息时,是在大量无序的学生信息中,通过比较所给关键字与对应信息项,找到所要查找的学生信息。

修改学生信息是在查找的基础上完成的,首先要找到需要修改的信息项,用输入的新数据覆盖原来的老数据,达到修改的目的。

删除学生信息也是在查找的基础上完成的,先找到要删除的学生信息,从要删除的那个信息项开始,用后一个信息项覆盖它,一直循环到最后,即可完成删除。

在查询不及格的学生信息时,只要把符合不及格的学生信息输出即可做到查询。

在统计不同等级的学生人数时,是想要根据划分的不同等级,将所有学生信息分成符合条件的几个部分。

数据结构课程设计选题

数据结构课程设计选题

数据结构课程设计选题数据结构课程设计选题题⽬选题⼀:迷宫与栈问题【问题描述】以⼀个mXn的长⽅阵表⽰迷宫,0和1分别表⽰迷宫中的通路和障碍。

设计⼀个程序,对任意设定的迷宫,求出⼀条从⼊⼝到出⼝的通路,或得出没有通路的结论。

【任务要求】1)⾸先实现⼀个以链表作存储结构的栈类型,然后编写⼀个求解迷宫的⾮递归程序。

求得的通路以三元组(i,j,d)的形式输出。

其中:(i,j)指⽰迷宫中的⼀个坐标,d表⽰⾛到下⼀坐标的⽅向。

如,对于下列数据的迷宫,输出⼀条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),…。

2)编写递归形式的算法,求得迷宫中所有可能的通路。

3)以⽅阵形式输出迷宫及其通路。

【测试数据】迷宫的测试数据如下:左上⾓(0,1)为⼊⼝,右下⾓(8,9)为出⼝。

出⼝出⼝选题⼆:算术表达式与⼆叉树【问题描述】⼀个表达式和⼀棵⼆叉树之间,存在着⾃然的对应关系。

写⼀个程序,实现基于⼆叉树表⽰的算术表达式的操作。

【任务要求】假设算术表达式Expression内可以含有变量(a~z)、常量(0~9)和⼆元运算符(+,-,*,/,^(乘幂))。

实现以下操作:1)ReadExpre(E)—以字符序列的形式输⼊语法正确的前缀表达式并构造表达式E。

2)WriteExpre(E)—⽤带括弧的中缀表达式输出表达式E。

3)Assign(V,c)—实现对变量V的赋值(V=c),变量的初值为0。

4)Value(E)—对算术表达式E求值。

5)CompoundExpr(P,E1,E2)--构造⼀个新的复合表达式(E1)P(E2)【测试数据】1)分别输⼊0;a;-91;+a*bc;+*5^x2*8x;+++*3^x3*2^x2x6并输出。

2)每当输⼊⼀个表达式后,对其中的变量赋值,然后对表达式求值。

选题三:银⾏业务模拟与离散事件模拟【问题描述】假设某银⾏有4个窗⼝对外接待客户,从早晨银⾏开门(开门9:00am,关门5:00pm)起不断有客户进⼊银⾏。

yc学生管理

yc学生管理

2008/2009学年度第二学期《数据结构》课程设计说明书题目:学生信息管理系统班级:姓名:学号:2008 06020122指导教师:日期:2009.06.22~06.26计算机与信息工程系1、问题描述2、需求分析3、开发环境4、算法设计思想5、流程图6、课程设计过程中的关键算法7、测试及结果8、总结与收获9、参考文献10、指导教师评语附件一:程序清单#include<string.h>#include<stdio.h>#include<time.h>#define MAXSIZE 60 #define TRUE 1#define false 0#define OK 1#define ERROR 0#define OVERFLOW -1 typedef int Status; typedef double KeyType; typedef struct std_info{ int Num;KeyType key;char Name[8];float Score;char Add[15];}ElemType;typedef struct{ElemType elem[MAXSIZE];int length;}SeqList;void Creat_SeqList(SeqList *L) //建立线形表{int i,n,num;char ss[8];float score;char add[15];printf("please input list length:\n");scanf("%d",&n);L->length=n;for(i=1;i<=n;i++){printf("please input Num,Name,Score,Add:\n");scanf("%d",&num);getchar();gets(ss);scanf("%f",&score);getchar();gets(add);L->elem[i].Num=num;strcpy(L->elem[i].Name,ss);L->elem[i].Score=score;strcpy(L->elem[i].Add,add);}}void Print_SeqList(SeqList *L){int i;printf("The list is:\n");for(i=1;i<=L->length;i++)printf("num=%d,Name=%s,score=%f,Add=%s\n",L->elem[i].Num,L->elem[i].Name,L->elem[i].Score,L->elem[i].Add);}Status Insert_SeqList(SeqList *L,int i,ElemType x) // 插入信息{int j;if(i<1||i>L->length+1)return ERROR;if(L->length==MAXSIZE-1)return OVERFLOW;for(j=L->length;j>=i;j--)L->elem[j+1]=L->elem[j];L->elem[i]=x;L->length++;return OK;}Status Exchange_SeqList(SeqList *L) //交换信息{ElemType t;int i;for(i=1;i<=L->length/2;i++){t=L->elem[i];L->elem[i]=L->elem[L->length-i+1];L->elem[L->length-i+1]=t;}return OK;}int Search_Seq(SeqList *ST,KeyType x) //按学号查找{int i;i=ST->length;while(ST->elem[i].key!=x&&i>0)i--;return i;}Status Delete_SeqList(SeqList *L,int i) // 删除信息{int j;if(i<1||i>L->length)return ERROR;for(j=i;j<L->length;j++)L->elem[j]=L->elem[j+1];L->length--;return OK;}void Bubble(SeqList *p) 冒泡排序{int i,n,j;n=p->length;for(i=1;i<n;i++){int flag=0;for(j=1;j<=n-i;j++)if(p->elem[j].key>p->elem[j+1].key){p->elem[0]=p->elem[j];p->elem[j]=p->elem[j+1];p->elem[j+1]=p->elem[0];flag=1;}if(flag==0){printf("排序结束");break;}}}void main()《数据结构》课程设计{int j=-1,i,n,num;char ss[8];char add[15];float score;double t;SeqList *L,g;L=&g;ElemType x;Creat_SeqList(L);Print_SeqList(L);while(j){printf("please choose oprate\n");printf("1: ListInsert_Sq\n");printf("2: ListDelete_sq\n");printf("3: ListExchange_Sq\n");printf("4: ListSearch_Sq\n");printf("5: ListBubble_Sq\n");printf("0: Quit operate\n");scanf("%d",&j);switch(j){case 0: printf("No Operate\n"); break;case 1: printf("please input num,name,score,add:\n");scanf("%d",&num);getchar();gets(ss);scanf("%f",&score);getchar();gets(add);x.Num=num;strcpy(,ss);x.Score=score;strcpy(x.Add,add);printf("please input locate:\n");scanf("%d",&i);Insert_SeqList(L,i,x);Print_SeqList(L); break;case 2: printf("please input Delete Num\n");scanf("%d",&i);Delete_SeqList(L,i);Print_SeqList(L);break;case 3: Exchange_SeqList(L);Print_SeqList(L);break;case 4: printf("please input Search key\n");scanf("%d",&t);Search_Seq(L,t);break;case 5: Bubble(L);Print_SeqList(L);break;default: printf("input error,Please Retry\n");}}}。

ds实验教案2

ds实验教案2

实验二:线性表基本运算及应用实验项目的和要求:1.掌握线性表的特点2.掌握线性表的顺序存储结构和链式存储结构的基本运算。

3.尽可能考虑算法的健壮性4.实验报告中要写出测试数据、错误分析以及收获。

实验项目名称一:实现两种存储结构的主要基本运算1.用结构体类型描述线性表的两种存储结构2.完成课堂上所讲的两种存储结构的基本运算3.要求用二级菜单实现****************************** 1-------顺序表 ** 2-------链表 ** 0-------退出 ******************************请输入的选择:(0-2):线性表的链式存储############################### 1----前插建立链表## 2----后插建立链表 ## 3----访问第i个元素 ## 4----插入 ## 5----删除 ## 6----求线性表的表长 ## 0----退出 ###############################请输入选择(0-6):实验项目名称2:超市密码存储箱系统的设计与实现问题描述:1.顾客使用箱子的流程为“投一元硬币”--------“找到一个空箱子,同时产生密码”(系统完成)--------“打印密码,打开箱子”(系统完成)--------“取密码并存包,并关闭箱子,入超市购物”--------“购物结束”--------“输入密码”--------“找到对应箱子并打开”(系统完成)--------“取包”。

2.现要求设计程序模拟以上系统完成的功能①界面:在我们的模拟系统中,箱子在屏幕上被画出来,并编号,空箱为蓝色,被使用时变成红色,再变为空后则恢复蓝色;②通过按“1”键模拟顾客投币;③当空箱子被顾客申请得到的同时,系统自动生成6位数密码,此密码不能与正在被使用的任何一个箱子的密码相同。

3.设计分析在设计时,可利用链表来组织所有的箱子,所有的箱子以结点的形式表示,结点中存放箱号、密码(满箱有,空箱无)以及指向下一个结点的指针。

学生信息管理系统数据结构课程设计

学生信息管理系统数据结构课程设计

华中科技大学文华学院数据结构课程设计报告题目:学生信息管理系统专业:计算机应用与技术学号:姓名:指导老师:时间:一、总体框架图1、题目:学生信息管理系统2、设计内容及要求:内容:完成简单的学生信息管理系统要求:(1)学生信息包括:学号、、数学成绩、英语成绩、数构成绩;(2)用链表存放学生信息;(3)实现简单的菜单调用;(4)程序的功能包括:学生信息链表的建立;学生信息的显示;学生信息的查询;学生信息的删除;学生信息的插入;编写算法,以实现基本要求。

二、本程序用到的基本操作InintList(&l):操作结果:构造一个空的线性表L。

DestroList(&L)初始条件:线性表已存在。

操作结果:销毁线性表。

ListInsert(&L,i,e)初始条件:线性表L已存在,操作结果:在L中第i 个位置之前插入新的数据元素e。

L的长度加1.ListDelete(&L,i,e)初始条件:线性表L已存在且非空操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1.}ADT List三、模块设计模块一:头文件,变量定义,函数的声明对系统所使用的变量进行定义,对函数进行声明模块二:结构体的建立,定义学生的学号,名字,和各成绩模块三:学生信息系统使用菜单声明函数void menu(),对整个系统进行明模块四:链表的建立,用void creat()来建立链表模块五:显示学生信息,声明void print()显示学生的信息模块六:学生信息的查找声明void search()为查找函数,通过switch(a)设定用学号查找,用姓名查找两个分支模块七:删除学生信息通过void delete()实现学生信息的删除,确定要删除的信息,再删除掉。

模块七:插入学生信息,通过void insert()为插入函数,通过switch(a)插入到指定学生的后面。

模块八:学生信息按学号排序声明void sort()将录入学生系按升序排列,用的是“冒泡排序法”实现排序四、系统设计流程图五、源代码#include "stdio.h"#include "stdlib.h"#include "string.h"#define STUDENT 2typedef struct student{int num; //学号char name[20]; //int math;//高数int English;//英语int Data;//数据结构struct student *next;}student;student *head=NULL;int length; //链表的长度void create(){student *p1,*p2;length=0;int number=0;p1=(student *)malloc(sizeof(student));p1->num=-1;if(head==NULL)head=p1;printf("请输入学生的学号、、高数、英语、数据结构:\n");while(number<=3){p2=(student *)malloc(sizeof(student));scanf("%d %s %d %d %d",&p2->num,p2->name,&p2->math,&p2->English,&p2-> Data); //输入学生信息if(p2->num==0){printf("链表创建完成!\n");break;}length++; //链表的长度p1->next=p2;p2->next=NULL;p1=p1->next;number++;}return ;}void display(){student *p=head->next;printf("链表中所有的学生信息如下:\n");while(p!=NULL){printf("%d %s %d %d %d\n",p->num,p->name,p->math,p->English,p->Data);p=p->next;}return ;}void search(){int num_;student *p=head->next;printf("需要查找的学生学号为:");scanf("%d",&num_);while(p!=NULL){if(p->num==num_){printf("学号为%d的学生的信息如下:\n",num_);printf("%d %s %d %d %d\n",p->num,p->name,p->math,p->English,p->Data);return;}p=p->next;}if(p==NULL)printf("无此记录!\n");return ;}void search1()char na_me[20];student *p=head->next;printf("需要查找的学生姓名为:");scanf("%s",na_me);while(p!=NULL){if(!(strcmp(p->name,na_me))){printf("姓名为%s的学生的信息如下:\n",na_me);printf("%d %s %d %d %d\n",p->num,p->name,p->math,p->English,p->Data);return;}p=p->next;}if(p==NULL)printf("无此记录!\n");return ;}void insert(){int num_,i;student *p,*q;p=head;printf("请输入你要插入位置: ");scanf("%d",&num_);if(num_>length){printf("找不到要插入的位置\n");return ;}else{printf("请输入你要插入的学生的学号、、高数、英语、数据结构:\n");q=(student *)malloc(sizeof(student));scanf("%d %s %d %d %d",&q->num,q->name,&q->math,&q->English,&q->Data);while(p!=NULL){if(p->num==q->num){printf("该学号已经存在,无法插入!\n");return ;}p=p->next;}p=head;for(i=0;i<num_;i++)p=p->next;q->next=p->next;p->next=q;length++;printf("插入成功!\n");return ;}}void Delete(){student *p,*q;q=head,p=head->next;printf("请输入要删除的学生的学号:\n"); scanf("%d",&num_);while(p!=NULL){if(p->num==num_){q->next=p->next;free(p);length--;printf("删除成功!\n");return ;}p=p->next;q=q->next;}if(p==NULL){printf("找不到要删除的编号!\n");}}void menu(){printf("________________________________________________________________\n");printf("| 学生信息管理系统|\n");printf("| 0、退出系统|\n");printf("| 1、建立链表|\n");printf("| 2、显示链表|\n");printf("| 3、查找链表中的某个学生信息|\n");printf("| 4、删除链表中指定学号的学生|\n");printf("| 5、指定的位置上插入一个学生|\n");printf("________________________________________________________________\n");return ;}int main(void){int a;menu();while(1){printf("请选择相应的功能:");scanf("%d",&a);switch(a){case 0:return 0;case 1:create();menu();break;case 2:if(head){display();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;case 3:if(head){printf("请选择是按学号查找还是按姓名查找,若是学号就按7,姓名按8\n");scanf("%d",&choice);if(choice==7){search();}else{search1();}menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;case 4:if(head){Delete();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;case 5:if(head){insert();menu();}else{printf("链表为空,请先建立链表!\n");menu();}break;default:break;}}system("pause");return 0;}六、程序结果建立链表显示链表查询学生信息按学号查按姓名查删除信息插入信息退出系统七、心得体会这次的《学生信息管理系统》的设计中,使我懂得课堂上的知识,必须要通过实践操作才能掌握。

数据结构(C语言版)_第1章 绪论

数据结构(C语言版)_第1章 绪论

2.算法的复杂性分析
算法运行所需要的计算机资源的量,需要的 时间资源的量称作时间复杂度,需要的空间 (即存储器)资源的量称作空间复杂度。
运行算法所需要的时间T写成输入规模n的函数, 记作T(n)。“规模”一般是指输入量的数目,比 如在排序问题中,问题的规模可以是定义为被排 序的元素数目。
算法的描述方法
算法可以用自然语言描述,但由于自然语言表 达算法容易产生二义性,人们常使用专用的算 法描述工具。
图1-6传统流程图符号
图1-7结构化流程图符号
【例1.5】分别用传统流程图和结构化流程图描 述一个算法。 【问题描述】分别用传统流程图和结构化流程 图描述下列问题:给定两个正整数m和n,求最大 公约数。 【分析】将数学中求最大公约数的辗转相除法 的求解过程进行分解,用标准的流程图基本符 号表示成图1-8(a)和(b)图。
表1-1 学生成绩信息表
学号
20120401 20120402 20120403 20120405
姓名
王伟 张译民 陈慧 李彩霞
性别
男 男 女 女
出生年月
1993/01 1993/08 1992/12 1993/05
数学
123 115 108 102
语文
98 108 114 113
英语
90 85 95 90
A
B逻辑结构图
线性结构
• 数据元素之间存在一对一的关系,称为线性结构。该 结构的特点是除第一个元素和最后一个元素外,其它 元素都有且只有一个直接前趋和直接后继。
• 如图1-2所示的线性结构是一种最常见、也是最简单 的数据结构,学生成绩管理系统的数据结构是线性结 构,另外仓库管理、教材管理等系统中处理的数据也 是线性结构。线性结构的基本操作有插入、删除及查 找等,具有线性结构的数据简称为线性表。

计算机基础 理论选择题 第六章

计算机基础 理论选择题 第六章

第六章一、单选1.在信息系统开发中,必须把________设计与对数据处理的程序模块设计紧密相结合。

CA.系统结构B.系统组织C.数据模式D.运行环境2.ERP和MRPⅡ之间的关系是________。

AA.ERP在MRPⅡ的基础上增加了许多新功能B.MRPⅡ所涉及的范围大于ERPC.MRPⅡ是在ERP的基础上发展起来的D.和ERP相比较,MRPⅡ的功能更强3.在开发信息系统的系统分析阶段,描述系统处理逻辑、数据流和数据存储等的图形描述工具是________。

BA.DFDB.E-R图C.IDFD.程序盒图4.关系模式的一般描述形式为:R(A1,A2,...,Ai,...,An),其中R和Ai分别对应于________。

BA.模式名和联系名B.模式名和属性名C.联系名和属性名D.属性名和模式名5.关系数据模型的基本结构是________。

DA.模式B.线性表C.模块表D.二维表6.计算机集成制造系统(CIMS)一般由__________两部分组成。

CA.专业信息系统和销售信息系统B.技术信息系统和信息分析系统C.技术信息系统和管理信息系统D.决策支持系统和管理信息系统7.关系数据模式中的侯选键是指__________。

CA.能唯一决定关系的属性B.不可改动的专用保留字C.关键的很重要的属性D.能唯一标识元组的属性或属性组8.在信息系统的结构化生命周期开发方法中,绘制E-R图属于__________阶段的工作。

CA.系统规划B.系统分析C.系统设计D.系统实施9.下列缩略语中,不属于计算机辅助技术系统的是__________。

CA.CADB.CAPPC.CEOD.CAM10.数据库管理系统(DBMS)属于________。

CA.专用软件B.操作系统C.系统软件D.编译系统11.在计算机信息处理领域,下面关于数据含义的叙述中,错误的是________ 。

BA.数据是对客观事实、概念等的一种表示B.数据专指数值数据C.数据可以是数值型数据和非数值型数据D.数据可以是数字、文字、图画、声音、图像12.关系数据模式中的侯选键是指________。

34次VF真题

34次VF真题

1、程序调试的任务是______。

A、设计测试用例B、验证程序的正确性C、发现程序中的错误D、诊断和改正程序中的错误由程序调试的概念可知:程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性质、原因和位置。

其二,对程序进行修改,排除这个错误。

所以程序调试的目的就是诊断和改正程序中的错误。

故本题答案为D。

2、下列关于线性链表的叙述中,正确的是______。

A、各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B、各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、进行插入和删除时,不需要移动表中的元素D、以上三种说法都不对线性表的链式存储结构称为线性链表,为了适应线性表的链式存储结构,计算机存储空间被划分为一个一个小块,每一小块占若干字节,通常称这些小块为存储结点。

每一个存储结点分为两部分:一部分用于存储数据元素的值,称为数据域;另一部分用于存放下一个数据元素的存储序号,即指向后件的结点,称为指针域。

在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。

因此选项A、B均不正确。

为了要在线性链表中插入一个新元素,首先要给该元素分配一个新结点,以便用于存储该元素的值,然后将存放新元素值的结点链接到线性表中指定的位置。

在线性链表的插入过程中不发生数据无素移动的现象,只需改变有关结点的指针即可,从而提高了插入的效率。

为了在线性链表中删除包含指定元素的结点,首先要在线性链表中找到这个结点,然后将要删除结点放回到可利用栈。

在线性链表中删除一个元素后,不需要移动表的数据元素,只需改变被删元素所在结点的前一个结点的指针域即可。

因此,进行插入与删除时,不需要移动表中的元素。

故本题答案为C。

3、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。

下面属于应用软件的是______。

A、学生成绩管理系统B、C语言编译程序C、UNIX操作系统D、数据库管理系统系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学年论文(数据结构 2015-2016 第一学期)题目:数据结构课程设计作者:陈炳宏所在学院:信息科学与工程学院专业年级:信息安全14-1指导教师:刘淑娴职称:副教授2016年 1 月 4 日一.学生成绩管理系统 (1)1.1需求分析 (1)1.1.1程序分析: (1)1.1.2执行方式: (1)1.1.3 程序执行的命令包括: (1)1.1.4测试数据: (2)1.2概要设计 (2)1.2.1 线性表的抽象数据类型定义为: (3)1.2.2 结点的抽象数据类型定义为: (3)1.2.3指针的抽象数据类型定义为: (3)1.2.4本程序包含8个模块: (4)1.3详细设计 (5)1.3.1 元素类型、结点类型和指针类型 (5)1.3.2 函数说明 (5)1.3.3 功能函数 (5)1.4 调试分析 (15)1.5 用户手册 (15)1.6测试结果 (17)一.学生成绩管理系统1.1需求分析1.1.1程序分析:本程序是一个基于线性表结构编写的学生成绩管理系统,学生可以进行包括学生信息建立、在不同位置插入学生信息、查询指定学生信息、删除指定学生信息和输出显示所有学生信息这五项功能,功能操作简单,效率高,可延展性强。

为保证信息的真实性,学生信息中学号长度num<=11,姓名长度name<=8,性别gender<=3,成绩仍意输入,并且学号和成绩只能为数字,否则程序出错。

1.1.2执行方式:本程序以用户和计算机的对话方式执行,即在计算机终端上显示7个共能选择的“提示信息”之后,由用户在键盘上输入本程序中规定的功能指令;相应的输人数据(并能滤去输入中的非法字符)和显示信息来处理结果。

1.1.3 程序执行的命令包括:(1) 学生信息链表的建立;建立后仍意建继续输入,n和N退出;(2) 插入学生信息;输入插入的位置;(3) 查询学生信息;选择两种方式之一查找并查询;(4) 删除学生信息;选择两种方式之一查找并删除;(5) 修改学生信息;选择两种方式之一查找并修改;(6) 输出所有学生信息;(7) 退出管理系统。

1.1.4测试数据:(1) 建立三个学生信息:学号(11) 姓名(8) 性别成绩20141305210,cc,n,8920141302399,sxz,w,9920151432596,sad,n,88(2) 插入一个学生信息:学号(11) 姓名(8) 性别成绩2016,scs,n,79输入插入位置:2(3) 查询学生信息:按1选择学号查询,输入学号:20141305210按2选择姓名查询,输入姓名:scz(4) 删除学生信息:按2选择姓名删除,输入姓名:cc(5) 修改学生信息:按1选择学号修改,输入学号:20141302399输入修改后的数据:学号(11) 姓名(8) 性别成绩20141312399,scz,w,691.2概要设计为实现上述程序功能,首先需要创建一个建立信息链表的函数,用于建立线性链表并对每个结点进行顺序的信息存储,然后创建其他五个函数,来依次实现插入、删除、查询、修改、输出信息。

其中插入信息需要利用循环使得指针循环指向指定结点,而删除、查询和修改均需要利用循环判断来找到指定数据。

1.2.1 线性表的抽象数据类型定义为:typedef struct {数据对象:char num,name,genger,score;数据关系:一对一的线性关系}DataType;基本操作:建立一对一的信息组1.2.2 结点的抽象数据类型定义为:typedef struct node{数据对象:DataType data;struct node *next;数据关系: *next∈data;}ListNode;基本操作:ListNode *findList(LinkList head);初始条件:链表指针类型的建立操作结果:查询函数为指针类型void changeNode(LinkList head);初始条件:查询函数调度成功,选择处有数据操作结果:新数据覆盖原数据来修改void delNode(LinkList head);初始条件:查询函数调度成功,选择处有数据操作结果:选中数据被释放void printList(LinkList head);初始条件:线性表存在且其余操作完成操作结果:输出显示最终数据1.2.3指针的抽象数据类型定义为:typedef {数据对象:ListNode *LinkList;LinkList head;数据关系:LinkList初始为head基本操作:LinkList createList(void)初始条件:建立一对一的信息组操作结果:建立信息链表函数1.2.4本程序包含8个模块:(1)主程序模块:BEGIN{main}初始化;SWITCH接受命令;处理命令;UNTIL 数据处理结束;END.(通过返回的菜单选择函数值进行功能选择并调用实现功能;)(2)菜单选择——单纯的选择功能序号并返回给主函数;(3)链表建立函数——实现顺序链表的建立并输入相应的数据进行结点的存储;(4) 插入信息函数——通过找到指定节点并进行结点插入的函数;(5) 查询信息函数——通过循环对输入的学号和姓名和已经存在数据一个一个往后对比来查找全部函数;(6) 删除信息函数——通过查询函数的基本原理,找到指定函数后,释放指定结点;(7) 修改信息函数——通过查询函数的基本原理,找到指定函数后,修改并覆盖原结点;(8) 输出所有信息函数——利用循环依次输出结点直到结点为空为止。

各模块之间的调用关系如图1:图1 模块调用关系图1.3详细设计1.3.1 元素类型、结点类型和指针类型TYPEDEF DataType—char,int;{元素类型}LinkList—head;{指针类型}ListNode—node;{结点类型}data:DataType;next:*node;END;ViSitProc—PROCEDURE(p:LinkType);{访问结点的过程类型}1.3.2 函数说明int menu_select();LinkList createList(void);void printList(LinkList head);int insertNode(LinkList head,ListNode *p,int i);ListNode *findList(LinkList head);void delNode(LinkList head);void changeNode(LinkList head);1.3.3 功能函数(1)建立链表函数LinkList createList(void){L istNode *p,*rear; //结点指针c har flag; //判断是否继续输入的标志h ead=(ListNode *)malloc(sizeof(ListNode));//头节点指针开辟内存r ear=head; //开始头与尾相同w hile(flag!='n'&&flag!='N'){p=(ListNode *)malloc(sizeof(ListNode)); //结点指针开辟空间printf("\n学号(11)姓名(8)性别成绩\n");scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);rear->next = p;//让尾结点指向当前结点的下一结点,并且该节点赋值为p结点rear = rear->next; //尾结点指针指向下一结点printf("按n或N退出,按其他键继续输入\n");getchar();//对标志赋值判断是否继续scanf("%c",&flag);}r ear->next=NULL;//让尾结点的下一结点为空来结束链表r eturn head;//返回头指针}(2)插入信息函数int insertNode(LinkList head,ListNode *p,int i){L istNode *p1;i nt j=1;p1=head;i f(p1->next==NULL)//判断如果为空表,则插入作为第一个结点*//{if(i==0){p1->next=p;//让头节点的指向下一节点,且该结点为p结点p->next=NULL; //p结点的下一结点为空来结束链表}else return -1; //如果在空表情况下输入大于0位置,则返回-1。

}w hile((j<=i-1)&&(p1!=NULL))//找到第i-1个结点,p1指向该结点//{ p1=p1->next; j++; }i f(p1==NULL)//如果仍然没有合适的插入点,则返回-1//return -1;p->next=p1->next; //有就让p结点的下一位置指向当前结点的下一结点p1->next=p;//并重新让当前结点指向的下一节点变为p结点r eturn 0;}(3)查询信息函数ListNode *findList(LinkList head){L istNode *p;c har num[12];c har name[9];i nt xz;p rintf("===========================\n");p rintf("1、按学号查询\n");p rintf("2、按姓名查询\n");p rintf("===========================\n");p rintf(" 请选择: ");p=head->next;//p为头节点的下一节点s canf("%d",&xz);i f (xz==1){printf("请输入要查找学生的学号:");scanf("%s",num);while(p && strcmp(p->data.num,num)!=0) //循环匹配输入信息是否与当前结点一致,若不一致就转入下一结点进行匹配p=p->next;}e lse if (xz==2){printf("请输入要查找学生的姓名:");T YPEDEF DataType—char,int;{元素类型}LinkList—head;{指针类型}ListNode—node;{结点类型}data:DataType;next:*node;END;ViSitProc—PROCEDURE(p:LinkType);{访问结点的过程类型}int menu_select();LinkList createList(void);void printList(LinkList head);int insertNode(LinkList head,ListNode *p,int i);ListNode *findList(LinkList head);void delNode(LinkList head);void changeNode(LinkList head);LinkList createList(void){L istNode *p,*rear; //结点指针c har flag; //判断是否继续输入的标志h ead=(ListNode *)malloc(sizeof(ListNode));//头节点指针开辟内存r ear=head; //开始头与尾相同w hile(flag!='n'&&flag!='N'){p=(ListNode *)malloc(sizeof(ListNode)); //结点指针开辟空间printf("\n学号(11)姓名(8)性别成绩\n");scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);rear->next = p;//让尾结点指向当前结点的下一结点,并且该节点赋值为p结点rear = rear->next; //尾结点指针指向下一结点printf("按n或N退出,按其他键继续输入\n");getchar();//对标志赋值判断是否继续scanf("%c",&flag);}r ear->next=NULL;//让尾结点的下一结点为空来结束链表r eturn head;//返回头指针}int insertNode(LinkList head,ListNode *p,int i){L istNode *p1;i nt j=1;p1=head;i f(p1->next==NULL)//判断如果为空表,则插入作为第一个结点*//{if(i==0){p1->next=p;//让头节点的指向下一节点,且该结点为p结点p->next=NULL; //p结点的下一结点为空来结束链表}else return -1; //如果在空表情况下输入大于0位置,则返回-1。

相关文档
最新文档