《最新SQLServer课程设计——图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《最新SQLServer课程设计——图书馆管理系统.docx(119页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateSQLServer课程设计图书馆管理系统SQLServer课程设计图书馆管理系统一、 题目描述本数据库的名字叫做图书馆管理系统数据库,主要是用来存储和修改图书馆中包括图书、图书类型、借阅者重要资料。二、 需求分析随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多
2、浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。三、 数据库中各表结构的清单3.1数据库中各表主要有: 3.1.1图书表:数据名称图书编号图书类别编号图书名称作者价格数量3.1.2图书类别表:数据名称图书类别编号类别描述图书数量3
3、.1.3借阅表:数据名称借书证号身份证号姓名性别3.1.4借阅卡表:数据名称借书证号卡号借阅卡等级借阅数初始登记时间3.2数据间的联系:1.图书表-图书类型表 2.借阅者表借阅者身份表 3.图书表-借阅者表3.3数据操作:添加、删减元组、修改相应属性的数据。3. 4字段定义 表名 主键 字段名 字段类型 字段大小 字段格式 查阅类型 1. 出版社 出版社ID 出版社ID 文本 50 文本框 名称 文本 50 文本框 2. 借阅者 借阅号 借阅号 数字 长整型 文本框 姓名 文本 8 文本框 通信地址 文本 50 文本框 电话 数字 长整型 文本框 3. 图书 图书编号 图书编号 文本 50 文
4、本框 分类号 文本 50 组合框 书名 文本 50 文本框 出版社ID 文本 50 文本框 作者 文本 8 文本框 单价 货币 货币 数量 数字 长整型 文本框 4. 图书分类 分类号 分类号 文本 50 文本框 分类名称 文本 50 文本框 5. 借书记录 借阅号 借阅号 数字 长整型 组合框 图书编号 图书编号 文本 50 组合框 借阅日期 日期/时间 短日期 应还日期 日期/时间 短日期 已还 文本 50 文本框 6. 还书记录 借阅号 借阅号 数字 长整型 组合框 图书编号 图书编号 文本 50 组合框 还书日期 日期/时间 短日期 四源程序代码:#include #include #
5、include #include #include #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0struct student /*定义学生类型,用于存放借出的书籍*/ int carnum; char lendbook10; student1000;struct employ /*定义职工类型*/ int employnum; char employname15; int employage; char employsex2; char employleve10; l
6、ong int employtage; employ50;struct book /*定义书的类型*/ int booknum; char bookname10; char bookcreat10; int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/ book1000;struct car /*借书卡的数据类型*/ int carnum; char studentname10; int studentclass; car100;huanbook() /*还书函数*/ FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭
7、破坏*/ int i,n; int carnum; char lendbook10; printf(请你输入你的卡号n); scanf(%d,&carnum); fp=fopen(car.txt,r); /*读取卡号记录*/ for(i=0;fread(&cari,sizeof(struct car),1,fp)!=0;i+) /*for循环判断卡号是否存在*/ if(cari.carnum=carnum) /*卡号存在,进入下一循环*/ n=i; fclose(fp); printf(请输入你要还的书的名字n); scanf(%s,lendbook); fp=fopen(record.txt
8、,r); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) /*判断是否借阅了输入的书*/ if(strcmp(studenti.lendbook,lendbook)=0) /*借阅了该书,进入下一循环,否则出错显示*/ fclose(fp); fp=fopen(record.txt,r); fp2=fopen(bookl.txt,w); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) if(strcmp(studenti.lendbook,lendbo
9、ok)=0) continue; /*删除还掉的书的借书记录*/ fwrite(&studenti,sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/ fclose(fp); fclose(fp2); fp=fopen(record.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&studenti,sizeof(struct student),1,fp2)!=0;i+) fwrite(&studenti,sizeof(struct student),1,fp); /*将借书记录信息写回*/ fclose(f
10、p); fclose(fp2); fopen(bookl.txt,w); /*清临时文件的记录*/ fclose(fp2); fp=fopen(book.txt,r); fp2=fopen(bookl.txt,w); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/ if(i=n) booki.turefalse=1; fwrite(&booki,sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/ continue; fwrit
11、e(&booki,sizeof(struct book),1,fp2); fclose(fp); fclose(fp2); fp=fopen(book.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&booki,sizeof(struct book),1,fp2)!=0;i+) fwrite(&booki,sizeof(struct book),1,fp); /*将临时文件写回*/ fclose(fp); fclose(fp2); fopen(bookl.txt,w); /*清临时文件*/ fclose(fp2); printf(还书完毕,按任意键
12、返回n); getch(); return 1; printf(你没有借这样的书,任意键返回n); /*出错提示*/ fclose(fp); getch(); return 0; printf(系统没这样的卡,和管理员联系,按任意键返回n); /*出错提示*/ fclose(fp); getch(); findbook() FILE *fp; char bookname10; int ture,i; fp=fopen(book.txt,r); printf(请输入你要查找的书名n); scanf(%s,bookname); for(i=0;fread(&booki,sizeof(struct
13、book),1,fp)!=0;i+) if(strcmp(bookname,booki.bookname)=0) if(booki.turefalse=1) printf(这本书的详细资料是:%d %s %s 此书现在无人借阅n按任意键返回n,booki.booknum,booki.bookname,booki.bookcreat); else printf(这本书已经有人借出n);fclose(fp);return 0; fclose(fp); return FALSE; printf(没有你要查询的书籍n); fclose(fp); return FALSE; findbook1() FI
14、LE *fp; char bookcreat10; int ture,i; fp=fopen(book.txt,r); printf(请输入你要查找的作者名n); scanf(%s,bookcreat); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(bookcreat,booki.bookcreat)=0) if(booki.turefalse=1) printf(这本书的详细资料是:%d %s %s 此书现在无人借阅n按任意键返回n,booki.booknum,booki.bookname,booki.boo
15、kcreat); else printf(这本书已经有人借出n);fclose(fp);return 0; fclose(fp); return FALSE; printf(没有你要查询的书籍n); fclose(fp); return FALSE; lendcount() FILE *fp; int i,n=0; fp=fopen(record.txt,r); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) printf(卡号:%d 借出的书籍:%s n,studenti.carnum,studenti.lendbook
16、); n=n+1; fclose(fp); printf(目前共有%d本书借出n,n); printf(按任意键n); getch();return n; chabook() char ch5; do printf(-欢迎进入图书查询系统!-n); printf( 1:n); printf( 2:n); printf( 0:n); printf(请输入0-2,其他输入非法!n); scanf(%s,&ch5); switch(ch5) case 1:findbook();getch();break; case 2:findbook1();getch();break; case 0:break;
17、 default:printf(无此操作n);getch();break; while(ch5!=0);return FALSE; lendbook() FILE *fp,*fp2; int i,n; int carnum; printf(请你输入你的卡号n); scanf(%d,&carnum); fp=fopen(car.txt,r); for(i=0;fread(&cari,sizeof(struct car),1,fp)!=0;i+) if(cari.carnum=carnum) n=i; fclose(fp); printf(请输入你要借阅的书的名字n); scanf(%s,stud
18、entn.lendbook); fp=fopen(book.txt,r); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(booki.bookname,studentn.lendbook)=0) if(booki.turefalse=0) printf(对不起,此书有人借出,请借其他书n);fclose(fp);getch();return; else fclose(fp); fp=fopen(record.txt,a+); studentn.carnum=carnum; fwrite(&studentn,siz
19、eof(struct student),1,fp); fclose(fp); fp=fopen(book.txt,r); fp2=fopen(bookl.txt,w); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(booki.bookname,studentn.lendbook)=0) booki.turefalse=0; fwrite(&booki,sizeof(struct book),1,fp2); continue; fwrite(&booki,sizeof(struct book),1,fp2); f
20、close(fp); fclose(fp2); fp=fopen(book.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&booki,sizeof(struct book),1,fp2)!=0;i+) fwrite(&booki,sizeof(struct book),1,fp); fclose(fp); fclose(fp2); fopen(bookl.txt,w); fclose(fp2); printf(借书完毕,按任意键返回n); getch(); return; printf(不存在这样的书,任意键返回n); fclose(fp); g
21、etch(); return; printf(你的卡号不存在,请申请新卡,按任意键返回n); fclose(fp); getch(); carcount() FILE *fp; int i,n=0; fp=fopen(car.txt,r); for(i=0;fread(&cari,sizeof(struct car),1,fp)!=0;i+) printf(第%d张卡n,i+1,cari.carnum,cari.studentname,cari.studentclass); n=n+1; fclose(fp); printf(目前共有%d本书n,n); printf(按任意键n); getch
22、(); delcar() FILE *fp,*fp2; int i; int carnum; char choice; fp=fopen(car.txt,r); fp2=fopen(bookl.txt,w); printf(请输入你要删除的卡号n); printf(如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动n); scanf(%d,&carnum); for(i=0;fread(&cari,sizeof(struct car),1,fp)!=0;i+) if(cari.carnum!=carnum) fwrite(&cari,sizeof(struct car),1
23、,fp2); fclose(fp); fclose(fp2); printf(是否真的要删除该卡?删除后该书籍的所有信息将无法恢复Y/Nn); scanf(%s,&choice); if(choice=y|choice=Y) fp=fopen(car.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&cari,sizeof(struct car),1,fp2)!=0;i+) fwrite(&cari,sizeof(struct car),1,fp); fclose(fp); fclose(fp2); fp2=fopen(bookl.txt,w); f
24、close(fp2); printf(按任意键返回n); getch(); return; else printf(按任意键返回n); getch(); return; addcar() FILE *fp; int i=0; fp=fopen(car.txt,a+); printf(请你输入卡号n); scanf(%d,&cari.carnum); printf(请你输入学生姓名n); scanf(%s,cari.studentname); printf(请你输入班级n); scanf(%d,&cari.studentclass); fwrite(&cari,sizeof(struct car
25、),1,fp); fclose(fp); printf(输入完毕,任意键返回n); getch(); changemploy() FILE *fp,*fp2; char employname10,choice;int i; fp=fopen(employ.txt,r); fp2=fopen(bookl.txt,w); printf(请你输入要修改的职工的名字n); scanf(%s,employname); for(i=0;fread(&employi,sizeof(struct employ),1,fp)!=0;i+) if(strcmp(employi.employname,employn
26、ame)=0) printf(你所要修改的职工的资料如下,请选择你要修改的内容n); printf(n,employi.employnum,employi.employname,employi.employage,employi.employsex,employi.employleve,employi.employtage); printf(2:修改职工名n); printf(3:修改职工年龄n); printf(4:修改职工工资n); printf(5:修改职工学历n); printf(请输入1-5:); scanf(%s,&choice); switch(choice) case 1: p
27、rintf(请输入新的职工号n); scanf(%d,&employi.employnum); fwrite(&employi,sizeof(struct employ),1,fp2); break; case 2: printf(请输入新的职工姓名n); scanf(%s,employi.employname); fwrite(&employi,sizeof(struct employ),1,fp2); break; case 3: printf(请输入新的年龄n); scanf(%d,&employi.employage); fwrite(&employi,sizeof(struct em
28、ploy),1,fp2); break; case 4: printf(请输入新的职工工资n); scanf(%d,&employi.employtage); fwrite(&employi,sizeof(struct employ),1,fp2); break; case 5: printf(请输入新的职工学历n); scanf(%s,employi.employleve); fwrite(&employi,sizeof(struct employ),1,fp2); default:printf(没有这样的操作);break; continue; fwrite(&employi,sizeof
29、(struct employ),1,fp2); fclose(fp); fclose(fp2); fp=fopen(employ.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&employi,sizeof(struct employ),1,fp2)!=0;i+) fwrite(&employi,sizeof(struct employ),1,fp); fclose(fp); fclose(fp2); fp2=fopen(bookl.txt,w); fclose(fp2); printf(按任意键返回n); getchar(); return; delemploy() FILE *fp,*fp2; int i; char employname10,choice; fp=fopen(employ.txt,r); fp2=fopen(bookl.txt,w); printf(请输入你要删除的职工名n); printf(如果你输入的职工存在,系统自动删除该信息!如果不存在,系统不做任何改动n); scanf(%s,employname); for(i=0;fread(&employi,sizeof(struct employ),1,fp)!=0;i+) if(strcmp(emplo
限制150内