图书管理系统(20211124120423)_第1页
图书管理系统(20211124120423)_第2页
图书管理系统(20211124120423)_第3页
图书管理系统(20211124120423)_第4页
图书管理系统(20211124120423)_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、1 课程设计说明书课程设计任务书专业年级班一、设计题目图书信息管理系统设计二、主要内容(一)学生成绩排名先采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。(二) 根据条件进行学生成绩排名在函数中进行 10 个学生成绩从高到低排名,再改进函数,进行2 n 个学生成绩从高到低排名 , 排名方式根据函数的style参数进行,如style为a 按升序排, style为 d 按降序排。( a :ascending 升,d:descending 降)编写多个不同函数,使之能实现不同的排序算法(3 种以上) ,再

2、编写一个通用输出函数, (要求用函数指针做参数)能分别打印不同排序算法的结果。(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。(四) 学生成绩文件管理定义一个结构体数组,存放10 个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文

3、件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 1 ,3 , 5 ,7, 9 个学生的数据。(五)综合系统3、图书信息管理系统设计:图书信息包括:登录号、书名、作者名、分类号、出版单位、出3 版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作。 v (2)图书信息录入功能输入。v (3)图书信息浏览功能输出。(4)查询和排序功能: (至少一种查询方式 )算法。l 按书名查询2 按作者名查询(5)图书信息的删除与修改。三、具体要求围绕课程设计的目的和意义,基本要求如下:1、认真阅读 c 语言课程设计指导书,明确课程

4、设计的目的、意义和要求;2、快速总结 c程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用;3、 快速熟悉 tuber c 或 c+ 的上机环境。能熟练进行高级编辑操作 (特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。4、根据“课程设计题目” ,采用结构化的程序设计思想,确定系统的总体设计方案、确定时间进度。如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。4 5学习并了解良好的程序设计风格。按质、按量、并按时间完成课程设计的任务。6提供可运行的课程设计系统,参加上机面试答辩。本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系

5、;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法) 。同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。四、进度安排依照教学计划,课程设计时间为3 周。按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。避免甚至杜绝“拿到题目就编码”的现象。建议将时间分为三个阶段:第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各程序模块的算法,并画出相应的n-s图,同时编写相应的文档;第二阶段,根据n-s 图编写程序代码并单独调试,再将

6、调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在课程设计说明书上,并参加答辩。三个阶段时间分配的大概比例是: 35 :45:20。五、完成后应上交的材料1课程设计的题目、系统的总功能和各子模块的功能;2题目的设计思想(或算法)简述;5 3主要程序的框图(要求用n-s图) ;4源程序代码(要求在关键的位置有注释,从而增加程序的可读性);5课程设计的总结报告,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。以上完成的源程序及相关文档,填写在课程设计说明书上,要求干净整

7、洁,符合课程设计的要求和规范。六、总评成绩课程设计的成绩根据学生在课程设计期间的态度,课程设计的完成情况和难易程度,文档的质量及系统演示情况综合评定。不符合要求的设计报告,抄袭的设计报告或者在设计中完全未参与者将按不及格处理。课程设计的成绩采用百分制记分,成绩评定标准是: 90 至 100 分:能独立完成设计工作, 在设计中体现出较强的综合运用知识能力和一定的创新能力。设计符合规范要求,说明书叙述透彻,体现一定的创新能力。设计过程中表现好,无违纪现象。80 分至 89 分:能独立完成设计工作, 在设计中体现出较强的综合运用知识的能力。设计符合规范要求,说明书叙述清楚。设计过程中表现较好,无违纪

8、现象。6 70 至 79 分:能完成设计工作, 在设计中体现出一定的综合运用知识的能力,设计符合规范要求,说明书叙述比较清楚。设计过程中表现较好,无违纪现象。60 至 69 分:能基本完成设计工作,结果基本正确,设计符合规范要求,说明书叙述基本清楚,设计过程表现一般,无违纪现象。60 分以下:达不到上述水平。其中,程序设计占65% ,文档占 20% ,面试答辩占 15% 。7 指导教师签名日期年月日系 主 任审核日期年月日目录一、系统功能 . 91、系统总功能 . 92、系统总框架 . 9二、功能模块的描述 . 101.数据结构 . 102.main()主函数. 113.menu()主菜单 .

9、 154login()口令函数 . 165create()创建图书信息函数 . 186increase ()函数 . 207. save() 保存记录到文件函数 . 228read ()函数查看图书信息 . 249.del()函数删除图书信息 . 268 10.modify()函数修改图书信息. 2811.search1 ()函数按书名搜索图书信息. 3012.search2 ()函数按作者名搜索图书信息. 3213.sort 函数按登录号排序 . 3414.sort1()函数按图书价格排序 . 3615.print()输出函数 . 39三源程序 . 40四课程设计总结 . 601、设计过程的

10、感受与体会 . 602、遇到的问题与解决方法 . 613.创新之处 . 624.存在的不足和改进的思想 . 629 一、系统功能1、系统总功能此程序提供了图书管理的功能。随着图书馆的书籍日益增多,对图书进行系统的管理,减轻图书管理员的工作负担显得越来越迫在眉睫。本程序为登记及查询图书信息提供了极大的方便。2、系统总框架图 书 信 息 管 理 系10 二、功能模块的描述1.数据结构一个完整的图书信息管理系统包括各种各样的信息,如登录号、书名、作者名、分类号、出版单位、出版时间、价格等。所以每组信息必须先定义数组的元素。 c语言允许指定一种数据结构,这种类型的数据结构称为结构体。由于数组存储是采用

11、顺序存放,在内存空间中占用连续空间,所以若干图书信息的管理实质是对顺序存储的线性表的管理。结构点如下:struct book long num; 录入图书信息浏览所有图书查询图书信息图书进行排序修改图书信息删除图书信息退出程序按书名查询按作者查询按登录号排序按书价钱排序11 char author15; char name25; char sort25; char add30; long time; float price; struct book *next; ; 2.main() 主函数主函数是程序的入口,各模块独立,可分块调整,但都均由主函数控制和调用。 本程序采用模块化设计。 模块化程

12、序就是把一个复杂问题的求解过程分阶段进行, 每个阶段处理都控制在人们容易理解和处理的范围内。 控制功能的实现通过循环执行一个开关语句,该语句的条件值是通过调用主菜单函数得到的返回值,根据该值, 调用相应的各功能函数,同时设置一个断点,即当返回值为一定条件时运行exit()函数结束程序,以免造成死循环。主函数采用if语句调用子函数,并实现菜单功能。也可以通过用 switch 语句实现此功能相对于if语句更简单、灵活。源程序如下:scanf(%d,&k); if(k=1) 12 i=n; head=increase(head); if(i!=n) printf(新图书库信息: n); pr

13、int(head); save(head); printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; if(k=2) head=read(); print(head); printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; if(k=3) printf(按书名查询 (1) 按作者名查询 (2)n); scanf(%d,&u); if(u=1) search1(head); if(u=2) search2(head); 13 printf(按任意键返回

14、 !); getch(); system(cls); printf(nnn);continue; if(k=4) printf( 按登录号排序 (1) 按图书价钱排序(2)n); scanf(%d,&l); if(l=1) head=sort(head); printf(按登录号由小到大排列 : n); print(head); if(l=2) head=sort1(head); printf(按价钱由小到大排列 : n); print(head); printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; if(k=5

15、) i=modify(head); 14 if(i=1) save(head); printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; if(k=6) i=n; head=del(head); if(i!=n) printf(新图书库的信息: n); print(head); save(head); printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; printf(谢谢使用图书管理系统 n); exit(0); 15 3.menu() 主菜单直接利用输出

16、函数printf输出字符串,在屏幕上显示一个菜单,并显示一个提示输入选项,输入17 之间的数字,主函数根据这些数字调用相应的功能函数,例如:输入“4”调用 sort 函数和 sort1 ()函数实现排序功能。这样直接输出主菜单,制作简便,操作简单。由于程序中很多地方用到了字符串输入语句,会造成下一个字符不能正确读入,为了在程序调用执行了各个函数后能够清晰地看到菜单,并输入新的选项,首先写了一条输出信息,printf(按任意键返回!);表示按任意键继续, 一条读字符语句 getch() 等待输入字符, 按任意键即可进入主菜单。源程序为:login(); if(fp=fopen(book.dat,

17、rb)=0) /打开已存在的图书库信息,如果不存在请先建立 do printf(当前没有图书信息,请先建立图书库信息:n); head=create(); while(head=0); save(head); printf(保存成功 n); 16 head=read(); while(1) /菜单功能 printf( 图书信息管理系统 n); printf( 请选择对应功能的数字键: n); printf(|n); printf(| 录入图书信息 (1) |n); printf(| 浏览所有图书 (2) |n); printf(| 查询图书信息 (3) |n); printf(| 图书进行排序

18、 (4) |n); printf(| 修改图书信息 (5) |n); printf(| 删除图书信息 (6) |n); printf(| |n); printf( 退出程序 (7)n); 4login() 口令函数用户必须通过输入登录口令登录图书管理系统的主界面,程序开始运行时,调用了口令函数对此进行口令登陆。若口令输入正确,用户则成功登录图书信息管理系统的主界面,然后就能进行各种操作,若口令输入错误,则提示重新输入,三次输错之后退出系统。17 输入登录号登录号是否正确?是否当前是否有图书信息?是否重新输入(三次输入不正确自动退出程序)加载数据创建图书信息用 printf显示菜单输入菜单选项序

19、号赋给c 程序序号是否超出范围?是否执行 c,并返回c 值退出程序源程序:void login() long l,i; printf(请输入口令 (111):); scanf(%ld,&l); for(i=0;inum); while(p1-num!=0) printf(作者名 :); scanf(%s,p1-author); printf(书名:); scanf(%s,p1-name); printf(分类号 :); scanf(%s,p1-sort); printf(出版单位 :); scanf(%s,p1-add); printf(出版时间 :); scanf(%ld,&

20、p1-time); 调用 save() 函数继续输入保存记录到磁盘返回主菜单20 printf(图书价格 (元):); scanf(%f,&p1-price); n=n+1; if(n=1) d=p1; else p2-next=p1; p2=p1; p1=(struct book *)malloc(len); printf(输入图书登录号 :); scanf(%ld,&p1-num); p2-next=0; return(d); 6increase ()函数increase 函数与上面提到的create() 函数相似,但是 increase()函数是基于 book.dat 文

21、件已存在的的情况下继续增加图书信息,create ()函数是 book.dat 文件不存在的时候必须创立的图书信息函数。首先也是先创建“ struct book”类型的存储空间p1=p2=(struct book *)malloc(len)。当输入为“ 0”时, create ()函数结束,输入数据完毕,返回记录数到主函数。创建一个struck book 类型的存储空间逐项输入图书信息(包括作者名、书名、登录号、价格等)21 源程序如下:struct book *increase(struct book *d) /添加图书函数 struct book *p1,*p2; p1=d; p2=(st

22、ruct book *)malloc(len); printf(登陆号为 0 时,取消添加 !n); printf(输入图书登录号 :); scanf(%ld,&p2-num); if(p2-num=0) return; printf(作者名 :); scanf(%s,p2-author); printf(书名:); scanf(%s,p2-name); printf(分类号 :); 登录号输入数字0 结束提示是否保存记录到磁盘是否调用save() 函数保存记录到磁盘继续输入22 scanf(%s,p2-sort); printf(出版单位 :); scanf(%s,p2-add);

23、printf(出版时间 :); scanf(%ld,&p2-time); printf(图书价格 (元):); scanf(%f,&p2-price); while(p1-next!=0) p1=p1-next; p1-next=p2; n=n+1; p2-next=0; return(d); 7. save() 保存记录到文件函数save函数在程序中是十分重要的,它用于保存数据,要不然,每次打开系统都得重新输入数据,这样的系统是没有任何价值的。在程序中的数据输入和输出是以终端为对象的,当程序关闭后,数据也就丢失了,所以 save函数将数据输出到磁盘文件上保存起来,使用时从磁盘

24、读入到内存中,这就用到了磁盘文件的读写操作。按照文件的读写要求,先定义一个指向文件的指针,按wb写的方式打开文件,输入保存文件路径和文件名,如果文件不存在则系统自23 动创建文件,保存在所输的文件夹中。如果文件不能正常打开,则退出程序;否则用 while 语句实现循环输入。是否保存当前图书库信息是否fp=fopen(book.dat,wb)为输出打开一个文件打开是否成功是否while (p!=0)不能打开文件fwrite(p,len,1,fp) 写入信息fclose(fp)关闭文件退出程序源程序为:void save(struct book *p) /保存图书函数 file *fp; char

25、 m; printf(是否保存当前图书库信息 ?(y/n)n); scanf(%s,&m); if(m=y|m=y) if(fp=fopen(book.dat,wb)=0) 24 printf(不能打开文件 !n); return; while(p!=0) if(fwrite(p,len,1,fp)!=1) printf(文件写入出错 ! n); p=p-next; fclose(fp); if(m=n|m=n) printf(退出程序 n); exit(0); 8read()函数查看图书信息图书信息管理系统的设计要实现最基本的功能时,必须要从磁盘中读取数据,然后再进行其他的显示、查找

26、、分类等操作。按照文件的读写要求, 先定义一个指向文件的指针, 按照 rb 的方式打 开 已 经 保 存 好 的 文 件 , 输 入 要 打 开 文 件 的 路 径 和 文 件 名 ,fp=fopen(book.dat,rb),在程序中我采用了fread 函数读入一组数据,而不用 fgetc 函数,两者的主要区别在于, fread 函数用来读入一个数据块, fgetc 函数一般用来读入一个字符。25 输入要打开文件的路径和文件名 fp=fopen(book.dat,rb)为读入内存打开一个文件打开是否成功是否输出提示不能打开文件退出 exit 定义一个动态的存储空间p1=(struct boo

27、k *)malloc(len) 用 fread 函数读入数据fclose(fp);关闭文件提示“加载数据完成! ”return (d)返回主函数源程序为:struct book *read() /读入数据文件 file *fp; struct book *p1,*p2,*d; fp=fopen(book.dat,rb); p1=(struct book *)malloc(len); 26 d=p2=p1; while(!feof(fp) fread(p1,len,1,fp); p2=p1; if(p2-next=0) break; p1=(struct book *)malloc(len);

28、p2-next=p1; p2-next=0; fclose(fp); printf(加载数据完成 !n); return(d); 9.del ()函数删除图书信息删除图书信息的登录号, 通过登录号来删除一组数据, 数据从 num开始删除,运用指针,指向要删除的数据,直到下一个为“0”时,删除完毕。如果输入删除的登录号在“book.dat ”文件中查找不到的时候,提示输出“找不到该登录号的书籍” ,返回主函数。输入要删除图书的登录号27 是否存在该登录号是否删除该登录号的所有图书信息输出 “找不到登录号的书籍”是否保存当前图书库信息保存新的图书库返回主函数源程序为:struct book *de

29、l(struct book *d) /删除图书函数 struct book *p1,*p2; long q; p1=d; printf(输入要删除图书的登录号:); scanf(%ld,&q); while(p1-num!=q)&(p1-next!=0) p2=p1; p1=p1-next; if(p1-num=q) 28 if(d=p1) d=p1-next; else p2-next=p1-next; printf(删除登录号 :%ld n,q); n=n-1; else printf(找不到登录号为 :%ld 的书籍 n,q); return(d); 10.modify

30、()函数修改图书信息由于录入的记录不是一成不变的,如某本书籍价格调低了,或某本书换了个登录号等,这就有必要对已存在的记录的某些信息作修改,这函数正是为此非常实用的功能而作。先读入记录,输入要修改的对象的登录号,while 循环实现由登录号开始修改,由于单个提示修改操作比较麻烦,我采用了一次覆盖所有的信息,再重新输入该登录号的图书信息,直接运用prinf函数和scanf 函数即可。 不过该方法也有不足之处。 如果修改的内容是其中的一个信息,譬如:只修改书名,重复输入它的所有数据也比较麻烦,不过由于本人熟练c 的程度有限,还要继续改进方法。输入要修改书籍登录号 while循环提取该图书的所有信29

31、 源程序如下:int modify(struct book *d) /修改函数 long q; char u; printf(输入要修改书籍的登录号:n); scanf(%ld,&q); while(d-num!=q)&(d-next!=0) d=d-next; if(d-num=q) printf(请重新输入图书信息 :n); printf(登录号 :); scanf(%ld,&d-num); printf(作者名 :); scanf(%s,&d-author); 指向要修改图书的登录号if(d-num=q) 逐项修改图书信息(num ,author ,nam

32、e,sort ,add,time ,price )显示修改后的图书信息保存图书信息返回主函数30 printf(书名:); scanf(%s,&d-name); printf(分类号 :); scanf(%s,&d-sort); printf(出版单位 :); scanf(%s,&d-add); printf(出版时间 :); scanf(%ld,&d-time); printf(图书价格 ( 元):); scanf(%f,&d-price); printf(修改后的信息为 :n); printf(登录号作 者名书名分类号出版单位出版时间图书价格 (元)

33、:n); n,d-num,d-author,d-name,d-sort,d-add,d-time,d-price); return(1); else printf(找不到该书籍 !n); 11.search1 ()函数按书名搜索图书信息当需要寻找自己想要的某本图书时, 如果在所有的图书信息中一本本地寻找比较麻烦,如果信息量大的话那几乎不可能找到。所以图31 书管理系统必须增设一些最简单的功能,搜索功能就是其中的基础功能之一。当你知道你要寻找的书名时,就可以用search1()函数来帮助你寻找你所需要的图书信息。因关系是字符串,比较用字符串比较函数strcmp 实现,从第 0 开始, 比较输入的

34、关系与记录中的关系是否一致则,一致则显示此记录,接着比较下一条记录,直到比较完所有记录输入要查询的书籍名称while(strcmp(d-name,p1-name)&(d-next!=0)查询书籍名称 d=d-next d-name,p1-name比较两者是否相同?是否输出查询图书信息查找不到该图书信息返回主函数源程序为:void search1(struct book *d) /按书名搜索函数 struct book *p1; p1=(struct book *)malloc(len); printf(请输入要查询的书名: n); scanf(%s,p1-name); while(st

35、rcmp(d-name,p1-name)&(d-next!=0) 32 d=d-next; if(!strcmp(d-name,p1-name) printf(所查询图书信息为 :n); printf(登录号作者名书名分类号出版单位出版时间图书价格 ( 元):n); printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.2fn,d-num,d-author,d-name,d-sort,d-add,d-time,d-price); else printf(找不到所查询的书籍 ! n); 12.search2 ()函数按作者名搜索图书信息图书搜索信息的另外一

36、种方法是按照书籍的作者名查询,所用的方法跟上面的搜索方法一样。都是通过strcmp 函数进行判断其是否一致,相同就输出要查询的图书信息,不一致就比较下一条直到循环结束。输入要查询的作者名称33 while(strcmp(d-author,p1-author)&(d-next!=0)查询书籍名称 d=d-next d-author,p1-author比较两者是否相同?是否输出查询图书信息查找不到该图信息返回主函数源程序为:void search2(struct book *d) /按作者名搜索函数 struct book *p1; p1=(struct book *)malloc(len

37、); printf(输入要查询书籍的作者名:n); scanf(%s,p1-author); while(strcmp(d-author,p1-author)&(d-next!=0) d=d-next; if(!strcmp(d-author,p1-author) printf(所查询书籍为 :n); printf(登录号作者名书名分类号出版单位出版时间图书价格 (元):n); printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.234 fn,d-num,d-author,d-name,d-sort,d-add,d-time,d-price); els

38、e printf(找不到所查询的书籍 ! n); 13.sort 函数按登录号排序选择排序是一种比较简单且常用的排序方法。具体的做法是将结构中的每一项都进行比较,例如:设有10 个元素 a1a10,将 a1 与a2a10进行比较,若 a1 比 a2 都小,则将其中最大的一个与a1 交换,此时 a1 中存放了 10 个中最小的数。第二轮将a2 与 a3a10比较,将剩下的 9 个数中的最小者ai 与 a2 对换,此时 a2 中存放的是 10 个中第二小的数。依次类推,进行比较直到都由小到大排列。sort ()函数是按照登录号的大小来排序的。分配空间p3=(struct book *)malloc

39、(len); 图书信息不为0 while(p1!=0) 前一本图书的登录号大于下一本图书的登录号?是否把图书信息交换p1 指向下一本图书p1=0?是否 p2 指向下一本图书35 返回( p)到主函数源程序为:struct book *sort(struct book *p1) /按登录号排序函数 struct book *p2,*p,*p3; p3=(struct book *)malloc(len); p=p2=p1; while(p1!=0) if(p2-num=p1-num) p3-num=p2-num; strcpy(p3-author,p2-author); strcpy(p3-na

40、me,p2-name); strcpy(p3-sort,p2-sort); strcpy(p3-add,p2-add); p3-time=p2-time; p3-price=p2-price; p2-num=p1-num; strcpy(p2-author,p1-author); strcpy(p2-name,p1-name); strcpy(p2-sort,p1-sort); strcpy(p2-add,p1-add); p2-time=p1-time; p2-price=p1-price; 36 p1-num=p3-num; strcpy(p1-author,p3-author); str

41、cpy(p1-name,p3-name); strcpy(p1-sort,p3-sort); strcpy(p1-add,p3-add); p1-time=p3-time; p1-price=p3-price; p1=p1-next; if(p1=0) p2=p1=p2-next; return(p); 14.sort1 ()函数按图书价格排序在某些情况下需要对所有的图书进行价格分类的时候,就必须要对书籍进行按价格排序。方法与上面的一样,而且针对个各种不同的情况,还可以增加排序的类型。这里只列举两种排序。分配空间p3=(struct book *)malloc(len); 37 图书信息不为0

42、 while(p1!=0) 前一本图书的价钱大于下一本图书的价钱?是否把图书信息交换p1 指向下一本图书p1=0?是否 p2 指向下一本图书返回( p)到主函数源程序为:struct book *sort1(struct book *p1) /按价格排序函数 struct book *p2,*p,*p3; p3=(struct book *)malloc(len); p=p2=p1; while(p1!=0) if(p2-price=p1-price) p3-price=p2-price; strcpy(p3-author,p2-author); strcpy(p3-name,p2-name)

43、; strcpy(p3-sort,p2-sort); strcpy(p3-add,p2-add); p3-time=p2-time; 38 p3-num=p2-num; p2-price=p1-price; strcpy(p2-author,p1-author); strcpy(p2-name,p1-name); strcpy(p2-sort,p1-sort); strcpy(p2-add,p1-add); p2-time=p1-time; p2-num=p1-num; p1-price=p3-price; strcpy(p1-author,p3-author); strcpy(p1-name

44、,p3-name); strcpy(p1-sort,p3-sort); strcpy(p1-add,p3-add); p1-time=p3-time; p1-num=p3-num; p1=p1-next; if(p1=0) p2=p1=p2-next; return(p); 39 15.print ()输出函数print函数是个简单的printf函数,作用是显示需要的图书信息。每次进行排序,查询等操作时都要调用printf函数。调用 printf直接输出包括登录号、作者名、书名、分类号、出版单位、出版时间、图书价格等,图书信息。printf(“登录号、作者名、书名、分类号、出版单位、出版时间、

45、图书价格( 元) ”) while(p!=0) printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.2fn,p-num,p-author,p-name,p-sort,p-add,p-time,p-price); p=p-next; 源程序为:void print(struct book *p) /输出函数 printf(登录号作者名书名分类号出版单位出版时间图书价格 ( 元):n); while(p!=0) 40 printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.2fn,p-num,p-author,p-name,p-sor

46、t,p-add,p-time,p-price); p=p-next; 三源程序#include #include #include #define len sizeof(struct book) struct book /*定义结构体 */ long num; 41 char author15; /作者名 char name25; /书名 char sort25; /分类号 char add30; /出版单位 long time; /出版时间 float price; /价格 struct book *next; ; int n; void main() void login(); /对口令函

47、数的声明void save(struct book *p); /对保存函数的声明struct book *read(); /对读入函数的声明struct book *create(void); /建立图书库信息函数的声明struct book *del(struct book *d); /删除图书函数的声明struct book *increase(struct book *d); /添加图书函数的声明void search1(struct book *d); /书名搜索函数的声明void search2(struct book *d); /作者名搜索函数的声明int modify(struc

48、t book *d); /修改图书函数的声明struct book *sort(struct book *d); /排序函数的声明struct book *sort1(struct book *d); 42 void print(struct book *p); /输出函数的声明struct book *head; file *fp; int k,i,l; char u; login(); if(fp=fopen(book.dat,rb)=0) /打开已存在的图书库信息,如果不存在请先建立 do printf(当前没有图书信息,请先建立图书库信息:n); head=create(); whil

49、e(head=0); save(head); printf(保存成功 n); head=read(); while(1) /菜单功能 printf( 图书信息管理系统 n); printf( 请选择对应功能的数字键: n); printf(|n); printf(| 录入图书信息 (1) |n); 43 printf(| 浏览所有图书 (2) |n); printf(| 查询图书信息 (3) |n); printf(| 图书进行排序 (4) |n); printf(| 修改图书信息 (5) |n); printf(| 删除图书信息 (6) |n); printf(| |n); printf(退

50、出程序 (7) n); scanf(%d,&k); if(k=1) /录入图书信息 i=n; head=increase(head); /调用添加函数添加图书信息 if(i!=n) printf(新图书库信息: n); print(head); /调用输出函数显示图书信息 save(head); /调用保存函数保存图书信息 printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; 44 if(k=2) /浏览图书信息 head=read(); /调用 read 函数查看所有图书信息print(head); printf(按任意键返回 !); getch(); system(cls); printf(nnn);continue; if(k=3) /查询图书信息 printf(按书名查询 (1) 按作者名查询 (2)n); scanf(%d,&u); if(u=1) search1(head); /调用 search1 函数进行按书名查询图书信息if(u=2) search2(head); /调用 search2 函数进行按作者名查询图书信息printf(按任意键返回 !); getch(); system(cls)

温馨提示

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

评论

0/150

提交评论