语言设计图书管理系统—借阅信息录入模块_第1页
语言设计图书管理系统—借阅信息录入模块_第2页
语言设计图书管理系统—借阅信息录入模块_第3页
语言设计图书管理系统—借阅信息录入模块_第4页
语言设计图书管理系统—借阅信息录入模块_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、C C 语言课程设计语言课程设计 专业:电子信息科学与技术 日期:2011 年 6 月 10 日 哈尔滨工业大学哈尔滨工业大学 20112011 年年 5 5 月月 图书图书管理系统管理系统借阅信息录入模块借阅信息录入模块 1. 引言随着信息时代的来临,电子信息的发展在给社会带来冲击的同时,也使图书馆业务受到了强烈的冲击,图书馆传统的管理和服务方式已不能适应读者对日益增长的文献信息的需求。随着馆藏量的不断增加,图书资料的著录和查询的难度也就相应增加,数据处理手工操作,工作量大,出错率高,出错后不易更改的手工方式,已经不能满足要求。基于这此问题,建立一个规范化,系统化,程序化的图书管理系统迫不急

2、待。编写图书馆管理系统的 C 程序,可对图书馆书籍、读者资料、借还书等信息进行高效的管理。使用该程序之后,使用者可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,以便全面掌握图书的流通情况。 2系统需求分析 2 2.1 .1 系统需求分析系统需求分析 功能需求: 图书管理系统采用的开发工具是 Visucal C+6.0,主要用于对大量的图书信息,包括书名、作者、出版社、出版日期、ISBN(书号) 、图书定价等进行增加、删除、查询、保存等操作。同时还包括对用户的管理,用户包括管理员和普通用户两种权限,管理原客易完成全部操作,而普通用户只能对图书进行浏览和查询操作。为保存

3、信息,系统利用文件将图书信息和用户信息存储在文件中,每次系统启动时,现将数据从文件读到链表中,进行增、删、改、查等操作,在系统退出前,再将单链表中的数据保存到文件中,有效地将数据进行保存。系统提供简单的人机界面,使用户可以根据提示,输入操作项,调用系统提供的管理功能。主要功能需求描述如下: 1) 用户登录 首先提示用户输入用户名和密码。调用文件中存储的用户信息进行校验,只有用户名和密码都匹配时才允许用户使用该系统。用户登录到系统后能够使用的系统功能和用户的权限有关,管理员可以完成全部操作,而普通用户只能进行图书的浏览、查询。权限的判定在登录模块中完成。 2) 系统主控平台 不同权限的用户登录不

4、同的系统主控平台,管理员可以完成全部的操作,包括图书管理、用户管理以及退出系统三大功能模块。图书管理模块中包括新增图书信息、浏览图书信息、查询图书信息和保存图书信息等操作。普通用户只能进行浏览图书信息和查询图书信息的操作,通过输入相应的序号来选择相应的操作。 3) 新增图书信息处理 用户根据提示输入图书的书名、作者、出版社、出版日期、ISBN、图书定价以及页数等数据。输入完一条图书信息,可根据提示继续输入下一条图书信息或继续其他操作,允许输入多条图书的信息记录。输入完图书信息后,以单链表的形式暂时保存在单链表中,等待下一步操作。系统退出之前,将单链表中的全部图书信息保存到文件中。 4) 浏览图

5、书信息处理 在选择了浏览图书信息后,将图书从内存中掉出来显示,最后提示是否再次浏览图书信息,如果没有查询到任何信息,系统会给出提示信息。 5) 查询图书信息处理 选择查询图书信息后,进入查询子菜单,可以分别按书名、作者、出版社、出版日期、ISBN、图书定价、图书数量等对单链表中的图书信息进行查询。 6) 删除图书信息处理 首先提示用户输入要删除的图书的 ISBN,用户根据输入的信息在单链表查找,如果该图书存在,则首先显示图书的基本信息,并提示用户是否进行删除操作,用户确认删除后直接删除;如果没找到,系统给出提示信息。 7) 图书借阅信息处理 借书是系统用户才可借阅。即要借书首先查询用户文件,若

6、不是用户,则提示先注册为用户;如果是用户,则输入要借阅的书名查找图书信息,如果找到,要先判断图书是否全部借出,若未全部借出,则可以借阅,否则,系统提示没有此书或已借出,本次借书失败。 8) 还书信息处理 首先系统提示用户输入要还的书名,在图书信息中查找书名相同的书,将该书借阅信息恢复。 9) 新增用户信息处理 只有管理员可以处理这个模块。根据提示信息输入用户的用户名、密码及权限。输入完一个用户的信息后直接返回到主菜单界面,进行其他操作,允许输入多个用户信息,但用户名不允许重复。输入完的图书暂时保存在单链表中,等待下一步的操作,系统退出之前,将单链表中全部用信息保存到文件中。 10) 查找用户信

7、息处理 首先提示用户输入要查找的用户名,根据用户输入的用户名从单链表中对用户信息进行查询,查询成功后,显示该用户信息,如果没有查询到任何信息,系统将给出提示信息。 11) 删除用户信息 首先提示用户输入要删除的用户名,根据用户输入的信息完成对用户信息的删除操作。 12) 修改用户信息 首先提示用户输入要修改的用户名,根据用户输入的信息完成对用户信息的修改操作。 13) 保存用户信息 该模块的功能是将单链表中的用户信息保存到文件中。 14) 退出 该模块的功能是退出系统,并且在系统退出之前,保存用户的和图书信息,并释放链表,防止内存泄露。 3.个人系统总体设计 2.12.1 功能模块设计功能模块

8、设计 大模块录入部分分为 7 个小模块 模块 1: 打开文件; 模块 2: 从文件中读入借阅记录; 模块 3: 以图书 ID 查找借阅记录; 模块 4: 以借阅者用户名查找借阅记录; 模块 5: 创建借阅记录; 模块 6: 删除借阅记录; 模块 7: 将借阅记录写入文件; 2.22.2 程序处理流程程序处理流程 2.32.3 开发工具开发工具 C-free 4系统详细设计与实现 4.14.1 预处理预处理 #include #includeglobal.h #define BOOK_FILE book.txt #define CLIENT_FILE client.txt #define REC

9、ORD_FILE record.txt 4.24.2 数据结构定义数据结构定义 结构体定义: struct Date int Year; /*借阅的年*/ int Month; /*借阅的月*/ int Day; /*借阅的日*/ ; struct RecordData long Id; /*图书的 Id 号*/ char Debit; /*借阅者用户名*/ Date LendDate; /*借阅时间*/ ; struct Record RecordData Data; /*借阅的有关信息*/ 大模块:录入部分 打开文件 从文件中读入借阅记录 以图书ID查找借阅记录 以借阅者用户名查找借阅记录

10、 创建借阅记录 删除借阅记录 将借阅记录写入文件 Record *Next; /*指向下一结点的指针*/ ; 4.2.2.主函数变量声明 int n,i; long ID; char a20; Record *p, *q; FILE *fp; 4.34.3 函数及变量声明函数及变量声明 .函数声明 void IDfile(); /*打开文件*/ int LoadRecord(); /*从文件中读入借阅记录,生成借阅记录链表头指针*/ Record *FindRecordById(long Id); /*以图书 ID 查找借阅记录,返回指定项前一项的指针(删除用)或 NULL(未找到)*/ Re

11、cord *FindRecordByDebit(Record *Head,char Debit); /*以借阅者用户名查找借阅记录,返回指定项的指针(以传递的头指针为基准进行查找,不要使用全局变量)*/ void NewRecord(long Id); /*创建借阅记录,调用 GetCurDate */ void DeleteRecord(long Id); /*删除借阅记录,调用 FindRecordById */ int SaveRecord(); /*将借阅记录写入文件 */ .变量声明 1)函数 IDfile()的变量声明: FILE *fp; int i ; Record *p; 2

12、)函数 LoadRecord()的变量声明: FILE *fp; Record *node,*pr; RecordData p; 3)函数 FindRecordById(long Id)的变量声明: Record *pos; Record *pr; 4)函数 FindRecordByDebit(Record *Head,char Debit)的变量声明: Record *pos; 5)函数 NewRecord(long Id)的变量声明: Record *pos; Record *pr; 6)函数 DeleteRecord(long Id)的变量声明: Record *pos; Record

13、*node, *pr; 7)函数 SaveRecord()的变量声明: FILE *fp; Record *pos, *pr; 4.44.4 主函数、主要处理函数、辅助函数的设计主函数、主要处理函数、辅助函数的设计 a.主函数源代码 main() int m, n, i, j, k, z, id, flag = 0, fleg = 0, count = 0,count1 = 0; char name20; long ID=0, l; Record *p, *q; n =LoadRecord(); if(n = 1) printf(文件调用成功n); printf(Id:t%ldt Debit:

14、t%st Year:t%dt Month:t%dt Day:t%dn,p-HIT.Id, p-HIT.Name, p-HIT.Year, p-HIT.Month, p-HIT.Day); p=p-next; count+; else printf(文件调用不成功n); p=FindRecordById(ID); if(p!=NULL) printf(请输入要查找图书的 ID 号: ); scanf(%ld, &id); printf(Id:t%dt Debit:t%st Year:t%dt Month:t%dt Day:t%dn, p-HIT.Id, p-HIT.Name, p-HIT

15、.Year, p-HIT.Month, p-HIT.Day); p=p-next; count+; else printf(没找到n); else printf(FindRecordById 函数调用不成功n); q = FindRecordByDebit(fcyf); if(q!=NULL) printf(请输入借阅人的姓名: ); scanf(%s, name); if(strcmp(p-HIT.Name,name)=0) printf(Id:t%dt Debit:t%st Year:t%dt Month:t%dt Day:t%dn,p-HIT.Id, p-HIT.Name, p-HIT.

16、Year, p-HIT.Month, p-HIT.Day); p=p-next; count+; flag = 1; if(flag = 0) printf(没找到你所要查的借阅人n); else printf(FindRecordByDebit 函数调用不成功n); p=RecordHead; while(p!=NULL) p=p-Next; NewRecord(ID); p=RecordHead; while(p!=NULL) count1+; p = p-Next; if(count1-count!=1) printf(请输入新纪录中书 ID 号,借阅人姓名和日期:n); printf(

17、IdtNametYeartMonthtDay:); scanf(%ld %s %d %d %d,&HIT.Id, HIT.Name, &HIT.Year,&HIT.Month,&HIT.Day); printf(Id:t%ldt Debit:t%st Year:t%dt Month:t%dt Day:t%dn, p-HIT.Id, p-HIT.Name, p-HIT.Year, p-HIT.Month, p-HIT.Day); count+; p = p-Next; else printf(NewRecord 函数调用不成功n); p=RecordHead; w

18、hile(p!=NULL) p = p-Next; DeleteRecord(ID); while(p!=NULL) count+; p = p-Next; if(count1 - count!=1) do printf(请输入要删除的 ID 号); scanf(%ld,&l); while(l 6 & l != p-HIT.Id); if(l!=p-HIT.Id) printf(Id:t%ldt Debit:t%st Year:t%dt Month:t%dt Day:t%dn, p-HIT.Id, p-HIT.Name, p-HIT.Year, p-HIT.Month, p-

19、HIT.Day); count1+; p = p-Next; else printf(DeleteRecord 函数调用不成功n); m =SaveRecord(); if(m=1) printf(文件保存成功n); else printf(文件保存不成功n); return 0; b.主要处理函数源代码 /*打开文件*/ void IDfile() FILE *fp; int i = 1; Record *p; fp = fopen(RECORD_FILE, rb); while (p!=NULL) if (fread(&(p-Data),sizeof(RecordData),1,f

20、p) printf(record%dnId:t%dnDebit:t%snYear:t%dnMonth:t%dnDay:t%dn,i,p-Data.Id,p-Data.Debit,p-Data.LendDate.Year,p-Data.LendDate.Month,p-Data.LendDate.Day); getchar(); p=p-Next; i+; fclose(fp); /*从文件中读入借阅记录,生成借阅记录链表头指针 */ int LoadRecord(void) FILE *fp; Record *node,*pr; RecordData p; fp = fopen(RECORD_

21、FILE, rb); if(fp = NULL) return 0; node = (Record *)malloc(sizeof(Record); if(node = NULL) return 0; if(!fread(&p, sizeof(RecordData), 1, fp) return 0; node-Data = p; RecordHead = node; while(1) pr = node; node = (Record *)malloc(sizeof(Record); if(node = NULL) return 0; if(fread(&p, sizeof(

22、RecordData), 1, fp) = 0) break; else node-Data = p; pr-Next = node; free(node); pr-Next = NULL; fclose(fp); return 1; /*以图书 ID 查找借阅记录,返回指定项前一项的指针(删除用)或 NULL(未找到)*/ Record *FindRecordById(long Id) Record *pos = RecordHead; Record *pr = RecordHead; if(pos = NULL) return NULL; while(pos-Next != NULL &a

23、mp; pos-Data.Id != Id) pr=pos; pos = pos-Next; if(pos-Data.Id = Id) return pr; return NULL; 开始 打开文件 到文件尾 新建节点 将文件中的数据读到当前节点 把上一个节点的Next指向这个节点 上一个节点后移 当前节点的Next变为 NULL 返回头指针 结束 是 否 /*以借阅者用户名查找借阅记录,返回指定项的指针(以传递的头指针为基准进行查找,不要使用全局变量)*/ Record *FindRecordByDebit(char Debit) Record *pos = RecordHead; if(p

24、os=NULL) return pos; while(pos-Next != NULL & strcmp(pos-Data.Debit, Debit) != 0) pos = pos-Next; if(strcmp(pos-Data.Debit, Debit) = 0) return pos; return NULL; 开始 相等或到链表尾 当前指针和上一个指针后移 ID 相等 返回 NULL 返回上个指针 结束 是 否 否 是 /*创建借阅记录,调用 GetCurDate*/ void NewRecord(long Id) Record *pos = RecordHead; Reco

25、rd *pr; pr = (Record *)malloc(sizeof(Record); pr-Data.Id = Id; strcpy(pr-Data.Debit, CurrentClient); pr-Next = NULL; if(pos = NULL) RecordHead = pr; else while(pos-Next != NULL) pos = pos-Next; pos-Next = pr; 开始 相等或到链表尾 当前指针和上一个指针后移 用户名相等 返回 NULL 返回上个指针 结束 是 否 否 是 /*删除借阅记录,调用 FindRecordById*/ void D

26、eleteRecord(long Id) Record *pos = RecordHead; Record *node, *pr; if(RecordHead-Data.Id = Id) RecordHead = RecordHead-Next; free(pos); else if(RecordHead-Next = NULL) free(RecordHead); pos = NULL; else 开始 指针指向链表最后一项 分配一块内存单元 写入新的借阅信息 把指针指向新分配的内存 单 元 ,Next变 为Null 结束 node = FindRecordById(Id); pr = node-Next; node-Next = pr-Next; free(pr); /*将借阅记录写入文件*/ int SaveRecord(void) FILE *fp; Record *pos = RecordHead, *

温馨提示

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

评论

0/150

提交评论