程序设计报告图书管理系统_第1页
程序设计报告图书管理系统_第2页
程序设计报告图书管理系统_第3页
程序设计报告图书管理系统_第4页
程序设计报告图书管理系统_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上题目:图书管理系统一、课题内容基于角色管理的简易图书管理系统实现功能:1.角色管理。设有图书管理员和普通用户两类角色,他们设有不同的权限,各类用户进入系统时需先登录。2.图书管理员角色,图书管理员可对图书信息的录入、删除、及修改、统计; 3.普通用户角色,普通用户可借阅图书、归还图书。提高要求:使用文本文件存储各类信息,界面友好,有出错处理。实现语言:C语言或C+语言二、课题要求1.熟练运用C或C+课程所学习的理论和概念。 2.熟练运用循环结构、分支结构、顺序结构。 3.熟练掌握函数的定义和调用方法。 4.熟悉对于文件的打开、关闭和文件的读写。 5.熟练掌握对于C中结

2、构体或C+中类的操作。 6. 按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计。三、需求分析 1.该程序可实现对于普通用户(即学生)和管理员两种角色对于图书管理系统的操作。 2.普通用户(即学生)登陆后可对图书进行查询、借阅、归还。 3.管理员登陆后可对图书进行增加、删除、修改、统计,以及对图书馆中职员和学生的信息统计,方便对学生补办借书卡以及人员统计的管理。 4.该程序中的查询图书功能有按书名和作者两类查找方式,以满足不同用户的需要。四、概要设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。1.模块功能说明:(1).图书

3、查询:可以通过对书名或作者两类方式的查找,查找到所要查找的书籍。(2).图书借阅:进入该模块时需要普通用户登录,即学生输入自己的卡号,输入正确可进入借阅模块,输入错误则进行返回。(3).管理员系统:进入管理员模式,进入该模块时需要管理员登陆,即输入管理员个人密码,进入后可以对图书进行增加、删除、修改、统计,以及对图书馆内职工和学生的信息管理。(4).图书归还:进入该模块时需要普通用户登陆,即学生输入自己的卡号,输入正确可进入还书模块,输入错误则进行返回。(5).退出系统:选择该选项,自动退出图书管理系统。2.描述算法的流程图:(1)主流程:图书管理系统,进入后有查询图书、借阅图书、归还图书等功

4、能,还可以进入管理员模式,或者退出系统。其中,借阅图书和归还图书是针对普通用户(学生)设立的,进入时需要登录,即输入学生的借书卡卡号。在管理员模式下,只有指定的管理员允许进入,进入前需先登录,即输入管理员密码,进入后可对图书进行增、删、查、改,同时可以实现对管理员和学生的信息管理。查询图书退出系统按书名查找按作者查找增加图书删除图书修改图书书籍统计学生信息管理管理员信息管理返回主菜单图书管理系统借阅图书(用户进入)归还图书(用户进入)管理员系统(管理员进入) 图1.主流程(2)各主要模块流程:普通用户模式下的还书功能:步骤:a.输入学生卡号; b.系统通过文件读取卡号记录; c.判断卡号是否存

5、在,卡号存在则跳转d,否则跳转到f; d.输入归还书籍; e.选择是否继续归还,是则跳转d,否则跳转f; f.结束,进行返回。 NNY开始输入卡号读取卡号记录-卡号存在输入归还书籍是否继续归还Y结束 图2. 普通用户模式下的还书功能普通用户模式下的借书功能: 步骤:a.输入卡号; b.系统通过文件读取卡号记录; c.判断卡号是否存在,卡号存在则跳转d,否则跳转h d.输入借阅书籍; e.判断该书是否借出,借出则跳转f,否则跳转g; f.提示借书失败; g.提示借书成功; h.结束,进行返回。Y开始输入卡号读取卡号记录-卡号存在输入借阅书籍该书是否借出YN借书失败借书成功结束N 图3. 普通用户

6、模式下的借书功能管理员模式下的录入书籍功能:步骤:a.输入录入书籍的相关信息; b.标记该书是否借出; c.选择是否录入下一本,若选择是,跳转到a,若选择否,跳转到d; d.结束,进行返回。YN输入所录入书的相关信息标记是否借出录入下一本开始结束 图4. 管理员模式下的录入书籍功能 管理员模式下的删除书籍功能:步骤:a.输入要删除的书籍; b.选择是否真的要删除该书籍,若选择是,则跳转c,否则跳转d; c.删除书籍; d.结束,进行返回。开始输入要删除的书籍是否真的要删删除结束YN 图5. 管理员模式下的删除书籍功能 管理员模式下的修改书籍功能: 步骤:a.输入所要修改的书名; b.系统显示该

7、书信息; c.输入所要修改的内容; d.选择修改序号、修改书名、修改作者,进行相应修改; e.结束,进行返回。开始输入所要修改的书名自动显示该书信息输入所要修改的内容修改序号修改书名修改作者结束 图6. 管理员模式下的修改书籍功能管理员模式下的书籍统计功能:步骤:a.系统自动对书籍编号和数量赋初值; b.判断是否读入到文件尾部,若读到尾部则跳转到f,否则跳转到c; c.输出图书信息; d.书籍数量和编号系统自动进行加一操作; e. 判断是否读入到文件尾部,若读到尾部则跳转到f,若否则跳转到c; f.输出书籍的本数; g.结束,进行返回。N开始i=0n=0fread(&booki,siz

8、eof(struct book),1,fp)!=0输出图书信息n=n+1i+输出共有n本书结束: Y 图7. 管理员模式下的书籍统计功能管理员模式下的借书卡管理功能:步骤:a.选择申请新卡、删除卡号、借书统计、卡号统计,进行相应操作; b.结束,进行返回。开始申请新卡删除卡号借书统计卡号统计结束 图8. 管理员模式下的借书卡管理功能五、源程序代码#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h>#define STACK_INIT_SIZE 10 st

9、ruct student /*定义学生类型,用于存放借出的书籍*/ int carnum; /*学生借书卡卡号*/char lendbook10; /*借书书名*/student1000; struct employ /*定义管理员类型*/ int employnum; /*管理员序号*/char employname15; /*管理员姓名*/int employage; /*管理员年龄*/char employsex2; /*管理员性别*/char employleve10; /*管理员学历*/long int employtage; /*管理员工资*/employ50; struct bo

10、ok /*定义书的类型*/ int booknum; /*书的序号*/char bookname10; /*书名*/char bookcreat10; /*书的作者*/int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/ book1000; struct car /*借书卡的数据类型*/ int carnum; /*卡号*/char studentname10; /*学生姓名*/int studentclass; /*学生班级*/car100; huanbook() /*还书函数*/ FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文

11、件用,防止数据遭破坏*/ 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

12、); printf("请输入你要还的书的名字n"); scanf("%s",lendbook); fp=fopen("record.txt","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&

13、quot;,"r"); fp2=fopen("bookl.txt","w"); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) if(strcmp(studenti.lendbook,lendbook)=0) continue; /*删除还掉的书的借书记录*/ fwrite(&studenti,sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/ fclose(fp); fclose(fp2); fp=fop

14、en("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(fp); fclose(fp2); fopen("bookl.txt","w"); /*清临时文件的记录*

15、/ 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); /*将还的书的原来状态设为无人借阅的*/ continu

16、e; fwrite(&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); fclo

17、se(fp2); fopen("bookl.txt","w"); /*清临时文件*/ fclose(fp2); printf("还书完毕,按任意键返回n"); getch(); system("cls");return 1; printf("你没有借该书!任意键返回n"); /*出错提示*/ fclose(fp); getch();system("cls");return 0; printf("无此卡号!按任意键返回n"); /*出错提示*/ fclose

18、(fp); getch();system("cls"); findbook() /*查询书籍函数2*/ FILE *fp; char bookname10; int ture,i; fp=fopen("book.txt","r"); printf("请输入要查找的书名n"); scanf("%s",bookname); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(bookname,booki.bookna

19、me)=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() /*查询书籍函数1*/ FILE *fp;

20、 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 此书现在

21、无人借阅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; lendcount() /*学生借书信息函数*/ FILE *fp; int i,n=0; fp=fopen("record.txt","r");

22、 for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) printf("卡号:%d 借出的书籍:%s n",studenti.carnum,studenti.lendbook); n=n+1; fclose(fp); printf("目前共有%d本书借出n",n); printf("按任意键n"); getch();return n; chabook() char ch5; do printf(">>>>>>>

23、>>>>>>>欢迎进入图书管理系统!<<<<<<<<<<<<<<n"); printf(" |1:<按书名查找>n"); printf(" |2:<按作者查找>n"); printf(" |0:<返回>n"); printf("请输入0-2n"); scanf("%s",&ch5); switch(ch5) case

24、'1':system("cls");findbook();getch();break; case '2':system("cls");findbook1();getch();break; case '0':system("cls");break; default:printf("无此操作n");getch();break; while(ch5!='0');return false; lendbook() /*借书函数*/ FILE *fp,*fp2;

25、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",studentn.lendboo

26、k); 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+")

27、; studentn.carnum=carnum; fwrite(&studentn,sizeof(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.turefa

28、lse=0; fwrite(&booki,sizeof(struct book),1,fp2); continue; fwrite(&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(&b

29、ooki,sizeof(struct book),1,fp); fclose(fp); fclose(fp2); fopen("bookl.txt","w"); fclose(fp2); printf("借书完毕,按任意键返回n"); getch();system("cls");return; printf("无此书籍! 任意键返回n"); fclose(fp); getch();system("cls");return; printf("你的卡号不存在! 按任意键

30、返回n"); fclose(fp); getch();system("cls"); 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张卡<卡号:%d 姓名:%s 班级:%d>n",i+1,cari.carnum,cari.studentname,cari.studentclass); n=n+1;

31、 fclose(fp); printf("目前共有%d本书n",n); printf("按任意键n"); getch(); delcar() /*删除借书卡函数*/ FILE *fp,*fp2; int i; int carnum; char choice; fp=fopen("car.txt","r"); fp2=fopen("bookl.txt","w"); printf("请输入你要删除的卡号n"); scanf("%d",&am

32、p;carnum); for(i=0;fread(&cari,sizeof(struct car),1,fp)!=0;i+) if(cari.carnum!=carnum) fwrite(&cari,sizeof(struct car),1,fp2); fclose(fp); fclose(fp2); printf("是否要删除该卡?<Y/N>n"); scanf("%s",&choice); if(choice='y'|choice='Y') fp=fopen("car.tx

33、t","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"); fclose(fp2); printf("按任意键返回n"); getch();syste

34、m("cls");return; else printf("按任意键返回n"); getch();system("cls");return; addcar() /*增加借书卡函数*/ FILE *fp; int i=0; fp=fopen("car.txt","a+"); printf("请你输入卡号n"); scanf("%d",&cari.carnum); printf("请你输入学生姓名n"); scanf("%

35、s",cari.studentname); printf("请你输入班级n"); scanf("%d",&cari.studentclass); fwrite(&cari,sizeof(struct car),1,fp); fclose(fp); printf("输入完毕,任意键返回n"); getch(); system("cls"); changemploy() FILE *fp,*fp2; char employname10,choice;int i; fp=fopen("

36、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,employname)=0) printf("你所要修改的职工的资料如下,请选择你要修改的内容n"

37、;); printf("<职工号:%d职工名:%s 年龄:%d 性别:%s 学历:%s 工资:%d>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&quo

38、t;); printf("请输入1-5:"); scanf("%s",&choice); switch(choice) case '1': printf("请输入新的职工号n"); scanf("%d",&employi.employnum); fwrite(&employi,sizeof(struct employ),1,fp2); break; case '2': printf("请输入新的职工姓名n"); scanf("%s

39、",employi.employname); fwrite(&employi,sizeof(struct employ),1,fp2); break; case '3': printf("请输入新的年龄n"); scanf("%d",&employi.employage); fwrite(&employi,sizeof(struct employ),1,fp2); break; case '4': printf("请输入新的职工工资n"); scanf("%d

40、",&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(&emp

41、loyi,sizeof(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=fop

42、en("bookl.txt","w"); fclose(fp2); printf("按任意键返回n"); getchar();system("cls"); return; delemploy() FILE *fp,*fp2; int i; char employname10,choice; fp=fopen("employ.txt","r"); fp2=fopen("bookl.txt","w"); printf("请输入你要

43、删除的职工名n"); scanf("%s",employname); for(i=0;fread(&employi,sizeof(struct employ),1,fp)!=0;i+) if(strcmp(employname,employi.employname)!=0) fwrite(&employi,sizeof(struct employ),1,fp2); fclose(fp); fclose(fp2); printf("是否真的要删除该职工信息?<Y/N>n"); scanf("%s",

44、&choice); if(choice='y'|choice='Y') 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(&

45、quot;bookl.txt","w"); fclose(fp2); printf("按任意键返回n"); getch(); system("cls");return true; else printf("按任意键返回n"); getch(); system("cls");return false; employcount() FILE *fp; int i,n=0; fp=fopen("employ.txt","r"); for(i=0;fre

46、ad(&employi,sizeof(struct employ),1,fp)!=0;i+) printf("第%d职工的信息如下:n<职工号:%d 职工名:%s 年龄:%d 性别:%s 学历:%s 工资:%d>n",n+1,employi.employnum,employi.employname,employi.employage,employi.employsex,employi.employleve,employi.employtage); n+; fclose(fp); printf("目前共有%d个职工n",n); prin

47、tf("按任意键返回n"); addemploy() FILE *fp; char choice='y' int i=1; fp=fopen("employ.txt","a+"); while(choice='y'|choice='Y') printf("请你输入职工号码n"); scanf("%d",&employi.employnum); printf("请你输入职工名n"); scanf("%s"

48、;,employi.employname); printf("请输入职工年龄n"); scanf("%d",&employi.employage); printf("请你输入性别n"); scanf("%s",employi.employsex); printf("请你输入职工的学历水平n"); scanf("%s",employi.employleve); printf("请输入职工的工资n"); scanf("%d",&am

49、p;employi.employtage); fwrite(&employi,sizeof(struct employ),1,fp); printf("是否要输入下个职工信息?N/Yn"); scanf("%s",&choice); system("cls"); printf("按任意键返回n"); fclose(fp); addbook() /*录入书籍函数*/ FILE *fp; int i=0; char choice='y' fp=fopen("book.txt&q

50、uot;,"a+"); while(choice='y'|choice='Y') printf("请你输入第%d本书的序号n",i+1); scanf("%d",&booki.booknum); printf("请你输入书名n"); scanf("%s",booki.bookname); printf("请你输入书的作者n"); scanf("%s",booki.bookcreat); printf("请设

51、为1或0,1代表书还没人借,0表示书已经借出n"); printf("请你设定书的状态n"); scanf("%d",&booki.turefalse); fwrite(&booki,sizeof(struct book),1,fp); printf("是否要输入下本书N/Yn"); scanf("%s",&choice); fclose(fp); bookcount() /*书籍统计函数*/ FILE *fp; int i,n=0; fp=fopen("book.txt

52、","r"); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(booki.booknum!=0&&strlen(booki.bookname)!=0&&strlen(booki.bookcreat)!=0) printf("第%d本书<序号:%d 书名:%s 作者:%s 状态:%d>n",i+1,booki.booknum,booki.bookname,booki.bookcreat,booki.turefalse); n=n+1; fclose(fp); printf("目前共有%d本书n",n); printf("按任意键n"); delbook() /*删除书籍函数*/ FILE *fp,*fp2; int i; char bookname10,choice; fp=fopen("book.txt","r"); fp2=fopen("book

温馨提示

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

评论

0/150

提交评论