c图书信息管理系统附源码
- 格式:doc
- 大小:703.50 KB
- 文档页数:59
C图书管理系统源代码 Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#图书管理系统系统功能:1.借书:根据借书人提出的图书编号(id)查询该图书,如果该图书现存量(store)不为0,则提示输入借阅者的学号(num),为借书人办理借书手续,提示用户该书已被借出。
2.归书:根据借书人的学号查询该读者的信息,若有该读者,则提示输入所借书籍的编号(id),为该读者办理还书手续,提示该书已还。
3.书籍管理:弹出书籍管理界面,输入所要执行操作的号码:(1)增加书籍:弹出注册新书的窗口,按照提示输入所增加书籍的信息,最后,提示用户该书已被注册。
(2)删除书籍:弹出删除书籍的窗口,输入所要删除书籍的编号(id),输出该书的信息,确认是否删除该书,1为删除,0为放弃。
(3)修改书籍:弹出修改书籍的窗口,输入所要修改书籍的编号(id),输出该书的信息,确认是否修改该书,1为修改,0为放弃。
之后按照提示重新输入书籍的信息。
4.读者管理:弹出读者管理界面,输入所要执行操作的号码:(1)增加读者:弹出注册读者的窗口,按照提示输入所增加读者的信息,最后,提示用户该读者已被注册。
(2)删除书籍:弹出删除读者的窗口,输入所要删除读者的学号(num),输出该读者的信息,确认是否删除该读者,1为删除,0为放弃。
(3)修改书籍:弹出修改读者的窗口,输入所要修改读者的学号(num),输出该读者的信息,确认是否修改该读者,1为修改,0为放弃。
之后按照提示重新输入读者的信息。
5.搜索:此搜索包括两方面的搜索,书籍搜索以及读者搜索,弹出搜索的窗口,按照提示输入所要搜索的内容,1为书籍搜索,2为读者搜索:(1)搜索书籍:弹出搜索书籍的窗口,按照提示输入所要搜索的方式,包括按<1>书名搜索,<2>书号搜索,<3>作者搜索,<4>出版社搜索,<5>出版时间搜索;根据所选方式输入相应的内容,若是该书籍存在,则输出该书籍的信息,否则,返回主界面。
原创C语言图书馆管理系统源代码介绍图书馆作为一个重要的知识储备和学习场所,必须进行有效的管理和组织。
使用C语言编写的图书馆管理系统可以帮助图书馆实现自动化的借阅、归还和管理功能。
本文将介绍一个原创的C语言图书馆管理系统的源代码。
功能概述这个图书馆管理系统具有以下核心功能: - 图书管理:包括添加图书、删除图书、查询图书等操作。
- 借阅管理:可以进行借阅操作,记录借阅者和借阅时间。
- 归还管理:可以进行归还操作,并更新图书的可借状态。
- 用户管理:管理借阅者的信息,包括添加用户、删除用户、查询用户等操作。
数据结构设计该图书馆管理系统使用了以下几种数据结构: 1. 图书(Book)结构体:包含图书的ID、书名、作者、可借状态等字段。
2. 用户(User)结构体:包含用户的ID、姓名、地址等字段。
3. 借阅记录(BorrowRecord)结构体:包含借阅者ID、图书ID、借阅时间等字段。
系统流程整个系统的流程可以分为以下几个步骤: 1. 用户打开系统,进入主菜单。
2. 用户选择不同的功能选项(如图书管理、借阅管理、用户管理等)。
3. 根据用户选择的功能,进入相应的功能界面。
4. 用户可以根据提示,输入相应的信息进行图书管理、借阅管理或用户管理操作。
5. 用户完成操作后,可以选择返回主菜单或退出系统。
代码实现以下是一个简化版的C语言图书馆管理系统的源代码:```c #include <stdio.h>// 定义结构体 struct Book { int id; char name[50]; char author[50]; int isAvailable; };struct User { int id; char name[50]; char address[100]; };struct BorrowRecord { int userId; int bookId; char borrowDate[20]; };// 函数声明 void addBook(); void deleteBook(); void searchBook(); void borrowBook(); void returnBook(); void addUser(); void deleteUser(); void searchUser();int main() { int choice;do {// 显示主菜单printf(\。
c图书信息管理系统附源码The document was prepared on January 2, 2021学号:计算机实习报告系别:管理系专业:信息管理与信息系统专业班级:1043班学生姓名:李优指导教师:徐日日期:2012-09-03~2012-09-141需求分析1.1选题任务图书借阅管理系统(1)编程工具C++(2)要求选题学生应具有端正的学习态度、正常的交流能力,应有积极主动、克服困难的学习意识(3)本题概述以学院图书馆为例,图书借与管理是一项经常性工作,为使图书借阅管理工作准确高效,提供图书借阅记录的添加、修改、删除、查询、浏览、汇总等,用图书借阅关系软件,能有效提高工作效率,具有较强的实际意义。
(4)功能描述①能度日外部提供的包含图书借阅信息的文本文件(TXT文件);②能在程序中录入图书借阅信息(可参考我院图书馆网上图书借阅信息的各个项目),并将信息写入文本文件(TXT文件);③能对所有图书借阅信息,按条件(按图书名、图书编号、借阅日期、借阅人、超期与否、超期天数等)查询浏览,能汇总统计计算出符合某条件的图书借阅记录的数量并浏览这些借阅信息,能将查询、浏览、汇总的结果输出结果文本文件(TXT文件)(5)辅助说明基础要求:①+②扩展要求:①+②+③1.2输入数据和输出数据形式:程序中包含的图书信息包括:char bnum[20]; xt);屏幕的打印;TXT文档的导出(书籍信息.txt)。
1.3测试数据及测试目的字母测试,错误数据测试,重复数据测试目的:产看本程序的纠错能力和是否人性化。
2程序设计关键数据类型定义输入想要修改的书籍编号,按照查找的方法,找到i,然后进行覆盖。
完成修改。
5.书籍的屏幕打印输出:分两部分输出,首先打印一个头信息,相当于列表的头;然后利用循环语句带参输出(i为参数,循环)。
6.保存信息到txt文件:同分为两部分,类似屏幕打印的方法,先存入表头,然后带参循环存入书籍信息。
C语言图书信息管理系统最终源代码#include<stdio.h>#include"string.h"struct book /* book2 是用来装用户要录入图书的信息*/{long num,time;char name[12],writer[12],fenlei[8],danwei[10];int pay;}stu[100];struct book1{long num,time;char name[12],writer[12],fenlei[8],danwei[10];int pay;}stu1[100];struct book2 /* book 是用来装cc.dat 文件中的图书信息*/{long num,time;char name[12],writer[12],fenlei[8],danwei[10];int pay;}stu2[100];denglu(){char a[15]="drzhang",b[15]="29257966",c[15],d[15];L3:system("cls");printf(" 欢迎登陆图书管理系统\n\n");printf("请输入姓名:");gets(c);printf("请输入密码:");gets(d);if(strcmp(a,c)==0&&strcmp(b,d)==0)return 0;else{printf("输入错误请重新输入\n\n");printf("1.重新输入 2.退出系统\n\n");printf("请输入.....");switch(getch()){case 49: goto L3;break;default: return 56;break;}}}/*此功能实现的是开始菜单的显示和具体功能的选择*/start(){printf("******************************欢迎使用图书管理系统******************************");printf("* 功能目录:*");printf("* |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| *");printf("* || || *");`printf("* || 1、图书查询2、图书浏览3、录入图书4、删除与修改5、备份与还原|| *");printf("* || || *");printf("* || || *");printf("* || || *");printf("* |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| *");printf("* 使用说明:如要选择“图书查询”,直接输入:1 退出:0 *");printf("************************************************************************* *******");printf("你想要做什么:");return getch(); /*输入选择对应功能的值,返回输入的值,即:用于判断选择的功能*/ }/*实现备份功能,以防图书信息出错带来的麻烦,不必看懂*/beifen(){FILE *fp1,*fp2;int i,a;jieshuo();system("cls");printf("\n\n请选择\\ 备份(B)| 浏览备份(L)/ \\ 还原(H)/ \\ 退出(Q)/ \n");switch(getch()){case 'B':case 'b':if((fp1=fopen("cc","r"))==NULL){printf("不能打开次文件\n");exit(0);}if((fp2=fopen("cc01","w"))==NULL){printf("不能打开次文件\n");exit(0);}fscanf(fp1,"%d",&a);fprintf(fp2,"%d\n",a);printf("\n\n确认备份吗?(Y/N)");switch(getch()){case 'Y':case 'y':for(i=0;i<a;i++){fscanf(fp1,"%ld %s %s %s %s %ld %d",&stu[i].num,stu[i].name,stu[i].writer,stu[i].fenlei,stu[i] .danwei,&stu[i].time,&stu[i].pay);fprintf(fp2,"%ld\t%s\t%s\t%s\t%s\t%ld\t%d\n",stu[i].num,stu[i].name,stu[i].writer,stu[i].fenlei,st u[i].danwei,stu[i].time,stu[i].pay);}printf("\n\n备份成功!\n\n是否打开浏览备份文件?(Y/N)");switch(getch()){case 'Y':case 'y':fclose(fp1);fclose(fp2);liulan02();break;case 'N':case 'n':break;}break;case 'N':case 'n':break;}fclose(fp1);fclose(fp2);break;case 'H':case 'h':if((fp1=fopen("cc01","r"))==NULL){printf("不能打开此文件\n");exit(0);}if((fp2=fopen("cc","w"))==NULL){printf("不能打开此文件\n");exit(0);}fscanf(fp1,"%d",&a);fprintf(fp2,"%d\n",a);printf("\n\n确认还原吗?(Y/N)");switch(getch()){case 'Y':case 'y':for(i=0;i<a;i++){fscanf(fp1,"%ld %s %s %s %s %ld %d",&stu[i].num,stu[i].name,stu[i].writer,stu[i].fenlei,stu[i] .danwei,&stu[i].time,&stu[i].pay);fprintf(fp2,"%ld\t%s\t%s\t%s\t%s\t%ld\t%d\n",stu[i].num,stu[i].name,stu[i].writer,stu[i].fenlei,st u[i].danwei,stu[i].time,stu[i].pay);}printf("\n\n还原成功!\n\n是否打开浏览还原文件?(Y/N)");switch(getch()){case 'Y':case 'y':fclose(fp1);fclose(fp2);liulan();break;case 'N':case 'n':break;}break;case 'N':case 'n':break;}fclose(fp1);fclose(fp2);break;case 'l':case 'L':liulan02();break;case 'Q':case 'q':break;}}/* 在屏幕上打印查询菜单*/chaxun(){jieshuo();system("cls");printf("******************************欢迎使用图书查询系统******************************");printf("* 查询方式:*");printf("**");printf("* 1、书名2、作者名3、出版时间*");printf("**");printf("* 4、价格5、分类号6、出版单位*");printf("**");printf("* 使用说明:如要选择“书名”,直接输入:1 退出:0 *");printf("************************************************************************* *******");printf("\n请输入你要怎么查询:");chaxun01(); /*打印完毕后,进入chaxun()函数,执行用户需要的查询功能*/}/*此程序段实行查询的各种功能*/chaxun01(){FILE *fp;char ch[8];int a=0,i,j,k,n=0,c,d;long b;if((fp=fopen("cc","r"))==NULL) /*说明:cc.dat 文件装着图书的信息,*/ {printf("不能打开此文件\n");exit(0);} /*并且文件开记录的是图书的书量,后*/ fscanf(fp,"%d",&a); /*从文件中读出图书数*/ /*面依次才是具体信息。
图书信息管理系统图书信息管理系统源程序m_book.c + s_book.c程序源码:m_book.c#include <stdlib.h>struct node{ char name[10];int price;char pub[15];};extern struct node *add(),*del(struct node *);extern struct node *load(),*mhdel(struct node *);/*******************************************************//* 函数功能:显示菜单,选择菜单*//* 输入参数:无*//* 函数输出:选择的菜单序号*//*******************************************************/int menu_select(){int cn=0;printf(" **********************************************\n");printf("\t\t 1. Add a book\n");printf("\t\t 2. Display book library\n");printf("\t\t 3. Query a book\n");printf("\t\t 4. Delete a book\n");printf("\t\t 5. Save to disk\n");printf("\t\t 6. Load from disk \n");printf("\t\t 7. Mohu search\n");printf("\t\t 8. Mohu delete\n");printf("\t\t 0. Exit\n");printf("\t***********************************************\n");printf("\n Input(0~8): ");for(; ;){ scanf("%d",&cn);if (cn<0 ||cn>8) printf("Error ! Input again(1~6):");elsebreak;}return cn;}void main(void){struct node *head=NULL;for(; ;){ clrscr();switch(menu_select()){case 1: head=add(head);break;case 2: print(head);break;case 3: search(head);break;case 4: head= del(head);break;case 5: save(head);break;case 6: head=load();break;case 7: mhsearch(head);break;case 8: head=mhdel(head);break;case 0: exit(0);}}}s_book.c#include <stdio.h>#include <string.h>#include <stdlib.h>struct node{char name[10];float price;char pub[15];struct node *link;};struct node *add(struct node *head ) ; /* 函数功能:创建结点,输入结点数据*/ void print(struct node *head); /* 函数功能:链表输出*/void save(struct node *head); /* 函数功能:链表存储*/void search(struct node *head); /* 函数功能:链表结点查找*/struct node *del(struct node *head); /* 函数功能:结点删除*/struct node *load(void); /* 函数功能:从文件中读入数据,创建链表*/struct node *mhdel(struct node *head); /* 函数功能:结点模糊删除*/void mhsearch(struct node *head); /* 函数功能:链表结点模糊查找*//*******************************************************//* 函数功能:创建结点,输入结点数据*//* 输入参数:链表头指针*//* 函数输出:链表头指针*//*******************************************************/struct node *add(struct node *head ){int i;float jg;struct node *p, *pnew;pnew=(struct node *)malloc(sizeof(struct node));printf("Please input book name,price,publisher\n");printf("name:");scanf("%s",pnew->name);printf("price:");scanf("%f",&jg);pnew->price=jg;printf("publisher:");scanf("%s",pnew->pub);pnew->link=NULL;if (head==NULL)return (pnew);p=head;while (p->link!=NULL) /* 找到尾结点*/p=p->link;p->link=pnew;return (head);}/*******************************************************/ /* 函数功能:链表输出*//* 输入参数:链表头指针*//* 函数输出:无*//*******************************************************/ void print(struct node *head){struct node *p;p=head;printf("name\tprice\tpublisher\n");while (p!=NULL){printf("%s\t%-5.2f\t%-s\n",p->name,p->price,p->pub);p=p->link;}printf("\n\t\tPress any keys!");getch();}/*******************************************************/ /* 函数功能:链表存储*//* 输入参数:链表头指针*//* 函数输出:无*//*******************************************************/ void save(struct node *head){FILE *fp;struct node *p;if ((fp=fopen("library","wb"))==NULL){ printf("Can't open file!\n");exit(1);}p=head;while (p!=NULL){fwrite(p,sizeof(struct node),1,fp);p=p->link;}fclose(fp);}/*******************************************************/ /* 函数功能:从文件中读入数据,创建链表*//* 输入参数:无*//* 函数输出:链表头指针*//*******************************************************/ struct node *load(void){FILE *fp;struct node *p,*pnew,*phead;if ((fp=fopen("library","rb"))==NULL){ printf("Can't open file!\n");exit(1);}pnew=(struct node *)malloc(sizeof(struct node));fread(pnew, sizeof(struct node),1,fp);pnew->link=NULL;phead=pnew;p=pnew;while (!feof(fp)){ pnew=(struct node *)malloc(sizeof(struct node));if (1!=fread(pnew, sizeof(struct node),1,fp)) break;pnew->link=NULL;p->link=pnew;p=p->link;}fclose(fp);return(phead);}/*******************************************************/ /* 函数功能:链表结点查找*//* 输入参数:链表头指针*//* 函数输出:无*//*******************************************************/ void search(struct node *head){char sname[15];struct node *p;printf("Please input book name\n");printf("name:");scanf("%s",sname);p=head;while (p!=NULL){ if (strcmp(p->name,sname)==0){printf(" name price publshier\n");printf("Book Found: %s %5.2f %s\n",p->name,p->price,p->pub); printf("\n\t\tPress any keys!");getch();return;}p=p->link;}printf("Book Not Exist!\n");printf("\n\t\tPress any keys !"); getch();}/*******************************************************/ /* 函数功能:结点删除*//* 输入参数:链表头指针*//* 函数输出:返回链表头指针*//*******************************************************/ struct node *del(struct node *head){char sn[15],s;int flag=0;struct node *p,*q;printf("Please input book name\n");printf("name:");scanf("%s",sn);p=head;while(p!=NULL){while(p!=NULL &&(strcmp(p->name,sn)!=0)){ q=p;p=p->link;}if((strcmp(p->name,sn)==0)&& p!=NULL){flag=1;printf(" name price publshier\n");printf("Book Found: %s %5.2f %s\n",p->name,p->price,p->pub); printf("Do you want to del this book(y/n)");scanf("\n%c",&s);if(s=='y' || s=='Y'){if(p==head)head=p->link;else q->link=p->link;free(p);printf("This book is deleted!\n");printf("\n\t\tPress any keys !");getch();}else{printf("\nThis book not delete!\n");printf("\n\t\tPress any keys!");getch();return head;}}else{ if(flag!=1){ printf("\nNOT found!");printf("\n\t\tPress any key!");getch();}break;}if(p!=NULL){ p=p->link; }}return head;}void mhsearch(struct node *head){char s[15];int flag=0;struct node *p;printf("Please input book name\n");printf("name:");scanf("%s",s);p=head;while(p!=NULL){while(p!=NULL && (strstr(p->name,s)==NULL)){ p=p->link;}if(strstr(p->name,s)!=NULL){printf(" name price publshier\n");printf("Book Found: %s %5.2f %s\n",p->name,p->price,p->pub); flag=1;getch();}else{ if(flag!=1){ printf("\nNOT found!");printf("\n\t\tPress any key!");getch();}}if(p!=NULL){ p=p->link; }}}struct node *mhdel(struct node *head){char sn[15],s;int flag=0;struct node *p,*q;printf("Please input book name\n");printf("name:");scanf("%s",sn);p=head;while(p!=NULL){while(p!=NULL &&(strstr(p->name,sn)==NULL)){ q=p;p=p->link;}if((strcmp(p->name,sn)!=NULL)&& p!=NULL){flag=1;printf(" name price publshier\n");printf("Book Found: %s %5.2f %s\n",p->name,p->price,p->pub); printf("Do you want to del this book(y/n)");scanf("\n%c",&s);if(s=='y' || s=='Y'){if(p==head)head=p->link;else q->link=p->link;free(p);printf("This book is deleted!\n");printf("\n\t\tPress any keys !");getch();}else{printf("\nThis book not delete!\n");printf("\n\t\tPress any keys!");getch();return head;}}else{ if(flag!=1){ printf("\nNOT found!");printf("\n\t\tPress any key!");getch();}break;}p=head;}return head;。
c图书信息管理系统附源码文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]学号:计算机实习报告系别:管理系专业:信息管理与信息系统专业班级:1043班学生姓名:李优指导教师:徐日日期:2012-09-03~2012-09-141需求分析1.1选题任务图书借阅管理系统(1)编程工具C++(2)要求选题学生应具有端正的学习态度、正常的交流能力,应有积极主动、克服困难的学习意识(3)本题概述以学院图书馆为例,图书借与管理是一项经常性工作,为使图书借阅管理工作准确高效,提供图书借阅记录的添加、修改、删除、查询、浏览、汇总等,用图书借阅关系软件,能有效提高工作效率,具有较强的实际意义。
(4)功能描述①能度日外部提供的包含图书借阅信息的文本文件(TXT文件);②能在程序中录入图书借阅信息(可参考我院图书馆网上图书借阅信息的各个项目),并将信息写入文本文件(TXT文件);③能对所有图书借阅信息,按条件(按图书名、图书编号、借阅日期、借阅人、超期与否、超期天数等)查询浏览,能汇总统计计算出符合某条件的图书借阅记录的数量并浏览这些借阅信息,能将查询、浏览、汇总的结果输出结果文本文件(TXT文件)(5)辅助说明基础要求:①+②扩展要求:①+②+③1.2输入数据和输出数据形式:程序中包含的图书信息包括:char bnum[20]; xt);屏幕的打印;TXT文档的导出(书籍信息.txt)。
1.3测试数据及测试目的字母测试,错误数据测试,重复数据测试目的:产看本程序的纠错能力和是否人性化。
2程序设计关键数据类型定义4.书籍信息的修改:输入想要修改的书籍编号,按照查找的方法,找到i,然后进行覆盖。
完成修改。
5.书籍的屏幕打印输出:分两部分输出,首先打印一个头信息,相当于列表的头;然后利用循环语句带参输出(i为参数,循环)。
6.保存信息到txt文件:同分为两部分,类似屏幕打印的方法,先存入表头,然后带参循环存入书籍信息。
C语言编写的图书借阅管理系统源代码C语言编写的图书借阅管理系统源代码#include <dos.h>#include <bios.h>#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#define LEFT 0x4b00 /*左*/#define RIGHT 0x4d00 /*右*/#define DOWN 0x5000 /*下*/#define UP 0x4800 /*上*/#define SPACE 0x3920 /*空格*/#define ESC 0x011b /* ESC键*/#define ENTER 0x1c0d /*回车键*/#define Backspace 0xe08 /*擦除键*/#define ALT_B 12288 /*组合键ALT_B */#define ALT_M 12800/*组合键ALT_M */#define ALT_H 8960/*组合键ALT_H */int key;/*按键变量*/int textx,texty;/*光标坐标,x行,y列*/struct menustruct/*菜单用的结构体*/{char name[10];/*主菜单名*/char str[10][20];/*选项*/int n;/*选项数*/}ml[3];/*使用了3个,可根据需要增删*/typedef struct BookList/*书的结构体*/{char num[20];/*图书编号*/char name[20];/*书名*/int price;/*书的价格*/char person[20];/*借阅人*/int yes;/*判断书是否存在或者已经借出,1存在,0借出*/ struct BookList *next;}Book;typedef struct MemberList/*会员的结构体*/{char name[20];/*会员的姓名*/char sex[2];/*会员的性别*/int age;/*会员的年龄*/struct MemberList *next;}Member;char save[4096];/*保存文本区域空间*//*char sav1[4096];*/char c[4096];/*清屏专用空间*/int i,j;/*常见变量*/void Menu();/*初始化界面*/void Selectitem();/*定义菜单*/void DrawSelectitem();/*显示主菜单*/void BlackText(int x,int y,char *z);/*选中菜单*/ void RedText(int x,int y,char *z);/*正常菜单*/ void Run();/*具体操作过程*/void DrawMl(int n);/*显示下拉菜单*/void MoveMl(int n,int x);/*菜单选项的控制*/ void Enter(int m,int n);/*菜单选项的具体功能*/ void BookAdd();/*添加图书*/void BookConsult();/*图书查询*/void BookDel();/*删除图书资料*/void BookBorrow();/*借书*/void BookReturn(); /*还书*/void MemberAdd(); /*增加会员*/void MemberConsult();/*查询会员*/void MemberDel(); /*删除会员*/void MemberBook(); /*查询会员借书信息*/ void Help(); /*帮助*/void Ver(); /*版本信息*/void ClrScr();/*自定义清屏函数*/void DrawFrame(int left,int up,int right,int down,int textcolor,int backgroundcolor);/*画边框*//***主函数****/void main(void){Menu();/*初始化界面*/Run();/*具体操作过程*/}/*初始化界面*/void Menu(){system("cls"); /*调用系统的清屏命令*/textbackground(BLUE);/*将背景设置为蓝色*/window(1,1,25,80);clrscr();textx=3;/*光标初始化位置*/texty=2;gotoxy(1,2);printf("%c",218);/*画左上角*/for(i=0;i<78;i++)printf("%c",196); /*画水平直线*/printf("%c",191);/*画右上角*/for(i=3;i<=23;i++){gotoxy(1,i);printf("%c",179); /*画垂直线*/gotoxy(80,i);printf("%c",179);}printf("%c",192); /*画左下角*/for(i=0;i<78;i++)printf("%c",196);printf("%c",217); /*画右下角*/gotoxy(1,1);textcolor(7); /*设置灰色*/for(i=0;i<80;i++)cprintf("%c",219);/*用符号实现画主菜单的灰色背景区*/ Selectitem(); /*调用选项函数*/DrawSelectitem(); /*画选项*/gettext(2,3,78,23,c); /*保存当前文本区域*/}/*定义菜单*/void Selectitem(){strcpy(ml[0].name,"Book");/*下面的具体选项补空格是为了各菜单黑色背景相同*/strcpy(ml[0].str[0],"Add ");/*添加图书*/strcpy(ml[0].str[1],"Consult ");/*查询图书*/strcpy(ml[0].str[2],"Del ");/*删除图书资料*/strcpy(ml[0].str[3],"Borrow ");/*借书*/strcpy(ml[0].str[4],"Return ");/*还书*/strcpy(ml[0].str[5],"Exit ");/*退出系统*/ml[0].n=6; /*保存菜单的项数*/strcpy(ml[1].name,"Member");strcpy(ml[1].str[0],"Add ");/*添加新会员*/strcpy(ml[1].str[1],"Consult ");/*查询会员资料*/strcpy(ml[1].str[2],"Del ");/*删除会员资料*/strcpy(ml[1].str[3],"Member&book ");ml[1].n=4;strcpy(ml[2].name,"Help");/*系统帮助*/strcpy(ml[2].str[0],"This System ");strcpy(ml[2].str[1],"Ver ");ml[2].n=2;}/*显示主单名*/void DrawSelectitem(){for(i=0;i<3;i++)RedText(i,1,ml[i].name); /*显示主菜单名,且首字母为红色*/ }/*正常显示菜单*/void RedText(int x,int y,char *z){textbackground(7); /*设置背景颜色为浅灰色*/gotoxy(3+x*20,y);for(j=0;z[j];j++){if(j==0)textcolor(RED);/*第一个字母显示红色*/elsetextcolor(BLACK); /*设置黑色*/cprintf("%c",z[j]); /*输出菜单名*/}}/*显示选中菜单*/void BlackText(int x,int y,char *z){textbackground(0); /*设置背景颜色为黑色*/textcolor(15); /*设置文本颜色为白色*/gotoxy(3+20*x,y);/*定位坐标*/cputs(z); /*输出菜单名字符串*/}/*按键操作过程*/void Run(){while(1){gotoxy(texty,textx);key=bioskey(0);/*接收按键*/switch(key){case ALT_B:case ESC: DrawMl(0);break; /*显示下拉菜单1*/case ALT_M: DrawMl(1);break;/*显示下拉菜单2*/case ALT_H: DrawMl(2);/*显示下拉菜单3*/case UP: /*上光标键的操作控制*/{if(textx==3)textx=23;textx--;gotoxy(texty,textx);}break;case DOWN: /*下光标键的操作控制*/ {if(textx==23)textx=3;textx++;gotoxy(texty,textx);}break;case LEFT: /*左光标键的操作控制*/ {if(texty==2)texty=79;texty--;gotoxy(texty,textx);}break;case Backspace: /*擦除键的设置*/{if(texty==2&&textx==3)continue;else{if(texty!=2)texty--; /*擦除键的细节问题,先擦去东西,然后光标还要往后退一格*/elseif(texty==2){texty=78;textx--;}gotoxy(texty,textx);printf(" ");gotoxy(texty,textx);}}break;/*end case 0xe08*/case RIGHT: /*右光标键的操作控制*/{if(texty==79)texty=2;texty++;gotoxy(texty,textx);}break;case SPACE: /*空格键的操作*/{if(texty==79)continue;else{gotoxy(texty,textx); /*空格的细节操作*/printf(" ");texty++;gotoxy(texty,textx);}}break;case ENTER: /*回车的控制操作*/{if(textx==23)continue;textx++;texty=2;gotoxy(texty,textx);}break;default : /*非控制键的结果*/{if(texty==79&&textx==23)/*到达最后就不再输出*/continue;elseif(texty==79&&textx!=23) /*到行的最后*/{textx++;texty=2;}gotoxy(texty,textx);/*输出结果*/printf("%c",key);if(texty==79) /*如果texty==79就不执行*/continue;else /*如果没到行尾就继续执行,使光标向前移动一位*/ texty++;}}}/*大循环的大括号*/}/*画边框函数*/void DrawFrame(int l,int u,int r,int d,int tcolor,int bcolor){textbackground(bcolor); /*背景颜色*/textcolor(bcolor); /*文本颜色*/for(i=l;i<=r;i++) /*输出背景区域*/{for(j=u;j<=d;j++){gotoxy(i,j);printf("%c",219); /*输出背景字符*/}}textcolor(tcolor);/*边框颜色*/for(i=u+1;i<d;i++) /*在背景区域内输出边框线*/ {gotoxy(l,i);cprintf("%c",179); /*垂直线*/gotoxy(r,i);cprintf("%c",179);}for(i=l+1;i<r;i++){gotoxy(i,u);cprintf("%c",196); /*水平线*/gotoxy(i,d);cprintf("%c",196);}gotoxy(l,u);cprintf("%c",218);/*左上角*/gotoxy(r,u);cprintf("%c",191);/*右上角*/gotoxy(l,d);cprintf("%c",192);/*左下角*/gotoxy(r,d);cprintf("%c",217); /*右下角*//* gettext(l+1,u+1,r-1,d-1,save1);*//*保存边框内区域*/}/*显示具体下拉选择项目*/void DrawMl(int n){gettext(1,1,80,25,save);/*保存被掩盖的地方*/BlackText(n,1,ml[n].name);/*反选显示主菜单*/DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜单的边框*/for(i=3;i<3+ml[n].n;i++)/*输出所选菜单各选项*/{if(i==3)BlackText(n,i,ml[n].str[i-3]);/*默认选中第一项*/elseRedText(n,i,ml[n].str[i-3]);/*其余各项首字符红色显示*/}gotoxy(79,1);MoveMl(n,3);/*菜单选项的控制*/}/*菜单选项的控制,n决定水平项,x决定下拉的选项*/void MoveMl(int n,int x){int flag=1;while(flag){gotoxy(79,1);key=bioskey(0);/*接收按键*/gotoxy(79,1);switch(key){case ESC:/*退出循环*/puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/flag=0;break;case LEFT:/*移到左边的选项*/puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/if(n==0)/*往左移动越界的话移到最后一个选项*/DrawMl(2);elseDrawMl(n-1);flag=0;break;case RIGHT:/*移动右边的选项*/puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/if(n==2)/*往右移动越界的话移到第一个选项*/DrawMl(0);elseDrawMl(n+1);flag=0;break;case UP:/*具体选项往上移动*/RedText(n,x,ml[n].str[x-3]);/*输出红色字体*/if(x==3)/*移到最上面再按上键,就移到最下面*/x=3+ml[n].n-1;elsex--;/*移动到新的要显示的内容*/BlackText(n,x,ml[n].str[x-3]);/*输出黑色字体*/flag=1;break;case DOWN:/*具体选项往下移动*/RedText(n,x,ml[n].str[x-3]);if(x==(3+ml[n].n-1))/*移动到最底下再按下键就移到最上面*/x=3;elsex++;/*移动到新的要显示的内容*/BlackText(n,x,ml[n].str[x-3]);flag=1;break;case ENTER:puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/Enter(n,x-3);/*菜单选项的具体功能*/flag=0;break;}gotoxy(79,1);}}/*菜单选项的具体功能*/void Enter(int m,int n){switch(m){case 0:switch(n) /*选择了图书菜单选项*/{case 0:BookAdd();break;/*添加图书*/case 1:BookConsult();break;/*图书查询*/case 2:BookDel();break;/*删除一本图书资料*/case 3:BookBorrow();break;/*借书*/case 4:BookReturn();break;/*还书*/case 5:exit(0);break;} break;/*退出系统*/case 1: switch(n) /*选择了会员菜单选项*/{case 0: MemberAdd();break;/*添加会员*/case 1: MemberConsult();break;/*会员查询*/case 2:MemberDel();break;/*删除一个会员资料*/case 3:MemberBook();/*查询某个会员所借图书情况*/}break;case 2:switch(n) /*选择了帮助菜单选项*/ {case 0:Help();break;case 1:Ver();}}/*结束外switch*/}。
c图书信息管理系统附源码
学号: 4303
计算机实习报告
系别:管理系
专业:信息管理与信息系统专业
班级:1043班
学生姓名:李优
指导教师:徐日
日期: -09-03~ -09-14
1需求分析
1.1选题任务
图书借阅管理系统
(1)编程工具
C++
(2)要求
选题学生应具有端正的学习态度、正常的交流能力,应有积极主动、克服困难的学习意识
(3)本题概述
以学院图书馆为例,图书借与管理是一项经常性工作,为使图书借阅管理工作准确高效,提供图书借阅记录的添加、修改、删
除、查询、浏览、汇总等,用图书借阅关系软件,能有效提高工作效率,具有较强的实际意义。
(4)功能描述
①能度日外部提供的包含图书借阅信息的文本文件(TXT文件);
②能在程序中录入图书借阅信息(可参考我院图书馆网上图书借阅
信息的各个项目),并将信息写入文本文件(TXT文件);
③能对所有图书借阅信息,按条件(按图书名、图书编号、借阅日
期、借阅人、超期与否、超期天数等)查询浏览,能汇总统计计算出符合某条件的图书借阅记录的数量并浏览这些借阅信息,能将查询、浏览、汇总的结果输出结果文本文件(TXT文件)
(5)辅助说明
基础要求:①+②
扩展要求:①+②+③
1.2输入数据和输出数据形式:
程序中包含的图书信息包括:
char bnum[20]; //书号
char bname[20]; //书名
char bauthor[10]; //作者
char rname[10]; //借阅人
char bdays[10]; //借出日期
char bchao[10]; //超期天数
为了方便,我全部设置成了char型。
而程序中包含两种输入方式和两种输出方式,对应题目要求,分别是:单个图书信息的增删查改;TXT文档的导入(图书数据库.txt);屏幕的打印;TXT文档的导出(书籍信息.txt)。
1.3测试数据及测试目的
字母测试,错误数据测试,重复数据测试
目的:产看本程序的纠错能力和是否人性化。
2程序设计
2.1 关键数据类型定义
//********书籍结构体,用于存放书籍基本信息******** class Book
{
private:
char bnum[20]; //书号
char bname[20]; //书名
char bauthor[10]; //作者
char rname[10]; //借阅人
char bdays[10]; //借出日期
char bchao[10]; //超期天数
public:
Book() //构造函数初始化信息
void set_bnum(char *no) //设置书号
char *get_bnum() //获得书号
void set_bname(char *n) //设置书名
char *get_bname() //获得书名
void set_bauthor(char *a) //设置作者
char *get_bauthor() //获得作者姓名
void set_bdays(char *d) //设置借出日期
char *get_bdays() //获得借出日期
void set_bchao(char *c) //设置超出天数。