您的当前位置:首页正文

图书管理系统1

2021-11-25 来源:星星旅游


一、课程设计的内容 图书管理系统

功能描述

1、新进图书基本信息的输入。

2. 图书基本信息的查询。

3. 对撤消图书信息的删除。 4. 为借书人办理注册。

5.办理借书手续(非注册会员不能借书)。 6.办理还书手续

信息描述:有关该系统基本信息的描述,如:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等

二、课程设计的要求与数据

1、进一步掌握和利用C语言进行程设计的能力; 2、进一步理解和运用结构化程序设计的思想和方法; 3、初步掌握开发一个小型实用系统的基本方法; 4、学会调试一个较长程序的基本方法; 5、学会利用流程图或N-S图表示算法; 6、掌握书写程序设计开发文档的能力。

三、课程设计应完成的工作

1、编写完成相应题目的程序;

2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:

1) 需求分析:包括设计题目、设计要求以及系统功能需求分析; 2) 总体设计:包括系统总体设计框架和系统功能模块图;

3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图; 4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);

5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;

6) 附录:主要源程序代码,含必要的注释。

3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解 决问题、运行程序和回答教师提出的问题。

四、课程设计进程安排

序号 1 2 3 4 设计各阶段内容 下达任务书,说明设计要求;收集资料 总体方案设计、详细设计 编写程序,调试分析 撰写报告并上交,答辩 地点 实验3#517 实验3#517 实验3#517 实验3#517 起止日期 6.18 6.19 6.20 6.21 五、应收集的资料及主要参考文献

[1] 谭浩强.C程序设计(第三版)[M],北京:清华大学出版社,2005.9

[2] 谭浩强. C程序设计题解与上机指导(第三版)[M],北京:清华大学出版社,2005.7

[3] 张宏烈C语言程序设计方法 哈尔滨工业大学出版社 2004.02 [4 ] 胡建平 C语言程序设计学习指导书 天津大学出版社 2005-8-1

发出任务书日期: 2007年 6 月 18 日 指导教师签名:

计划完成日期: 2007年 6 月 22 日 基层教学单位责任人签章:

主管院长签章:

目 录

1 设计目的与要求………………………………………………………………页码 2 总体设计………………………………………………………………………页码

3 详细设计………………………………………………………………………页码 3.1功能模块设计………………………………………………………………页码

3.1.1 XX功能模块(可选) …………………………………………………页码 3.1.1 YY功能模块(可选) …………………………………………………页码 3.1.1 ZZ功能模块(可选)…………………………………………………页码 3.2数据结构设计………………………………………………………………页码

4调试分析 ……………………………………………………………………页码 5 总结……………………………………………………………………………页码 6 附录……………………………………………………………………………页码 6 答辩记录(正文处请留出适当空白) ………………………………………页码 7 指导教师意见(正文处请留出十行空白) …………………………………页码

1 目的与要求

1. 课程设计的目的

课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。

2. 课程设计的内容及要求

利用学到的编程知识和编程技巧,通过布置具有一定难度的程序设计题目,帮助学生熟悉程序编写,及时查究错误,独立完成。

2)总体要求

①对系统进行功能模块分析、控制模块分析正确; ②系统设计要实用;

③编程简练,可用,功能全面,具有较好的健壮性;

④说明书、流程图要清楚。

(3)课程设计报告要求

①需求和规格说明:问题描述:题目要解决的问题是什么?

②设计

⊕设计思路:主要算法思想。

⊕总体设计:程序设计组成框图、N-S流程图。

⊕详细设计:模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描

述等)。

③调试与测试:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论

和分析;改进设想;经验和体会等。

④附录:源程序清单和结果。如果题目规定了测试数据,则结果要包含这些测试数据和

运行输出,当然还可以含其他测试数据和运行输出;清单中应有足够的注释。

2 总体设计

1读者类,实现对读者的信息的描述 2读者类库,实现建立读者的个人资料

3图书类,实现对图书的描述,图书的编号,书名,借出,还入等 4图书库类,实现对图书的维护,查找,删除等

3 详细设计

(内容可以适当调整,清晰的有条理的把你的设计思路表达出来)

3.1功能模块设计

3.1.1 XX功能模块(可选)

3.1.2 YY功能模块(可选)

3.1.3 ZZ功能模块(可选)

3.2数据结构设计(可选)

#include #include #include

#include //输入/输出文件流类 using namespace std;

const int Maxr=10000;//最多的读者 const int Maxb=10000;//最多的图书 const int Maxbor=7;//每位读者最多借五本书

class Reader { private:

int tag; //删除标记 1:已删 0:未删 int no; //读者编号 char name[10]; //读者姓名 int borbook[Maxbor];//所借图书

public: Reader() {}

char *getname() {return name;} //获取姓名 int gettag() {return tag;} //获取删除标记 int getno() {return no;} //获取读者编号 void setname(char na[]) //设置姓名 {

strcpy(name,na); }

void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删 void addreader(int n,char *na)//增加读者 { tag=0; no=n;

strcpy(name,na); for(int i=0;i}

void borrowbook(int bookid)//借书操作 {

for(int i=0;iif (borbook[i]==0) {

borbook[i]=bookid; return; } } }

int retbook(int bookid)//还书操作 {

for(int i=0;iif(borbook[i]==bookid)

{

borbook[i]=0; return 1; } } return 0; }

void disp()//读出读者信息 {

cout << setw(5) << no <class RDatabase { private:

int top; //读者记录指针 Reader read[Maxr];//读者记录 public:

RDatabase() //构造函数,将reader.txt读到read[]中 { Reader s; top=-1;

fstream file(\"reader.txt\打开一个输入文件 while (1) {

file.read((char *)&s,sizeof(s)); if (!file)break; top++; read[top]=s;

}

file.close(); //关闭 reader.txt }

void clear()//删除所有读者信息 { top=-1; }

int addreader(int n,char *na)//添加读者时先查找是否存在 {

Reader *p=query(n); if (p==NULL) { top++;

read[top].addreader(n,na); return 1; } return 0;

}

Reader *query(int readerid)//按编号查找 {

for (int i=0;i<=top;i++) if (read[i].getno()==readerid && read[i].gettag()==0) {

return &read[i]; }

return NULL; }

void disp() //输出所有读者信息 {

for (int i=0;i<=top;i++) read[i].disp(); }

void readerdata();//读者库维护

~RDatabase() //析构函数,将read[]写到reader.txt文件中 {

fstream file(\"reader.txt\ for (int i=0;i<=top;i++) if (read[i].gettag()==0)

file.write((char *)&read[i],sizeof(read[i])); file.close(); } };

void RDatabase::readerdata() {

char choice; char rname[20]; int readerid; Reader *r;

while (choice!='0') {

cout <<\"\\n\\n\\\读 者 维 护\\n\\n\\n\\ 1 新 增\\n\\n\\ 2 更改\\n\\n\\ 3 删 除\\n\\n\\ 4 查 找\\n\\n\\ 5 显 示\\n\\n\\ 6 全 删\\n\\n\\ 0 退出\"<> choice; switch (choice) { case '1':

cout << \"输入读者编号:\"; cin >> readerid;

cout << \"输入读者姓名:\"; cin >> rname;

addreader (readerid,rname); break; case '2':

cout << \"输入读者编号:\"; cin >> readerid; r=query(readerid);

if (r==NULL) {

cout << \" 该读者不存在 \"<cout << \"输入新的姓名:\"; cin >> rname; r->setname(rname); break; case '3':

cout << \" 输入读者编号:\"; cin >> readerid; r=query(readerid); if (r==NULL) {

cout <<\" 该读者不存在\" << endl; break;

}

r->delbook(); break; case '4':

cout << \"读入读者编号:\"; cin >> readerid; r=query(readerid); if (r==NULL) {

cout <<\"该读者不存在\"<< endl; break; } r->disp(); break; case '5': disp(); break;

case '6': clear(); break;

default:cout<<\"输入错误,请从新输入:\";break; } } }

class Book { private:

int tag;//删除标记 1:已删 0:未删 int no;//图书编号 char name[20];//书名

int onshelf;//是否再架 1:再架 2:已借 public: Book(){}

char *getname() { return name; }//获取姓名 int getno(){ return no; }//获取图书编号 int gettag(){ return tag; }//获取删除标记 void setname(char na[])//设置书名 {

strcpy(name,na); }

void delbook(){ tag=1;}//删除图书 void addbook(int n,char *na)//增加图书 { tag=0; no=n;

strcpy(name,na); onshelf=1; }

int borrowbook()//借书操作 {

if (onshelf==1) { onshelf=0; return 1; } return 0; }

void retbook()//还书操作 { onshelf=1; }

void disp()//输出图书 {

cout << setw(6) << no << setw(18) << name << setw(10) <<(onshelf==1? \"在架\":\"已借\") <class BDatabase { private:

int top; //图书记录指针 Book book[Maxb]; //图书记录 public:

BDatabase()//构造函数,将book.txt读到book[]中 { Book b; top=-1;

fstream file(\"book.txt\ while (1) {

file.read((char *)&b,sizeof(b)); if (!file) break; top++;

book[top]=b; }

file.close(); }

void clear()//全删 { top=-1; }

int addbook(int n,char *na)//增加图书 {

Book *p=query(n); if (NULL==p) { top++;

book[top].addbook(n,na); return 1; }

return 0; }

Book *query(int bookid)//查找图书 {

for (int i=0;i<=top;i++)

if (book[i].getno()==bookid &&book[i].gettag()==0) {

return &book[i]; }

return NULL; }

void bookdata();//图书库维护 void disp() {

for (int i=0;i<=top;i++) if (book[i].gettag()==0) book[i].disp();

}

~BDatabase()//析构函数,将book[]写到book.txt文件中 {

fstream file(\"book.txt\ for (int i=0;i<=top;i++) if (book[i].gettag()==0)

file.write((char *)&book[i],sizeof(book[i])); file.close(); } };

void BDatabase::bookdata() {

char choice; char bname[40]; int bookid; Book *b; while (choice!='0')

{

cout <<\"\\n\\n\\n\\\图 书 维 护 \"<cout<<\"\\1 新 增\\n \\2 更 改\\n\\3 删 除\\n\\4 查 找\\n\\5 显示\\n\\6 全 删\\n\\0 退 出\"<> choice; switch (choice) { case '1':

cout << \"输入图书编号:\"<> bookid;

cout << \"输入图书书名:\"<> bname;

addbook(bookid,bname); break; case '2':

cout << \"输入图书编号:\"<> bookid; b=query(bookid);

if (b==NULL) {

cout << \" 该图书不存在 \"<cout << \"输入新的书名:\"<> bname; b->setname(bname); break; case '3':

cout <<\" 读入图书编号:\"<> bookid; b=query(bookid); if (b==NULL) {

cout <<\" 该图书不存在\" << endl; break;

}

b->delbook(); break; case '4':

cout << \" 读入图书编号:\"<> bookid; b=query(bookid); if (b==NULL) {

cout <<\" 该图书不存在\"<< endl; break; } b->disp(); break; case '5': disp(); break;

case '6': clear(); break;

default:cout<<\"输入错误,请从新输入:\"; } } }

void main() {

char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r;

BDatabase BookDB; Book *b; while(choice!='0')

{

cout <cout <<\"\\\1 借 书\\n\\n\\\2 还 书 \\n\\n\\\3 图 书 维护\\n\\n\\\4 读 者 维 护\\n\\n\\\0 离 开\"<> choice; switch (choice) { case '1':

cout <<\" 借书 读者编号:\"; cin >>readerid;

cout <<\" 图书编号: \"; cin >>bookid;

r=ReaderDB.query(readerid);//按编号查找 if (NULL==r) {

cout <<\" 不存在该读者,不能借书\"<< endl; break;

}

b=BookDB.query(bookid); if (b==NULL) {

cout <<\" 不存在该图书,不能借书\"<< endl; break; }

if (b->borrowbook()==0) {

cout << \" 该图书已借出,不能借书\"<< endl; break; }

r->borrowbook(b->getno()); break; case '2':

cout<<\"还书\\n 读者编号:\"; cin >>readerid;

cout << \" 图书编号:\"; cin >>bookid;

r=ReaderDB.query(readerid); if (r==NULL) {

cout <<\" 不存在该读者,不能还书\" << endl; break; }

b=BookDB.query(bookid); if (b==NULL) {

cout <<\" 不存在该图书,不能还书\" <b->retbook();

r->retbook(b->getno()); break;

case '3':

BookDB.bookdata(); break; case '4':

ReaderDB.readerdata(); break;

default:cout<<\"输入错误,请从新输入:\"; } }

}

4 调试分析

编译结果:图书管理系统1.obj - 0 error(s), 0 warning(s) 运行结果:

图书管理系统 1借书 2 还书

3图书维护

4读者维护 0 离开

等待输入

一切正常

5 总 结

用C可以各种问题,但是在写程序时需要耐心,还要查阅许多资料。 通过这次课程设计,我有信心可以学好C语7.附录

7.附录

7 答辩记录

序号 问 题 回 答 1 2 3 4 5 8 指导教师意见

指导教师签名:

因篇幅问题不能全部显示,请点此查看更多更全内容