版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图书借阅管理系统 图书借阅管理是图书馆一个最根本的工作,这里用C语言的知识设计开发一个简单的图书借阅管理系统,系统主要实现图书信息和学生信息的管理,图书查询及图书借阅管理。 系统设计要求 系统主要实现以下六个功能: 用户登录。系统用户分为管理员和学生。管理员登录时必须输入密码,密码正确才能进入系统;学生登录时无需密码,输入学号即可。 图书信息管理。图书信息包括:书号、书名、作者、图书分类、出版社、出版时间、单价、总量和库存量。图书信息管理包括:输入图书信息从键盘或从文件、保存图书信息、修改图书信息、增加图书信息、删除图书信息和输出图书信息。 学生信息管理。学生信息包括:学号、姓名、借书卡借阅标
2、记、书号、借阅时间。学生信息管理包括:输入学生信息从键盘或从文件、保存学生信息、修改学生信息、增加学生信息、删除学生信息和输出学生信息。 图书查询功能。图书查询分为:按书名查询、按作者查询、按图书分类查询、按出版社查询和按出版时间查询。 借书功能。借书时,先判断学生是否有空闲的借书卡,假设没有那么应输出提示信息;假设有空闲的借书卡,那么要求学生输入所借图书的书号,假设该书库存量不为0,那么将该书借出,同时在借书卡上记录该书的书号和借阅时间,并修改该书的库存量。 还书功能。还书时,先检查学生的借书卡,假设借书卡都为空,那么不能进行还书操作,假设有借书卡不为空,那么可以还书,此时要求学生输入所还图
3、书的书号,将对应借书卡上的记录清零,并修改该书的库存量。 系统总体设计 1. 功能模块图用户登录管理模块图书借阅管理系统图书信息管理模块学生信息管理模块图书信息查询模块图书借阅管理模块系统功能模块图管理员登录学生登录输入图书信息保存图书信息修改图书信息增加图书信息删除图书信息输出图书信息输入学生信息保存学生信息修改学生信息增加学生信息删除学生信息输出学生信息按书名查询按作者查询按图书分类查询按出版社查询按出版时间查询借书管理还书管理2. 数据结构设计系统共定义了四个结构体类型,包括日期类型、借书卡类型、图书类型和学生类型,其中在图书类型中要使用日期类型,而在学生类型中要使用日期和借书卡类型,定
4、义如下:typedef struct date /日期类型 short year; /年 short month; /月 short day; /日 SDATE;typedef struct library_card /借书卡类型 Short flag; /是否借阅标记 Char ISBN20; /所借图书的书号 SDATE bor_time; /借阅时间SLCARD;typedef struct student /学生类型 char num15; /学号 char name20; /姓名 SLCARD card5; /借书卡规定每人最多有5张SSTUD;typedef struct book
5、 /图书类型 char ISBN20; /书号 char bookname40; /书名 char author20; /作者 char publisher30; /出版社 char bookclass20; /图书分类 short total_num, stock_num; /总量,库存量 float price; /单价 SDATE publish_time; /出版时间 SBOOK;系统定义了两个全局变量数组,分别存放图书信息和学生信息,因数组大小是固定的,为使用方便在系统中定义两个符号常量,具体定义如下:#define BOOKNUM 1000 / BOOKNUM为系统允许的最大图书数
6、量#define STUDNUM 100 / STUDNUM为系统允许的最多学生人数SSTUD studentSTUDNUM=0; /学生数组,初始化为0SBOOK bookBOOKNUM=0; /图书数组,初始化为03. 功能模块设计(1) main函数的设计:由于图书信息和学生信息都保存在文件中,系统运行的第一个工作是从文件中将图书信息和学生信息读入到内存数组book和数组student中,在读入信息的过程中同时统计出目前图书的数量和学生的人数,并将数据分别存放在整型变量bn和sn中,bn为图书数量,sn为学生人数。如果bn=0或sn=0,系统会输出提示信息,让管理员输入图书信息和学生信息
7、。然后系统会显示主菜单,用户必须登录后才能使用系统提供的各种效劳。(2) 用户登录管理模块包括2个函数:ManagerLogin()和StudentLogin(),该模块由main函数调用。函数ManagerLogin()用来完成管理员登录工作,首先要求管理员用户输入密码,假设密码错误,那么直接返回主菜单界面;密码正确时将显示管理员用户的功能菜单,输入数字可执行相应的功能。函数StudentLogin()用来完成学生登录工作,要求学生输入学号,假设学号错误那么要求学生重新输入学号;输入学号正确那么显示学生用户的功能菜单,输入数字可执行相应的功能。(3) 图书信息管理模块包括11个函数:Inpu
8、tOnebook()、LoadBooks()、SaveOnebook()、SaveAllbooks()、OriginalBook()、ModifyBook()、AddBook()、DelBook()、OutputOnebook()、OutputAllbooks()和OutputBrief ()。只有管理员用户可以调用图书信息管理模块。函数InputOnebook()用来实现从键盘输入一本图书的全部信息。函数LoadBooks()用来实现从文件“book.dat中输入全部图书的信息,并将这些数据存放到内存数组book中。函数SaveOnebook()用来实现将一本图书的信息保存到文件“book.
9、dat中。函数SaveAllbooks()用来实现将全部图书的信息保存到文件“book.dat中。函数OriginalBook()用来实现图书信息的初始化,在程序第1次运行时必须调用该函数,输入假设干本图书的信息,并将这些信息保存在文件中。该函数是通过循环屡次调用InputOnebook()函数实现多本图书信息的输入,然后调用SaveAllbooks()函数将已输入的所有图书的信息保存在文件“book.dat中。函数ModifyBook()用来实现对图书信息的修改,用户首先输入书号,书号错误那么输出提示信息,要求用户重新输入;书号正确那么用户可以选择要修改的数据项对图书信息进行修改用switc
10、h结构实现,一本图书的信息修改完毕后,调用SaveOnebook()函数,将修改后的信息保存到文件中。然后询问用户是否继续修改其他图书的信息,用户选择y,那么重复上述的修改正程;用户选择n,那么结束函数,返回到管理员菜单界面。函数AddBook()用来实现添加图书信息,通过调用InputOnebook()函数,从键盘输入一本图书的信息,然后将该信息写入文件。然后询问用户是否继续添加其他图书的信息,用户选择y,那么重复上述过程;用户选择n,那么结束函数,返回到管理员菜单界面。函数DelBook()用来实现删除图书信息,用户首先输入书号,书号错误那么输出提示信息,要求用户重新输入;书号正确那么会先
11、输出该书号对应图书的信息,然后询问用户是否确定要删除该书的信息,用户选择y才能真正删除该书信息。最后询问用户是否继续删除其他图书的信息,用户选择y,那么重复上述过程;用户选择n,那么结束函数,返回到管理员菜单界面。函数OutputOnebook()用来实现输出一本图书的全部信息。函数OutputAllbooks()通过屡次调用OutputOnebook()函数来实现输出全部图书的信息。函数OutputBrief()用来实现以列表方式输出全部图书的简要信息,简要信息包括:书号、书名、作者和总量。(4) 学生信息管理模块包括10个函数:InputOnestud()、LoadStuds()、Save
12、Onestud()、SaveAllstuds()、OriginalStud()、ModifyStud()、AddStud()、DelStud()、OutputOnestud()和OutputAllstuds()。 管理员用户可以使用学生信息管理模块的全部功能,学生用户只能使用该模块中的一个功能,即OutputOnestud()函数输出一个学生的信息。学生信息管理模块中函数的实现方法与图书信息管理中的类似,以下仅作简单说明。函数InputOnestud()用来实现从键盘输入一个学生的信息。函数LoadStuds()用来实现从文件“stud.dat中输入全部学生的信息,并将这些数据存放到内存数组s
13、tudent中。函数SaveOnestud()用来实现将一各学生的信息保存到文件“stud.dat中。函数SaveAllstuds()用来实现将全部学生的信息保存到文件“stud.dat中。函数OriginalStud()用来实现学生信息的初始化,在程序第1次运行时必须调用该函数。该函数是通过循环屡次调用InputOnestud()函数实现多个学生信息的输入,然后调用SaveAllstuds()函数将已输入的所有学生的信息保存在文件“stud.dat中。函数ModifyStud()用来实现学生信息的修改。函数AddStud()用来实现添加学生信息。函数DelStud()用来实现删除学生信息。函
14、数OutputOnestud()用来实现输出一个学生的全部信息。函数OutputAllstuds()用来实现输出全部学生的根本信息即学号和姓名。(5) 图书信息查询模块包括6个函数:SearchMenu()、SearcBname()、SearchAuthor()、SearchBclass()、SearchPublisher()、SearchPubtime()。管理员和学生都可以使用图书信息查询模块。 函数SearchMenu()用来显示图书查询效劳菜单,用户输入数字可执行相应的查询效劳。函数SearcBname()用来实现按书名进行图书信息的查询。用户可以输入完整的书名进行精确查询如输入“C语
15、言程序设计,精确查询是使用字符串比拟函数strcmp(),将输入的书名与已有图书的书名逐一进行比拟,当该函数的返回值等于0,表示这两个书名完全相同,即找到要查询的图书。另外,用户也可以输入书名中的几个字进行模糊查询如输入“C语言,或输入“程序设计,模糊查询是使用求子串函数strstr(),在已有图书的书名中寻找输入的字符串,如果该函数的返回值不为空,那么说明该书名中包含这个字符串,那么就应该输出这本图书的信息。通常,模糊查询会列出多个查询结果。函数SearchAuthor()用来实现按作者姓名进行图书信息的查询。用户可以输入完整的姓名进行精确查询如输入“谭浩强,也可以只输入姓氏进行模糊查询如只
16、输入“张,具体方法与按书名查询类似。函数SearchBclass()用来实现按图书分类进行图书信息的查询。考虑到用户可能不能输入完全正确的图书分类名称,所以在该函数中只采用模糊查询方式。函数 SearchPublisher()用来实现按出版社名称进行图书信息的查询。用户在输入出版社名称时,一般不会输入“出版社这三个字如想查询清华大学出版社的图书,通常用户会输入“清华大学,所以在该函数中也是只采用模糊查询方式。函数 SearchPubtime()用来实现按出版日期进行图书信息的查询。使用该函数必须注意要按系统规定的格式输入日期,假设想查询2004年5月份出版的图书,那么应输入“2004.5;假设
17、想查询2004年出版的图书,那么应输入“2004。假设输入日期为“2004.5,进行查询时,先判断输入的年份与出版日期中的年份是否相等,假设不相等那么结束本次循环,假设相等那么用变量k记录其下标,然后再判断月份是否相等,月份假设不相等那么用continue结束本次循环,月份假设相等那么可输出这本书即第k本书的信息,然后再继续判断下一本图书。(6) 图书借阅管理模块包括2个函数:BorrowBook()和ReturnBook()函数。 函数BorrowBook()用来实现借书管理。由学生类型定义可知,每个学生有5张借书卡,借书卡的信息包括:借阅标记flag、所借图书的书号ISBN和借阅时间bor
18、_time。借书时,首先查找学生是否有空闲的借书卡即判断该生借书卡的借阅标记flag是否为0,假设flag为0,那么可以借书,这时要求学生输入要借图书的书号,然后在图书数组book中查找该书,假设在数组book中没找到该书,那么提示“输入的书号有误,请重新输入!;假设找到该书,那么先判断该书的库存量是否为0,假设库存量为0那么提示抱歉!该书库存量为0,无法借阅!。假设库存量大于0,那么将该书借给学生,此时需要进行以下6步操作:step1 将该书的库存量减1;step2 学生借书卡的借阅标记flag置1;step3 学生借书卡的书号填写上该书的书号;step4 学生借书卡的借阅时间赋值为系统时间
19、;为了提取系统时间,首先定义一个结构体变量d:struct tm d; 结构体类型struct tm定义在文件“time.h中,具体定义如下:struct tm int tm_sec; / seconds after the minute - 0,59 int tm_min; / minutes after the hour - 0,59 int tm_hour; / hours since midnight - 0,23 int tm_mday; / day of the month - 1,31 int tm_mon; / months since January - 0,11 int t
20、m_year; / years since 1900 int tm_wday; / days since Sunday - 0,6 int tm_yday; / days since January 1 - 0,365 int tm_isdst; / daylight savings time flag ;这里我们需要使用其中的3个成员:tm_year、tm_mon和tm_mday。通过调用函数_getsystime(&d); 可以得到系统时间,假设用下面语句输出日期:printf(%d.%d.%d, d.tm_year, d.tm_mon, d.tm_mday); 假设借书日期是,那么会输出
21、,假设借书日期为,那么会输出,这样的输出结果显然不好,为了正确输出或,必须对成员tm_year和tm_mon进行处理,对于tm_mon的处理比拟简单,直接加1即可d.tm_mon+1,对于tm_year按下面方法处理:如果年份整除100等于0即年份=2000, 那么年份=2000+d.tm_year%100。step5 保存修改正的图书信息和学生信息;step6 提示用户借书成功。最后询问学生是否继续借书吗?(y/n),假设学生输入y,那么重复上面的借书过程;假设输入n,那么返回到学生功能选择菜单界面。函数ReturnBook()用来实现还书管理。还书时,首先统计该生有几张已使用的借书卡,将数
22、据存放在变量t中,假设t为0,说明该生目前根本没有借阅的图书,无法进行还书操作;假设t大于0,那么可进行还书操作,先输入书号,在学生的借书卡中寻找,假设没找到该书号,那么提示输入的书号有误,请重新输入!;假设找到该书号,那么通过以下6个步骤进行还书:step1 学生借书卡的借阅标记flag置0;step2 学生借书卡的书号置空;step3 学生借书卡的借阅时间清0;step4 变量t减1;step5 在数组book中寻找该书号,找到后其库存量加1;step6保存修改正的图书信息和学生信息。最后询问学生是否继续还书吗?(y/n),假设学生输入y,那么重复上面的还书过程;假设输入n,那么返回到学生
23、功能选择菜单界面。局部源程序代码#include#include#include#include#include/ 结构体类型的定义typedef struct date /日期类型 short year; /年 short month; /月 short day; /日 SDATE;typedef struct library_card /借书卡类型 short flag; /是否借阅标记 char ISBN20; /所借图书的书号 SDATE bor_time; /借阅时间SLCARD;typedef struct stud /学生类型 char num15; /学号 char name2
24、0; /姓名 SLCARD card5; /借书卡SSTUD;typedef struct book /图书类型 char ISBN20; /书号 char bookname40; /书名 char author20; /作者 char publisher30; /出版社 char bookclass20; /图书分类 short total_num, stock_num; /总量,库存量 float price; /单价 SDATE publish_time; /出版时间SBOOK;#define SDATE_LEN sizeof(SDATE) /SDATE_LEN为日期类型占用存储空间的大
25、小#define SLCARD_LEN sizeof(SLCARD) /SLCARD_LEN为借书卡类型占用存储空间的大小#define SSTUD_LEN sizeof(SSTUD) /SSTUD_LEN为学生类型占用存储空间的大小#define SBOOK_LEN sizeof(SBOOK) /SBOOK_LEN为图书类型占用存储空间的大小#define BOOKNUM 1000 /图书总数,可按需要更改其数值#define STUDNUM 100 /学生总数,可按需要更改其数值SSTUD studentSTUDNUM=0; /学生数组(全局变量)SBOOK bookBOOKNUM=0;
26、/图书数组(全局变量)/函数声明void ManagerLogin(int *pbn, int *psn); /管理员登录函数void StudentLogin(int bn, int sn); /学生登录函数void InputOnebook(int i); /输入一本图书信息的函数int LoadBooks(void); /从文件载入全部图书信息的函数void SaveOnebook(int i); /保存一本图书信息的函数void SaveAllbooks(int bn); /保存全部图书信息的函数int OriginalBook(void); /图书信息初始化的函数void Modif
27、yBook(int bn); /修改图书信息的函数int AddBook(int bn); /添加图书信息的函数int DelBook(int bn); /删除图书信息的函数void OutputOnebook(int i); /输出一本图书信息的函数void OutputAllbooks(int bn); /输出全部图书详细信息的函数void OutputBrief(int bn); /输出全部图书简要信息的函数void InputOnestud(int i); /输入一个学生信息的函数int LoadStuds(void); /从文件载入全部学生信息的函数void SaveOnestud(
28、int i); /保存一个学生信息的函数void SaveAllstuds(int sn); /保存全部学生信息的函数int OriginalStud(void); /学生信息初始化的函数void ModifyStud(int sn); /修改学生信息的函数int AddStud(int sn); /添加学生信息的函数int DelStud(int sn); /删除学生信息的函数void OutputOnestud(int i); /输出一个学生信息的函数void OutputAllstuds(int sn); /输出全部学生信息的函数void SearchMenu(int bn); /图书查
29、询函数void SearcBname (int bn); /按书名查询函数void SearchAuthor(int bn); /按作者查询函数void SearchBclass(int bn); /按图书分类查询函数 void SearchPublisher(int bn); /按出版社查询函数void SearchPubtime(int bn); /按出版时间查询函数void BorrowBook(int bn,int m); /借书函数void ReturnBook(int bn,int m); /还书函数void main(void) / main函数定义 int select, bn
30、, sn; bn=LoadBooks(); /调用LoadBooks(),返回值为图书数量,将其赋值给bn if(bn=0) printf( 图书信息为空!nn); sn=LoadStuds(); /调用LoadStuds(),返回值为学生人数,将其赋值给sn if(sn=0) printf( 学生信息为空!nn); while(1) printf(n); printf(t-n); printf(t* *n); printf(t* 图书借阅管理系统 *n); printf(t* *n); printf(t-nn); printf(t 1. 管理员n); printf(t 2. 学生n); pr
31、intf(t 0. 退出系统nn); printf(t 请选择用户:); scanf(%d, & select); getchar(); /该函数用于读取回车符,消除对以后数据输入的影响 switch(select) case 1: ManagerLogin(&bn,&sn); break; case 2: StudentLogin(bn,sn); break; case 0: printf(n 谢谢使用!再见n); exit(1); default: printf(n 按键错误,请重新选择!n); /end switch /end while/用户登录模块的函数定义/=/ 功能:实现管理员登
32、录, 显示管理员用户的菜单,进行功能选择/ 参数:pbn、psn分别为main函数中变量bn、sn的地址/ 返回:无/ 主要思路:用strcmp函数实现密码验证,用switch结构实现菜单功能选择/=/void ManagerLogin(int *pbn, int *psn) int select, flag=0; char password11; /密码最多为10位 printf(n 请输入密码:); gets(password); if(strcmp(password, 123)!=0) /密码按需要事先设置好,这里假设为“123” printf(n 密码错误!n); return; /假
33、设密码错误,返回主菜单 while(1) printf(n); printf( 管理员,您好!n); printf(-n); printf( 1. 图书信息初始化 7. 学生信息初始化n); printf( 2. 修改图书信息 8. 修改学生信息n); printf( 3. 增加图书信息 9. 增加学生信息n); printf( 4. 删除图书信息 10. 删除学生信息n); printf( 5. 输出图书信息 11. 输出学生信息n); printf( 6. 图书信息查询 0. 返回主菜单n); printf(n 请选择您需要的效劳(0-11):); scanf(%d, & select);
34、 getchar(); switch(select) case 1: *pbn=OriginalBook(); break; case 2: ModifyBook(*pbn); break; case 3: *pbn=AddBook(*pbn); break; case 4: *pbn=DelBook(*pbn); break; case 5: printf( 输出详细信息请按1, 输出简要信息请按2:); scanf(%d, &flag); getchar(); if(flag=1) OutputAllbooks(*pbn); if(flag=2) OutputBrief(*pbn); br
35、eak; case 6: SearchMenu(*pbn); break; case 7: *psn=OriginalStud(); break; case 8: ModifyStud(*psn); break; case 9: *psn=AddStud(*psn); break; case 10: *psn=DelStud(*psn); break; case 11: OutputAllstuds(*psn); break; case 0: return; default: printf(n 按键错误,请重新选择!n); /end switch /end while/=/ 功能:实现学生登录
36、, 显示学生用户菜单,进行功能选择/ 参数:bn表示图书数量,sn表示学生人数/ 返回:无/ 主要思路:用strcmp函数实现学号验证,用switch结构实现菜单功能选择/=/void StudentLogin(int bn, int sn) int select, j, m=-1; char snum15; /数组snum用来存放登录学生的学号 if(sn=0) printf(n 学生信息为空,无法执行操作!n); return; while(1) printf(n 请输入你的学号:); gets(snum); for(j=0; jsn; j+) /在学生数组中查找输入的学号 if(strc
37、mp(studentj.num, snum)=0) m=j; /找到该学号后记录其下标 break; if(m0) /m小于0表示数组中没有找到输入的学号printf(n 学号错误,请重新输入!n); else /m大于等于0,表示存在这个学生的信息while(1) printf(n); printf( 同学,你好!n); printf(-n); printf( 1. 输出个人借书信息n); printf( 2. 图书信息查询n); printf( 3. 借书n); printf( 4. 还书n); printf( 0. 返回主菜单n); printf(n 请选择你需要的效劳(0-4):);
38、scanf(%d, & select); getchar(); switch(select) case 1: OutputOnestud(m); break; case 2: SearchMenu(bn); break; case 3: BorrowBook(bn, m); break; case 4: ReturnBook(bn, m); break; case 0: return; default: printf(n 按键错误,请重新选择!n); /end switch /图书信息管理模块的函数定义/=/ 功能:从键盘输入一本图书的全部信息/ 参数:i表示对第i本图书进行输入操作/ 返回:
39、无/ 主要思路:按提示信息用scanf输入图书的各项信息,存放到数组book中 /=/void InputOnebook(int i) printf( 书号:); gets(booki.ISBN); printf( 书名:); gets(booki.bookname); printf( ); gets(booki.author); 略 /=/ 功能:从文件“book.dat中载入全部图书的信息 / 参数: 无/ 返回:返回文件中图书的数量/ 主要思路:用while循环从文件中读取图书信息到数组book,同时统计图书数量/=/int LoadBooks(void) FILE *fb; int b
40、n=0; /变量bn用来记录图书的数量 if(fb=fopen(book.dat, rb+)=NULL) /以二进制读、写方式翻开文件 printf(cant open file book.datn); return(bn); /文件翻开失败时,返回值为0 while(!feof(fb) /文件没有结束时进行读数据操作 if(fread(&bookbn, SBOOK_LEN,1,fb) bn+; /从文件中每读一本图书,图书数量加1 fclose(fb); /关闭文件 return(bn); /返回图书数量,即bn的值/=/ 功能:将一本图书的信息保存到文件“book.dat中/ 参数:i表示
41、将第i本图书的信息保存到文件中/ 返回:无/ 主要思路:先用fseek函数定位,再用fwrite函数写入第i本图书的信息/=/void SaveOnebook(int i) 略/=/ 功能:将全部图书的信息保存到文件“book.dat中/ 参数:bn表示图书的数量/ 返回:无/ 主要思路:用fwrite函数将数组book中的数据一次性写入文件/=/void SaveAllbooks(int bn) 略 /=/ 功能:实现图书信息的初始化 / 参数:无 / 返回:输入图书的数量/ 主要思路:用for循环实现输入多本图书信息,并写入文件/=/int OriginalBook(void) int n
42、; char c=y; for(n=0; c=y|c=Y; n+) printf(n 输入图书%d的信息:n, n+1); InputOnebook(n); /调用函数,输入第n本图书 printf(n 继续输入请按y, 停止请按n:); c=getchar(); getchar(); SaveAllbooks(n); /将输入的n本图书的数据保存至文件 return(n); /返回n的值,即输入图书的数量 /=/ 功能:修改图书信息/ 参数:bn表示图书的数量 / 返回:无/ 主要思路:通过switch实现修改图书的任意信息项,并将修改后的信息写入文件/=/void ModifyBook(i
43、nt bn) int select, k=-1; char isbn20, c1=y, c2; if(bn=0) printf(n 图书信息为空,无法执行操作!n); return; /返回到管理员功能选择菜单while(c1=y|c1=Y) c2=y; printf(n 请输入要修改的图书的书号:); gets(isbn); for(int i=0; ibn; i+) if(strcmp(booki.ISBN, isbn )=0) k=i; break; if(kbookk.total_num) bookk.stock_num=bookk.total_num; break; case 8:
44、printf( 单价:); scanf(%f, &bookk.price); getchar(); break; case 9: printf( 出版时间年.月:); scanf(%d.%d, &booki.publish_time.year,&booki.publish_time.month); getchar(); break; default: printf(n 按键错误,请重新输入!n); /end switch printf(n 还要修改此图书的其他信息吗?(y/n):); c2=getchar(); getchar(); /end while(c2) SaveOnebook(k);
45、 /保存修改后的图书信息 printf(n 还需要修改其它图书的信息吗?(y/n):); c1=getchar(); getchar(); /end while(c1);printf(n 按任意键继续!n); getch(); /=/ 功能:添加图书信息/ 参数:bn表示添加前的图书数量/ 返回:添加后的图书数量/ 主要思路:调用InputOnebook函数输入要添加的图书信息,再用fwrite将其写入文件/=/int AddBook(int bn) char c=y; FILE *fb; if(fb=fopen(book.dat,ab)=NULL) / 以二进制追加方式翻开文件 printf
46、(cant open file book.datn); exit(1); while(c=y|c=Y) printf(n 请输入新增图书的信息:n); InputOnebook(bn); /调用函数,输入第bn本图书的信息 fwrite(&bookbn,SBOOK_LEN,1,fb); /将第bn本图书的信息保存至文件 bn+; /图书数量加1 printf(n 继续输入其它新图书的信息吗?(y/n):); c=getchar(); getchar(); printf(n 按任意键继续!n); getch(); fclose(fb); return(bn); /返回添加图书后的图书数量/=/
47、功能:删除图书信息/ 参数:bn表示删除前的图书数量 / 返回:删除后的图书数量/ 主要思路:先输入要删除图书的书号,找到该书后进行删除操作,再调用SaveAllbooks/ 函数将删除后的图书信息写入文件/=/int DelBook(int bn) int i, k=-1; char isbn20, c1=y, c2; if(bn=0) printf(n 图书信息为空,无法执行操作!n); return(bn); while(c1=y|c1=Y) c2=n; printf(n 请输入要删除的图书的书号:); gets(isbn); for(i=0; ibn; i+) if(strcmp(bo
48、oki.ISBN, isbn)=0) k=i; break; /找到要删除的图书,用k记录其下标 if(k0) /k小于0,表示没找到输入书号所对应的图书printf(n 输入的书号有误,请重新输入!n);else printf(n 显示该图书的信息:n); OutputOnebook(k); printf(n 确定要删除该图书的全部信息吗?(y/n):); c2=getchar(); getchar(); if(c2=y) /c2为y,表示确定进行删除操作 for(i=k; ibn; i+) booki=booki+1; /从数组中删除第k本图书 bn-; /图书数量减1 printf(n
49、成功删除!n); else /c2为n,表示不进行删除操作printf(n 取消删除!n); printf(n 继续删除其它图书的信息吗?(y/n):); c1=getchar(); getchar(); /end whileSaveAllbooks(bn); /保存删除后的全部图书信息 printf(n 按任意键继续!n); getch();return(bn); /返回删除后的图书数量/=/ 功能:输出一本图书的全部信息 / 参数:i表示对第i本图书进行输出操作 / 返回:无/ 主要思路:用printf函数输出一本图书的全部信息/=/void OutputOnebook(int i) 略
50、/=/ 功能:输出全部图书的详细信息/ 参数:bn表示图书的数量 / 返回:无/ 主要思路:通过for循环屡次调用OutputOnebook函数输出全部图书的信息/=/void OutputAllbooks(int bn) 略/=/ 功能:以列表方式输出全部图书的简要信息/ 参数:bn表示图书的数量 / 返回:无/ 主要思路:用for循环输出全部图书的简要信息书号、书名、作者、库存量/=/void OutputBrief(int bn) int i; printf(n 全部图书的简要信息:n);printf(n 序号 书号 书名 作者 库存量 n);for(i=0;ibn;i+) printf
51、( %2d %-18s %-20s, i+1, booki.ISBN, booki.bookname); printf( %-8s %2dn, booki.author, booki.stock_num); printf(n 按任意键继续!n); getch();/学生信息管理模块的函数定义/=/ 功能:输入一个学生信息/ 参数:i表示对第i个学生进行输入操作/ 返回:无/ 主要思路:用gets函数输入学生的学号和姓名/=/void InputOnestud(int i) 略 /=/ 功能:从文件“stud.dat中载入全部学生的信息 / 参数: 无/ 返回:返回文件中学生的人数/ 主要思路:
52、用while循环从文件中读取学生信息到数组student,同时统计学生人数/=/int LoadStuds(void) 参考LoadBooks函数 /=/ 功能:保存一个学生信息/ 参数:i表示将第i个学生的信息保存到文件中/ 返回:无/ 主要思路:先用fseek函数定位,再用fwrite函数写入第i个学生的信息/=/void SaveOnestud(int i) FILE *fs; if(fs=fopen(stud.dat,rb+)=NULL) /以二进制读、写方式翻开文件 printf(cant open file stud.datn); exit(1); fseek(fs, SSTUD_
53、LEN*i, 0); /文件指针定位到第i个学生 fwrite(&studenti, SSTUD_LEN, 1, fs); /将第i个学生的信息写入文件 fclose(fs);/=/ 功能:将全部学生信息保存到文件“stud.dat中/ 参数:sn表示学生人数/ 返回:无/ 主要思路:用fwrite函数将数组student中的数据一次性写入文件/=/void SaveAllstuds(int sn) 略/=/ 功能:实现学生信息的初始化 / 参数:无/ 返回:学生人数/ 主要思路:用for循环屡次调用InputOnestud函数实现输入多个学生信息,并写入文件/=/int OriginalSt
54、ud(void) int n; char c=y; for(n=0; c=y|c=Y; n+) printf(n 输入学生%d的信息:n, n+1); InputOnestud(n); /调用函数,输入第n个学生的信息 printf(n 继续输入请按y; 停止请按n:); c=getchar(); getchar(); SaveAllstuds(n); /将输入的n个学生的信息保存到文件中 return(n); /返回学生人数,即n的值/=/ 功能:修改学生信息 / 参数:sn表示学生人数/ 返回:无/ 主要思路:通过switch实现修改学生的任意信息项,并将修改后的信息写入文件/=/void
55、 ModifyStud(int sn) 修改方法与ModifyBook函数类似,代码略。/=/ 功能:添加学生信息 / 参数:sn表示添加前的学生人数/ 返回:添加后的学生人数/ 主要思路:调用InputOnestud函数输入要添加的学生信息,再用fwrite将其写入文件/=/int AddStud(int sn) 添加方法与AddBook函数类似,代码略。/=/ 功能:删除学生信息/ 参数:sn表示删除前的学生人数/ 返回:删除后的学生人数/ 主要思路:先输入要删除学生的学号,找到该学生后进行删除操作,再调用SaveAllstuds/ 函数将删除后的学生信息写入文件/=/int DelStu
56、d(int sn) 删除方法与DelBook函数类似,代码略。/=/ 功能:输出一个学生信息/ 参数:i表示输出第i个学生的信息/ 返回:无/ 主要思路:输出一个学生信息,并输出目前所借图书的书号和借阅时间/=/void OutputOnestud(int i) 略/=/ 功能:输出全部学生信息/ 参数:sn表示学生人数/ 返回:无/ 主要思路:用for循环输出全部学生的信息/=/void OutputAllstuds(int sn) int i, j, t; printf(n 全部学生的信息:n); printf(n 序号 学号 姓名 所借图书书号 借阅时间n); for(i=0; isn;
57、 i+) printf( %2d %10s %6s , i+1, studenti.num, ); for(j=0,t=0; j5; j+) if(studenti.cardj.flag) if (t) printf(n%26c, ); /输出空格 printf( %-20s,studenti.cardj.ISBN); printf(%d.%d.%d, studenti.cardj.bor_time.year, studenti.cardj.bor_time.month,studenti.cardj.bor_time.day); t=1; printf(nn); pr
58、intf(n 按任意键继续!n); getch();/图书查询模块的函数定义/=/ 功能:显示图书查询菜单,实现功能选择 / 参数:bn表示图书的数量/ 返回:无/ 主要思路:采用switch结构实现图书查询功能的选择/=/void SearchMenu(int bn) /函数功能是显示图书查询菜单 int select; while(1) printf(n 欢送使用图书查询效劳n); printf(-n); printf( 1. 按书名查询 2. 按作者查询n); printf( 3. 按出版社查询 4. 按出版时间查询n); printf( 5. 按图书分类查询 0. 退出查询效劳n);
59、printf(n 请选择查询方式(0-5):); scanf(%d, & select); getchar(); switch(select) case 1: SearcBname (bn); break; case 2: SearchAuthor(bn); break; case 3: SearchPublisher(bn); break; case 4: SearchPubtime(bn); break; case 5: SearchBclass(bn); break; case 0: return; default: printf(n 按键错误,请重新选择!n); /=/ 功能:按书名进
60、行图书查询/ 参数:bn表示图书的数量/ 返回:无/ 主要思路:输入书名,先用strcmp函数进行精确查询,假设无查询结果,再用strstr函数/ 进行模糊查询/=/void SearcBname (int bn) int i, j, k; char bname40, c=y; while(c=y|c=Y) k=-1; printf(n 请输入书名:); gets(bname); for(i=0,j=1; ibn; i+) if(strcmp(booki.bookname, bname)=0) /精确查询 k=i; printf(n 图书%d的信息:n, j+); OutputOnebook(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管理高尔夫课程
- 天津市乐器店物业维修养护指南
- 艺术品交易签约管理办法
- 人才发展服务公司管理手册
- 幼儿园合作补充协议
- 企业形象片监制合同模板
- 泥工改造安装合同
- 创意办公二手房交易范本
- 风机设备投标样本
- 瑜伽馆地坪施工合同
- 教师绩效工资及超课时费发放管理办法
- 支撑台铸造工艺设计
- 背负十字架的故事励志·
- 安徽华塑股份有限公司年产 20 万吨固碱及烧碱深加工项目环境影响报告书
- 优秀团队申报材料【优秀5篇】
- 2020九年级英语上册全册Module1-12重点难点易错点整理新版外研版
- ABB变频器培训学习
- 森林防火制度汇编
- GB/T 9239.1-2006机械振动恒态(刚性)转子平衡品质要求第1部分:规范与平衡允差的检验
- GB/T 26996-2011非正规教育与培训的学习服务学习服务提供者基本要求
- 财会数码字书写规范素材
评论
0/150
提交评论