当前位置首页 > 建筑/施工 > 施工组织
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

c++图书管理系统实验报告和源代码

文档格式:DOC| 24 页|大小 197KB|积分 10|2022-09-23 发布|文档ID:155500834
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 24
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 课程名称:程序设计综合实训设计题目:图书管理系统姓 名:学 号:专业班级:指导老师:完成日期:1 设计任务1.1 设计目的运用所学知识,完成图书馆管理系统,通过实践加强对所学知识的理解和巩固1.2设计容建立图书馆管理系统,用户分为图书管理人员,读者管理人员可以增加删除查看图书、读者读者只能查看自身信息,和借还书1.3设计指标或者要求管理人员可以访问任意图书和读者,而读者只能借还图书馆存在的图书和查看自己的信息2 设计过程分析:由于管理系统用户有图书管理员和读者,但两者的权限不同,管理员有权访问所有图书信息和管理员信息,而读者只能访问所有图书信息和自身的信息所以他们的相同点:都能访问所有图书信息不同点:管理员能访问所有读者信息而管理员只能访问自身信息而不能访问其它读者信息;故此设计了三个类程序包含三个类:图书类〔books〕,管理员类〔manager〕,读者类reader,books类为抽象类,manager,和reader类为books类的派生类为了能让管理员和读者访问所有图书信息,所有都继承了books类;而为了分出两者的权限的不同,所以把所有读者的信息做为一个链表作为管理员的一个私有成员,而读者却只能放一个自身节点作为读者的私有成员,然后分别设计各个类的成员函数。

    2.1 程序功能Class books ///虚基类{ protected: books_node *broot;public: books();//构造函数 savebooks();//保存修改的容 search_book();//查找某一本书 print_books();//输出所有书的信息 virtual add_book()=0;//对于读者是还书,对于管理员添加书 virtual delet_book()=0;//对于读者是借书,对于管理员是去掉某一本书};Class manager:public books //管理员类 {protected: readers_node *rroot;public: manager(readers_node*); savereaders(); add_book();//添加图书信息 delet_book();//删除图书 search_reader();//查找读者信息 add_reader();//添加读者 delet_reader();//删除读者 print_readers();//输出所有读者};class reader:public books{//读者类private:readers_node* personnel;//存放读者自身信息public: reader(readers_node*); add_book();//还书 reader_borrow(); delet_book(); reader_return();//借书 print_me();//查看自己借书情况 save_readers(readers_node*);};2.2程序流程图开始菜单管理员菜单读者菜单添 删加 除图 图书 书添 删加 除读 读者 者借 还 查 查 看 看 所 自 有 身 图 信书 书 书 息 读者管理员图书维护读者维护后退后退后退后退后退3软件运行或者测试结果〔1〕管理员身份登录:〔2〕读者身份登录:4软件设计过程中遇到的问题以及解决办法由于编写前期做了大量的设计工作,在编写过程中基本没有遇到难解决的问题提,倒是在设计类时有些茫然,经过反复斟酌还是做了一些取舍,比如把读取读者文件放在了类的外面等。

    5总结通过本次课程设计学到了很多东西,对于c++对象的含义有了进一步的认识,从而对类的封装和设计有了一种新的认识,不只是停留在表面,为以后的学习积累了经验,设计不比编写容易,类设计好是整个程序写好的前提,只有一个好的规划才能写出好的程序不过也通过本次发现了自己的不足之处总是:本次课程设计受益匪浅,动手能力大大增强;附录〔程序源代码〕#include#include#include#include#include#define max 3 typedef struct Books{ char book_name[15]; int total_num; int borrow_num; char book_num[15]; Books *next;}books_node;typedef struct Readers{ char reader_name[15]; char reader_no[15]; int reader_borrow_num; struct Reader_borrow_books{ char borrow_books_name[15]; char borrow_books_no[15]; }reader_borrow_book[max]; Readers *next;}readers_node;class books { protected: books_node *broot;public: books(); savebooks(); search_book(); print_books(); virtual add_book()=0; virtual delet_book()=0;};class manager:public books {protected: readers_node *rroot;public: manager(readers_node*); savereaders(); add_book(); delet_book(); search_reader(); add_reader(); delet_reader(); print_readers();};class reader:public books{private:readers_node* personnel;public: reader(readers_node*); add_book(); reader_borrow(); delet_book(); reader_return(); print_me(); save_readers(readers_node*);};books::books(){ books_node *r; broot=new books_node; r=new books_node; r->next=NULL; broot=r; ifstream inFile; inFile.open("c:\\books.dat",ios::binary); if(inFile.is_open()==-1)cout<<"con't open books.dat"<next=r->next; r->next=node; } inFile.close(); if(i<2)cout<<"暂时没有图书数据"<next; ofstream outFile; outFile.open("c:\\books.dat",ios::binary); while(L) { outFile.write((char*)L,sizeof(books_node)); L=L->next; } outFile.close(); }books::search_book(){ char searchedbook[15]; cout<<"输入要查找的书的名子:"; cin>>searchedbook; books_node *r; r=new books_node; r=broot->next; while(r) { if((strcmp(searchedbook,r->book_name))==0) { cout<<"书名:"<book_name<<" 书的总量:"<total_num<<" 借出:"<borrow_num<<" 书的编号:"<book_num<next; } if(r==NULL)cout<<"对不起,没有此书"<next; while(r) { cout<<"书名:" <book_name<<" 书的总量:"<total_num<<" 借出:"<< r->borrow_num <<" 书的编号:"<book_num<next; } delete r;}manager::add_book(){ books_node *L; L=new books_node; L=broot; while(1) { books_node *r; r=new books_node; r->next=NULL; cout<<"输入书名:"; cin>>r->book_name; cout<<"输入书的编号:"; cin>>r->book_num; r->borrow_num=0; cout<<"输入总数:"; cin>>r->total_num; r->next=L->next; L->next=r; cout<<"add more"(n终止,其它键继续)"; char sign; cin>>sign; if(sign=='n'||sign=='N') break; } broot=L; savebooks(); }manager::delet_book(){ char deleted[15]; cout<<"输入要删除的图书名字:"; cin>>deleted; books_node *node,*L; node=new books_node; L=new books_node; node=broot; while(node->next) { if((strcmp(deleted,node->next->book_name))==0)break; node=node->next; } if(node->next==NULL) { cout<<"sorry!There is no the book!"<next->borrow_num==0) { node->next=node->next->next; savebooks() } else cout<<"对不起,暂时不能删除,因为还有没有归还的书"<next; ofstream outFile; outFile.open("c:\\Readers.dat",ios::binary); while(L) { outFile.write((char*)L,sizeof(readers_node)); L=L->next; } outFile.close();}manager::add_reader(){ readers_node *L; L=new readers_node; L=rroot; int sign=0; while(1) { readers_node *r; r=new readers_node; r->next=NULL; cout<<"输入:"; cin>>r->reader_name; cout<<"输入读者的编号:"; cin>>r->reader_no; r->reader_borrow_num=0; r->next=L->next; L->next=r; cout<<"add more"(n终止,其它键继续)"; char sign; cin>>sign; if(sign=='n'||sign=='N') break; } root=L; savereaders(); }manager::delet_reader(){ char deleted[15]; cout<<"输入要删除读者的名字:"; cin>>deleted; readers_node node,*L; node=new readers_node; L=new readers_node; node=rroot; while(node->next) { if((strcmp(deleted,node->next->reader_name))==0)break; node=node->next; } if(node->next==NULL) { cout<<"sorry!There is no the reader!"<next=node->next->next; savereaders(); } }manager::search_reader(){ readers_node *r; r=new readers_node; r=rroot->next; char reader[15]; cout<<"输入要查找读者的:"; cin>>reader; while(r) { if((strcmp(reader,r->reader_name))=0) { cout<<":"<reader_name<<" 编号:"<reader_no<<" 借书总数:"<reader_borrow_num<reader_borrow_num;i++) { cout<<"书名:"<reader_borrow_book[i].borrow_books_name<<" "<<"书的编号:"<reader_borrow_book[i].borrow_books_no; } break; } else r=r->next; } if(!r)cout<<"没有此人"<next; while(printL) { cout<<" 编号 借书总数"<reader_name<<" "<reader_no<<" "<reader_borrow_num<reader_borrow_num;i++) { cout<<"书名:"<reader_borrow_book[i].borrow_books_name<<" "<<"书的编号:"<reader_borrow_book[i].borrow_books_no; } printL=printL->next; } delete printL;}reader::reader(readers_node*node){ (personnel)==new readers_node; personnel=node;}reader::add_book(){ books_node*node; node=new books_node; node=broot->next; char returned[15]; cout<<"输入要还书的名子:"; cin>>returned; for(int i=0;i=personnel->reader_borrow_num;i++) { if((strcmp(returned,personnel->reader_borrow_book[i].borrow_books_name))==0)break; } if(i==personnel->reader_borrow_num+1) { printf("不好意思,你没有此书");system("pause"); } else{ while(node) { if((strcmp(node->book_name,returned)==0))break; else node=node->next; } if(node) { personnel->reader_borrow_num--; node->borrow_num--; savebooks(); } else cout<<"对不起,没有你要还的书或者所还书被删除"<readerborrow_numnext; char borrowed[15]; cout<<"输入要借书的名子:"; cin>>borrowed; while(node) { if((strcmp(node->book_name,borrowed)==0))break; else node=node->next; } if(node&&(node->total_num-node->borrow_num)>0) { strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num].borrow_books_name,node->book_name); strcpy(personel->reader_borrow_book[personnel->reader_borrw_num++].borrow_books_no,node->book_num); node->borrow_num++; savebooks(); } else cout<<"对不起,没有你要借的书或者所要借的书已经借完!"<reader_name<<" 编号:"<reader_no<<" 借书总数:"<reader_borrow_num<reader_borrow_num;i++) { printf("书名:%s,书的编号:%s",personnel->reader_borrow_book[i].borrow_books_name,personnel->reader_borrow_book[i].borrow_books_no) }}void Pause(){ getch(); fflush(stdin);}reader::reader_borrow(){ delet_book();}reader::reader_return(){ add_book();}reader::save_readers(readers_node *L){ readers_node *root; root=new readers_node; root=L->next; ofstream outFile; outFile.open("c:\\Readers.dat",ios::binary); while(root) { outFile.write((char)root,sizeof(readers_node)); root=root->next; } outFle.close();}readers_node* read_readers(){ readers_node *r; r=new readers_node; r->next=NULL; int flag=0; ifstream inFile; inFile.open("c:\\Readers.dat",ios::binary); if(inFile.is_open()==-1) { cout<<"con't open readers.dat"<next=r->next; r->next=node; } inFile.close(); if(flag<2) { cout<<"暂无读者 "<2) { printf("你已经超过输入次数,系统将退出\n"); getch(); } if(strcmp(a,b)==0)break; else cout<<"密码错误,请重新输入\n"; cerr<<"\n"; }}void manager_menu_1(manager M){ int N; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃ 图书管图书管理系统 ┃\n"; cout<<"┃ 菜单 ┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①增加图书 ┃\n"; cout<<"┃②.删除图书 ┃\n"; cout<<"┃③.查找图书 ┃\n"; cout<<"┃④.输出所有 ┃\n"; cout<<"┃ 退出请按0 ┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"请输入您的选择(0--4):( )\b\b"; cin>>N; switch (N) { case 1: M.add_book();getch();break; case 2: M.delet_book();getch();break; case 3: M.search_book();getch();break; case 4: M.print_books();getch();break; case 0: return; } system("cls"); } }void manager_menu_2(manager M){ int N; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃ 图书管图书管理系统 ┃\n"; cout<<"┃ 菜单 ┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①增加读者 ┃\n"; cout<<"┃②删除读者 ┃\n"; cout<<"┃③查找读者 ┃\n"; cout<<"┃④输出所有 ┃\n"; cout<<"┃ 退出请按0 ┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"请输入您的选择(0--4):( )\b\b"; cin>>N; switch (N) { case 1: M.add_reader();getch();break; case 2: M.delet_reader();getch();break; case 3: M.search_reader();getch();break; case 4: M.print_readers();getch();break; case 0: return; } system("cls"); } }void manager_menu(readers_node*L){ system("cls"); password(); manager manager(L); int N;while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃ 图书管图书管理系统 ┃\n"; cout<<"┃ 菜单 ┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①图书维护 ┃\n"; cout<<"┃②读者维护 ┃\n"; cout<<"┃退出请按0 ┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"请输入您的选择(0--2):( )\b\b"; cin>>N; switch (N) { case 1: system("cls"); manager_menu_1(Manager); break; case 2: system("cls"); manager_menu_2(Manager);break; case 0: return; } system("cls"); } }reader_menu(readers_node*L){ char name[15]; cout<<"输入用户名:"; cin>>name; readers_node* node; node=new readers_node; node=L->next; while(node) { if((strcmp(nome,node->reader_name))==0) break; else node=node->next; } if(node) { reader Reader(node); int N; while(1) { cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃图书管图书管理系统 ┃\n"; cout<<"┃ 菜单 ┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①借书 ┃\n"; cout<<"┃②还书 ┃\n"; cout<<"┃③查找书 ┃\n"; cout<<"┃④.输出所有 ┃\n"; cout<<"┃⑤自身信息 ┃\n"; cout<<"┃退出请按0 ┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"请输入您的选择(0--5):( )\b\b"; cin>>N; switch (N) { case 1: system("cls") ;Reader.reader_borrow();Reader.save_readers(L);break; case 2: system("cls"); Reader.reader_return();Reader.save_readers(L);break; case 3: system("cls");Reader.search_book();system("pls");break; case 4: system("cls");Reader.print_books();getch();break; case 5: system("cls");Reader.print_me(); Pause();break; case 0: return; } system("cls"); } } else { printf("没有这个用户!按任意键继续"); getch(); return; } }main(){readers_node* Reader_root;Reader_root=new readers_node;Reader_root=read_readers();int N;while(1) { system("cls"); cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃ 图书管图书管理系统 ┃\n"; cout<<"┃ 菜单 ┃\n"; cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"; cout<<"┃①图书管理员 ┃\n"; cout<<"┃②.读 者 ┃\n"; cout<<"┃推出请按0 ┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"请输入您的选择(0--2):( )\b\b"; cin>>N; switch (N) { case 1: manager_menu(Reader_root);break; case 2: reader_menu(Reader_root);break; case 0:exit(0);break; }}}}-。

    点击阅读更多内容
    卖家[上传人]:痛苦女王
    资质:实名认证