收藏 分销(赏)

C--大作业图书管理系统-实验报告.doc

上传人:仙人****88 文档编号:9312859 上传时间:2025-03-21 格式:DOC 页数:25 大小:509.43KB 下载积分:10 金币
下载 相关 举报
C--大作业图书管理系统-实验报告.doc_第1页
第1页 / 共25页
C--大作业图书管理系统-实验报告.doc_第2页
第2页 / 共25页


点击查看更多>>
资源描述
附件1: 学 号: 0121213640126 《面向对象程序设计》大作业 题 目 学生成绩管理系统 学 院 文法学院 专 业 教育学 班 级 教育学1201 姓 名 杨欣 指导教师 鄢红国 2013 年 12 月 20 日 目 录 一 设计目的…………………………………………………………….1 二 大作业的内容........................................2 三 大作业的要求与数据..................................3 四 大作业应完成的工作..................................4 五 总体设计(包含几大功能模块)...........................5 六 详细设计(各功能模块的具体实现算法——流程图)………….6 七 调试分析(包含各模块的测试用例,及测试结果)…………….7 八 总结………………………………………………………………...8 十 参考资料…………………………………………………………….9 一 大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 二 大作业的内容 对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三 大作业的要求与数据 1、用C语言实现系统; 2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出. 3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一本图书的编号、书名、库存量 (2) 图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录的输入。) (3) 图书信息显示浏览功能:完成全部图书记录的显示。 (4) 查询功能:完成按书名查找图书记录,并显示。 (5) 图书信息的删除:按编号进行图书某图书的库存量. (6) 借书登记系统:可以输入读者编号和所借书号来借书。 (7) 还书管理系统:可以输入读者编号和所借书号来还书。 (8)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 四 大作业应完成的工作 (1)编写算法; (2)算法测试,并有具体的测试结果和结果分析; (3)撰写大作业报告。内容包括: 1) 封面扉页 2) 设计任务书 3) 目录 4) 总体设计方案(包括流程图) 5) 使用说明及运行实例(包括界面) 6) 成员设计内容简介 7) 项目源程序代码(注意注释的使用) 8) 指导教师评语 五 总体设计(包含几大功能模块) 1、新书入库模块; 2、 查询模块; 3、 借阅管理模块; 4、借书登记模块; 5、还书管理模块; 6、输出信息模块; 7、退出系统模块; 六 详细设计(各功能模块的具体实现算法——流程图) 6.1各函数的功能和实现 1、新书入库模块: 形参分别为:书名, 书号,以及有多少本书要入库,再根据要求将信息写入文件boot.dat中。又由于最开始要输入三本新书,故可以加一个初始化函数init_book(),但是初始化函数只执行一次,也就是在系统第一次运行的时候执行,此时可以根据判断是否存在boot.dat这个文件来决定是否执行初始化函数。 开始 输入新书名、新书号和新书数量 Y if(还有新书) 根据数量修改库存 已存在此新书 Y N 结束 N book.dat中增加此新 书,根据数量设置库存 2、查询模块: 可用一个函数void find_book(char book_num[])来实现。找到就输出此书全部信息,找不到就输出查找失败信息。3、成绩查询功能 开始 输入要查询的书号 是否存在此书 输入信息:此书不存在 N Y 输入此书的全部信息 是否继续查询 N Y 结束 3、借阅管理模块: 用初始化函数init_reader()来实现对读者的初始化。因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在reader.dat文件来确定是否执行此函数。(到现在可以发现在系统初始化函数里,至少已经需要调用两个初始化函数了) 4、借书登记模块: 可用一个函数borrow_book(char reader_num[],char book_num[])来实现。在函数中要分别判断 A 该读者的编号是否已经存在,如果不存在,则提示错误。 B 该读者的借阅书是否已满(即最多只能借1本书)如果是,则提醒该用户先去还书 C 输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此书。 借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。 Y 是否重输否满 输出出错信息 N N 是否存在编号 输入读者编号 Y 是否还书 借书卡是否满 提示不能借书 Y N N Y 进入还书模块 输入需要借的书号 结束 书号存在否 N Y N 还有读者借书 借书登记,修改book.dat 中的现存信息,reader.dat 中的借书卡信息 Y 5、还书管理模块: 可用一个函数return_book(char reader_num[],char book_num[])来实现。在实现此函数时要判断: A 该读者的姓名是否已经存在,如果不存在,则提示错误。 B 该读者是否已经借阅此书。如果没有,则提示错误。 C 还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。 开始 Y 是否存在编号 N Y 输入还书的书的编号 是否重输 N 核对书号 错误 进入查询模块 输出出错信息 输入读者编号 是否重输否满 正确 还书将读者信息借书卡清0 修改book.dat现存信息 还有读者还书 N 结束 Y 6、输出信息模块: 可分别用模块print_book()和print_reader()来实现直接从book.dat文件和reader.dat文件中读取信息并输出。 选择输出图书还是读者信息 输出全部读者信息 图书 图书 结束 输出全部图书信息 7、退出系统模块: 可用一个函数exit()来实现。首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。 如图6.1 图书管理系统 图书查询 借书登记 还书登记 输出图书信息 输出读者信息 退出系统 新书入库 七 调试分析(包含各模块的测试用例,及测试结果) 7.1源程序 #include <stdio.h> #include <math.h> #include <string.h> typedef struct bk { char book_num[11]; char book_name[41]; int book_kc; int book_xc; struct bk * next; }book; /* 图书信息*/ typedef struct rd { char reader_num[11]; char reader_name[11]; char reader_book_num[11]; struct rd * next ; }reader;/*读者信息*/ struct bk * h_book,* h_reader; /*全局变量,分别为指向图书信息链表和读者信息链表的头指针*/ void Form_Insert_New_Book(); /*新书入库菜单*/ void Form_Find_Book(); /*查询图书菜单 */ void Form_Borrow_Book(); /*借书菜单*/ void Form_Return_Book(); /*还书菜单*/ void Find_Book(char *); /*查询图书*/ void Insert_New_Book(char *,char * ,int ); /*新书入库,即在链表中插入一个新节点*/ void Borrow_Book(char *,char *);/*借书,修改读者借阅信息和图书的现存信息*/ void Return_Book(char *,char *);/*还书,修改读者借阅信息和图书的现存信息*/ void print_book(struct bk *);/*输出全部图书信息*/ void print_reader(struct rd *);/*输出全部读者信息*/ void load_data();/*从文件中读取数据,链表头指针指向第一个节点*/ void init_reader();/*第一次运行程序时对三个读者的初始化*/ void init_book();/*第一次运行程序时对三本图书的初始化*/ void save();/*将链表中的信息保存到文件中*/ void M_Form()/*主菜单*/ { char ch; printf("\n 图书管理系统主窗口"); printf("\n 0:退出系统"); printf("\n 1:新书入库"); printf("\n 2:图书查询"); printf("\n 3:借书登记"); printf("\n 4:还书管理"); printf("\n 5:输出全部信息"); do{ /*此循环用来保证选择正确的数字键执行相应的功能*/ printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch); fflush(stdin); /*用于清除键盘缓冲区中的多余字符*/ }while(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'); switch(ch) /*根据输入的字符进行选择执行相应的模块*/ { case '0':exit(0); case '1':Form_Insert_New_Book();break; case '2':Form_Find_Book();break; case '3':Form_Borrow_Book();break; case '4':Form_Return_Book();break; case '5':load_data();print_book(h_book);print_reader(h_reader);M_Form(); default:printf("error\n");exit(0); } } void Form_Find_Book() { char ch; char book_num[11]; printf("\n 图书查询功能模块,请选择相应的功能代码:\n"); printf(" 0:返回到主菜单\n"); printf(" 1:图书查询"); do{ printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch); fflush(stdin); }while(ch!='0'&&ch!='1'); switch(ch) { case '0':M_Form();break; /*选择0,则返回到上一级目录,即主菜单*/ case '1': { printf(" \n请输入需要需要查询的书的编号:"); scanf("%s",book_num); fflush(stdin); Find_Book(book_num); /*执行查询*/ Form_Find_Book();/*查询完毕后继续返回到查询窗口,执行下一个查询*/ } default:printf("error\n");exit(0); } } void Find_Book(char book_num[]) /*查询图书模块,根据图书编号查询*/ { struct bk *p; p=h_book; while(p!=NULL&&strcmp(p->book_num,book_num)!=0) p=p->next;/*此循环用于查找,如果在中间找到,则p就不可能到末尾指向空*/ if(p==NULL) printf("\n\t此编号对应的图书不存在!\n"); else { printf("\n\t图书编号\t图书名\t库存量\t现存量 \n"); printf(" %10s\t %10s\t %d\t %d\t\n",p->book_num,p->book_name,p->book_kc,p->book_xc); } getch(); } void init_book() /*初始化图书模块*/ { book ba[3]; FILE *fp; int i; printf("\n 系统即将进行初始化,图书初始化模块:\n"); printf("\n 请分别输入三本书的书号,书名,数量(以空格隔开):\n "); for(i=0;i<3;i++) /*输入3本图书进行初始化*/ scanf("%s%s%d",ba[i].book_num,ba[i].book_name,&ba[i].book_kc); for(i=0;i<3;i++) {ba[i].book_xc=ba[i].book_kc;} /*开始时库存=现存*/ if((fp=fopen("book.dat","wb"))==NULL)/*建立新文件book.dat准备写入数据*/ { printf("不能建立图书文件,初始化失败!请重新启动系统!\n"); return; } for(i=0;i<3;i++)/*将初始化的3本图书写入文件book.dat中*/ { if(fwrite(&ba[i],sizeof(struct bk),1,fp)!=1) { printf("\写数据错误!\n"); exit(0); } } fclose(fp); } void init() { int drive=DETECT,mode=0; initgraph(&drive,&mode,""); init_book(); init_reader(); } void Insert_New_Book(char book_num[],char book_name[],int number) /*增加1本新书,读入新书的名称、编号和数量*/ { struct bk *book_fp; struct bk *p,*q,*t; q=p=h_book; while(p!=NULL&&strcmp(p->book_num,book_num)!=0) { q=p;p=p->next; } if(strcmp(p->book_num,book_num)==0) { printf("\n\t\t此编号已经存在,请重新输入!\n"); return; } t=(struct bk *)malloc(sizeof(struct bk)); strcpy(t->book_num,book_num); strcpy(t->book_name,book_name); t->book_kc=t->book_xc=number; q->next=t;t->next=NULL; if((book_fp=fopen("book.dat","ab"))==NULL) { printf("不能建立图书文件,初始化失败!请重新启动系统!\n"); return; } /*将新书信息添加到文件中*/ fwrite(t,sizeof(struct bk),1,book_fp); fclose(book_fp); } void print_book(struct bk *h) /*输出图书信息*/ { struct bk *p; p=h; printf("\n\t图书编号 \t图书名 \t库存量 \t现存量 \n"); while(p!=NULL) { printf(" %10s\t %10s %10d\t%10d\n",p->book_num,p->book_name,p->book_kc,p->book_xc); p=p->next; } } void print_reader(struct rd *h) /*输出读者信息*/ { struct rd *p; p=h; printf("\n\t读者编号 \t读者姓名 \t所借书号 \n"); while(p!=NULL) { printf(" %10s\t %10s %10s\n",p->reader_num,p->reader_name,p->reader_book_num); p=p->next; } getch(); } void Form_Borrow_Book() /*借书菜单界面*/ { char ch; char book_num[11],reader_num[11]; printf("\n 图书借阅功能模块,请选择相应的功能代码:\n"); printf(" 0:返回到主菜单\n"); printf(" 1:图书借阅\n"); do{ printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch); fflush(stdin); }while(ch!='0'&&ch!='1'); switch(ch) { case '0':M_Form();break; case '1': { printf(" \n请输入读者编号与所借书编号:(以空格分隔)"); scanf("%s%s",reader_num,book_num); fflush(stdin); Borrow_Book(reader_num,book_num);/*调用借书函数,执行借书功能*/ Form_Borrow_Book();/*借书完成后,程序返回到借书菜单*/ } default:printf("error\n");exit(0); } } void Borrow_Book(char reader_num[],char book_num[]) /*输入读者编号,和需要借阅的书的编号,执行借书功能*/ { struct bk *book_p; struct rd *reader_p; book_p=h_book; while(book_p!=NULL&&strcmp(book_p->book_num,book_num)!=0) book_p=book_p->next; if(book_p==NULL) { printf("\n\t此编号对应的图书不存在!\n"); Form_Borrow_Book(); } reader_p=h_reader; while(reader_p!=NULL&&(strcmp(reader_p->reader_num,reader_num)!=0)) reader_p=reader_p->next; if(reader_p==NULL) { printf("\n\t此编号对应的读者不存在!\n"); Form_Borrow_Book(); } else if(strcmp(reader_p->reader_book_num,"0")!=0) { printf("\n\t已达到最大借阅数,不能再借书!\n"); Form_Borrow_Book(); } else { book_p->book_xc=book_p->book_xc-1;/*借书完成后,修改现存量*/ strcpy(reader_p->reader_book_num,book_p->book_num);/*修改读者的借阅信息*/ save();/*将修改后的信息保存到文件中*/ load_data(); /*读入新文件中的数据*/} Form_Borrow_Book();/*程序执行完毕后,返回到借书菜单界面*/ } void Form_Return_Book() /*还书菜单*/ { char ch; char book_num[11],reader_num[11]; printf("\n 归还图书功能模块,请选择相应的功能代码:\n"); printf(" 0:返回到主菜单\n"); printf(" 1:归还图书\n"); do{ printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch); fflush(stdin); }while(ch!='0'&&ch!='1'); switch(ch) { case '0':M_Form();break; case '1': { printf(" \n请输入读者编号与所还书编号:(以空格分隔)"); scanf("%s%s",reader_num,book_num); fflush(stdin); Return_Book(reader_num,book_num);/*调用还书函数*/ Form_Return_Book(); } default:printf("error\n");exit(0); } } void Return_Book(char reader_num[],char book_num[]) /*输入读者编号和所还书编号执行还书*/ { struct bk *book_p; struct rd *reader_p; book_p=h_book; while(book_p!=NULL&&strcmp(book_p->book_num,book_num)!=0) book_p=book_p->next; if(book_p==NULL) { printf("\n\t此编号对应的图书不存在!\n"); Form_Return_Book(); } reader_p=h_reader; while(reader_p!=NULL&&(strcmp(reader_p->reader_num,reader_num)!=0)) reader_p=reader_p->next; if(reader_p==NULL) { printf("\n\t此编号对应的读者不存在!\n"); Form_Return_Book(); } else if(strcmp(reader_p->reader_book_num,book_num)!=0) { printf("\n\t读者没有借阅此书\n"); Form_Return_Book(); } else { book_p->book_xc=book_p->book_xc+1;/*还书后,修改图书库存量*/ strcpy(reader_p->reader_book_num,"0");/*还书后,修改读者借阅信息*/ save();/*保存到文件*/ load_data(); /*读入文件中的数据*/} Form_Return_Book(); } void init_reader() /*系统第一次运行时,初始化3位读者信息,从键盘读入*/ { FILE *fp; reader ra[3]; int i; printf("\n 系统即将进行读者初始化:\n"); printf("\n 请分别输入三位读者的编号和姓名(以空格隔开):\n "); for(i=0;i<3;i++) scanf("%s%s",ra[i].reader_num,ra[i].reader_name); for(i=0;i<3;i++) strcpy(ra[i].reader_book_num,"0"); if((fp=fopen("reader.dat","wb"))==NULL) { printf("不能建立读者文件,初始化失败!请重新启动系统!\n"); return; } for(i=0;i<3;i++)/*将3位读者信息写入文件*/ { if(fwrite(&ra[i],sizeof(struct rd),1,fp)!=1) { printf("\写数据错误!\n"); exit(0); } } } void Form_Insert_New_Book() /*添加新书菜单*/ { char ch; struct bk t; printf("\n 新书入库功能模块,请选择相应的功能代码:\n"); printf(" 0:返回到主菜单\n"); printf(" 1:新书入库"); do{printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch); fflush(stdin); }while(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'); switch(ch) { case '0':M_Form();break; case '1': { printf(" \n请按顺序输入新书的编号、名称、数量(以空格隔开):"); scanf("%s%s%d",t.book_num,t.book_name,&t.book_kc); fflush(stdin); Insert_New_Book(t.book_num,t.book_name,t.book_kc); Form_Insert_New_Book(); } default:printf("error\n");exit(0); } } void load_data() /*从文件book.dat和文件reader.dat中读取数据到内存*/ /*将读取的数据存放到2个链表中*/ { struct bk *book_p1,*book_p2,*book_p3; struct rd *reader_p1,*reader_p2,*reader_p3; FILE *fp_book,*fp_reader; fp_book=fopen("book.dat","rb"); book_p1=(struct bk *)malloc(sizeof(struct bk)); fread(book_p1,sizeof(struct bk),1,fp_book); h_book=book_p3=book_p2=book_p1; while(! feof(fp_book)) { book_p1=(struct bk *)malloc(sizeof(struct bk)); fread(book_p1,sizeof(struct bk),1,fp_book); book_p2->next=book_p1;book_p3=book_p2;book_p2=book_p1; } book_p3->next=NULL; free(book_p1); fclose(fp_book); fp_reader=fopen("reader.dat","rb"); r
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服