C语言课程设计之图书管理系统|c语言程序代码编程小程序设计|c语言课程设计报告课程案例
图书管理子系统、图书借阅子系统、还书子系统、借阅人管理子系统、图书报损子系统等
#include
#include #include #include #include #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 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; char bookname[10]; char bookcreat[10]; int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/ }book[1000]; struct car /*借书卡的数据类型*/ { int carnum; char studentname[10]; int studentclass; }car[100]; huanbook() /*还书函数*/ { FILE *fp,*fp2; /*定义两个文件指针,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++) /*for循环判断卡号是否存在*/ { 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; } } printf("你没有借这样的书,不要耍我,任意键返回\n"); /*出错提示*/ fclose(fp); getch(); return; } } printf("系统没这样的卡,和管理员联系,按任意键返回\n"); /*出错提示*/ fclose(fp); getch(); } lendcount() /*其他的自己看就懂了,不行也可以qq联系:258032791,c++版本要的话跟我说,愿意交爱好编程的交友,毕业没时间了,找工作忙,有些模块没写,发现什么问题自己改,*/ { 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(); } 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':printf("按作者查找,有时间再写\n");getch();break; case '0':break; default:printf("无此操作\n");getch();break; } }while(ch5!='0'); } 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);getch();return;} else fclose(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; } } printf("不存在这样的书,任意键返回\n"); fclose(fp); getch(); return; } } printf("你的卡号不存在,请申请新卡,按任意键返回\n"); fclose(fp); getch(); } 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].studentname,car[i].studentclass); n=n+1; } 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"); 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; } else { printf("按任意键返回\n"); getch(); return; } } addcar() { FILE *fp; int i=0; fp=fopen("car.txt","a+"); printf("请你输入卡号\n"); scanf("%d",&car[i].carnum); printf("请你输入学生姓名\n"); scanf("%s",car[i].studentname); printf("请你输入班级\n"); scanf("%d",&car[i].studentclass); fwrite(&car[i],sizeof(struct car),1,fp); fclose(fp); printf("输入完毕,任意键返回\n"); getch(); } 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].employsex,employ[i].employleve,employ[i].employtage); printf("1:修改职工的号\n"); printf("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); } defaut: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"); getchar(); return; } 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++) { fwrite(&employ[i],sizeof(struct employ),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("bookl.txt","w"); fclose(fp2); printf("按任意键返回\n"); getch(); return; } else { printf("按任意键返回\n"); getch(); return; } } 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("按任意键返回"); } 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); }
addbook() { FILE *fp; int i=0; char choice='y'; fp=fopen("book.txt","a+"); while(choice=='y'||choice=='Y') { printf("请你输入第%d本书的序号\n",i+1); scanf("%d",&book[i].booknum); printf("请你输入书名\n"); scanf("%s",book[i].bookname); printf("请你输入书的作者\n"); scanf("%s",book[i].bookcreat); printf("请设为1或0,1代表书还没人借,0表示书已经借出,设其他值,程序运行时无法得出正常结果\n"); printf("请你设定书的状态\n"); scanf("%d",&book[i].turefalse); fwrite(&book[i],sizeof(struct book),1,fp); printf("是否要输入下本书\n"); scanf("%s",&choice); } fclose(fp); } 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"); } findbook() { FILE *fp; char bookname[10]; int ture,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",book[i].booknum,book[i].bookname,book[i].bookcreat); } else {printf("这本书已经有人借出\n");fclose(fp);return;} fclose(fp); return; } } printf("没有你要查询的书籍\n"); fclose(fp); return; } 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"); scanf("%s",&choice); 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; } else { printf("按任意键返回\n"); getch(); return; } } 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:"); scanf("%s",&choice); 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; defaut: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(fp); fclose(fp2); fp2=fopen("bookl.txt","w"); fclose(fp2); printf("按任意键返回\n"); getchar(); return; } main() { char ch1,ch2,ch3,ch4,ch5; do { clrscr(); printf("**************欢迎进入中文图书馆管理程序!****************\n"); printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n"); printf("制作人:邓敢\t班级:网络学院计0111班\t学号:hk1113183081\n"); printf("联系地址:华中科技大学韵苑28栋****电话:027-87441972****手机:13554664800\n"); printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); printf("\t\t请你选择操作类型:\n"); printf(" 1:<查阅图书>\n"); printf(" 2:<借阅图书>\n"); printf(" 3:<管理系统>\n"); printf(" 4:<还书>\n"); printf(" 0:<退出>\n"); printf("请输入0--4\n"); scanf("%s",&ch1); switch(ch1) { case '1':chabook();break; case '2':lendbook();;break; case '3':{ do { clrscr(); 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 { clrscr(); 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 { clrscr(); 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':huanbook();break; case '0':break; default:printf("无此操作\n");getch();break; } }while(ch1!='0'); }