计算机实习报告C语言部分 - C语言大作业

更新时间:2024-05-24 08:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言报告

开发背景以及任务的提出: (程序代码见最后附页)

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。信息管理系统是一个不断发展的新型学科,企业要生存要发展,要高效率地把企业活动有机地组织起来,就必须加强企业管理,即加强对企业内部的各种资源(人、财、物等)的有效管理,建立与自身特点相适应的信息管理系统。

随着人类社会的发展,人类对知识的需求也不断地增长。在这种形势下,书籍就渐渐地成为人们获取并增长知识的主要途径,而图书馆就自然而然地在人们的生活中占据了一定的位置,如何科学地管理图书馆不但关系到读者求知的方便程度,也关系到图书馆的发展,因此,开发一套完善的图书馆管理系统就必不可少了。

为此作者利用C语言,在Visual C环境下,以WINDOWS 32位作为系统平台开发一套界面友好,操作简单,功能强大完善,扩展性升级性良好的图书馆管理系统。

系统简介:

本文介绍了在Visual C环境下,运用C语言,采用“自上而下地总体规划,自下而上地应用开发,整体应用结构化模块化”的开发策略开发的一个方便实用具有良好扩展性的图书馆管理系统。通过分析传统的人工管理图书馆的不足,创建了一套行之有效的计算机管理图书馆的方案。模块化结构化的编成思想使本系统具有非常好的扩展性,对后期应用过成中遇到的问题可以很方便的修改添加。在开发过程中,这种思想也起到了非常大的作用,对系统的更新完善起到了非常

大的作用。文章介绍了图书管理信息系统的系统实现部分列出了几个主要的程序框图,并附带了一些主要的窗口和程序。

本系统界面友好,活泼生动,有背景音乐,操作简单,比较实用。

系统开发过程:

编程思想分析:

整个软件生命周期中,开发所占的费用和时间都很小。后期维护工作一般要占整个软件生命周期的80% 以上。所以系统分析很重要,一个好的系统分析可以减少很多后期维护工作。因此本系统采用模块化和结构化的编成思想使本系统具有非常好的扩展性,极大的方便了在开发过程中对系统的删改,添加等操作,为后期的调试以及今后的升级改造提供了极大的方便。由于采用模块化和结构化的方式,该系统的后期维护十分方便,可以在现有的程序检索手段基础上直接调用查看底层文件,也为不断添加新功能提供可能。事实上,在系统开发过程中作者正是不断发现系统的缺陷,不断完善,有了好的创意就不断添加新的模块,可以说模块化结构化的设计思路为系统开发提供了极大便利。

系统原理分析: 1. 现行系统简介:

作为图书馆的管理系统,它首先要担当起图书馆的资源管理重任,开发这样的系统必须对图书馆的工作流程有所了解。最基本的图书馆管理系统要完成图书的采编,旧书的删除,读者的图书查询,还有借阅系统。

下面以一所学校的图书馆为例子进行分析,画出图书馆的组织结构图如下:

管理员 采书 阅借 编览 组 库 室 阅 查删 询室 改

图书馆各个部门负责的主要业务如下:

(1)采编组主要负责图书采编工作,包括购置新书、打印编目、增加数量。 (2)查询室主要负责读者查询工作,包括可借图书(按图书类别、图书名称

或图书作者查询);新书目录(按图书类别、日期查询)。 (3)借阅组主要负责图书流通、查询统计、借阅查询等工作。

(4)阅览室主要负责读者阅览工作,包括:阅览各种杂志、报纸、阅览各种工具书。

2. 现行系统问题分析:

该图书馆工作大部分还是进行着手工管理,工作起来效率很低,由于不可避免的人为因素,经常造成数据的遗漏、误报。计算机信息化管理有着储存信息量大、速度快等许多优点,提供给我们的处理信息及时快捷,同时也提高了我们工作人员的自身素质。

3. 解决方案:

基于以上的对问题的分析,利用计算机给我们提供信息,及时地调整学校图书馆图书结构,并且对学生们的借阅过程形成一整套动态的管理就十分必要了。

学校图书馆规模相对于商业图书馆小,但要有着完善的图书信息,对每一册书要有详细的记录信息,功能上对系统的需求是全面的。因此对用户的需求可分为四个方面:一方面是图书馆管理员通过计算机来管理各类图书,进行编号,调整图书结构,增加图书库存,适应学生的需求;二方面是学生们能通过计算机来查询浏览图书馆中的图书,来确定自己需要的书籍,为借阅做好准备;三方面是工作人员对学生们的借书证发放;四方面也是图书馆的核心工作,对图书的借阅管理。

这四个方面形成了学校图书馆一个工作整体,采用计算机自动化信息处理,可方便快捷地共享信息、交流信息,高效地协同工作。

在软、硬件方面对系统的需求,软件要求易学,界面友好,容易掌握,可以很简单方便的管理各种图书信息。硬件的配置要求不能太高,这样可以

很好的适应当前的学校图书馆。

在开发方式上对系统的需求,由于学校图书馆是一种无商业利益的,所以系统设计开发的周期要短,在短时间内完成,减少开发成本,提高开发效率,方便、简单、实用作为系统开发的指导思想。

同时为了适应学生群体的要求,系统的界面要活泼,操作要简单,能够调动学生和管理员的兴趣。本系统通过对windows底层文件和静态库的调用,依然用C语言做到了变幻多彩的界面和优雅动人的背景音乐。

系统设计:

系统总体结构设计:

如果要完成一个完整的图书管理系统,需要的相关信息很多。由于种种条件的限制,同时考虑到开发成本,所以本系统仅实现基本的管理功能。并不能完全满足上面例子所描述的图书馆,使用前应进行二次开发。

1. 系统目标设计:

系统开发的总目标是实现内部图书借阅管理的系统化、规范化和自动化。 能够对图书进行注册登记,也就是将图书的基本信息(如:书名、作者、出版社、进库量等)预先存入数据库中,供以后检索。

能够对借阅人进行登记,包括记录借阅人的姓名、编号、借阅数目、归还时间等信息。

提供方便的查询方法。如:以书号、书名、作者、出版社等信息进行图书检索,并能反映出图书的借阅情况;以借阅人编号对借阅人信息进行检索;提供库存信息,显示可借阅数目。

通过管理员用户名和密码验证进行授权可以对图书馆的数据库进行修改,完成新书的采编入库,旧书销毁功能,以方便对图书馆书籍资源的管理。

提供较为完善的差错控制与友好的用户界面,尽量避免误操作。 系统有漂亮的欢迎界面,提供全程的背景音乐。 2. 系统功能分析

根据以上功能,将图书管理系统的数据分为:

数据输入部分:主要包括图书基本信息的录入、借阅人基本信息的录入。

数据输出部分:主要是各种查询,包括:根据图书信息(如书名、作者、出版社、库存等)查阅图书及其借阅信息等。

数据处理部分:主要涉及借阅和归还的处理,如一本书借出后,必须在数据库中将该书的库存量减少,以防出现数据库中有书但图书馆无书的情况,同时能够根据需要显示已借阅的信息;一本书归还后,同样必须在数据库中将其库存增加,以便再次借出。

3. 系统模块化设计:

为达到上述的要求和功能,改程序由5个菜单及其系统组成。

分别为欢迎界面menu0()、主菜单mainmenu()、图书信息子菜单menu1()、图书查询子菜单menu2()、借阅系统子菜单menu3()。

含有如下多个函数:

1. 欢迎菜单多彩循环控制系统menu0()。

功能:运用时间控制技术和Windows系统的调用,对欢迎界面进行多种颜色的循环变化;

2. 主菜单下的主界面系统main1()

功能:与主菜单配合,根据用户选择调用其他子系统、子函数; 3. 图书馆信息系统tsgxx(),

功能:与menu2菜单配合,根据用户选择调用其子系统、子函数; 4. 结束系统函数jieshuxitong()

功能:结束系统,显示退出界面,退出系统;

5. 图书进库函数tsjinku()

功能:在通过密码函数验证后进行库存的编辑,运用了文件、数组、链表、指针等,创建图书馆txt文件; 6. 库存清除函数shanchu()

功能:对图书进库函数tsjinku()创建修改的文件根据管理员操作进行删除作业,同样需要密码函数验证;

7. 管理员密码验证函数pastword1()、pastword2()

8. 功能:对用户进行权限认证,只有知道密码的图书馆管理员才可以对图书馆的库存资料进行修改操作,服务图书进库函数tsjinku()和库存清

除函数shanchu();

9. 图书查询系统函数chaxunts()

功能:配合图书查询子菜单menu2(),根据用户选择进行分类查询; 10.显示库存函数xianshikucun() 功能:显示图书馆全部图书资源; 11.统计图书文本个数函数tjzs()

功能:统计每本图书的在库数量,配合借阅系统随时更新图书的库存量; 12.统计读者文本个数函数tjdzzs()

功能:配合借阅系统,更新读者信息和图书库存,借书函数的重要子函数; 13.借阅系统函数jieshuxitong()

功能:调用借阅系统子菜单menu3(),根据用户选择调用子函数; 14.借书函数jieshu()

功能:完成对借书操作的各个函数的调用,完成借书带来的读者信息文件建立和对图书馆库存信息的修改,是整个系统最复杂最庞大的部分; 15.还书函数huanshu()

功能:与借书函数jieshu()类似,完成还书带来的对各个文件的修改,完成还书的登记;

16.显示借书情况函数duzheyilang()

功能:根据结束函数和还书函数的操作,显示读者信息文件reader.txt; 17.背

PlaySound(\

and

Settings\\\\Administrator\\\\桌面\\\\40953004\\\\c语音大作业\\\\北科大图书馆里系统\\\\summer.wav\功能:播放指定位置的WAV音频歌曲作为系统的背景音乐,调用了Windows的底层静态库文件。

4. 结构图:

主界面系统main1() 调用主菜单通过switch进行图书馆信息系统 调用借阅系统 menu3() 结束系统函数 图书进 库 库存清除 图书查询库存一 览 借书函数 还书函数 显示借书情况 menu2 书号查 询 书名查 询 作者查 询 出版社

程序图标:

程序测试

1. 欢迎界面:

2. 主菜单:

3. 选择1后的图书信息子菜单:

4. 选1后进入管理员用户名和密码验证:

5. 正确输入用户名和密码后进入采编入库操作:

可以根据需要进行循环输入

6. 错误输入用户名或密码时,任意键可以返回原菜单:

7. 清除库存的密码验证与上述一样 8. 清除库存操作:

9. 图书查询状态:

10. 书号查询,书名查询,作者查询界面:

11. 查询的两种结果:

12. 库存一览:

13. 返回主菜单查看借阅系统:

14. 借书登记:

15. 返回查看库存一览:

哈利波特的库存量变成了1!链表操作全部成功!

16. 查看借阅情况

17. 还书登记:

18. 返回查看借阅情况变化:

19.返回查看库存一览:

注意!哈利波特的库存又变为2了!库存变化正常!

20.退出系统:

用户使用说明书:

将文件夹40953004粘贴到桌面,不要进行任何改动,打开文件夹c语音大作业,将

快捷方式北科大图书馆里系统粘贴到桌面上再打开或直接双击打开,系统开始运行。所有操作按系统菜单显示即可。

实习心得体会

可以说这一次计算机实习是我人生中一次难忘的经历,第一次用自己的思想和努力完成一件作品,也是第一次为了计算机作业或者说是一件作品而彻夜不眠。在实习之前,我本以为计算机实习会很简单轻松,只是将过去学过的东西重新做一遍,或者是在书上或者网上随便抄一个代码,除了练习打字速度以外,毫无意义。

但当实习开始时,看到实习要求的我改变了看法,老师的要求严格却不拘谨,几乎没有给我们范围和题目,看似更容易抄了,却让我真的不知道该怎么抄,索性真的认认真真完成老师交给我们的任务,真真正正也是第一次按自己的兴趣完成作业。当慢慢按着自己的思想一次又一次调试更改把东西做出来,并通过自己不断迸发出的灵感进行修改完善的时候,那种满足感和自豪感真的难以言表。

更重要的是,这次实习让我体会到计算机的强大,计算机知识的博大,曾经觉得Excel很简单,C语言也就那么回事都是老掉牙的东西,可真做东西了,才发现Excel原来这么强大,我们学的东西太欠缺了太局限了。也让我深刻体会到什么叫做自学,以及网络的优势。以C语言作业为例,我灵感突发,想要给我的系统加一个背景音乐,这个从没有学过,别人任何人都没有,我自己也不知道用这种古老的编程语言能否实现,于是就在网上求助百度,还真的找到了很多关于静态库的知识和介绍,由于自己编程时候思想很清晰所以修改很方便,就把自己

编写的音乐语句加了进去,可是总是错误,一遍一遍修改一遍一遍分析,最终实现了我的那个灵感,当把自己做的系统给同学们看的时候,心里真的很开心。这就是自学的魅力吧~

在编程和Excel编写过程中,除了知识欠缺外,还发现了很多问题,最重要的就是我体会到了细心的重要性!很多时候都是自己不够细心才导致整个系统不能正常运行,一遍一遍调试,浪费很多时间。

通过这次实习,我初步认识到了计算机软件的强大功能及其在实际生活中的重要作用,使我认识到我掌握的知识还很少,远远不能满足今后运用的需要,更使我端正学习态度,继续努力,要不断在实践中发现问题,改正问题。 附: 程序代码

注:此代码为带有音乐及管理员密码验证的最终版本,采取模块化编写,各部分功能可以扩展。

#include \#include #include

#pragma comment(lib,\ /*调用音频静态库*/ #include #include #include \#include \#include \#include \

#define LEN sizeof(struct library) #define LEN1 sizeof(struct reader) #define NULL 0

struct library /*图书馆结构体*/

{int shuhao,xcl; /*定义整形变量书号和进库量*/

char name[20],author[20],chuban[20]; /*定义字符串变量图书的名称,作者,出版社*/ struct library *next; /*指针域*/ };

struct reader /*读者结构体*/ {

int zhenghao; /*图书证号码*/

char mingzi[20],riqi[20],zname[20]; /*字符串读者名字 归还日期 图书名字*/ struct reader *next; };

void mainmenu() /*声明主菜单*/ { system (\

printf(\***********\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\ 北京科技大学图书馆管理系统\\n\\n\ printf(\

printf(\ 1.图书信息\\n\\n\ printf(\ 2.借阅系统\\n\\n\ printf(\ 3.退出系统\\n\\n\

printf(\ 请按键选择,回车确定\\n\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\***********\

printf(\ ============================\\n\ printf(\ I 声明! I\\n\ printf(\ I 北京科技大学图书馆管理系I\\n\ printf(\ I统的数据资源以及程序代码由I\\n\ printf(\ I信息工程学院所有。 I\\n\ printf(\ I 本系统由北京科技大学信息I\\n\ printf(\ I工程学院开发,并保留知识产I\\n\ printf(\ I权,源代码受《中华人民共和I\\n\ printf(\ I国专利法》保护,如有人截取I\\n\ printf(\ I、篡改、剽窃,本学院将保留I\\n\ printf(\ I申诉权。 I\\n\ printf(\ I I\\n\ printf(\ I 北京科技大学信息工程学院I\\n\ printf(\ ============================\\n\ return ; }

void menu0() {

time_t s_time; time_t e_time; srand((int)time(0));

printf(\ 欢迎您使用北京科技大学图书馆管理系统!\\n\\n\\n\\n\ printf(\ ============================\\n\ printf(\ I 声明! I\\n\ printf(\ I 北京科技大学图书馆管理系I\\n\ printf(\ I统的数据资源以及程序代码由I\\n\ printf(\ I信息工程学院所有。 I\\n\ printf(\ I 本系统由北京科技大学信息I\\n\ printf(\ I工程学院开发,并保留知识产I\\n\ printf(\ I权,源代码受《中华人民共和I\\n\ printf(\ I国专利法》保护,如有人截取I\\n\ printf(\ I、篡改、剽窃,本学院将保留I\\n\ printf(\ I申诉权。 I\\n\ printf(\ I I\\n\ printf(\ I 北京科技大学信息工程学院I\\n\ printf(\ ============================\\n\ printf(\ 请任意键两次进入系统\\n\ system(\ Sleep(500);

system(\ Sleep(500);

system(\ Sleep(500);

system(\ Sleep(500);

system(\ Sleep(500);

system(\ Sleep(500);

system(\ system(\ return ; }

void menu1() /*显示图书馆信息菜单*/ { system (\

printf(\***********\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\ 1.采编入库\\n\\n\ printf(\ 2.清除库存\\n\\n\ printf(\ 3.图书查询\\n\\n\

printf(\ 4.库存一览\\n\\n\ printf(\ 5.返回上一层\\n\\n\

printf(\ 请按键选择,回车确定\\n\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\***********\ return ; }

void menu2() /*声明查询菜单*/ { system (\

printf(\***********\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\ 1.书号查询\\n\\n\ printf(\ 2.书名查询\\n\\n\ printf(\ 3.作者查询\\n\\n\ printf(\ 4.出版社查询\\n\\n\

printf(\ 请按键选择,回车确定\\n\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\***********\ return ; }

void main() /*主函数,调用main1 ,由于为了结构顺序将自函数在主函数后面声明*/

{void main1();

PlaySound(\王闻博lab8 40953004\\\\声音图书馆\\\\Debug\\\\summer.wav\NULL, SND_FILENAME | SND_ASYNC); /*声明播放微软音乐流媒体背景函数*/ menu0();

getch();system (\main1();}

void main1() /*main1函数*/

{void tsgxx(); /*声明图书馆信息函数*/ void jieshuxitong(); /*声明结束系统函数*/ char choose; mainmenu();

scanf(\

switch(choose) /*功能函数选择循环判断*/ { case '1':tsgxx();break; case '2':jieshuxitong();break;

case '3':system (\ /* 清楚屏幕先前的显示内容*/

printf(\ 欢迎您再一次光临北京科技大学图书馆,再见!\ printf(\ 感谢使用本软件!如有任何意见请登陆北科大图书馆主页\

getch();exit(0);system (\ break; } }

void tsgxx() /*图书馆信息函数*/ { void tsjinku(); /*图书进库函数*/

void pastword1(); /*密码函数为了减少循环故定义两次*/ void pastword2();

void shanchu(); /*库存清除函数*/

void chaxunts(); /*查询图书系统函数*/ void xianshikucun(); /*显示库存函数*/ char choose;

menu1(); /*调用主菜单函数*/ scanf(\ scanf(\ for (;;)

switch(choose) /*功能函数选择*/ { case '1':pastword1();break; case '2':pastword2();break; case '3':chaxunts();break; case '4':xianshikucun();break; case '5':main1();break; } }

int tjzs() /*统计图书文本个数函数*/ { FILE *fp;

int tshuhao=0,txcl=0,n;

char tname[20]={'\\0'},tauthor[20]={'\\0'},tchuban[20]={'\\0'}; fp=fopen(\ /*打开文件*/

for (n=0;!feof(fp);n++) /*逐个读文件,并检测结束符*/ fscanf(fp,\ %s %s %s %d\ n--;

fclose(fp); /*关闭文件*/ return (n); /*返回个数*/ }

int tjdzzs() /*统计读者文本个数函数*/ { FILE *fp;

int zhenghao=0,n;

char mingzi[20]={'\\0'},riqi[20]={'\\0'},zname[20]={'\\0'}; fp=fopen(\ /*打开文件*/ for (n=0;!feof(fp);n++) /*逐个读文件*/

fscanf(fp,\ %s %s %s \ fclose(fp); /*关闭文件*/ return (n); /*返回个数*/ }

void pastword1()

{ void tsjinku(); /*图书进库*/ int m,n,flag1,flag2;

char name[20]=\ char person[20],password1[6]; for(m=0;m!=3;) {

printf(\请输入管理员用户名:\\n\ scanf(\

flag1=strcmp(person,name);

printf(\请输入六位管理员密码:\\n\ for(n=0;n<6;n++) { password1[n]=getch();

if(password1[n]>='0'||password1[n]<='9'||password1[n]>='a'||password1[n]<='z'||password1[n]>='A'||password1[n]<='Z') putchar('*'); /*用循环体达到隐藏密码的目的*/ }

flag2=strcmp(password,password1); if(flag1==0&&flag2==0) {

tsjinku(); break; } else {

printf(\您输入的用户名或密码错误!对不起,您无权对图书馆信息进行更改!

\\n\\n任意键返回\\n\ m++; getch(); tsgxx(); } } }

void pastword2() { void shanchu(); /*清除库存函数*/ int m,n,flag1,flag2;

char name[20]=\ char person[20],password2[6]; for(m=0;m!=3;) {

printf(\请输入管理员用户名:\\n\ scanf(\

flag1=strcmp(person,name);

printf(\请输入六位管理员密码:\\n\ for(n=0;n<6;n++) { password2[n]=getch();

if(password2[n]>='0'||password2[n]<='9'||password2[n]>='a'||password2[n]<='z'||password2[n]>='A'||password2[n]<='Z') putchar('*'); /*用循环体达到隐藏密码的目的*/ }

flag2=strcmp(passwordx,password2); if(flag1==0&&flag2==0) {

shanchu(); break; } else {

printf(\您输入的用户名或密码错误!对不起,您无权对图书馆信息进行更改!\\n\\n任意键返回\\n\ m++; getch(); tsgxx();

} } }

void tsjinku() /*图书进库函数*/ { FILE *fp;

int shuhao=0,xcl=0,n=0;

char name[20]={'\\0'},author[20]={'\\0'},chuban[20]={'\\0'}; char hitkey; system (\

if ((fp=fopen(\ /*打开图书馆文件,不存在此文件则新建*/

{ fp=fopen(\ fclose(fp); }

fp=fopen(\

printf(\请按以下格式输入图书信息:\\t\\t\\t\\t\\t\\t 书号 书名 作者 出版社 进库量\\n请输入:\ /*按格式输入图书馆信息*/ for (;hitkey!=27;) /*循环输入*/ { if (n!=0)

printf(\请输入:\

scanf(\

fprintf(fp,\ %s %s %s %d\\n\ printf(\继续输入请按回车,结束输入请按esc\\n\ n++;

hitkey=getch();

for (;hitkey!=13&&hitkey!=27;) hitkey=getch(); }

fclose(fp);

printf(\保存成功,按任意键返回上一层!\ getch();

tsgxx(); /*返回上一层*/ }

void shanchu() /*删除图书信息函数*/ { struct library *head=NULL; struct library *p,*p1,*p2;

int tshuhao=0,txcl=0,n=0,j,i;

char tname[20]={'\\0'},tauthor[20]={'\\0'},tchuban[20]={'\\0'}, ttname[20]={'\\0'}; char hitkey; FILE *fp;

if ((fp=fopen(\ /*打开文件*/ { system (\

printf(\记录文件不存在!按任意键返回...\ getch(); tsgxx(); } else

{ system (\

printf(\请输入你要删除的书名:\ scanf(\

printf(\确认删除请回车,取消请按esc\\n\ /*输入删除图书书名*/ hitkey=getch();

for (;hitkey!=13&&hitkey!=27;) hitkey=getch(); if (hitkey==27) tsgxx();

fp=fopen(\

for (j=0;!feof(fp);) /*读文件夹信息,统计个数*/ { j++;

fscanf(fp,\ } fclose(fp);

fp=fopen(\ for (i=1;i

{ fscanf(fp,\ if (strcmp(ttname,tname)) /*比较名字,将不同名字的信息复制到链表*/

{ n++; if (n==1)

{ p1=p2=(struct library*)malloc(LEN); /*建立链表*/ head=p1; } else

{ p2->next=p1; p2=p1;

p1=(struct library*)malloc(LEN); /*新建链表*/ }

p1->shuhao=tshuhao; /*复制书号*/ strcpy(p1->name,tname); /*复制书名*/

strcpy(p1->author,tauthor); /*复制作者名子*/ strcpy(p1->chuban,tchuban); /*复制出版社*/ p1->xcl=txcl; /*复制个数*/ }

} if (n==0)

{ head=NULL;

} else {

p2->next=p1; p1->next=NULL; fclose(fp); } }

fp=fopen(\ /*清空文件*/ fclose(fp);

fp=fopen(\ /*追加文件*/ p=head;

for (;p!=NULL;) /*把链表内容覆盖到文件*/ {

fprintf(fp,\ p=p->next; }

fclose(fp); /*关闭文件*/ system (\

printf(\删除成功 \\n\\t\\t按任意键返回上一层\\n\ getch(); /*返回上一层*/ tsgxx(); }

void chaxunts() /*查询函数*/ {

FILE *fp; char choose;

int ttshuhao=0,tshuhao=0,txcl=0,n=0,k=0,i,l; char

tname[20]={'\\0'},ttauthor[20]={'\\0'},tauthor[20]={'\\0'},ttchuban[20]={'\\0'},tchuban[20]={'\\0'}, ttname[20]={'\\0'};

if ((fp=fopen(\ /*打开文件*/ { system (\

printf(\记录文件不存在!按任意键返回...\ getch(); tsgxx(); }

l=tjzs(); /*获得文件个数*/

menu2(); /*调用菜单函数*/

scanf(\ /*选择查询方式*/ if (choose=='5') return;

else if (choose=='1') /*书号查询*/

{ system (\ printf(\请输入书号:\ scanf(\ } else

if (choose=='2') /*书名查询*/ { system (\ printf(\请输入书名:\ scanf(\ } else

if (choose=='3') /*作者查询*/ { system (\ printf(\请输入作者:\ scanf(\ } else

if (choose=='4') /*出版社查询*/ { system (\

printf(\请输入出版社:\ scanf(\ }

system (\ for (i=0;i

(ttshuhao==tshuhao||!strcmp(ttname,tname)||!strcmp(ttauthor,tauthor)||!strcmp(ttchuban,tchuban)) /*输出查询信息*/ {

if (k==0) {

printf(\查询结果:\\n\\n\

printf(\书号 书名 作者 出版社 现存量 \\n\ }

printf(\ k++; }

}

if (k==0) /*文件夹为空则输出无记录*/ { system (\

printf(\无符合记录!\\n\ getch(); tsgxx();

}

fclose(fp);

getch(); /*返回*/ tsgxx(); }

void xianshikucun() /*显示库存信息*/ {

FILE *fp;

int shuhao=0,xcl=0,n=0,i=0,j=0;

char name[20]={'\\0'},author[20]={'\\0'},chuban[20]={'\\0'};

if ((fp=fopen(\ /*打开文件夹*/ {

system (\

printf(\记录文件不存在!\ }

n= tjzs(); if (n==0)

{ system (\

printf(\无任何记录!\ }

fp=fopen(\ system (\

printf(\***********\

printf(\书号 书名 作者 出版社 库存量 \\n\

printf(\***********\

for (i=0;i

fscanf(fp,\

printf(\ }

fclose(fp);

printf(\按任意键返回\\n\ getch(); /*返回*/ tsgxx(); }

void menu3() /*显示借书系统主菜单*/ { system (\

printf(\***********\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\ 1.借书登记\\n\\n\ printf(\ 2.还书登记\\n\\n\ printf(\ 3.借阅情况查看\\n\\n\ printf(\ 4.返回上一层\\n\\n\

printf(\ 请按键选择,回车确定\\n\

printf(\ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^*\

printf(\***********\ return ; }

void jieshuxitong() /*借书系统函数*/ { void jieshu(); void huanshu();

void duzheyilang(); /*函数声明*/ char choose; menu3();

scanf(\

scanf(\ /*选择功能*/ for (;;)

switch(choose) /*调用函数*/ { case '1':jieshu();break; case '2':huanshu();break; case '3':duzheyilang();break; case '4':main1();break; } }

void jieshu() /*借书函数*/ {

FILE *fp,*fp3;

struct library *head=NULL; struct library *p,*p1,*p2;

int tshuhao=0,txcl=0,i,loop,zhenghao=0,n=0,k=0,t=0,flag=0; char tname[20]={'\\0'},tauthor[20]={'\\0'},tchuban[20]={'\\0'}, ttname[20]={'\\0'},mingzi[20]={'\\0'},riqi[20]={'\\0'},zname[20]={'\\0'};

char hitkey=0; system (\ {

if ((fp=fopen(\ /*打开图书馆文件*/ {

system (\

printf(\图书馆无库存!按任意键退出!\ getch();

exit (0); }

else { {

printf(\请输入借阅书名:\\t\\t\\t\\t\\t\\t \\n请输入:/*输入书名*/

scanf(\

k= tjzs(); /*统计图书馆文件个数*/

for (i=0;i

fscanf(fp,\ n++; if (n==1)

{ p1=p2=(struct library*)malloc(LEN); head=p1; } else

{ p2->next=p1; p2=p1;

p1=(struct library*)malloc(LEN); /*新建链表*/ }

p1->shuhao=tshuhao; /*复制书号*/ strcpy(p1->name,tname); /*复制书名*/ strcpy(p1->author,tauthor); /*复制作者*/ strcpy(p1->chuban,tchuban); /*复制出版社*/ p1->xcl=txcl; /*复制现存量*/ }

if (n==0) head=NULL; else {

p2->next=p1; p1->next=NULL; fclose(fp); }

\ } }

p=head;

for (;p!=NULL;) /*读链表*/ {

if(!(strcmp(p->name,zname))) /*名字相同*/ {flag=1; /*标记取1*/

loop=p->xcl; /*现存量减1*/ (p->xcl)--;} p=p->next; }

if(flag&&(loop>0)) /*存在借书书名且现存量大于0*/ { fp=fopen(\ fclose(fp);

fp=fopen(\ p=head;

for (;p!=NULL;) {

fprintf(fp,\ p=p->next; }

free(p); /*把链表内容覆盖文件*/ fclose(fp);}

if(flag&&(loop>0)) /*存在借书书名且现存量大于0*/ { {

if ((fp3=fopen(\ /*建读者文件夹*/ { fp3=fopen(\ fclose(fp3); }

fp3=fopen(\ }

{

{ if (n!=0)

printf(\请按以下格式输入读者信息:\\t\\t\\t\\t\\t\\t 证号 姓名 归还日期 借书书名\\n请输入:\录入读者信息

scanf(\ fprintf(fp3,\ %s %s %s \\n\

fp=fopen(\ /*删除图书馆文件信息*/ fclose(fp);

fp=fopen(\ /*重新追加信息*/ p=head;

for (;p!=NULL;) /*把链表内容覆盖图书馆文件*/ {

fprintf(fp,\%s %s %s %d \\n\ p=p->next; }

fclose(fp); fclose(fp3);

printf(\成功!按任意键返回\\n\ getch(); /*返回*/ jieshuxitong(); } }

jieshuxitong(); } else

printf(\此书已被借完!按任意键返回!\ /*否则输出此书已被接完*/

getch(); /*返回*/ jieshuxitong(); } }

void huanshu() /*还书函数*/ {FILE *fp,*fp3;

struct reader *head=NULL; struct reader *p,*p1,*p2;

struct library *lhead1=NULL; struct library *zp1,*lp1,*lp2; int tshuhao=0,txcl=0,i;

char tname[20]={'\\0'},tauthor[20]={'\\0'},tchuban[20]={'\\0'}, ttname[20]={'\\0'}; int ttzhenghao=0,tzhenghao=0,n=0,k=0,t=0,flag=0;

char tmingzi[20]={'\\0'},triqi[20]={'\\0'},tzname[20]={'\\0'},ttzname[20]={'\\0'}; char hitkey=0; system (\ {

if ((fp=fopen(\ /*不存在读者文件,则输出不能还书*/

{

system (\

printf(\不存在借书者!按任意键退出!\ getch();

exit (0); }

else { {

printf(\请输入读者证号和书名:\\t\\t\\t\\t\\t\\t \\n请输入:\ scanf(\ /*输入还书证号和书名*/ k= tjdzzs(); /*获取读者文件夹信息个数*/ for (i=0;i

fscanf(fp,\

if((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname)) /*如果证号书名存在,则标记为1*/ flag=1; }

fclose(fp);

fp=fopen(\ /*打开读者文件*/ if(flag) {

for (i=0;i

fscanf(fp,\\ /*读取文件信息*/

if(!((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname))) { n++; if (n==1)

{ p1=p2=(struct reader*)malloc(LEN1); /*新建链表*/ head=p1; } else

{ p2->next=p1; p2=p1;

p1=(struct reader*)malloc(LEN1); /*新建链表*/ }

p1->zhenghao=tzhenghao; /*复制证号*/

strcpy(p1->mingzi,tmingzi); /*复制读者名字*/ strcpy(p1->riqi,triqi); /*复制日期*/

strcpy(p1->zname,tzname); /*复制书名*/ }

}

if (n==0) head=NULL; else {

p2->next=p1; p1->next=NULL; fclose(fp); }

fp=fopen(\ /*清空读者文件*/ fclose(fp);

fp=fopen(\ /*追加信息*/ p=head;

for (;p!=NULL;) /*把链表内容覆盖读者文件*/ {

fprintf(fp,\ p=p->next; } free(p); fclose(fp); } } } }

if(flag) /*标记为1,既还书时*/ { {

{printf(\确认还书请按回车!\

for (;hitkey!=13&&hitkey!=27;) hitkey=getch(); if (hitkey==13)

printf(\成功!按任意键返回!\ n=0;flag=0;

fp3=fopen(\ /*打开图书馆文件*/

k= tjzs(); /*获取图书馆文件个数*/ for (i=0;i

fscanf(fp3,\ 读取信息*/ n++; if (n==1)

{ lp1=lp2=(struct library*)malloc(LEN); /*新建链表*/ lhead1=lp1; }

/* else

{ lp2->next=lp1; lp2=lp1;

lp1=(struct library*)malloc(LEN); /*新建链表*/ }

lp1->shuhao=tshuhao; /*复制书号*/

strcpy(lp1->name,tname); /*复制书名*/

strcpy(lp1->author,tauthor); /*复制作者*/

strcpy(lp1->chuban,tchuban); /*复制出版社*/ lp1->xcl=txcl; /*复制现存量*/ } if (n==0)

{ lhead1=NULL; }

else {

lp2->next=lp1; lp1->next=NULL; fclose(fp3); } } }

zp1=lhead1; for (;zp1!=NULL;) {

if(!(strcmp(zp1->name,ttzname))) /*寻找书名相同*/ ++(zp1->xcl); /*现存量加1*/ zp1=zp1->next; }

fp3=fopen(\ /*清空图书馆文件*/ fclose(fp);

fp3=fopen(\ /*追加信息*/ zp1=lhead1;

for (;zp1!=NULL;) /*把链表内容覆盖图书馆文件*/ {

fprintf(fp3,\%s %s %s

\\n\ /*录入信息*/ zp1=zp1->next; }

fclose(fp3);

getch(); /*返回*/ jieshuxitong(); } else

%d

printf(\不存在此信息!按任意键返回!\ getch(); /*返回*/ jieshuxitong(); }

void duzheyilang() /*显示借书情况函数*/ {

FILE *fp;

int zhenghao=0,xcl=0,n=0,i=0,j=0;

char mingzi[20]={'\\0'},riqi[20]={'\\0'},zname[20]={'\\0'};

if ((fp=fopen(\ /*打开读者文件夹*/ {

system (\

printf(\记录文件不存在!\ }

n=tjdzzs(); if (n==0)

{ system (\

printf(\无任何记录!\ }

fp=fopen(\ system (\

printf(\***********\

printf(\证号 读者姓名 还书日期 书名 \\n\

printf(\***********\

for (i=0;i

fscanf(fp,\

printf(\ %-8s %-8s %-8s \\n\ }

fclose(fp);

printf(\按任意键返回\\n\ getch(); /*返回*/ jieshuxitong(); }

本文来源:https://www.bwwdw.com/article/7oo7.html

Top