图书馆管理系统程序设计报告

  • 格式:doc
  • 大小:390.50 KB
  • 文档页数:22

程序设计报告( 2011 / 2012 学年第二学期)题目:图书管理系统专业光信息科学与技术组长姓名季勤芹组长学号 B********成员姓名学号孟彩霞 B********曹洋 B10030311 指导教师朱旻如指导单位计算机学院软件教学中心日期 2011-3-8图书管理系统实验报告一、分析及结构设计软件应当实现图书资料管理:以文件形式存储,预先从键盘录入,包括ISBN编号,编码,书名,作者,价格,状态(在库、借出)。

借书证管理:借书证编号、借阅者姓名、借阅者分类(学生和图书馆职工)、办理时间、有效期、联系方式等,借阅规则包括借阅的本数、节约时间、罚款的计算方式等。

学生借阅管理、学生还书管理和查询系统。

所以,图书管理系统主要包括:图书资料管理系统、借书证管理系统、学生借阅管理系统、学生还书管理系统以及查询系统。

其中,图书资料管理系统包括:图书删除系统、新书登记系统。

借书证管理系统包括:借书证删除系统、新借书证登记系统。

查询系统包括:按作者查找和按书名查找系统。

二、开发设计程序主要结构如下:以文件形式输入新书图书资料管理更改图书信息删除无用的图书信息申请新的借书证借书证管理删除借书证借阅管理图书管理系统图书馆职工管理还书管理按书名查找查书系统按作者查找借书规则主要的数据结构有学生的student和员工的employ结构,还有图书book、日期Date和借书证car的结构。

主函数采用switch进行函数之间的调用和转换,用字符1、2、3、4等来进行选择。

三、源代码#include<stdio.h>#include<conio.h>#include<ctype.h>#include<string.h>#include<stdlib.h>struct student{int carnum;char lendbook[10];}student[1000];struct employ{int employnum;char employname[15];int employage;char employsex[2];char employleve[10];long int employtage;}employ[50];struct book{int booknum;int bookprice;char bookname[10];char bookcreat[10];int turefalse;}book[1000];struct Date{int yr,mo,da;};struct car{int carnum;int mobile;char name[10];char type[10];char last[10];struct Date dt;}car[100];int returnbook(){FILE *fp,*fp2;int i,n;int carnum;char lendbook[10];printf("请你输入你的卡号\n");scanf("%d",&carnum);fp=fopen("car.txt","r");for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++){if(car[i].carnum==carnum){n=i;fclose(fp);printf("请输入你要还的书的名字\n");scanf("%s",lendbook);fp=fopen("record.txt","r");for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++){if(strcmp(student[i].lendbook,lendbook)==0){fclose(fp);fp=fopen("record.txt","r");fp2=fopen("bookl.txt","w");for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++){if(strcmp(student[i].lendbook,lendbook)==0){continue;}fwrite(&student[i],sizeof(struct student),1,fp2);}fclose(fp);fclose(fp2);fp=fopen("record.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++){fwrite(&student[i],sizeof(struct student),1,fp);}fclose(fp);fclose(fp2);fopen("bookl.txt","w");fclose(fp2);fp=fopen("book.txt","r");fp2=fopen("bookl.txt","w");for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(i==n){book[i].turefalse=1;fwrite(&book[i],sizeof(struct book),1,fp2);continue;}fwrite(&book[i],sizeof(struct book),1,fp2);}fclose(fp);fclose(fp2);fp=fopen("book.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++){fwrite(&book[i],sizeof(struct book),1,fp);}fclose(fp);fclose(fp2);fopen("bookl.txt","w");fclose(fp2);printf("还书完毕,按任意键返回\n");getch();return 1;}}printf("你没有借这样的书,任意键返回\n");fclose(fp);getch();return 0;}}printf("系统没这样的卡,和管理员联系,按任意键返回\n"); fclose(fp);getch();return 0;}int findbook1(){FILE *fp;char bookname[10];int i;fp=fopen("book.txt","r");printf("请输入你要查找的书名\n");scanf("%s",bookname);for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(strcmp(bookname,book[i].bookname)==0){if(book[i].turefalse==1){printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);}else {printf("这本书已经有人借出\n");fclose(fp);return 0;}fclose(fp);return 0;}}printf("没有你要查询的书籍\n");fclose(fp);return 0;}int findbook2(){FILE *fp;char bookcreat[10];int i;fp=fopen("book.txt","r");printf("请输入你要查找的作者名\n");scanf("%s",bookcreat);for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(strcmp(bookcreat,book[i].bookcreat)==0){if(book[i].turefalse==1){printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);}else {printf("这本书已经有人借出\n");fclose(fp);return 0;}fclose(fp);return 0;}}printf("没有你要查询的书籍\n");fclose(fp);return 0;}int lendcount(){FILE *fp;int i,n=0;fp=fopen("record.txt","r");for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++){printf("卡号:%d 借出的书籍:%s \n",student[i].carnum,student[i].lendbook);n=n+1;}fclose(fp);printf("目前共有%d本书借出\n",n);printf("按任意键\n");getch();return n;}int 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':findbook1();getch();break;case '2':findbook2();getch();break;case '0':break;default:printf("无此操作\n");getch();break;}}while(ch5!='0');return 0;}int lendbook(){FILE *fp,*fp2;int i,n;int carnum;printf("请你输入你的编号\n");scanf("%d",&carnum);fp=fopen("car.txt","r");for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++){if(car[i].carnum==carnum){n=i;fclose(fp);printf("请输入你要借阅的书的名字\n");scanf("%s",student[n].lendbook);fp=fopen("book.txt","r");for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(strcmp(book[i].bookname,student[n].lendbook)==0){if(book[i].turefalse==0) {printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getchar();return 0;}elsefclose(fp);fp=fopen("record.txt","a+");student[n].carnum=carnum;fwrite(&student[n],sizeof(struct student),1,fp);fclose(fp);fp=fopen("book.txt","r");fp2=fopen("bookl.txt","w");for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(strcmp(book[i].bookname,student[n].lendbook)==0){book[i].turefalse=0;fwrite(&book[i],sizeof(struct book),1,fp2);continue;}fwrite(&book[i],sizeof(struct book),1,fp2);}fclose(fp);fclose(fp2);fp=fopen("book.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++){fwrite(&book[i],sizeof(struct book),1,fp);}fclose(fp);fclose(fp2);fopen("bookl.txt","w");fclose(fp2);printf("借书完毕,按任意键返回\n");getch();return 0;}}printf("不存在这样的书,任意键返回\n");fclose(fp);getch();return 0;}}printf("你的卡号不存在,请申请新卡,按任意键返回\n");fclose(fp);getch();return 0;}int carcount(){FILE *fp;int i,n=0;fp=fopen("car.txt","r");for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++){printf("第%d张卡<卡号:%d 姓名:%s 联系方式:%d>\n",i+1,car[i].carnum,car[i].name,car[i].mobile );n=n+1;}fclose(fp);printf("目前共有%d张卡\n",n);printf("按任意键\n");getch();return 0;}int 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(&car[i],sizeof(struct car),1,fp)!=0;i++){if(car[i].carnum!=carnum){fwrite(&car[i],sizeof(struct car),1,fp2);}}fclose(fp);fclose(fp2);printf("是否真的要删除该卡?删除后该卡号的所有信息将无法恢复《Y/N》\n");scanf("%s",&choice);if(choice=='y'||choice=='Y'){fp=fopen("car.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&car[i],sizeof(struct car),1,fp2)!=0;i++){fwrite(&car[i],sizeof(struct car),1,fp);}fclose(fp);fclose(fp2);fp2=fopen("bookl.txt","w");fclose(fp2);printf("按任意键返回\n");getch();return 0;}else{printf("按任意键返回\n");getch();return 0;}}int addcar(){FILE *fp;int i=0;fp=fopen("car.txt","a+");printf("请输入编号:\n");scanf("%d",&car[i].carnum);printf("请输入您的姓名:\n");scanf("%s",car[i].name);printf("请输入您的手机号:\n");scanf("%d",&car[i].mobile);printf("请输入您的身份类型(student/teacher):\n");scanf("%s",&car[i].type);printf("请输入办理日期:");scanf("%d%d%d",&car[i].dt.yr,&car[i].dt.mo,&car[i].dt.da);printf("请输入有效期:");scanf("%s",car[i].last);fwrite(&car[i],sizeof(struct car),1,fp);fclose(fp);printf("输入完毕,任意键返回\n");getch();return 0;}int changemploy(){FILE *fp,*fp2;char employname[10],choice;int i;fp=fopen("employ.txt","r");fp2=fopen("bookl.txt","w");printf("请你输入要修改的职工的名字\n");scanf("%s",employname);for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++){if(strcmp(employ[i].employname,employname)==0){printf("你所要修改的职工的资料如下,请选择你要修改的内容\n");printf("<职工号:%d职工名:%s 年龄:%d 性别:%s 学历:%s 工资:%d>\n",employ[i].employnum,employ[i].employname,employ[i].employage,employ[i].empprintf("2:修改职工名\n");printf("3:修改职工年龄\n");printf("4:修改职工工资\n");printf("5:修改职工学历\n");printf("请输入1-5:");scanf("%s",&choice);switch(choice){case '1':{printf("请输入新的职工号\n");scanf("%d",&employ[i].employnum);fwrite(&employ[i],sizeof(struct employ),1,fp2); }break;case '2':{printf("请输入新的职工姓名\n");scanf("%s",employ[i].employname);fwrite(&employ[i],sizeof(struct employ),1,fp2); }break;case '3':{printf("请输入新的年龄\n");scanf("%d",&employ[i].employage);fwrite(&employ[i],sizeof(struct employ),1,fp2); }break;case '4':{printf("请输入新的职工工资\n");scanf("%d",&employ[i].employtage);fwrite(&employ[i],sizeof(struct employ),1,fp2); }break;case '5':{printf("请输入新的职工学历\n");scanf("%s",employ[i].employleve);fwrite(&employ[i],sizeof(struct employ),1,fp2); }default:printf("没有这样的操作");break;}continue;}fwrite(&employ[i],sizeof(struct employ),1,fp2);fclose(fp);fclose(fp2);fp=fopen("employ.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&employ[i],sizeof(struct employ),1,fp2)!=0;i++){fwrite(&employ[i],sizeof(struct employ),1,fp);}fclose(fp);fclose(fp2);fp2=fopen("bookl.txt","w");fclose(fp2);printf("按任意键返回\n");getch();return 0;}int delemploy(){FILE *fp,*fp2;int i;char employname[10],choice;fp=fopen("employ.txt","r");fp2=fopen("bookl.txt","w");printf("请输入你要删除的职工名\n");printf("如果你输入的职工存在,系统自动删除该信息!如果不存在,系统不做任何改动\n"); scanf("%s",employname);for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++){if(strcmp(employname,employ[i].employname)!=0){fwrite(&employ[i],sizeof(struct employ),1,fp2);}}fclose(fp);fclose(fp2);printf("是否真的要删除该职工信息?删除后的所有信息将无法恢复《Y/N》\n");scanf("%s",&choice);if(choice=='y'||choice=='Y'){fp=fopen("employ.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&employ[i],sizeof(struct employ),1,fp2)!=0;i++){}fclose(fp);fclose(fp2);fp2=fopen("bookl.txt","w");fclose(fp2);printf("按任意键返回\n");getch();return 1;}else{printf("按任意键返回\n");getch();return 0;}}int employcount(){FILE *fp;int i,n=0;fp=fopen("employ.txt","r");for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++){printf("第%d职工的信息如下:\n<职工号:%d 职工名:%s 年龄:%d 性别:%s 学历:%s 工资:%d>\n",n+1,employ[i].employnum,employ[i].employname,employ[i].employage,employ[i] .employsex,employ[i].employleve,employ[i].employtage);n++;}fclose(fp);printf("目前共有%d个职工\n",n);printf("按任意键返回\n");return 0;}int addemploy(){FILE *fp;char choice='y';int i=1;fp=fopen("employ.txt","a+");while(choice=='y'||choice=='Y')printf("请你输入职工号码\n");scanf("%d",&employ[i].employnum);printf("请你输入职工名\n");scanf("%s",employ[i].employname);printf("请输入职工年龄\n");scanf("%d",&employ[i].employage);printf("请你输入性别\n");scanf("%s",employ[i].employsex);printf("请你输入职工的学历水平\n");scanf("%s",employ[i].employleve);printf("请输入职工的工资\n");scanf("%d",&employ[i].employtage);fwrite(&employ[i],sizeof(struct employ),1,fp);printf("是否要输入下个职工信息?\n");scanf("%s",&choice);}printf("按任意键返回\n");fclose(fp);return 0;}int addbook(){FILE *fp;int i=0;char choice='y';fp=fopen("book.txt","a+");while(choice=='y'||choice=='Y'){printf("请你输入第%d本书的ISBM编号:\n",i+1);scanf("%d",&book[i].booknum);printf("请你输入书名:\n");scanf("%s",book[i].bookname);printf("请你输入书的作者:\n");scanf("%s",book[i].bookcreat);printf("请输入书的价格:\n");scanf("%d",&book[i].bookprice);printf("请设为1或0,1代表书还没人借,0表示书已经借出,设其他值,程序运行时无法得出正常结果\n");printf("请你设定书的状态“\n");scanf("%d",&book[i].turefalse);fwrite(&book[i],sizeof(struct book),1,fp);printf("是否要输入下本书(Yes/No)\n");scanf("%s",&choice);fclose(fp);return 0;}int bookcount(){FILE *fp;int i,n=0;fp=fopen("book.txt","r");for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].bookcreat)!=0) {printf("第%d本书<序号:%d 书名:%s 作者:%s 状态:%d>\n",i+1,book[i].booknum,book[i].bookname,book[i].bookcreat,book[i].turefalse);n=n+1;}}fclose(fp);printf("目前共有%d本书\n",n);printf("按任意键\n");return 0;}int delbook(){FILE *fp,*fp2;int i;char bookname[10],choice;fp=fopen("book.txt","r");fp2=fopen("bookl.txt","w");printf("请输入你要删除的书名\n");printf("如果你输入的书名存在,系统自动删除该信息!如果不存在,系统不做任何改动\n"); scanf("%s",bookname);for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(strcmp(bookname,book[i].bookname)!=0){fwrite(&book[i],sizeof(struct book),1,fp2);}}fclose(fp);fclose(fp2);printf("是否真的要删除该书籍?删除后该书籍的所有信息将无法恢复《Y/N》\n");if(choice=='y'||choice=='Y'){fp=fopen("book.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++){fwrite(&book[i],sizeof(struct book),1,fp);}fclose(fp);fclose(fp2);fp2=fopen("bookl.txt","w");fclose(fp2);printf("按任意键返回\n");getch();return 0;}else{printf("按任意键返回\n");getch();return 0;}}int changebook(){FILE *fp,*fp2;char bookname[10],choice;int i;fp=fopen("book.txt","r");fp2=fopen("bookl.txt","w");printf("请你输入要修改的书籍的书字\n");scanf("%s",bookname);for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++){if(strcmp(book[i].bookname,bookname)==0){printf("你所要修改的书的资料如下,请选择你要修改的内容\n");printf("序号:〈%d〉书名:〈%s〉作者:〈%s〉\n",book[i].booknum,book[i].bookname,book[i].bookcreat);printf("1:修改书的序号\n");printf("2:修改书名\n");printf("3:修改作者\n");printf("请输入1-3:");switch(choice){case '1':{printf("请输入新的序号\n");scanf("%d",&book[i].booknum);fwrite(&book[i],sizeof(struct book),1,fp2);}break;case '2':{printf("请输入新的书名\n");scanf("%s",book[i].bookname);fwrite(&book[i],sizeof(struct book),1,fp2);}break;case '3':{printf("请输入新的作者\n");scanf("%s",book[i].bookcreat);fwrite(&book[i],sizeof(struct book),1,fp2);}break;default:printf("没有这样的操作");break;}continue;}fwrite(&book[i],sizeof(struct book),1,fp2);}fclose(fp);fclose(fp2);fp=fopen("book.txt","w");fp2=fopen("bookl.txt","r");for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) {fwrite(&book[i],sizeof(struct book),1,fp);}fclose(fp2);fp2=fopen("bookl.txt","w");fclose(fp2);printf("按任意键返回\n");getch();return 0;}guize()printf("图书馆借阅书籍规则如下:\n");printf("1:学生借书不得超过十本、教师借书不得超过15本\n");printf("2:每本书借阅时间不得超过一个月\n");printf("3:每本书在规定时间内未归还的每天罚款1块钱\n");printf("4:若在借阅时间内破坏图书的或丢失的,按原书的两倍赔偿\n");printf("\t\t********谢谢阅读********\n");return 0;}int main(){char ch1,ch2,ch3,ch4,ch5;do{ system("color 5E");printf("\n\n\n");printf(" ,'''╭⌒╮⌒╮.',''',,',.'',,','',. \n");printf(" ╱◥██◣''o',''',,',.''.'',,',. \n");printf(" |田|田田│ '',,',.',''',,',.'' \n");printf(" ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬\n\n\n");printf("\t********************************************\n");printf("\n");printf("\t\t 欢迎来到图书管理系统\t\t\t\t\n ");printf("\n");printf("\t********************************************");printf("\t\t \t\t\t\t\t .----. \n");printf(" \t\t _.'__ `. \n ");printf(" \t\t .--(#)(##)---/#\\ \n");printf(" \t\t .' @ /###\\ \n");printf("\t\t : , ##### \n");printf("\t\t请选择操作类型: `-..__.-' _.-\\###/ \n");printf("\t\t 1:< 查阅图书> `;_: `\"\' \n ");printf("\t\t 2:< 借阅图书> .\'\"\"\"\"\"`. \n");printf("\t\t 3:< 管理系统> /, Main ,\\ \n");printf("\t\t 4:< 还书> // Menu \\\\ \n");printf("\t\t 0:< 退出> `-._______.-\' \n");printf("\t\t 请输入0--4 ___`. | .'___ \n");printf("\t\t (______|______) \n");scanf("%s",&ch1);switch(ch1){case '1':chabook();break;case '2':{do{printf("\t\t &&&&&&&&&&&&&&& 欢迎借书!printf("\t\t 1:< 借阅规则查询>\n");printf("\t\t 2:< 借阅书籍>\n");printf("\t\t 0:< 返回>\n");printf("\t\t请输入0--2,其他输入非法!\n");scanf("%s",&ch5);switch(ch5){case'1':guize();break;case'2':lendbook();break;case'0':break;default:printf("无此操作\n");getch();break;}}while(ch5!='0');}break;case '3':{do{printf("---------------欢迎进入管理系统!--------------\n");printf(" 1:<录入图书>\n");printf(" 2:<删除图书>\n");printf(" 3:<修改图书资料>\n");printf(" 4:<书籍统计>\n");printf(" 5:<职工管理系统>\n");printf(" 6:<学生管理系统>\n");printf(" 0:<返回>\n");printf("请输入0--6,其他输入非法!\n");scanf("%s",&ch2);switch(ch2){case '1':addbook();break;case '2':delbook();break;case '3':changebook();break;case '4':bookcount();getch();break;case '5':{do{printf("---------------欢迎进入职工管理系统!--------------\n");printf(" 1:<注册员工>\n");printf(" 2:<删除员工>\n");printf(" 3:<修改员工资料>\n");printf(" 4:<员工统计>\n");printf(" 0:<返回>\n");printf("请输入0--4,其他输入非法!\n");scanf("%s",&ch3);switch(ch3)case '1':addemploy();getch();break;case '2':delemploy();break;case '3':changemploy();break;case '4':employcount();getch();break;case '0':break;default:printf("无此操作\n");getch();break;}}while(ch3!='0');}break;case '6':{do{printf("---------------欢迎进入学生管理系统!--------------\n");printf(" 1:<注册新卡>\n");printf(" 2:<删除卡号>\n");printf(" 3:<借书统计>\n");printf(" 4:<卡号统计>\n");printf(" 0:<返回>\n");printf("请输入0--4,其他输入非法!\n");scanf("%s",&ch4);switch(ch4){case '1':addcar();break;case '2':delcar();break;case '3':lendcount();break;case '4':carcount();break;case '0':break;default:printf("无此操作\n");getch();break;}}while(ch4!='0');}break;case '0':break;default:printf("无此操作\n");getch();break;}}while(ch2!='0');}break;case '4':returnbook();break;case '0':break;default:printf("无此操作\n");getch();break;}}while(ch1!='0');}四、测试分析编写测试用例完成主要功能的测试步骤、测试数据、对测试中主要问题的解决方法、输出结果。