版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
判断题数据的逻辑结构与数据元素本身的内容和形式无关。(√)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。(√)数据元素是数据的最小单位。(√)数据的逻辑结构和数据的存储结构是相同的。(×)程序和算法原则上是没有区别的,所以在讨论数据结构时可以通用。(×)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构。(√)数据的存储结构是数据的逻辑结构的存储映像。(×)数据的物理结构是指数据在计算机内实际的存储形式。(√)数据的逻辑结构是依赖于计算机的。(×)算法是对解题方法和的描述步骤。(√)填空题:数据有逻辑结构和存储结构两种结构。数据逻辑结构除了集合以外,还包括线性结构、树形结构和图形结构。数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。树形结构和图形结构合称为非线性结构。在树形结构中,除了树根结点以外,其余每个结点只有1个前驱结点。在图形结构中,每个结点的前驱结点数和后继结点数可以任意多个。数据的存储结构又叫物理结构。数据的存储结构形式包括顺序存储、链式存储、索引存储和散列存储。线性结构中的元素之间存在一对一的关系。树形结构中的元素之间存在一对多的关系。图形结构的元素之间存在多对多的关系。数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)3个方面的内容。数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。算法是一个有穷指令的集合。算法效率的度量可以分为事先估算和事后统计法。一个算法的时间复杂性是算法输入规模的函数。算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n的函数。若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为O(nlog2n)。若一个算法中的语句频度之和为T(n)=3n+nlog2n+n2,则算法的时间复杂度为___O(n*n)_______。数据结构是一门研究非数值计算的程序设计总是中计算机的操作对象,以及它们之间的关系和运算的学科。串的两种最基本的存储方式是顺序存储方式链式存储方式。两个串相等的充分必要条件是、长度相等对应位置的字符相同。空串是零个字符,其长度等于零。空格串是由一个或多个空格字符组成的串,其长度等于其包含的空格个数。设s=”I□AM□A□TEACHER”(□表示空格),其长度是14。已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是Loc(A[0][0]),则A[i][j]的地址是LOC(A[0][0])+(n*i+j)*k。二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是200+(12*10+6)=326。二维数组A[10,…,20][5,…,10]采用行序为主方式存储,每个元素占4个存储单元,并且A[10][5]的存储地址是1000,则A[8][9]的地址是_1000+((18-10)*6+(9-5))*4=1208。通常从四个方面评价算法的质量:正确性、易读性、健壮性和高效率。中序遍历二叉排序树得到的序列是有序序列(填有序或无序)。。设某棵二叉树中度数为0的结点数为N0,度数为1的结点数为N1,则该二叉树中共有2N0+N1个空指针域。。假设为循环队列分配的向量空间为Q[20](下标从0开始),若队列的长度和队头指针值分别为13和17,则当前队尾指针的值为10。设一棵完全二叉树中有500个结点,则该二叉树的深度为9;若用二叉链表作为该完全二叉树的存储结构,则共有501个空指针域。数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。数据有逻辑结构和存储两种结构。串的两种最基本的存储方式是顺序存储和链接存储。若一个算法中的语句频度之和为T(n)=3n+nlog2n+n2,则算法的时间复杂度为O(n2)。数据结构主要研究数据的逻辑结构、存储结构和算法3个方面的内容。算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n的函数。数据结构是一门研究非数值计算的程序设计总是中计算机的操作对象,以及它们之间的关系和运算的学科。选择题:数据结构通常是研究数据的(A)及它们之间的相互关系。A.存储结构和逻辑结构 B.存储和抽象C.联系和抽象 D.联系与逻辑在逻辑上可以把数据结构分成(C)。A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构数据在计算机中存储器内表示时,物理地址和逻辑地址相同并且是连续的,称之为(C)。A.存储结构 B.逻辑结构 C.顺序存储结构 D.链式存储结构非线性结构中的每个结点(D)。A.无直接前趋结点 B.无直接后继结点C.只有一个直接前趋和一个直接后继结点 D.可能有多个直接前趋和多个直接后继结点链式存储结构所占存储空间(A)。A.分两部分,一部分存储结点的值,另一部分存放表示结点间关系的指针B.只有一部分,存放结点的值C.只有一部分,存储表示结点间关系的指针D.分两部分,一部分存放结点的值,另一部分存放结点所占单元数算法的计算量大小称为算法的(C)。A.现实性 B.难度 C.时间复杂性 D.效率数据的基本单位是(B)。A.数据结构 B.数据元素 C.数据项 D.文件每个结点只含有一个数据元素,所有存储结点相继存放在一个连续的存储空间里。这种存储结构称为(A)结构。A.顺序存储 B.链式存储 C.索引存储 D.散列存储每一个存储结点不仅含有一个数据元素,还包含一组指针,该存储方式是(B)存储方式。A.顺序 B.链式 C.索引 D.散列以下任何两个结点之间都没有逻辑关系的是(D)。A.图形结构 B.线性结构 C.树形结构 D.集合在数据结构中,与所使用的计算机无关的是(C)。A.物理结构 B.存储结构 C.逻辑结构 D.逻辑和存储结构下列4种基本逻辑结构中,数据元素之间关系最弱的是(A)。A.集合 B.线性结构 C.树形结构 D.图形结构与数据元素本身的形式、内容、相对位置、个数无关的是数据的(A)。A.逻辑结构 B.存储结构 C.逻辑实现 D.存储实现每一个存储结点只含有一个数据元素,存储结点存放在连续的存储空间,另外有一组指明结点位置的表,该存储方式是(C)存储方式。A.顺序 B.链式 C.索引 D.散列算法能正确的实现预定功能的特性称为算法的(A)。A.正确性 B.易读性 C.健壮性 D.高效性算法在发生非法操作时可以作出相应处理的特性称为算法的(C)。A.正确性 B.易读性 C.健壮性 D.高效性下列时间复杂度中最坏的是(D)。A.O(1) B.O(n) C.O(log2n) D.O(n2)下列算法的时间复杂度是(D)for(i=0;i<n;i++)for(j=0;j<n;j++)C[i][j]=i+j;A.O(1) B.O(n) C.O(log2n) D.O(n2)算法分析的两个主要方面是(A)。A.空间复杂性和时间复杂性 B.正确性和简明性C.可读性和文档性 D.数据复杂性和程序复杂性计算机算法必须具备输入、输出和(C)。A.计算方法 B.排序方法 C.解决问题的有限运算步骤 D.程序设计方法如下图所示的4棵二叉树,(C)不是完全二叉树。如下图所示的4棵二叉树,(B)是平衡二叉树。在线索化二叉树中,t所指结点没有左子树的充要条件是()。A. B. C. D.二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法(B)。A. 正确 B.错误 C.不确定 D.不存在二叉树的先序遍历序列中,任意一个结点均处在其孩子结点的前面,这种说法(A)。A. 正确 B.错误 C.不确定 D.不存在由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法(A)。A. 正确 B.错误 C.不确定 D.不存在设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为(B)。A.2h B.2h-1C.2h+1 D.h+1如右图所示二叉树的中序遍历序列是(B)。 A.abcdgef B.dfebagcC.dbaefcg D.defbagc已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的先序遍历序列是(A)。A.cedba B.cdbae C.cabed D.cabde设a和b为一棵二叉树上的两个结点,在中序遍历时,a在b前的条件是(D)。A.a是b的左孩子 B.b是a的右孩子C.a是b左子树上结点或b是a右子树上结点 D.以上三项均可假定在一棵二叉树中,双分支结点数为15,单分支结点数为30,则叶子结点数为(C)个。A. 45 B.15 C.16 D.31某二叉树的先序遍历序列是abdgcefh,中序遍历序列是dgbaechf,则其后序遍历序列是(A)。A.gdbehfca B.abcdefgh C.gdbaefch D.ghbcdefa按照二叉树的定义,具有3个结点的二叉树有(D)种。A.2 B.3 C.4 D.5树的基本遍历策略可分为先根遍历和后根遍历;二叉树的遍历策略分为先序、中序和后序遍历。这里把由树转化得到的二叉树叫做这棵树对应的二叉树。以下结论()是正确的。A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同D.以上都不对空串与空格串是相同的,这种说法(B)。A.正确 B.错误 C.依据情况而定 D.不规范串是一种特殊的线性表,其特殊性体现在(D)。A.可以顺序存储 B.数据元素是一个字符C.可以链接存储 D.数据元素可以是多个字符设有两个串p和q,求q在p中首次出现的位置的运算称做(B)。A.连接 B.模式匹配 C.求子串 D.求串长设串s1=”ABCDEFG”,s2=”PQRST”,函数con(x,y)返回x和y串的连接,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果是(D)。A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF常对数组进行的两种基本操作是(C)。A.建立与删除 B.索引和修改 C.查找和修改 D.查找与索引二维数组M的成员是6个字符(每个字符占一个存储单元,即一个字节)组成的串,行下标i的范围从0到8,列下标j的范围从1到10,则存放M至少需要(D=1\*GB3①)个字节;M的第8列和第5行共占(=2\*GB3②B)个字节。=1\*GB3①A.90 B.180 C.240 D.540=2\*GB3②A.108 B.114 C.54 D.60数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是(C)。A.80 B.100 C.240 D.270数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为(C)A.SA+141 B.SA+144 C.SA+222 D.SA+225数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按列存放时,元素A[5][8]的起始地址为(A)A.SA+141 B.SA+180 C.SA+222 D.SA+225设有模式串A=”abefaba”,则其next数组中的值依次应为(C)。A.0111111 B.0111212 C.0111123 D.0111122设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为(C) A.O(n) B.O(log2n) C.O(1) D.O(n2)设一棵二叉树的深度为k,则该二叉树中最多有(D)个结点。 A.2k-1 B.2k C.2k-1 D.2k-1设用链表作为栈的存储结构,则退栈操作(B) A.必须判别栈是否满 B.必须判别栈是否空C.判别栈元素的类型 D.对栈不作任何操作设顺序循环队列Q[0:M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队列中的元素个数为(D)。A.R-F B.F-R C.(R-F+M)%M D.(F-R+M)%M在含有n个结点的顺序存储的线性表中,在任一结点前插入一个结点所需移动结点的平均次数为(B)。A.n B.n/2 C设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有(B)个空指针域。A.2m-1 B.2m C.2m+1 D.4m二叉树的第k层的结点数最多为(D)A.2k-1 B.2K+1 C.2K-1 D.2K-1广义表是线性表的推广,它们之间的区别在于(A)。A.能否使用子表 B.能否使用原子项 C.是否能为空 D.表的长度设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C)。A.9 B.10 C.11 D.12数据的最小单位是(B)。A.数据项 B.数据元素 C.数据类型 D.数据变量设某数据结构的二元组形式表示为A=(D,R),D={01,02,03,04,05,06,07,08,09},R={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},则数据结构A是(B)A.线性结构 B.树型结构 C.物理结构 D.图型结构一棵有n个结点的树,在把它转换成对应的二叉树后,该二叉树根结点的左子树上共有(B)个结点。A.n-2 B.n-1 C.n+1 D.n+2设指针变量p指向单向链表中结点A,若删除单向链表中结点A,则需要修改指针的操作序列为(A)(q是指向该类结点的空指针)A.q=p->next;p->data=q->data;p->next=q->next;free(q);B.q=p->next;q->data=p->data;p->next=q->next;free(q);C.q=p->next;p->next=q->next;free(q);D.q=p->next;p->data=q->data;free(q);设有模式串A=”abaabcac”,则其next数组中的值依次应为(C)。A.0111111 B.0111212 C.01122312 D.01122122链栈和顺序栈相比,有一个比较明显的优点是B。A.插入操作更加方便 B.通常不会出现栈满的情况C.不会出现栈空的情况 D.删除操作更加方便对于一棵深度为4的三叉树,最多有(C)个结点。A.30 B.36 C.40 D.54设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3]存放在什么位置?脚注(10)表示是十进制数。(C)A.688 B.678 C.692 D.696设某棵二叉树的中序遍历序列为ABCDE,前序遍历序列为CABD,则后序遍历该二叉树得到序列为(A)。A.BAEDC B.BCEDA C.ECDAB D.CBDEA中缀表达式(A+B)*D+E/(F+A*D)+C的后缀形式是(A)。A.AB+D*EFAD*+/C+ B.ABD*+EFAD*+/C+C.ABDEFADC+#+/+*+ D.AB+D*E/FA+*DC+综合题简述下列每对术语的区别:空串和空白串:空串(NullString)是指长度为零的串;而空白串(BlankString),是指包含一个或多个空白字符‘’(空格键)的字符串.串常量和串变量:串常量是指在程序中只可引用但不可改变其值的串。串变量是可以在运行中改变其值的主串和子串:串中任意个连续的字符组成的子序列称为该串的子串,包含子串的相应地称为主串目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的假设有如下的串说明:chars1[30]=”Stocktom,CA”,s2[30]=”March52012”,s3[30],*p;=1\*GB3①在执行如下的每个语句后p的值是什么?p=strchr(s1,’t’);p的值是指向第一个字符t的位置,也就是p==&s1[1]。p=strchr(s2,’2’);p的值是指向s2串中第一个9所在的位置,也就是p==&s2[9]。p=strchr(s2,’6’);p的返回值是NULL。阅读程序题1.说明该C语言程序段所完成的操作。voidconversion(){scanf(“%d”,&n); //n是整型变量while(n){ //当n不为0时push(s,n%8); //将n%8的值压入栈s中n=n/8; //n除以8赋值给n}While(!stackempty(s)){ //当栈s不空时pop(s,e); //从栈s中弹出一个元素赋值给变量e printf(“%d”,e); //打印出变量e的值}} //程序段结束将从屏幕输入的十进制数转化为二进制数2.给出以下C语言程序段的功能说明。intleafcount(BT*T){ //BT为二叉树类型if(T==NULL) //如果指向二叉树的指针为空return(0); //返回系统elseif(T->lch==NULL&&T->rch==NULL) //如果T所指结点的左右孩子都为空return(1); //返回1elsereturn(leafcount(T->lch)+leafcount(T->rch)); //返回对下层的操作}用于求二叉树中所有叶子结点数的递归函数
voidhuffmannode(HFMTT)//{inti,j,a,k=0;printf("\n");for(i=0;i<n;i++) /*n为结点数*/{j=0;a=i;;if(!(k%2))printf("\n");printf("\t\t%i:",T[i].weight);k++;hfnode(T,i,j); /*设置哈夫曼树的编码,左为0,右为1*/i=a;}求哈夫曼编码}课程设计说明书课程名称:数据结构课程设计班级:--电科1班姓名:学号:设计题目:图书管理系统一、设计题目与要求【问题描述】
设计一个计算机管理系统完成图书管理基本业务。
【基本要求】每种书的登记内容包括书号、书名、著作者、现存量和库存量;对书号建立索引表(线性表)以提高查找效率;系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;
*归还:注销对借阅者的登记,改变该书的现存量。
【进一步完成内容】系统功能的进一步完善;索引表采用树表。设计内容程序流程图源程序软件测试报告(包括所用到的数据及结果)二、概要设计有八个模块图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书借书模块读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。还书模块归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。查询图书信息查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可以借几本书。退出退出读书管理系统并保存读者和图书信息。图书管理系统图书管理系统图书管理模块理读者管理模块借阅操作模块图书管理模块理读者管理模块借阅操作模块查询操作模块借书系统读者信息查询图书信息查询输入读者信息还书系统采编入库初始化图书信息借书系统读者信息查询图书信息查询输入读者信息还书系统采编入库初始化图书信息三、算法设计进入系统后首先进行图书初始化,输入图书的信息。开始开始开始开始输入图书编号、名称、作者和图书数量输入图书编号、名称、作者和图书数量进入系统进入系统初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息。开始开始输入功能所对应的数字输入功能所对应的数字输入的数字小于0大于6输入的数字小于0大于6错误!请重新输入错误!请重新输入执行所选功能执行所选功能1)采编入库录入图书信息录入图书信息判断是否有此图书判断是否有此图书 是在原有的纪录上加上现有的图书数量 否在原有的纪录上加上现有的图书数量向系统中加入新纪录向系统中加入新纪录2)输入读者信息开始开始输入读者信息:读者书证号输入读者信息:读者书证号结束结束3)借阅图书输入读者书证号输入读者书证号判断读者是否存在判断读者是否存在 否输出次读者编号不存在!按任意键返回 输出次读者编号不存在!按任意键返回 是输入要借的图书编号输入要借的图书编号判断图书编号是否存在判断图书编号是否存在 否输出此图书编号不存在!按任意键返回 输出此图书编号不存在!按任意键返回 是看是否还有此图书 否看是否还有此图书输出此书已借完,按任意键返回 是输出此书已借完,按任意键返回看读者的借书数目是否满了看读者的借书数目是否满了 是输出借书数目已满不能借书,按任意键返回 否输出借书数目已满不能借书,按任意键返回看读者是否借了相同的书看读者是否借了相同的书 是输出同一读者不能借相同的两本书 否输出同一读者不能借相同的两本书输入归还图书的日期输入归还图书的日期图书现有数量和库存数量都减1图书现有数量和库存数量都减1输出读者结束成功,按任意键返回输出读者结束成功,按任意键返回结束结束4)归还图书输入要还书的读者编号输入要还书的读者编号判断读者编号是否存在 否判断读者编号是否存在输出读者编号不存在按任意键返回 是输出读者编号不存在按任意键返回输入读者还书编号输入读者还书编号判断图书编号是否存在判断图书编号是否存在 否输出此图书编号不存在按任意键返回输出此图书编号不存在按任意键返回是此图书编号和还书日期等于0此图书编号和还书日期等于0库存和现有图书数量加1,借书数量减1库存和现有图书数量加1,借书数量减1输出读者还书完毕,按任意键返回输出读者还书完毕,按任意键返回结束结束5)查询图书信息判断图书信息是否为空判断图书信息是否为空 否输出图书信息:编号、名称、作者、现有和库存输出图书信息:编号、名称、作者、现有和库存结束结束6)查询读者信息判断读者信息是否为空判断读者信息是否为空 否输出读者书证号、姓名、图书编码和还书日期输出读者书证号、姓名、图书编码和还书日期输出读者信息打印完毕输出读者信息打印完毕结束结束四、运行结果和调试分析图书信息初始化同一本新书入库的运行结果图不同的新书采编入库采编入库后查询图书信息的运行结果图登记读者信息借书借书后查询图书信息的运行结果图借同一本书的运行结果图借不同的书借两本书后查询读者信息的运行结果图还书运行结果图还书之后再查询读者信息的运行结果图还书后查询图书信息退出五、总结体会虽然这次的程序是通过上网查出来的,但是通过这次的实验使我知道了图书管理系统的流程,知道了一些以前不知道的知识,在运行程序时也遇到了一些问题,借书时只能借一本书,再借书就不能显示是借了还是不能借,把最多能借书的数量改了一下还是不行,最后在每一个判断输出之后都加了gotoEND借书,就能正常借书了。程序有点长,本来一个函数就能完成一个功能,他用了两个函数就我把自己能改成一个的改了。借书系统比较复杂,不容易懂,和同学交流了一下自己看了看才明白。这次的实验还让我复习了数据结构的一些知识,如数组,while语句,switch语句,链表,还知道了如何使用system("cls")清屏,还知道了strcmp是用来比较字符串s1和s2大小的,strcpy使用来把字符串s2的值赋给s1的。这次的实验增加了我们自己动手动脑的能力,希望多做一些这样的实验,很有意义,和现实生活结合的程序增加了我的兴趣。源代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#defineMax4typedefstructbook{charbook_num[10];charbook_name[20];charbook_writer[10];intbook_xy;intbook_kc;structbook*next;}BK;typedefstructborrow{charborrow_book_num[10];charlimit_date[8];}BO;typedefstructreader{charreader_num[10];charreader_name[10];intright;BOborrow[Max];structreader*next;}RD;BK*h_book;RD*h_reader;voidLogin();intMenu();voidInit();voidInit_book();voidMenu_select();voidInsert_New_Book();voidFind_Book();voidadd_reader();voidPrint_reader();voidPrint_book();voidBorrow_Book();voidReturn_Book();voidSave();voidSave_Book();voidSave_Reader();voidLoad();voidLoad_Reader();voidLoad_Book();voidLogin(){system("cls");printf("\n\n\n\t\t***************************************\n");printf("\n\n\n\t\t\t欢迎使用图书管理系统\n");printf("\n\n\n\t\t***************************************\n");printf("\n\n\t\t本程序制作人学号:\n\n\n\n\n\n\n");printf("\n\n\n\t\t按任意键进入系统...");getch();system("cls");}intMenu()/*主菜单*/{intdm;printf("\n\t\t图书管理系统主菜单\n");printf("=================================================\n");printf("*\t0----退出系统\n");printf("*\t1----采编入库\n");printf("*\t2----登记读者\n");printf("*\t3----借阅登记\n");printf("*\t4----还书管理\n");printf("*\t5----查询图书信息\n");printf("*\t6----查询读者信息\n");printf("=================================================\n");printf("请选择相应的代码:");for(;;){scanf("%d",&dm);//dm输入的数字if(dm<0||dm>6)printf("\n错误!请重新输入:");elsebreak;}returndm;}voidMenu_select()/*主菜单选择函数*/{for(;;){switch(Menu())/*功能选择*/{case0:system("cls");Save();printf("\n\n\t文件保存成功!\n");printf("\n\n\t欢迎下次使用本系统!\n");getch();exit(0);case1:Insert_New_Book();break;case2:add_reader();break;case3:Borrow_Book();break;case4:Return_Book();break;case5:Print_book();break;case6:Print_reader();break;default:printf("\n错误!");exit(0);}}}voidInit()/*初始化*/{BK*p0;printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n");p0=(BK*)malloc(sizeof(BK));h_book=p0;printf("\n请输入图书信息:\n");printf("图书编号:");/*输入图书编号(唯一)*/scanf("%s",p0->book_num);printf("图书名称:");/*输入图书名称*/scanf("%s",p0->book_name);printf("图书作者:");/*输入图书作者*/scanf("%s",p0->book_writer);printf("图书数量:");/*输入图书数量*/scanf("%d",&p0->book_kc);p0->book_xy=p0->book_kc;/*开始时图书现有量和库存量相等*/p0->next=NULL;printf("\n图书信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}voidInsert_New_Book()/*新书入库*/{BK*p,*p0,*p1;p=p1=h_book;printf("\n新书入库模块...\n");printf("\n请输入新书信息..\n包括书号.书名.数量..\n");p0=(BK*)malloc(sizeof(BK));printf("图书编号:");scanf("%s",p0->book_num);while(strcmp(p0->book_num,p1->book_num)!=0&&p1->next!=NULL)p1=p1->next;if(strcmp(p0->book_num,p1->book_num)==0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/{printf("\n此编号图书已存在!!直接入库!\n");printf("图书数量:");scanf("%d",&p0->book_kc);p1->book_kc+=p0->book_kc;p1->book_xy+=p0->book_kc;}else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/{printf("图书名称:");scanf("%s",p0->book_name);printf("图书作者:");scanf("%s",p0->book_writer);printf("图书数量:");scanf("%d",&p0->book_kc);//库存数量while(p->next){p=p->next;}if(h_book==NULL)h_book=p0;/*此处分两种情况,链表中没有数据,head直接指向p0处*/elsep->next=p0;/*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0->next=NULL;p0->book_xy=p0->book_kc;}printf("\n新书入库完毕!按任意键继续下一步操作..\n");getch();system("cls");}voidadd_reader()/*添加读者*/{RD*p0;inti;printf("\n读者初始化开始,请输入读者信息..\n包括书证号.姓名..\n");p0=(RD*)malloc(sizeof(RD));/*申请新结点存储空间*/h_reader=p0;printf("\n请输入读者的信息:\n");printf("读者书证号:");scanf("%s",p0->reader_num);printf("读者姓名:");scanf("%s",p0->reader_name);p0->right=0;for(i=0;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0");/*所借图书直接置为(即没有借书)*/strcpy(p0->borrow[i].limit_date,"0");}p0->next=NULL;printf("\n读者信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}voidBorrow_Book()/*借书模块*/{BK*p0;RD*p1;charbo_num[10],rea_num[10],lim_date[8];inti;p0=h_book;p1=h_reader;printf("\n借书模块...\n");printf("\n请输入借书的读者书证号:");scanf("%s",rea_num);while(p1->next!=NULL&&strcmp(rea_num,p1->reader_num)!=0)p1=p1->next;if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!=0){printf("\n此读者编号不存在!按任意键返回..\n");gotoEND;}printf("\n请输入你要借的书的编号:");scanf("%s",bo_num);while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL)p0=p0->next;if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!=0){printf("\n此图书编号不存在!按任意键返回..\n");gotoEND;}elseif(p0->book_xy<=0){printf("\n抱歉,此书已借完!请等待新书的到来!!\n按任意键返回....");gotoEND;}elseif(p1->right>Max||p1->right==Max){printf("\n不好意思,借书数目已满!不能借书!\n按任意键返回....");gotoEND;}elseif(strcmp(p1->borrow[0].borrow_book_num,"0")!=0){for(i=0;i<Max;i++){if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0){printf("\n抱歉!同一个读者不能同借两本相同的书!\n按任意键返回....");gotoEND;}elseif(strcmp(p1->borrow[i].borrow_book_num,"0")==0){printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--; p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);gotoEND;}}}else{printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--;p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);}END:getch();system("cls");}voidReturn_Book()/*还书模块*/{BK*p;RD*q;inti,j,find=0;charreturn_book_num[10],return_reader_num[10];p=h_book;q=h_reader;printf("\n还书模块...\n");printf("\n请输入要还书的读者编号:");scanf("%s",return_reader_num);while(q->next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0)q=q->next;if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!=0){find=2;printf("\n此读者编号不存在!按任意键返回..\n");gotoend;}printf("\n请输入读者还书的编号:");scanf("%s",return_book_num);while(p->next!=NULL&&strcmp(return_book_num,p->book_num)!=0)p=p->next;if(p->next==NULL&&strcmp(return_book_num,p->book_num)!=0){find=2;printf("\n错误!此图书编号不存在!按任意键返回..\n");gotoend;}for(i=0;i<Max;i++)if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0)/*如果此读者借了此书*/{find=1;for(j=i;j<Max-1;j++){strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num);strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);}strcpy(q->borrow[Max-1].borrow_book_num,"0");strcpy(q->borrow[Max-1].limit_date,"0");p->book_xy++; p->book_kc++;q->right--;printf("\n编号%s的读者还书完毕!按任意键继续下步操作..",return_reader_num);}if(find==0)printf("\n错误!此读者未借此书!按任意键返回..\n");end:getch();system("cls");}voidPrint_book()/*查询图书信息*/{BK*p;p=h_book;printf("\n图书信息如下:\n\n");printf("图书编号\t图书名称\t图书作者\t现有\t\t库存\n");while(p!=NULL){printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_xy,p->book_kc);p=p->next;}printf("\n图书信息打印完毕!按任意键继续下一步操作..");getch();system("cls");}voidPrint_reader()/*查询读者信息*/{RD*p;inti;p=h_reader;printf("\n读者信息如下:\n\n");printf("读者书证号\t\t读者姓名\n");printf("\n");while(p!=NULL){printf("\t%s\t\t%s",p->reader_num,p->reader_name);for(i=0;i<Max;i++){printf("\n");pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵阳市息烽县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 漳州市云霄县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 朔州市右玉县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 包头市白云矿区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 黑河市嫩江县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 赣州市定南县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 省标化工地施工方案
- 2026年天津市和平区中考一模语文试卷和答案
- 深度解析(2026)《CBT 3683-1995船用曲轴连杆径向柱塞液压马达修理技术要求》
- 深度解析(2026)《2026-2027年半导体器件在仿生机器人人工肌肉与柔性驱动中的应用探索软体机器人核心执行器获机器人公司前瞻研发部门关注》
- JJF 1986-2022 差压式气密检漏仪校准规范
- JJF 2034-2023微生物鉴定与药敏分析系统校准规范
- 《公共政策学-政策分析的理论方法和技术》重点解析讲述
- python课件第三章基本数据类型:数字类型及math库的应用
- 2023年毛概题库连答案
- GB/T 14056.2-2011表面污染测定第2部分:氚表面污染
- CB/T 615-1995船底吸入格栅
- 资本经营课件
- 马工程西方经济学(第二版)教学课件-8
- 广东珠海唐家古镇保护与发展战略及营销策略167166849
- (完整)普洱茶介绍ppt
评论
0/150
提交评论